<?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>71331</bug_id>
          
          <creation_ts>2011-11-01 15:19:21 -0700</creation_ts>
          <short_desc>Towards 8 Bit Strings: Templatize JSC::Lexer class by character type</short_desc>
          <delta_ts>2011-11-07 12:51:24 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>71712</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ggaren</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494200</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-01 15:19:21 -0700</bug_when>
    <thetext>The JSC::Lexer class needs to handle source strings of both 8 and 16 bit strings.  The current class processes the source using character pointers. Therefore it makes most sense to templatize the class to make it work with both 8 and 16 bit strings without impacting performance.

&lt;rdar://problem/10225301&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494343</commentid>
    <comment_count>1</comment_count>
      <attachid>113262</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-01 17:27:59 -0700</bug_when>
    <thetext>Created attachment 113262
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494346</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 17:29:52 -0700</bug_when>
    <thetext>Attachment 113262 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/parser/Lexer.cpp:528:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494382</commentid>
    <comment_count>3</comment_count>
      <attachid>113262</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-01 18:13:02 -0700</bug_when>
    <thetext>Comment on attachment 113262
Proposed Patch

Attachment 113262 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10190113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494490</commentid>
    <comment_count>4</comment_count>
      <attachid>113262</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-11-02 01:15:05 -0700</bug_when>
    <thetext>Comment on attachment 113262
Proposed Patch

Attachment 113262 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10148173</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494539</commentid>
    <comment_count>5</comment_count>
      <attachid>113262</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-02 03:48:07 -0700</bug_when>
    <thetext>Comment on attachment 113262
Proposed Patch

Attachment 113262 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10256218</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494556</commentid>
    <comment_count>6</comment_count>
      <attachid>113262</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-02 04:59:38 -0700</bug_when>
    <thetext>Comment on attachment 113262
Proposed Patch

Attachment 113262 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10259231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494637</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-02 08:36:49 -0700</bug_when>
    <thetext>A few compilation issues:

../../../Source/JavaScriptCore/parser/SyntaxChecker.h:118: error: declaration of &apos;const unsigned int JSC::SyntaxChecker::DontBuildKeywords&apos;
../../../Source/JavaScriptCore/parser/Lexer.h:70: error: changes meaning of &apos;DontBuildKeywords&apos; from &apos;JSC::LexType JSC::DontBuildKeywords&apos;
../../../Source/JavaScriptCore/parser/SyntaxChecker.h:119: error: declaration of &apos;const unsigned int JSC::SyntaxChecker::DontBuildStrings&apos;
../../../Source/JavaScriptCore/parser/Lexer.h:69: error: changes meaning of &apos;DontBuildStrings&apos; from &apos;JSC::LexType JSC::DontBuildStrings&apos;


../../../Source/JavaScriptCore/runtime/Identifier.cpp:227: error: comparison is always true due to limited range of data type
distcc[10251] ERROR: compile ../../../Source/JavaScriptCore/runtime/Identifier.cpp on localhost failed


3&gt;c:\cygwin\home\buildbot\webkit\source\javascriptcore\parser\Lexer.h(196) : warning C4661: &apos;void JSC::Lexer&lt;T&gt;::copyCodeWithoutBOMs(void)&apos; : no suitable definition provided for explicit template instantiation request
3&gt;        with
3&gt;        [
3&gt;            T=UChar
3&gt;        ]
3&gt;        c:\cygwin\home\buildbot\webkit\source\javascriptcore\parser\Lexer.h(141) : see declaration of &apos;JSC::Lexer&lt;T&gt;::copyCodeWithoutBOMs&apos;
3&gt;        with
3&gt;        [
3&gt;            T=UChar
3&gt;        ]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494663</commentid>
    <comment_count>8</comment_count>
      <attachid>113262</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-02 09:28:43 -0700</bug_when>
    <thetext>Comment on attachment 113262
Proposed Patch

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

r- because it doesn&apos;t build. 

I think you can get a lot more speed and simplicity out of this patch. See below.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:288
&gt; +        ASSERT(sizeof(T) == sizeof(char));

Should this be sizeof(LChar)?

&gt; Source/JavaScriptCore/parser/Lexer.cpp:289
&gt; +        data = reinterpret_cast&lt;const T *&gt;(source.provider()-&gt;data()-&gt;characters8());

No space before *, please.

Shouldn&apos;t &lt;T&gt; always be LChar or UChar? If so, no need for cast here.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:292
&gt; +        data = reinterpret_cast&lt;const T *&gt;(source.provider()-&gt;data()-&gt;characters16());

No space before *, please.

Shouldn&apos;t &lt;T&gt; always be LChar or UChar? If so, no need for cast here.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:477
&gt; +    m_buffer16.append(static_cast&lt;UChar&gt;(c));

No need for a cast between LChar and UChar.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:485
&gt; +    m_buffer16.append(static_cast&lt;UChar&gt;(c));

No need for a cast between LChar and UChar.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:492
&gt; +    // FIXME: Change record16 and m_buffer16 to record8 and m_buffer8 below when
&gt; +    // 8 bit strings are turned on.

Better to just not record at all in the fast case. See below.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:493
&gt; +    int startingOffset = currentOffset();

startingOffset is redundant with identifierStart, and can be removed.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:494
&gt; +    int startingLineNumber = lineNumber();

You can wait to record startingLineNumber until after the keyword case, since the keyword case does not advance the line number unless it succeeds.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:504
&gt; +    bool bufferRequired = false;

bufferRequired is always false, and can be removed.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:508
&gt; +    while (true) {
&gt; +        if (LIKELY(isIdentPart(m_current))) {
&gt; +            shift();

I think this would read more naturally as:

while (isIdentPart(m_current))
    shift();

if (m_current == &apos;\\&apos;) {
    ... // Reset everything and return parseIdentifierSlowCase.
}

&gt; Source/JavaScriptCore/parser/Lexer.cpp:516
&gt; +        m_buffer16.resize(0); // FIXME: Change to m_buffer8

No need to resize to 0, since we haven&apos;t appended anything.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:523
&gt; +        if (!bufferRequired) {

bufferRequired is always false, so you can remove this case.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:529
&gt; +                append16(identifierStart, currentCharacter() - identifierStart);  // FIXME: Change to append8
&gt; +            ident = makeIdentifier(m_buffer16.data(), m_buffer16.size()); // FIXME: Change to m_buffer8

Why append to one buffer just to copy into another? I think you should just call makeIdentifier, passing identifierStart and currentCharacter() - identifierStart, with no intervening append16. Then you can also remove clearing m_buffer16 from the fast case.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:540
&gt; +        // Keywords must not be recognized if there was an \uXXXX in the identifier.

You&apos;ve already ruled out a Unicode escape above (which is good, because people don&apos;t typically name their variables &quot;MyV\u0061riable&quot;). You can remove all of this code.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:558
&gt; +template &lt;bool shouldCreateIdentifier&gt; ALWAYS_INLINE JSTokenType Lexer&lt;T&gt;::parseIdentifierSlowCase(JSTokenData* tokenData, unsigned lexType, bool strictMode)

Please don&apos;t mark the slow case inline.

It seems like you can remove some code from the slow case, which already ran in the fast case. You can at least remove the fast check for a keyword at the head of the slow case.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:646
&gt; +        if (UNLIKELY((m_current == &apos;\\&apos;))) {

Since you&apos;ve decided that this case is unlikely, can it move out into a helper function? That way, the codegen for the likely stuff will improve, and this code can be shared with the slow case.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:690
&gt; +        // Fast check for characters that require special handling.
&gt; +        // Catches -1, \n, \r, 0x2028, and 0x2029 as efficiently
&gt; +        // as possible, and lets through all common ASCII characters.
&gt; +        if (UNLIKELY(((static_cast&lt;unsigned&gt;(m_current) - 0xE) &amp; 0x2000))) {

You can remove this case entirely if you just change the test above from &quot;m_current &gt; 0xff&quot; to &quot;m_current &gt; 0xff || m_current &lt; 0xe&quot;. (Unless you think we need to handle the &apos;bell&apos; character on the fast path ;) ).

&gt; Source/JavaScriptCore/parser/Lexer.h:66
&gt; +// FIXME: LexType and ShiftType were moved outside of the Lexer definition due
&gt; +// to a clang compiler bug (&lt;rdar://problem/10194295&gt;) that doesn&apos;t properly
&gt; +// handle fully qualified enums defined within a template class.

I think this issue is self-documenting: If anybody tries to move this enum inside the Lexer, it won&apos;t compile.

&gt; Source/JavaScriptCore/parser/ParserArena.h:69
&gt; +    ALWAYS_INLINE const Identifier&amp; IdentifierArena::makeIdentifier(JSGlobalData* globalData, const LChar* characters, size_t length)

Since this is just a copy of the existing makeIdentifier, I think it would be better to templatize the existing makeIdentifier, with T* as the type for &quot;characters&quot;.

&gt; Source/JavaScriptCore/runtime/Identifier.cpp:130
&gt; +struct IdentifierLCharBufferTranslator {

Since these two structs are just a copy of UCharBuffer and IdentifierUCharBufferTranslator, I think you should just templatize those, with T* as the type for &quot;s&quot;.

&gt; Source/JavaScriptCore/runtime/Identifier.cpp:223
&gt; +PassRefPtr&lt;StringImpl&gt; Identifier::add(JSGlobalData* globalData, const LChar* s, int length)

Since this is just a copy of Identifier::add for const UChar*, I think you should just templatize that function as well, with T* as the type for &quot;s&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495101</commentid>
    <comment_count>9</comment_count>
      <attachid>113408</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-02 17:44:56 -0700</bug_when>
    <thetext>Created attachment 113408
Updated patch

(In reply to comment #8)

Most of the suggestions were taken.  The ones not taken have comments below.  Fixed two build issues.  Still concerned that some compilers may not like comparison in template function between and unsigned char and 0xff.

&gt; (From update of attachment 113262 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113262&amp;action=review
&gt; 
&gt; r- because it doesn&apos;t build. 
&gt; 
&gt; I think you can get a lot more speed and simplicity out of this patch. See below.
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:289
&gt; &gt; +        data = reinterpret_cast&lt;const T *&gt;(source.provider()-&gt;data()-&gt;characters8());
&gt; 
&gt; Shouldn&apos;t &lt;T&gt; always be LChar or UChar? If so, no need for cast here.

This is needed because this is a templates function that is compiled for both LChar and UChar types.  One of these cast will be needed for each instantiation.

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:292
&gt; &gt; +        data = reinterpret_cast&lt;const T *&gt;(source.provider()-&gt;data()-&gt;characters16());
&gt; 
&gt; Shouldn&apos;t &lt;T&gt; always be LChar or UChar? If so, no need for cast here.

See previous comment.
 
&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:485
&gt; &gt; +    m_buffer16.append(static_cast&lt;UChar&gt;(c));
&gt; 
&gt; No need for a cast between LChar and UChar.

This is needed since c is type &quot;int&quot;.

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:492
&gt; &gt; +    // FIXME: Change record16 and m_buffer16 to record8 and m_buffer8 below when
&gt; &gt; +    // 8 bit strings are turned on.
&gt; 
&gt; Better to just not record at all in the fast case. See below.

We need to record in the case that the buffer type and template type (LChar and UChar) differ.  The code has been updated accordingly.

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:504
&gt; &gt; +    bool bufferRequired = false;
&gt;
&gt; bufferRequired is always false, and can be removed.

See previous comment.
 
&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:516
&gt; &gt; +        m_buffer16.resize(0); // FIXME: Change to m_buffer8
&gt; 
&gt; No need to resize to 0, since we haven&apos;t appended anything.

Added an if (bufferRequired) above this.

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:529
&gt; &gt; +                append16(identifierStart, currentCharacter() - identifierStart);  // FIXME: Change to append8
&gt; &gt; +            ident = makeIdentifier(m_buffer16.data(), m_buffer16.size()); // FIXME: Change to m_buffer8
&gt; 
&gt; Why append to one buffer just to copy into another? I think you should just call makeIdentifier, passing identifierStart and currentCharacter() - identifierStart, with no intervening append16. Then you can also remove clearing m_buffer16 from the fast case.

Again, we want to buffer when the source string type is different from the type we want to create (eventually 8 bit).

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:540
&gt; &gt; +        // Keywords must not be recognized if there was an \uXXXX in the identifier.
&gt; 
&gt; You&apos;ve already ruled out a Unicode escape above (which is good, because people don&apos;t typically name their variables &quot;MyV\u0061riable&quot;). You can remove all of this code.

The comment doesn&apos;t describe the check.  The check is for an identifier that matches a keyword and is needed.

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:558
&gt; &gt; +template &lt;bool shouldCreateIdentifier&gt; ALWAYS_INLINE JSTokenType Lexer&lt;T&gt;::parseIdentifierSlowCase(JSTokenData* tokenData, unsigned lexType, bool strictMode)
&gt; 
&gt; Please don&apos;t mark the slow case inline.
&gt; 
&gt; It seems like you can remove some code from the slow case, which already ran in the fast case. You can at least remove the fast check for a keyword at the head of the slow case.

Removed ALWAYS_INLINE and cleaned up the code a little.

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:646
&gt; &gt; +        if (UNLIKELY((m_current == &apos;\\&apos;))) {
&gt; 
&gt; Since you&apos;ve decided that this case is unlikely, can it move out into a helper function? That way, the codegen for the likely stuff will improve, and this code can be shared with the slow case.

Efectively the fast case makes (or will make) 8 bit strings while the slow case makes 16 bit strings.  Therefore we need to handle the escapes besides \uxxxx.

&gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:690
&gt; &gt; +        // Fast check for characters that require special handling.
&gt; &gt; +        // Catches -1, \n, \r, 0x2028, and 0x2029 as efficiently
&gt; &gt; +        // as possible, and lets through all common ASCII characters.
&gt; &gt; +        if (UNLIKELY(((static_cast&lt;unsigned&gt;(m_current) - 0xE) &amp; 0x2000))) {
&gt; 
&gt; You can remove this case entirely if you just change the test above from &quot;m_current &gt; 0xff&quot; to &quot;m_current &gt; 0xff || m_current &lt; 0xe&quot;. (Unless you think we need to handle the &apos;bell&apos; character on the fast path ;) ).

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495112</commentid>
    <comment_count>10</comment_count>
      <attachid>113408</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-02 18:00:03 -0700</bug_when>
    <thetext>Comment on attachment 113408
Updated patch

Attachment 113408 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10256475</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495585</commentid>
    <comment_count>11</comment_count>
      <attachid>113408</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-03 10:13:49 -0700</bug_when>
    <thetext>Comment on attachment 113408
Updated patch

Windows build error:

3&gt;DebuggerCallFrame.cpp
3&gt;c:\cygwin\home\buildbot\webkit\source\javascriptcore\wtf\HashTable.h(368) : warning C4506: no definition for inline function &apos;JSC::Register JSC::Register::withCallee(JSC::JSObject *)&apos;

Qt build error:

../../../Source/JavaScriptCore/runtime/Identifier.h: In static member function &apos;static WTF::PassRefPtr&lt;WTF::StringImpl&gt; JSC::Identifier::add(JSC::JSGlobalData*, const T*, int) [with T = LChar]&apos;:
../../../Source/JavaScriptCore/runtime/Identifier.h:47:   instantiated from here
../../../Source/JavaScriptCore/runtime/Identifier.h:160: error: comparison is always true due to limited range of data type

A simple way to do that is to do the comparison with 0xFF can be done with an overloaded inline function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495642</commentid>
    <comment_count>12</comment_count>
      <attachid>113525</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-03 11:01:37 -0700</bug_when>
    <thetext>Created attachment 113525
Patch with updates to fix build issues

Added a template function Identifier::canUseSingleCharacterString() with explicit implementations for LChar and UChar to fix  qt and win builds.

The changes in comment #9 still apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495664</commentid>
    <comment_count>13</comment_count>
      <attachid>113525</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-03 11:23:06 -0700</bug_when>
    <thetext>Comment on attachment 113525
Patch with updates to fix build issues

Attachment 113525 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10249381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495682</commentid>
    <comment_count>14</comment_count>
      <attachid>113533</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-03 11:50:17 -0700</bug_when>
    <thetext>Created attachment 113533
Updated patch with another build fix

Changes to Identifier.h to eliminate inclusion of CallFrame.h to fix builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495709</commentid>
    <comment_count>15</comment_count>
      <attachid>113533</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-03 12:17:01 -0700</bug_when>
    <thetext>Comment on attachment 113533
Updated patch with another build fix

Attachment 113533 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10285068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495753</commentid>
    <comment_count>16</comment_count>
      <attachid>113548</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-03 13:31:32 -0700</bug_when>
    <thetext>Created attachment 113548
Patch updated for qt build failure

Change qt specific code to use JSGlobalData* version of Identifier() constructor instead of removed ExecState* version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495778</commentid>
    <comment_count>17</comment_count>
      <attachid>113548</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-03 13:53:11 -0700</bug_when>
    <thetext>Comment on attachment 113548
Patch updated for qt build failure

Attachment 113548 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10249423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495824</commentid>
    <comment_count>18</comment_count>
      <attachid>113548</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-03 15:31:44 -0700</bug_when>
    <thetext>Comment on attachment 113548
Patch updated for qt build failure

Qt build still failing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495873</commentid>
    <comment_count>19</comment_count>
      <attachid>113574</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-03 16:33:53 -0700</bug_when>
    <thetext>Created attachment 113574
Fixed qt build (again)

Did a find through the qt specific source looking for all Identifier constructors that need to be changed.  Found only two, the one I previously changed and the one changed in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495918</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-03 17:29:18 -0700</bug_when>
    <thetext>+    while (isIdentPart(m_current))
+        shift();
+    
+    if (UNLIKELY(m_current == &apos;\\&apos;)) {
+        setOffsetFromCharOffset(identifierStart);
+        if (bufferRequired)
+            m_buffer16.resize(0); // FIXME: Change to m_buffer8
+        return parseIdentifierSlowCase&lt;shouldCreateIdentifier&gt;(tokenData, lexType, strictMode);
+    }

I might be missing something here, but I still don&apos;t see any appends to m_buffer16 above -- shift() only moves the characters pointer forward, without appending to m_buffer16. So, I still don&apos;t think there&apos;s any need to resize to 0 here.

+        if (!bufferRequired) {
+            int identifierLength = currentCharacter() - identifierStart;
+            ident = makeIdentifier(identifierStart, identifierLength);

Yeah, this is better.

+        } else {
+            if (identifierStart != currentCharacter())
+                append16(identifierStart, currentCharacter() - identifierStart); // FIXME: Change to append8
+            ident = makeIdentifier(m_buffer16.data(), m_buffer16.size()); // FIXME: Change to m_buffer8
+        }

I don&apos;t think you&apos;ll be able to unconditionally append to m_buffer8, since isIdentPart() is true even for some 16bit characters. What you really need, in the 16bit lexer case, is a flag telling you whether you saw any 16bit characters. If that flag is true, you can call 16bit makeIdentifier without any copying. If that flag is false, 

&gt; &gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:540
&gt; &gt; &gt; +        // Keywords must not be recognized if there was an \uXXXX in the identifier.
&gt; &gt; 
&gt; &gt; You&apos;ve already ruled out a Unicode escape above (which is good, because people don&apos;t typically name their variables &quot;MyV\u0061riable&quot;). You can remove all of this code.

&gt; The comment doesn&apos;t describe the check.  The check is for an identifier that matches a keyword and is needed.

I should have been clearer here. The head of the function tests for unescaped keywords by calling parseKeyword&lt;&gt;(). The only case where parseKeyword&lt;&gt;() returns an identifier that matches a keyword -- as an identifier and not a keyword -- is the case of escaped keywords (&quot;MyV\u0061riable&quot;). But all escape sequences take the slow path of identifier parsing. Therefore, the fast path can assume (a) its identifiers have already been tested for unescaped keyword-ness and (b) its identifiers do not contain escape sequences. Therefore, it can assume (c) its identifiers do not match any keywords. That&apos;s why you can omit this code from the fast path.

&gt; &gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:646
&gt; &gt; &gt; +        if (UNLIKELY((m_current == &apos;\\&apos;))) {
&gt; &gt; 
&gt; &gt; Since you&apos;ve decided that this case is unlikely, can it move out into a helper function? That way, the codegen for the likely stuff will improve, and this code can be shared with the slow case.

&gt; Efectively the fast case makes (or will make) 8 bit strings while the slow case makes 16 bit strings.  Therefore we need to handle the escapes besides \uxxxx.

Yes, we need to handle them. But do we need to handle them inline, instead of in a helper function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495921</commentid>
    <comment_count>21</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-03 17:31:19 -0700</bug_when>
    <thetext>&gt; If that flag is false, 

If that flag is false, ... you should call a special version of makeIdentifier that takes a 16bit pointer and copies it into an 8bit StringImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496378</commentid>
    <comment_count>22</comment_count>
      <attachid>113574</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-04 12:09:07 -0700</bug_when>
    <thetext>Comment on attachment 113574
Fixed qt build (again)

Marking r- because I still think there are some improvements to be had here. (Looks like the build is working on all platforms, though. Yay!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496447</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-04 13:58:18 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; +    while (isIdentPart(m_current))
&gt; +        shift();
&gt; +    
&gt; +    if (UNLIKELY(m_current == &apos;\\&apos;)) {
&gt; +        setOffsetFromCharOffset(identifierStart);
&gt; +        if (bufferRequired)
&gt; +            m_buffer16.resize(0); // FIXME: Change to m_buffer8
&gt; +        return parseIdentifierSlowCase&lt;shouldCreateIdentifier&gt;(tokenData, lexType, strictMode);
&gt; +    }
&gt; 
&gt; I might be missing something here, but I still don&apos;t see any appends to m_buffer16 above -- shift() only moves the characters pointer forward, without appending to m_buffer16. So, I still don&apos;t think there&apos;s any need to resize to 0 here.

I have refactored parseIdentifier() into LChar and UChar flavors that are very simple, no buffering.  When they see a backslash they both fall out to the same slow case function.

&gt; 
&gt; +        if (!bufferRequired) {
&gt; +            int identifierLength = currentCharacter() - identifierStart;
&gt; +            ident = makeIdentifier(identifierStart, identifierLength);
&gt; 
&gt; Yeah, this is better.
&gt; 
&gt; +        } else {
&gt; +            if (identifierStart != currentCharacter())
&gt; +                append16(identifierStart, currentCharacter() - identifierStart); // FIXME: Change to append8
&gt; +            ident = makeIdentifier(m_buffer16.data(), m_buffer16.size()); // FIXME: Change to m_buffer8
&gt; +        }
&gt; 
&gt; I don&apos;t think you&apos;ll be able to unconditionally append to m_buffer8, since isIdentPart() is true even for some 16bit characters. What you really need, in the 16bit lexer case, is a flag telling you whether you saw any 16bit characters. If that flag is true, you can call 16bit makeIdentifier without any copying. If that flag is false,

As part of the parseIdentifier() refactoring, I added a new makeIdentifier flavor that will make 8 bit strings when passed a UChar* without any buffering.
 
&gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:540
&gt; &gt; &gt; &gt; +        // Keywords must not be recognized if there was an \uXXXX in the identifier.
&gt; &gt; &gt; 
&gt; &gt; &gt; You&apos;ve already ruled out a Unicode escape above (which is good, because people don&apos;t typically name their variables &quot;MyV\u0061riable&quot;). You can remove all of this code.
&gt; 
&gt; &gt; The comment doesn&apos;t describe the check.  The check is for an identifier that matches a keyword and is needed.
&gt; 
&gt; I should have been clearer here. The head of the function tests for unescaped keywords by calling parseKeyword&lt;&gt;(). The only case where parseKeyword&lt;&gt;() returns an identifier that matches a keyword -- as an identifier and not a keyword -- is the case of escaped keywords (&quot;MyV\u0061riable&quot;). But all escape sequences take the slow path of identifier parsing. Therefore, the fast path can assume (a) its identifiers have already been tested for unescaped keyword-ness and (b) its identifiers do not contain escape sequences. Therefore, it can assume (c) its identifiers do not match any keywords. That&apos;s why you can omit this code from the fast path.

I needed to be clearer here as well.  This check is needed in the case where the parseKeyword&lt;&gt; check isn&apos;t run, that is when remaining is &lt; maxTokenLength.  This typically happens at the end of a function when we are reparsing.  Consider &quot;function f() { return true; }&quot;.  Given that maxTokenLength is 11, we won&apos;t have 11 characters when parseIdentifier() is called pointing at &quot;true; }&quot;, therefore the parseKeyword call at the top of the function is never made.

Therefore I changed the test at the bottom to:

    if (UNLIKELY((remaining &lt; maxTokenLength) &amp;&amp; !(lexType &amp; LexIgnoreReservedWords))) {
        ...
 
&gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/parser/Lexer.cpp:646
&gt; &gt; &gt; &gt; +        if (UNLIKELY((m_current == &apos;\\&apos;))) {
&gt; &gt; &gt; 
&gt; &gt; &gt; Since you&apos;ve decided that this case is unlikely, can it move out into a helper function? That way, the codegen for the likely stuff will improve, and this code can be shared with the slow case.
&gt; 
&gt; &gt; Efectively the fast case makes (or will make) 8 bit strings while the slow case makes 16 bit strings.  Therefore we need to handle the escapes besides \uxxxx.
&gt; 
&gt; Yes, we need to handle them. But do we need to handle them inline, instead of in a helper function?

I have a very lean parseString() that doesn&apos;t buffer (here is the LChar version):

template &lt;&gt;
template &lt;bool shouldBuildStrings&gt; ALWAYS_INLINE bool Lexer&lt;LChar&gt;::parseString(JSTokenData* tokenData, bool strictMode)
{
    int stringQuoteCharacter = m_current;
    shift();

    const LChar* stringStart = currentCharacter();

    while (m_current != stringQuoteCharacter) {
        if (UNLIKELY((m_current == &apos;\\&apos;) || (m_current &lt; 0xe) || (m_current &gt; 0xff)))
            return parseStringSlowCase&lt;shouldBuildStrings&gt;(tokenData, stringStart, strictMode);

        shift();
    }

    if (shouldBuildStrings)
        tokenData-&gt;ident = makeIdentifier(stringStart, currentCharacter() - stringStart);
    else
        tokenData-&gt;ident = 0;

    return true;
}

Unfortunately, this is slower for tests like sunspider string-unpack-code which calls out to the slow case quite a bit (think of parsing a regexp pattern string of &quot;\\b..&quot;.  The version with inline escape processing is faster.  I&apos;m going to play with this for maybe an hour more to try to get the lean version&apos;s performance up.  Otherwise I&apos;ll post a patch with the other changes but with the prior parseString() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496555</commentid>
    <comment_count>24</comment_count>
      <attachid>113734</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-04 16:47:01 -0700</bug_when>
    <thetext>Created attachment 113734
Updated patch

Made the changes described in comment #23 with the exception of the suggested parseString() changes.  I couldn&apos;t get the performance of anything close to the suggestion as fast as what was in the prior patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497200</commentid>
    <comment_count>25</comment_count>
      <attachid>113734</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-07 08:43:09 -0800</bug_when>
    <thetext>Comment on attachment 113734
Updated patch

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

&gt; Source/JavaScriptCore/parser/Lexer.cpp:290
&gt; +        if (sourceString-&gt;is8Bit()) {
&gt; +            ASSERT(sizeof(T) == sizeof(LChar));
&gt; +            data = reinterpret_cast&lt;const T*&gt;(sourceString-&gt;characters8());
&gt; +        } else  {
&gt; +            ASSERT(sizeof(T) == sizeof(UChar));
&gt; +            data = reinterpret_cast&lt;const T*&gt;(sourceString-&gt;characters16());
&gt; +        }

If would be better to have the if condition be based on the compile time condition, and the assertion be the runtime condition, rather than vice versa.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:488
&gt; +template &lt;bool shouldCreateIdentifier&gt; ALWAYS_INLINE JSTokenType Lexer&lt;LChar&gt;::parseIdentifier(JSTokenData* tokenData, unsigned lexType, bool strictMode)

Despite the fact that there are some things the 8-bit and 16-bit version of this function need to do differently, there is still a lot of duplicate code. Is there a way to factor this so more code is shared? Maybe in the future.

&gt; Source/JavaScriptCore/parser/Lexer.h:68
&gt; +enum LexType {
&gt; +    LexIgnoreReservedWords = 1, 
&gt; +    LexDontBuildStrings = 2,
&gt; +    LexDontBuildKeywords = 4
&gt; +};

I don’t think abbreviating Lexer to Lex here is worthwhile. Also, the existing name for the enum “LexType”, is not good. It should be “LexerFlag” or something along those lines.

&gt; Source/JavaScriptCore/parser/Lexer.h:70
&gt; +enum ShiftType { DoBoundsCheck, DoNotBoundsCheck };

The name here, not new, is also not good. This is BoundsCheckPolicy or something like that, not “shift type”.

&gt; Source/JavaScriptCore/parser/Lexer.h:135
&gt; +    void append16(const UChar* p, size_t length) { m_buffer16.append(p, length); }

Better to use a word instead of “p”. I’d use the word characters.

&gt; Source/JavaScriptCore/parser/Lexer.h:156
&gt;      template &lt;bool shouldBuildIdentifiers&gt; ALWAYS_INLINE JSTokenType parseIdentifier(JSTokenData*, unsigned, bool strictMode);
&gt; +    template &lt;bool shouldBuildIdentifiers&gt; NEVER_INLINE JSTokenType parseIdentifierSlowCase(JSTokenData*, unsigned, bool strictMode);

Not clear what the “unsigned” is. It probably needs an argument name.

&gt; Source/JavaScriptCore/parser/SourceCode.h:78
&gt; -        SourceCode subExpression(int, int, int);
&gt; +        SourceCode subExpression(unsigned, unsigned, int);

This needs argument names.

&gt; Source/WebCore/bindings/js/StringSourceProvider.h:67
&gt;      }
&gt; +    
&gt; +    
&gt;  

Why whitespace added?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497259</commentid>
    <comment_count>26</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-07 09:54:28 -0800</bug_when>
    <thetext>Committed r99436: &lt;http://trac.webkit.org/changeset/99436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497285</commentid>
    <comment_count>27</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-07 10:34:00 -0800</bug_when>
    <thetext>This broke the Mac/SL build:

/Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp: In member function &apos;void JSC::Lexer&lt;T&gt;::append8(const T*, size_t) [with T = unsigned char]&apos;:
/Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:1529:   instantiated from here
/Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:439: warning: comparison is always true due to limited range of data type
/Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:440: warning: comparison is always true due to limited range of data type
/Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp: In member function &apos;void JSC::Lexer&lt;T&gt;::append8(const T*, size_t) [with T = short unsigned int]&apos;:
/Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:1530:   instantiated from here
/Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:439: warning: comparison is always true due to limited range of data type

Can you fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497393</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-07 12:51:24 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; This broke the Mac/SL build:
&gt; 
&gt; /Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp: In member function &apos;void JSC::Lexer&lt;T&gt;::append8(const T*, size_t) [with T = unsigned char]&apos;:
&gt; /Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:1529:   instantiated from here
&gt; /Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:439: warning: comparison is always true due to limited range of data type
&gt; /Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:440: warning: comparison is always true due to limited range of data type
&gt; /Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp: In member function &apos;void JSC::Lexer&lt;T&gt;::append8(const T*, size_t) [with T = short unsigned int]&apos;:
&gt; /Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:1530:   instantiated from here
&gt; /Users/nikolaszimmermann/Coding/WebKit/Source/JavaScriptCore/parser/Lexer.cpp:439: warning: comparison is always true due to limited range of data type
&gt; 
&gt; Can you fix it?

I&apos;ll look into it in a couple of hours.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113262</attachid>
            <date>2011-11-01 17:27:59 -0700</date>
            <delta_ts>2011-11-02 17:44:56 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>71331.patch</filename>
            <type>text/plain</type>
            <size>65119</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkwMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBA
CisyMDExLTExLTAxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5
IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZSB0aGUgTGV4ZXIgY2xhc3MgdG8gYmUgYSB0
ZW1wbGF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgIHR5cGUgb2YgdGhl
IHNvdXJjZS4gIEluIHRoZSBwcm9jZXNzIHVwZGF0ZWQgdGhlIHBhcnNlSWRlbnRpZmllcigpCisg
ICAgICAgIGFuZCBwYXJzZVN0cmluZygpIG1ldGhvZHMgdG8gY3JlYXRlIDggYml0IHN0cmluZ3Mg
d2hlcmUgcG9zc2libGUuCisgICAgICAgIEFsc28gYWRkZWQgc29tZSBoZWxwZXIgbWV0aG9kcyBm
b3IgYWNjdW11bGF0aW5nIHRlbXBvcmFyeSBzdHJpbmcKKyAgICAgICAgZGF0YSBpbiB0aGUgOCBh
bmQgMTYgYml0IHZlY3RvcnMuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFVwZGF0ZWQgdGhlIEtleXdvcmRMb29rdXAg
Z2VuZXJhdG9yIHRvIGNyZWF0ZSBjb2RlIHRvIG1hdGNoIGtleXdvcmRzCisgICAgICAgIGZvciBi
b3RoIDggYW5kIDE2IGJpdCBzb3VyY2Ugc3RyaW5ncy4KKworICAgICAgICBEdWUgdG8gYSBjb21w
aWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIG1vdmVkIGVudW0KKyAgICAgICAg
ZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBMZXhlciBjbGFzcyBkZWNsYXJhdGlvbi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAoSlNDOjphcHBlbmRT
b3VyY2VUb0Vycm9yKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlND
Ojo6OkxleGVyKToKKyAgICAgICAgKEpTQzo6Ojp+TGV4ZXIpOgorICAgICAgICAoSlNDOjo6Omdl
dEludmFsaWRDaGFyTWVzc2FnZSk6CisgICAgICAgIChKU0M6Ojo6Y3VycmVudENoYXJhY3Rlcik6
CisgICAgICAgIChKU0M6Ojo6Y3VycmVudE9mZnNldCk6CisgICAgICAgIChKU0M6Ojo6c2V0Q29k
ZSk6CisgICAgICAgIChKU0M6Ojo6aW50ZXJuYWxTaGlmdCk6CisgICAgICAgIChKU0M6Ojo6c2hp
ZnQpOgorICAgICAgICAoSlNDOjo6OnBlZWspOgorICAgICAgICAoSlNDOjo6OmdldFVuaWNvZGVD
aGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjo6OnNoaWZ0TGluZVRlcm1pbmF0b3IpOgorICAgICAg
ICAoSlNDOjo6Omxhc3RUb2tlbldhc1Jlc3RyS2V5d29yZCk6CisgICAgICAgIChKU0M6Ojo6cmVj
b3JkOCk6CisgICAgICAgIChKU0M6Ojo6YXBwZW5kOCk6CisgICAgICAgIChKU0M6Ojo6YXBwZW5k
MTYpOgorICAgICAgICAoSlNDOjo6OnJlY29yZDE2KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUlk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRpZmllclNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZVN0cmluZyk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpbmdT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VIZXgpOgorICAgICAgICAoSlNDOjo6OnBh
cnNlT2N0YWwpOgorICAgICAgICAoSlNDOjo6OnBhcnNlRGVjaW1hbCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VO
dW1iZXJBZnRlckV4cG9uZW50SW5kaWNhdG9yKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU11bHRp
bGluZUNvbW1lbnQpOgorICAgICAgICAoSlNDOjo6Om5leHRUb2tlbklzQ29sb24pOgorICAgICAg
ICAoSlNDOjo6OmxleCk6CisgICAgICAgIChKU0M6Ojo6c2NhblJlZ0V4cCk6CisgICAgICAgIChK
U0M6Ojo6c2tpcFJlZ0V4cCk6CisgICAgICAgIChKU0M6Ojo6Y2xlYXIpOgorICAgICAgICAoSlND
Ojo6OnNvdXJjZUNvZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5oOgorICAgICAgICAoSlND
OjpMZXhlcjo6YXBwZW5kMTYpOgorICAgICAgICAoSlNDOjo6OmlzV2hpdGVTcGFjZSk6CisgICAg
ICAgIChKU0M6Ojo6aXNMaW5lVGVybWluYXRvcik6CisgICAgICAgIChKU0M6Ojo6Y29udmVydEhl
eCk6CisgICAgICAgIChKU0M6Ojo6Y29udmVydFVuaWNvZGUpOgorICAgICAgICAoSlNDOjo6Om1h
a2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6OjpsZXhFeHBlY3RJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpQYXJzZXIp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5o
OgorICAgICAgICAqIHBhcnNlci9QYXJzZXJBcmVuYS5oOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZS5o
OgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlOjpkYXRhKToKKyAgICAgICAgKEpTQzo6U291cmNl
Q29kZTo6c3ViRXhwcmVzc2lvbik6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6
CisgICAgICAgIChKU0M6OlVTdHJpbmdTb3VyY2VQcm92aWRlcjo6ZGF0YSk6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hl
Y2tlci5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjppbnNlcnRTZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9JZGVu
dGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckxDaGFyQnVmZmVyVHJhbnNsYXRv
cjo6aGFzaCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJMQ2hhckJ1ZmZlclRyYW5zbGF0b3I6
OmVxdWFsKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckxDaGFyQnVmZmVyVHJhbnNsYXRvcjo6
dHJhbnNsYXRlKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKiBy
dW50aW1lL0lkZW50aWZpZXIuaDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6SWRlbnRpZmll
cik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmVxdWFsKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6cGFyc2VJbnRPdmVyZmxvdyk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNV
bmVzY2FwZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oOgor
ICAgICAgICAoSlNDOjpwYXJzZUludE92ZXJmbG93KToKKyAgICAgICAgKiBydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4U3Ry
aW5nKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisKIDIwMTEtMTEtMDEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgaW5saW5pbmcgYnJl
YWtzIGZ1bmN0aW9uLmFyZ3VtZW50cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdv
cmRMb29rdXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBUcmllOgogICAgICAgICBzZWxmLmtleXMgPSBbKHRyaWUu
cHJlZml4LCB0cmllKSBmb3IgdHJpZSBpbiBzb3J0ZWQoc2VsZi5rZXlzLnZhbHVlcygpLCBrZXk9
b3BlcmF0b3IuYXR0cmdldHRlcignd2VpZ2h0JyksIHJldmVyc2U9VHJ1ZSldCiAgICAgICAgIHNl
bGYud2VpZ2h0ID0gd2VpZ2h0CiAKLSAgICBkZWYgcHJpbnRTdWJUcmVlQXNDKHNlbGYsIGluZGVu
dCk6CisgICAgZGVmIHByaW50U3ViVHJlZUFzQyhzZWxmLCB0eXBlTmFtZSwgaW5kZW50KToKICAg
ICAgICAgc3RyID0gbWFrZVBhZGRpbmcoaW5kZW50KQogCiAgICAgICAgIGlmIHNlbGYudmFsdWUg
IT0gTm9uZToKQEAgLTE0NiwxMyArMTQ2LDEzIEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICAgICAg
ICAgYmFzZSA9ICJjb2RlIgogICAgICAgICAgICAgICAgIGlmIGJhc2VJbmRleCA+IDA6CiAgICAg
ICAgICAgICAgICAgICAgIGJhc2UgPSAiY29kZSArICVkIiAlIGJhc2VJbmRleAotICAgICAgICAg
ICAgICAgIGNvbXBhcmlzb24gPSAoIkNPTVBBUkVfQ0hBUkFDVEVSUyVkKCVzLCAiICUgKGxlbih0
ZXN0KSwgYmFzZSkpICsgIiwgIi5qb2luKHRlc3QpICsgIikiCisgICAgICAgICAgICAgICAgY29t
cGFyaXNvbiA9ICgiQ09NUEFSRV8lZCVzUyglcywgIiAlIChsZW4odGVzdCksIHR5cGVOYW1lLCBi
YXNlKSkgKyAiLCAiLmpvaW4odGVzdCkgKyAiKSIKICAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9
PSAwOgogICAgICAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIiArIGNvbXBhcmlzb24gKyAi
KSB7IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0g
ZWxzZSBpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7IikKIAotICAgICAgICAgICAgdHJpZS5wcmlu
dFN1YlRyZWVBc0MoaW5kZW50ICsgNCkKKyAgICAgICAgICAgIHRyaWUucHJpbnRTdWJUcmVlQXND
KHR5cGVOYW1lLCBpbmRlbnQgKyA0KQogICAgICAgICAgICAgaXRlbUNvdW50ID0gaXRlbUNvdW50
ICsgMQogCiAgICAgICAgICAgICBpZiBpdGVtQ291bnQgPT0gbGVuKHNlbGYua2V5cyk6CkBAIC0x
NzMsMTIgKzE3MywyMyBAQCBjbGFzcyBUcmllOgogICAgICAgICAjIG1heCBsZW5ndGggKyAxIHNv
IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IGJvdW5kcyBjaGVja2luZyBhdCBhbGwKICAgICAgICAg
cHJpbnQoInN0YXRpYyBjb25zdCBpbnQgbWF4VG9rZW5MZW5ndGggPSAlZDsiICUgKHNlbGYubWF4
TGVuZ3RoKCkgKyAxKSkKICAgICAgICAgcHJpbnQoIiIpCi0gICAgICAgIHByaW50KCJ0ZW1wbGF0
ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBl
IExleGVyOjpwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKKyAgICAgICAgcHJpbnQo
InRlbXBsYXRlIDw+IikKKyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0
ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8VUNoYXI+OjpwYXJz
ZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKICAgICAgICAgcHJpbnQoInsiKQogICAgICAg
ICBwcmludCgiICAgIEFTU0VSVChtX2NvZGVFbmQgLSBtX2NvZGUgPj0gbWF4VG9rZW5MZW5ndGgp
OyIpCiAgICAgICAgIHByaW50KCIiKQogICAgICAgICBwcmludCgiICAgIGNvbnN0IFVDaGFyKiBj
b2RlID0gbV9jb2RlOyIpCi0gICAgICAgIHNlbGYucHJpbnRTdWJUcmVlQXNDKDQpCisgICAgICAg
IHNlbGYucHJpbnRTdWJUcmVlQXNDKCJVQ0hBUiIsIDQpCisgICAgICAgIHByaW50KCIgICAgcmV0
dXJuIElERU5UOyIpCisgICAgICAgIHByaW50KCJ9IikKKyAgICAgICAgcHJpbnQoIiIpCisgICAg
ICAgIHByaW50KCJ0ZW1wbGF0ZSA8PiIpCisgICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8Ym9vbCBz
aG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExD
aGFyPjo6cGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKiBkYXRhKSIpCisgICAgICAgIHByaW50KCJ7
IikKKyAgICAgICAgcHJpbnQoIiAgICBBU1NFUlQobV9jb2RlRW5kIC0gbV9jb2RlID49IG1heFRv
a2VuTGVuZ3RoKTsiKQorICAgICAgICBwcmludCgiIikKKyAgICAgICAgcHJpbnQoIiAgICBjb25z
dCBMQ2hhciogY29kZSA9IG1fY29kZTsiKQorICAgICAgICBzZWxmLnByaW50U3ViVHJlZUFzQygi
Q0hBUiIsIDQpCiAgICAgICAgIHByaW50KCIgICAgcmV0dXJuIElERU5UOyIpCiAgICAgICAgIHBy
aW50KCJ9IikKICAgICAgICAgcHJpbnQoIiIpCkBAIC0xOTQsNTcgKzIwNSw4NSBAQCBwcmludCgi
Ly8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgS2V5CiBwcmludCgiIiIKICNpZiBDUFUoTkVF
RFNfQUxJR05FRF9BQ0NFU1MpCiAKLSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNz
LCBjaGFyMSwgY2hhcjIpIFxcCisjZGVmaW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMikgXFwKKyAgICAoKChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsx
XSA9PSBjaGFyMikpCisjZGVmaW5lIENPTVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFy
MiwgY2hhcjMsIGNoYXI0KSBcXAorICAgIChDT01QQVJFXzJDSEFSUyhhZGRyZXNzLCBjaGFyMSwg
Y2hhcjIpICYmIENPTVBBUkVfMkNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisj
ZGVmaW5lIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFxcCiAgICAgKCgo
YWRkcmVzcylbMF0gPT0gY2hhcjEpICYmICgoYWRkcmVzcylbMV0gPT0gY2hhcjIpKQotI2RlZmlu
ZSBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYg
Q09NUEFSRV9DSEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmlu
ZSBDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxc
CisgICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVf
MlVDSEFSUygoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQogCiAjZWxzZSAvLyBDUFUoTkVF
RFNfQUxJR05FRF9BQ0NFU1MpCiAKICNpZiBDUFUoQklHX0VORElBTikKIAotI2RlZmluZSBDSEFS
UEFJUl9UT1VJTlQzMihhLCBiKSBcXAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQxNihhLCBiKSBc
XAorICAgICgoKCh1aW50MTZfdCkoYSkpIDw8IDgpICsgKHVpbnQxNl90KShiKSkKKyNkZWZpbmUg
Q0hBUlFVQURfVE9VSU5UMzIoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDMyX3QpKENIQVJQ
QUlSX1RPVUlOVDE2KGEsIGIpKSkgPDwgMTYpICsgQ0hBUlBBSVJfVE9VSU5UMTYoYywgZCkpCisj
ZGVmaW5lIFVDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSBcXAogICAgICgoKCh1aW50MzJfdCkoYSkp
IDw8IDE2KSArICh1aW50MzJfdCkoYikpCi0jZGVmaW5lIENIQVJRVUFEX1RPVUlOVDY0KGEsIGIs
IGMsIGQpIFxcCi0gICAgKCgoKHVpbnQ2NF90KShDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkpIDw8
IDMyKSArIENIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKQorI2RlZmluZSBVQ0hBUlFVQURfVE9VSU5U
NjQoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDY0X3QpKFVDSEFSUVVBRF9UT1VJTlQ2NChh
LCBiKSkpIDw8IDMyKSArIFVDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkKIAogI2Vsc2UgLy8gQ1BV
KEJJR19FTkRJQU4pCiAKLSNkZWZpbmUgQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikgXFwKKyNkZWZp
bmUgQ0hBUlBBSVJfVE9VSU5UMTYoYSwgYikgXFwKKyAgICAoKCgodWludDE2X3QpKGIpKSA8PCA4
KSArICh1aW50MTZfdCkoYSkpCisjZGVmaW5lIENIQVJRVUFEX1RPVUlOVDMyKGEsIGIsIGMsIGQp
IFxcCisgICAgKCgoKHVpbnQzMl90KShDSEFSUEFJUl9UT1VJTlQxNihjLCBkKSkpIDw8IDE2KSAr
IENIQVJQQUlSX1RPVUlOVDE2KGEsIGIpKQorI2RlZmluZSBVQ0hBUlBBSVJfVE9VSU5UMzIoYSwg
YikgXFwKICAgICAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWludDMyX3QpKGEpKQotI2Rl
ZmluZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSBcXAotICAgICgoKCh1aW50NjRfdCko
Q0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBDSEFSUEFJUl9UT1VJTlQzMihhLCBi
KSkKKyNkZWZpbmUgVUNIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMsIGQpIFxcCisgICAgKCgoKHVp
bnQ2NF90KShVQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBVQ0hBUlBBSVJfVE9V
SU5UMzIoYSwgYikpCiAKICNlbmRpZiAvLyBDUFUoQklHX0VORElBTikKIAogCi0jZGVmaW5lIENP
TVBBUkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAotICAgICgoKHVpbnQz
Ml90KikoYWRkcmVzcykpWzBdID09IENIQVJQQUlSX1RPVUlOVDMyKGNoYXIxLCBjaGFyMikpCisj
ZGVmaW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKKyAgICAoKCh1
aW50MTZfdCopKGFkZHJlc3MpKVswXSA9PSBDSEFSUEFJUl9UT1VJTlQxNihjaGFyMSwgY2hhcjIp
KQorI2RlZmluZSBDT01QQVJFXzJVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAg
ICgoKHVpbnQzMl90KikoYWRkcmVzcykpWzBdID09IFVDSEFSUEFJUl9UT1VJTlQzMihjaGFyMSwg
Y2hhcjIpKQogCiAjaWYgQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM0
KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAgICgoKHVpbnQ2NF90
KikoYWRkcmVzcykpWzBdID09IENIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwgY2hhcjMs
IGNoYXI0KSkKKyNkZWZpbmUgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBj
aGFyMywgY2hhcjQpIFxcCisgICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFV
QURfVE9VSU5UMzIoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJF
XzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKCgo
dWludDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gVUNIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFy
MiwgY2hhcjMsIGNoYXI0KSkKIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01Q
QVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAot
ICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFS
RV9DSEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01Q
QVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAo
Q09NUEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiBDT01QQVJFXzJDSEFSUygo
YWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRVQ0hBUlMoYWRk
cmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKENPTVBBUkVfMlVDSEFS
UyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVDSEFSUygoYWRkcmVzcykgKyAy
LCBjaGFyMywgY2hhcjQpKQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogI2VuZGlmIC8vIENQ
VShORUVEU19BTElHTkVEX0FDQ0VTUykKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMzKGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIo
YWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiAoKGFkZHJlc3MpWzJdID09IChjaGFyMykpKQotI2Rl
ZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM1KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNo
YXI0LCBjaGFyNSkgXFwKLSAgICAoQ09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzLCBjaGFyMSwg
Y2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9PSAoY2hhcjUpKSkKLSNkZWZp
bmUgQ09NUEFSRV9DSEFSQUNURVJTNihhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFy
NCwgY2hhcjUsIGNoYXI2KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3Mg
KyA0LCBjaGFyNSwgY2hhcjYpKQotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM3KGFkZHJlc3Ms
IGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAotICAg
IChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyAzLCBjaGFyNCwgY2hhcjUsIGNoYXI2
LCBjaGFyNykpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzgoYWRkcmVzcywgY2hhcjEsIGNo
YXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcsIGNoYXI4KSBcXAotICAgIChD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAm
JiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBj
aGFyOCkpCisjZGVmaW5lIENPTVBBUkVfM0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hh
cjMpIFxcCisgICAgKENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChh
ZGRyZXNzKVsyXSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV8zVUNIQVJTKGFkZHJlc3Ms
IGNoYXIxLCBjaGFyMiwgY2hhcjMpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBj
aGFyMSwgY2hhcjIpICYmICgoYWRkcmVzcylbMl0gPT0gKGNoYXIzKSkpCisjZGVmaW5lIENPTVBB
UkVfNUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSkgXFwK
KyAgICAoQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQp
ICYmICgoYWRkcmVzcylbNF0gPT0gKGNoYXI1KSkpCisjZGVmaW5lIENPTVBBUkVfNVVDSEFSUyhh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUpIFxcCisgICAgKENPTVBB
UkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRy
ZXNzKVs0XSA9PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFSRV82Q0hBUlMoYWRkcmVzcywgY2hh
cjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAoQ09NUEFSRV80
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfMkNI
QVJTKGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYpKQorI2RlZmluZSBDT01QQVJFXzZVQ0hBUlMo
YWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAg
ICAoQ09NUEFSRV80VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAm
JiBDT01QQVJFXzJVQ0hBUlMoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENP
TVBBUkVfN0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwg
Y2hhcjYsIGNoYXI3KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcyArIDMsIGNoYXI0LCBj
aGFyNSwgY2hhcjYsIGNoYXI3KSkKKyNkZWZpbmUgQ09NUEFSRV83VUNIQVJTKGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAorICAgIChD
T01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENP
TVBBUkVfNFVDSEFSUyhhZGRyZXNzICsgMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQor
I2RlZmluZSBDT01QQVJFXzhDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFy
NCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCisgICAgKENPTVBBUkVfNENIQVJTKGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFXzRDSEFSUyhhZGRy
ZXNzICsgNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpKQorI2RlZmluZSBDT01QQVJFXzhV
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwg
Y2hhcjcsIGNoYXI4KSBcXAorICAgIChDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNo
YXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzICsgNCwgY2hhcjUs
IGNoYXI2LCBjaGFyNywgY2hhcjgpKQogIiIiKQogCiB0cmllLnByaW50QXNDKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
cmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5M
SU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBw
cmVwYXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdlIGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAg
ICAgICAgICAgICAvLyB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFs
UGFyc2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCks
IHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIExpdGVyYWxQYXJzZXI6Ok5vblN0cmljdEpTT04pOwor
ICAgICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291
cmNlLmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6
Tm9uU3RyaWN0SlNPTik7CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBw
cmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ZE9iamVjdDsKICAgICAgICAgfQpAQCAtNjY3LDE5ICs2NjcsMTkgQEAgc3RhdGljIHZvaWQgYXBw
ZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgICAgICBtZXNzYWdlID0gIG1ha2VVU3RyaW5n
KG1lc3NhZ2UsICIgKGV2YWx1YXRpbmcgJyIsIGNvZGVCbG9jay0+c291cmNlKCktPmdldFJhbmdl
KGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvblN0b3ApLCAiJykiKTsKICAgICBlbHNlIHsKICAg
ICAgICAgLy8gTm8gcmFuZ2UgaW5mb3JtYXRpb24sIHNvIGdpdmUgYSBmZXcgY2hhcmFjdGVycyBv
ZiBjb250ZXh0Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gY29kZUJsb2NrLT5zb3VyY2Uo
KS0+ZGF0YSgpOworICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBkYXRhID0gY29kZUJsb2NrLT5z
b3VyY2UoKS0+ZGF0YSgpOwogICAgICAgICBpbnQgZGF0YUxlbmd0aCA9IGNvZGVCbG9jay0+c291
cmNlKCktPmxlbmd0aCgpOwogICAgICAgICBpbnQgc3RhcnQgPSBleHByZXNzaW9uU3RhcnQ7CiAg
ICAgICAgIGludCBzdG9wID0gZXhwcmVzc2lvblN0YXJ0OwogICAgICAgICAvLyBHZXQgdXAgdG8g
MjAgY2hhcmFjdGVycyBvZiBjb250ZXh0IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgZGl2
b3QsIGNsYW1waW5nIHRvIHRoZSBsaW5lLgogICAgICAgICAvLyB0aGVuIHN0cmlwIHdoaXRlc3Bh
Y2UuCi0gICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgKGV4cHJlc3Npb25TdGFydCAtIHN0YXJ0
IDwgMjApICYmIGRhdGFbc3RhcnQgLSAxXSAhPSAnXG4nKQorICAgICAgICB3aGlsZSAoc3RhcnQg
PiAwICYmIChleHByZXNzaW9uU3RhcnQgLSBzdGFydCA8IDIwKSAmJiAoKmRhdGEpW3N0YXJ0IC0g
MV0gIT0gJ1xuJykKICAgICAgICAgICAgIHN0YXJ0LS07Ci0gICAgICAgIHdoaWxlIChzdGFydCA8
IChleHByZXNzaW9uU3RhcnQgLSAxKSAmJiBpc1N0cldoaXRlU3BhY2UoZGF0YVtzdGFydF0pKQor
ICAgICAgICB3aGlsZSAoc3RhcnQgPCAoZXhwcmVzc2lvblN0YXJ0IC0gMSkgJiYgaXNTdHJXaGl0
ZVNwYWNlKCgqZGF0YSlbc3RhcnRdKSkKICAgICAgICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIHdo
aWxlIChzdG9wIDwgZGF0YUxlbmd0aCAmJiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIwKSAm
JiBkYXRhW3N0b3BdICE9ICdcbicpCisgICAgICAgIHdoaWxlIChzdG9wIDwgZGF0YUxlbmd0aCAm
JiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIwKSAmJiAoKmRhdGEpW3N0b3BdICE9ICdcbicp
CiAgICAgICAgICAgICBzdG9wKys7Ci0gICAgICAgIHdoaWxlIChzdG9wID4gZXhwcmVzc2lvblN0
YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZShkYXRhW3N0b3AgLSAxXSkpCisgICAgICAgIHdoaWxlIChz
dG9wID4gZXhwcmVzc2lvblN0YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRhdGEpW3N0b3AgLSAx
XSkpCiAgICAgICAgICAgICBzdG9wLS07CiAgICAgICAgIG1lc3NhZ2UgPSBtYWtlVVN0cmluZyht
ZXNzYWdlLCAiIChuZWFyICcuLi4iLCBjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShzdGFy
dCwgc3RvcCksICIuLi4nKSIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsMTcgKzIyNiwyMCBAQCBzdGF0
aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdHlwZXNPZkFTQ0lJCiAvKiAxMjcgLSBEZWxldGUgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySW52YWxpZCwKIH07CiAKLUxleGVyOjpMZXhlcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0xleGVyPFQ+OjpMZXhl
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgOiBtX2lzUmVwYXJzaW5nKGZhbHNlKQog
ICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7CiB9CiAKLUxleGVyOjp+TGV4ZXIoKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitMZXhlcjxUPjo6fkxleGVyKCkKIHsKIH0KLSAgICAKLVVT
dHJpbmcgTGV4ZXI6OmdldEludmFsaWRDaGFyTWVzc2FnZSgpCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorVVN0cmluZyBMZXhlcjxUPjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKIHsKICAgICBz
d2l0Y2ggKG1fY3VycmVudCkgewogICAgIGNhc2UgMDoKQEAgLTI1OCwyNyArMjYxLDM3IEBAIFVT
dHJpbmcgTGV4ZXI6OmdldEludmFsaWRDaGFyTWVzc2FnZSgpCiAgICAgfQogfQogCi1BTFdBWVNf
SU5MSU5FIGNvbnN0IFVDaGFyKiBMZXhlcjo6Y3VycmVudENoYXJhY3RlcigpIGNvbnN0Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgY29uc3QgVCogTGV4ZXI8VD46OmN1cnJl
bnRDaGFyYWN0ZXIoKSBjb25zdAogewogICAgIEFTU0VSVChtX2NvZGUgPD0gbV9jb2RlRW5kKTsK
ICAgICByZXR1cm4gbV9jb2RlOwogfQogCi1BTFdBWVNfSU5MSU5FIGludCBMZXhlcjo6Y3VycmVu
dE9mZnNldCgpIGNvbnN0Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgaW50
IExleGVyPFQ+OjpjdXJyZW50T2Zmc2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gY3VycmVudENo
YXJhY3RlcigpIC0gbV9jb2RlU3RhcnQ7CiB9CiAKLXZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJBcmVuYSogYXJlbmEpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQ
YXJzZXJBcmVuYSogYXJlbmEpCiB7CiAgICAgbV9hcmVuYSA9ICZhcmVuYS0+aWRlbnRpZmllckFy
ZW5hKCk7Ci0KKyAgICAKICAgICBtX2xpbmVOdW1iZXIgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CiAg
ICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAgICBtX2xhc3RUb2tlbiA9IC0xOwotCi0gICAgY29u
c3QgVUNoYXIqIGRhdGEgPSBzb3VyY2UucHJvdmlkZXIoKS0+ZGF0YSgpOwotCisgICAgCisgICAg
Y29uc3QgVCogZGF0YTsKKyAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKS0+aXM4Qml0
KCkpIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihUKSA9PSBzaXplb2YoY2hhcikpOworICAgICAg
ICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+KHNvdXJjZS5wcm92aWRlcigpLT5k
YXRhKCktPmNoYXJhY3RlcnM4KCkpOworICAgIH0gZWxzZSAgeworICAgICAgICBBU1NFUlQoc2l6
ZW9mKFQpID09IHNpemVvZihVQ2hhcikpOworICAgICAgICBkYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBUICo+KHNvdXJjZS5wcm92aWRlcigpLT5kYXRhKCktPmNoYXJhY3RlcnMxNigpKTsK
KyAgICB9CisgICAgCiAgICAgbV9zb3VyY2UgPSAmc291cmNlOwogICAgIG1fY29kZVN0YXJ0ID0g
ZGF0YTsKICAgICBtX2NvZGUgPSBkYXRhICsgc291cmNlLnN0YXJ0T2Zmc2V0KCk7CkBAIC0yODYs
MTAgKzI5OSwxMCBAQCB2b2lkIExleGVyOjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHNvCiAg
ICAgbV9lcnJvciA9IGZhbHNlOwogICAgIG1fYXRMaW5lU3RhcnQgPSB0cnVlOwogICAgIG1fbGV4
RXJyb3JNZXNzYWdlID0gVVN0cmluZygpOwotCisgICAgCiAgICAgbV9idWZmZXI4LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CiAgICAgbV9idWZmZXIx
Ni5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KChtX2NvZGVFbmQgLSBtX2NvZGUpIC8gMik7Ci0KKyAg
ICAKICAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3VycmVu
dCA9ICptX2NvZGU7CiAgICAgZWxzZQpAQCAtMjk3LDcgKzMxMCw4IEBAIHZvaWQgTGV4ZXI6OnNl
dENvZGUoY29uc3QgU291cmNlQ29kZSYgc28KICAgICBBU1NFUlQoY3VycmVudE9mZnNldCgpID09
IHNvdXJjZS5zdGFydE9mZnNldCgpKTsKIH0KIAotdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwg
TGV4ZXI6OlNoaWZ0VHlwZSBzaG91bGRCb3VuZHNDaGVjaz4gQUxXQVlTX0lOTElORSB2b2lkIExl
eGVyOjppbnRlcm5hbFNoaWZ0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGlu
dCBzaGlmdEFtb3VudCwgU2hpZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdBWVNfSU5MSU5F
IHZvaWQgTGV4ZXI8VD46OmludGVybmFsU2hpZnQoKQogewogICAgIGlmIChzaG91bGRCb3VuZHND
aGVjayA9PSBEb0JvdW5kc0NoZWNrKSB7CiAgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVs
c2Ugc2VxdWVuY2UKQEAgLTMxMiwyMCArMzI2LDI4IEBAIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91
bnQsIExleGVyOjpTaGlmdFQKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6
c2hpZnQoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8
VD46OnNoaWZ0KCkKIHsKLSAgICBpbnRlcm5hbFNoaWZ0PDEsIERvQm91bmRzQ2hlY2s+KCk7Cisg
ICAgLy8gRmFzdGVyIHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5jZQorICAgIEFTU0VSVChtX2N1cnJl
bnQgIT0gLTEpOworICAgIG1fY3VycmVudCA9IC0xOworICAgIG1fY29kZSsrOworICAgIGlmIChM
SUtFTFkobV9jb2RlIDwgbV9jb2RlRW5kKSkKKyAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsK
IH0KIAotQUxXQVlTX0lOTElORSBpbnQgTGV4ZXI6OnBlZWsoaW50IG9mZnNldCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBpbnQgTGV4ZXI8VD46OnBlZWsoaW50IG9mZnNl
dCkKIHsKICAgICAvLyBPbmx5IHVzZSBpZiBuZWNlc3NhcnkKICAgICBBU1NFUlQob2Zmc2V0ID4g
MCAmJiBvZmZzZXQgPCA1KTsKLSAgICBjb25zdCBVQ2hhciogY29kZSA9IG1fY29kZSArIG9mZnNl
dDsKKyAgICBjb25zdCBUKiBjb2RlID0gbV9jb2RlICsgb2Zmc2V0OwogICAgIHJldHVybiAoY29k
ZSA8IG1fY29kZUVuZCkgPyAqY29kZSA6IC0xOwogfQogCi1pbnQgTGV4ZXI6OmdldFVuaWNvZGVD
aGFyYWN0ZXIoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbnQgTGV4ZXI8VD46OmdldFVuaWNv
ZGVDaGFyYWN0ZXIoKQogewogICAgIGludCBjaGFyMSA9IHBlZWsoMSk7CiAgICAgaW50IGNoYXIy
ID0gcGVlaygyKTsKQEAgLTM0Miw3ICszNjQsOCBAQCBpbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFy
YWN0ZXIoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRl
cm1pbmF0b3IoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdExp
bmVUZXJtaW5hdG9yKCkKIHsKICAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQp
KTsKIApAQCAtMzU2LDcgKzM3OSw4IEBAIHZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3Io
KQogICAgICsrbV9saW5lTnVtYmVyOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omxh
c3RUb2tlbldhc1Jlc3RyS2V5d29yZCgpIGNvbnN0Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FM
V0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6bGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9sYXN0VG9rZW4gPT0gQ09OVElOVUUgfHwgbV9sYXN0VG9rZW4g
PT0gQlJFQUsgfHwgbV9sYXN0VG9rZW4gPT0gUkVUVVJOIHx8IG1fbGFzdFRva2VuID09IFRIUk9X
OwogfQpAQCAtNDExLDI2ICs0MzUsMTI3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbmdsZUVzY2Fw
ZShpbnQgYykKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQ4KGludCBjKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkOChpbnQg
YykKIHsKICAgICBBU1NFUlQoYyA+PSAwKTsKICAgICBBU1NFUlQoYyA8PSAweEZGKTsKLSAgICBt
X2J1ZmZlcjguYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICBtX2J1ZmZlcjguYXBw
ZW5kKHN0YXRpY19jYXN0PExDaGFyPihjKSk7CiB9CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNv
cmQxNihVQ2hhciBjKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxU
Pjo6YXBwZW5kOChjb25zdCBUKiBwLCBzaXplX3QgbGVuZ3RoKQogewotICAgIG1fYnVmZmVyMTYu
YXBwZW5kKGMpOworICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhyZWUgb2NjdXJyYW5jZXMgb2YgbV9i
dWZmZXIxNiB0byBtX2J1ZmZlcjggYW5kCisgICAgLy8gVUNoYXIgdG8gTENoYXIgd2hlbiA4IGJp
dCBzdHJpbmdzIGFyZSB0dXJuZWQgb24uCisgICAgc2l6ZV90IGN1cnJlbnRTaXplID0gbV9idWZm
ZXIxNi5zaXplKCk7CisgICAgbV9idWZmZXIxNi5ncm93KGN1cnJlbnRTaXplICsgbGVuZ3RoKTsK
KyAgICBVQ2hhciogcmF3QnVmZmVyID0gbV9idWZmZXIxNi5kYXRhKCkgKyBjdXJyZW50U2l6ZTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgVCBj
ID0gcFtpXTsKKyAgICAgICAgQVNTRVJUKGMgPj0gMCk7CisgICAgICAgIEFTU0VSVChjIDw9IDB4
RkYpOworICAgICAgICByYXdCdWZmZXJbaV0gPSBjOworICAgIH0KIH0KIAotaW5saW5lIHZvaWQg
TGV4ZXI6OnJlY29yZDE2KGludCBjKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9p
ZCBMZXhlcjxUPjo6YXBwZW5kMTYoY29uc3QgTENoYXIqIHAsIHNpemVfdCBsZW5ndGgpCit7Cisg
ICAgc2l6ZV90IGN1cnJlbnRTaXplID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgbV9idWZmZXIx
Ni5ncm93KGN1cnJlbnRTaXplICsgbGVuZ3RoKTsKKyAgICBVQ2hhciogcmF3QnVmZmVyID0gbV9i
dWZmZXIxNi5kYXRhKCkgKyBjdXJyZW50U2l6ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCisgICAgICAgIHJhd0J1ZmZlcltpXSA9IHBbaV07Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgTGV4ZXI8VD46OnJlY29yZDE2KFQgYykKK3sK
KyAgICBtX2J1ZmZlcjE2LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIExleGVyPFQ+OjpyZWNvcmQxNihpbnQgYykK
IHsKICAgICBBU1NFUlQoYyA+PSAwKTsKICAgICBBU1NFUlQoYyA8PSBVU0hSVF9NQVgpOwotICAg
IHJlY29yZDE2KFVDaGFyKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihjKSkpOworICAgIG1f
YnVmZmVyMTYuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxXQVlT
X0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6cGFyc2VJZGVudGlmaWVyKEpTVG9rZW5EYXRh
KiB0b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICAv
LyBGSVhNRTogQ2hhbmdlIHJlY29yZDE2IGFuZCBtX2J1ZmZlcjE2IHRvIHJlY29yZDggYW5kIG1f
YnVmZmVyOCBiZWxvdyB3aGVuCisgICAgLy8gOCBiaXQgc3RyaW5ncyBhcmUgdHVybmVkIG9uLgor
ICAgIGludCBzdGFydGluZ09mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKKyAgICBpbnQgc3RhcnRp
bmdMaW5lTnVtYmVyID0gbGluZU51bWJlcigpOworICAgIGNvbnN0IHB0cmRpZmZfdCByZW1haW5p
bmcgPSBtX2NvZGVFbmQgLSBtX2NvZGU7CisgICAgaWYgKChyZW1haW5pbmcgPj0gbWF4VG9rZW5M
ZW5ndGgpICYmICEobGV4VHlwZSAmIElnbm9yZVJlc2VydmVkV29yZHMpKSB7CisgICAgICAgIEpT
VG9rZW5UeXBlIGtleXdvcmQgPSBwYXJzZUtleXdvcmQ8c2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4o
dG9rZW5EYXRhKTsKKyAgICAgICAgaWYgKGtleXdvcmQgIT0gSURFTlQpIHsKKyAgICAgICAgICAg
IEFTU0VSVCgoIXNob3VsZENyZWF0ZUlkZW50aWZpZXIpIHx8IHRva2VuRGF0YS0+aWRlbnQpOwor
ICAgICAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gUkVTRVJWRURfSUZfU1RSSUNUICYmICFzdHJp
Y3RNb2RlID8gSURFTlQgOiBrZXl3b3JkOworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoTElLRUxZ
KGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpKSB7CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKExJS0VMWShtX2N1cnJlbnQg
IT0gJ1xcJykpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBzZXRPZmZzZXQoc3RhcnRp
bmdPZmZzZXQpOworICAgICAgICBzZXRMaW5lTnVtYmVyKHN0YXJ0aW5nTGluZU51bWJlcik7Cisg
ICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVy
OAorICAgICAgICByZXR1cm4gcGFyc2VJZGVudGlmaWVyU2xvd0Nhc2U8c2hvdWxkQ3JlYXRlSWRl
bnRpZmllcj4odG9rZW5EYXRhLCBsZXhUeXBlLCBzdHJpY3RNb2RlKTsKKyAgICB9CisKKyAgICBp
bnQgaWRlbnRpZmllckxlbmd0aDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IDA7Cisg
ICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKCFidWZmZXJSZXF1
aXJlZCkgeworICAgICAgICAgICAgaWRlbnRpZmllckxlbmd0aCA9IGN1cnJlbnRDaGFyYWN0ZXIo
KSAtIGlkZW50aWZpZXJTdGFydDsKKyAgICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIo
aWRlbnRpZmllclN0YXJ0LCBpZGVudGlmaWVyTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyU3RhcnQgIT0gY3VycmVudENoYXJhY3RlcigpKQorICAg
ICAgICAgICAgICAgIGFwcGVuZDE2KGlkZW50aWZpZXJTdGFydCwgY3VycmVudENoYXJhY3Rlcigp
IC0gaWRlbnRpZmllclN0YXJ0KTsgIC8vIEZJWE1FOiBDaGFuZ2UgdG8gYXBwZW5kOAorICAgICAg
ICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihtX2J1ZmZlcjE2LmRhdGEoKSwgbV9idWZmZXIx
Ni5zaXplKCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICB9CisKKyAg
ICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IGlkZW50OworICAgIH0gZWxzZQorICAgICAgICB0b2tl
bkRhdGEtPmlkZW50ID0gMDsKKworICAgIG1fZGVsaW1pdGVkID0gZmFsc2U7CisKKyAgICBpZiAo
TElLRUxZKCFidWZmZXJSZXF1aXJlZCAmJiAhKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRz
KSkpIHsKKyAgICAgICAgQVNTRVJUKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpOworICAgICAgICAv
LyBLZXl3b3JkcyBtdXN0IG5vdCBiZSByZWNvZ25pemVkIGlmIHRoZXJlIHdhcyBhbiBcdVhYWFgg
aW4gdGhlIGlkZW50aWZpZXIuCisgICAgICAgIGlmIChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0
aCkgeworICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fZ2xvYmFsRGF0YS0+
a2V5d29yZHMtPmdldEtleXdvcmQoKmlkZW50KTsKKyAgICAgICAgICAgIEFTU0VSVCgocmVtYWlu
aW5nIDwgbWF4VG9rZW5MZW5ndGgpIHx8ICFlbnRyeSk7CisgICAgICAgICAgICBpZiAoIWVudHJ5
KQorICAgICAgICAgICAgICAgIHJldHVybiBJREVOVDsKKyAgICAgICAgICAgIEpTVG9rZW5UeXBl
IHRva2VuID0gc3RhdGljX2Nhc3Q8SlNUb2tlblR5cGU+KGVudHJ5LT5sZXhlclZhbHVlKCkpOwor
ICAgICAgICAgICAgcmV0dXJuICh0b2tlbiAhPSBSRVNFUlZFRF9JRl9TVFJJQ1QpIHx8IHN0cmlj
dE1vZGUgPyB0b2tlbiA6IElERU5UOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJREVOVDsK
KyAgICB9CisKKyAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsgLy8gRklYTUU6IENoYW5nZSB0byBt
X2J1ZmZlcjgKKworICAgIHJldHVybiBJREVOVDsKIH0KIAotdGVtcGxhdGUgPGJvb2wgc2hvdWxk
Q3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjo6cGFyc2VJ
ZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wg
c3RyaWN0TW9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxk
Q3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6cGFy
c2VJZGVudGlmaWVyU2xvd0Nhc2UoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4
VHlwZSwgYm9vbCBzdHJpY3RNb2RlKQogewogICAgIGNvbnN0IHB0cmRpZmZfdCByZW1haW5pbmcg
PSBtX2NvZGVFbmQgLSBtX2NvZGU7CiAgICAgaWYgKChyZW1haW5pbmcgPj0gbWF4VG9rZW5MZW5n
dGgpICYmICEobGV4VHlwZSAmIElnbm9yZVJlc2VydmVkV29yZHMpKSB7CkBAIC00NDAsNyArNTY1
LDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgICAgICAg
ICAgcmV0dXJuIGtleXdvcmQgPT0gUkVTRVJWRURfSUZfU1RSSUNUICYmICFzdHJpY3RNb2RlID8g
SURFTlQgOiBrZXl3b3JkOwogICAgICAgICB9CiAgICAgfQotICAgIGNvbnN0IFVDaGFyKiBpZGVu
dGlmaWVyU3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgY29uc3QgVCogaWRlbnRpZmll
clN0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOwogICAgIGJvb2wgYnVmZmVyUmVxdWlyZWQgPSBm
YWxzZTsKIAogICAgIHdoaWxlICh0cnVlKSB7CkBAIC00NjgsMjAgKzU5MywxOSBAQCB0ZW1wbGF0
ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBCiAgICAgICAgICAgICByZWNvcmQxNihj
aGFyYWN0ZXIpOwogICAgICAgICBpZGVudGlmaWVyU3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7
CiAgICAgfQotICAgIAorCiAgICAgaW50IGlkZW50aWZpZXJMZW5ndGg7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAwOwogICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB7Ci0g
ICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQpCisgICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQp
IHsKICAgICAgICAgICAgIGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50Q2hhcmFjdGVyKCkgLSBp
ZGVudGlmaWVyU3RhcnQ7Ci0gICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWRlbnQgPSBtYWtl
SWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgpOworICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBjdXJyZW50Q2hhcmFj
dGVyKCkpCiAgICAgICAgICAgICAgICAgbV9idWZmZXIxNi5hcHBlbmQoaWRlbnRpZmllclN0YXJ0
LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOwotICAgICAgICAgICAgaWRl
bnRpZmllclN0YXJ0ID0gbV9idWZmZXIxNi5kYXRhKCk7Ci0gICAgICAgICAgICBpZGVudGlmaWVy
TGVuZ3RoID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgICAgICAgICBpZGVudCA9IG1ha2VJZGVu
dGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJTdGFydCwgaWRlbnRp
Zmllckxlbmd0aCk7CiAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVudDsKICAgICB9IGVs
c2UKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CkBAIC01MDYsMTIgKzYzMCw5NCBAQCB0
ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBCiAgICAgcmV0dXJuIElERU5U
OwogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjo6cGFyc2VTdHJpbmcoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgYm9vbCBzdHJp
Y3RNb2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWls
ZFN0cmluZ3M+IEFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VTdHJpbmcoSlNUb2tl
bkRhdGEqIHRva2VuRGF0YSwgYm9vbCBzdHJpY3RNb2RlKQoreworICAgIC8vIEZJWE1FOiBDaGFu
Z2UgcmVjb3JkMTYgYW5kIG1fYnVmZmVyMTYgdG8gcmVjb3JkOCBhbmQgbV9idWZmZXI4IGJlbG93
IHdoZW4KKyAgICAvLyA4IGJpdCBzdHJpbmdzIGFyZSB0dXJuZWQgb24uCisgICAgaW50IHN0YXJ0
aW5nT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOworICAgIGludCBzdGFydGluZ0xpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyKCk7CisgICAgaW50IHN0cmluZ1F1b3RlQ2hhcmFjdGVyID0gbV9jdXJyZW50
OworICAgIHNoaWZ0KCk7CisKKyAgICBjb25zdCBUKiBzdHJpbmdTdGFydCA9IGN1cnJlbnRDaGFy
YWN0ZXIoKTsKKworICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gc3RyaW5nUXVvdGVDaGFyYWN0ZXIp
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKChtX2N1cnJlbnQgPT0gJ1xcJykpKSB7CisgICAgICAg
ICAgICBpZiAoc3RyaW5nU3RhcnQgIT0gY3VycmVudENoYXJhY3RlcigpICYmIHNob3VsZEJ1aWxk
U3RyaW5ncykKKyAgICAgICAgICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hh
cmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7CisgICAgICAgICAgICBzaGlmdCgpOworCisgICAgICAg
ICAgICBpbnQgZXNjYXBlID0gc2luZ2xlRXNjYXBlKG1fY3VycmVudCk7CisKKyAgICAgICAgICAg
IC8vIE1vc3QgY29tbW9uIGVzY2FwZSBzZXF1ZW5jZXMgZmlyc3QKKyAgICAgICAgICAgIGlmIChl
c2NhcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQorICAgICAg
ICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29y
ZDgKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJ
S0VMWShpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkpKQorICAgICAgICAgICAgICAgIHNoaWZ0
TGluZVRlcm1pbmF0b3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fY3VycmVudCA9PSAneCcp
IHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJ
SGV4RGlnaXQobV9jdXJyZW50KSAmJiBpc0FTQ0lJSGV4RGlnaXQocGVlaygxKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IHByZXYgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0SGV4KHByZXYsIG1fY3VycmVu
dCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAg
ICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoJ3gnKTsgLy8gRklYTUU6IENoYW5nZSB0byByZWNv
cmQ4CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNldE9mZnNldChzdGFy
dGluZ09mZnNldCk7CisgICAgICAgICAgICAgICAgc2V0TGluZU51bWJlcihzdGFydGluZ0xpbmVO
dW1iZXIpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOyAvLyBGSVhNRTog
Q2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVN0cmluZ1Ns
b3dDYXNlPHNob3VsZEJ1aWxkU3RyaW5ncz4odG9rZW5EYXRhLCBzdHJpY3RNb2RlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZ1N0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVU5MSUtFTFko
KG1fY3VycmVudCA+IDB4ZmYpKSkgeworICAgICAgICAgICAgc2V0T2Zmc2V0KHN0YXJ0aW5nT2Zm
c2V0KTsKKyAgICAgICAgICAgIHNldExpbmVOdW1iZXIoc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAg
ICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVm
ZmVyOAorICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nU2xvd0Nhc2U8c2hvdWxkQnVpbGRT
dHJpbmdzPih0b2tlbkRhdGEsIHN0cmljdE1vZGUpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
RmFzdCBjaGVjayBmb3IgY2hhcmFjdGVycyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZy4K
KyAgICAgICAgLy8gQ2F0Y2hlcyAtMSwgXG4sIFxyLCAweDIwMjgsIGFuZCAweDIwMjkgYXMgZWZm
aWNpZW50bHkKKyAgICAgICAgLy8gYXMgcG9zc2libGUsIGFuZCBsZXRzIHRocm91Z2ggYWxsIGNv
bW1vbiBBU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgICBpZiAoVU5MSUtFTFkoKChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9jdXJyZW50KSAtIDB4RSkgJiAweDIwMDApKSkgeworICAgICAgICAgICAg
Ly8gTmV3LWxpbmUgb3IgZW5kIG9mIGlucHV0IGlzIG5vdCBhbGxvd2VkCisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSB8fCBVTkxJS0VMWShtX2N1
cnJlbnQgPT0gLTEpKSB7CisgICAgICAgICAgICAgICAgbV9sZXhFcnJvck1lc3NhZ2UgPSAiVW5l
eHBlY3RlZCBFT0YiOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIEFueXRoaW5nIGVsc2UgaXMganVzdCBhIG5vcm1hbCBjaGFyYWN0
ZXIKKyAgICAgICAgfQorICAgICAgICBzaGlmdCgpOworICAgIH0KKworICAgIGlmIChjdXJyZW50
Q2hhcmFjdGVyKCkgIT0gc3RyaW5nU3RhcnQgJiYgc2hvdWxkQnVpbGRTdHJpbmdzKQorICAgICAg
ICBhcHBlbmQ4KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7
CisgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0
byBtX2J1ZmZlcjgKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJZGVudGlmaWVyKG1f
YnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7CisgICAgZWxzZQorICAgICAgICB0
b2tlbkRhdGEtPmlkZW50ID0gMDsKKworICAgIC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4
CisgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBib29s
IExleGVyPFQ+OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIGJv
b2wgc3RyaWN0TW9kZSkKIHsKICAgICBpbnQgc3RyaW5nUXVvdGVDaGFyYWN0ZXIgPSBtX2N1cnJl
bnQ7CiAgICAgc2hpZnQoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBzdHJpbmdTdGFydCA9IGN1cnJl
bnRDaGFyYWN0ZXIoKTsKKyAgICBjb25zdCBUKiBzdHJpbmdTdGFydCA9IGN1cnJlbnRDaGFyYWN0
ZXIoKTsKIAogICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gc3RyaW5nUXVvdGVDaGFyYWN0ZXIpIHsK
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAnXFwnKSkgewpAQCAtNTIzLDggKzcy
OSw4IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVkKIAogICAgICAg
ICAgICAgLy8gTW9zdCBjb21tb24gZXNjYXBlIHNlcXVlbmNlcyBmaXJzdAogICAgICAgICAgICAg
aWYgKGVzY2FwZSkgewotICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQot
ICAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoZXNjYXBlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQorICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2Nh
cGUpOwogICAgICAgICAgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFVO
TElLRUxZKGlzTGluZVRlcm1pbmF0b3IobV9jdXJyZW50KSkpCiAgICAgICAgICAgICAgICAgc2hp
ZnRMaW5lVGVybWluYXRvcigpOwpAQCAtNjE4LDcgKzgyNCw4IEBAIHRlbXBsYXRlIDxib29sIHNo
b3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIExleGVyOjpwYXJzZUhleChkb3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnBhcnNlSGV4KGRvdWJs
ZSYgcmV0dXJuVmFsdWUpCiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBtb3N0IGhleGFkZWNpbWFs
IHZhbHVlcyBmaXQgaW50byA0IGJ5dGVzLgogICAgIHVpbnQzMl90IGhleFZhbHVlID0gMDsKQEAg
LTY1NywxNCArODY0LDE1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6cGFyc2VIZXgoZG91
YmwKICAgICByZXR1cm5WYWx1ZSA9IHBhcnNlSW50T3ZlcmZsb3cobV9idWZmZXI4LmRhdGEoKSwg
bV9idWZmZXI4LnNpemUoKSwgMTYpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBh
cnNlT2N0YWwoZG91YmxlJiByZXR1cm5WYWx1ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxX
QVlTX0lOTElORSBib29sIExleGVyPFQ+OjpwYXJzZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUp
CiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBtb3N0IG9jdGFsIHZhbHVlcyBmaXQgaW50byA0IGJ5
dGVzLgogICAgIHVpbnQzMl90IG9jdGFsVmFsdWUgPSAwOwogICAgIGludCBtYXhpbXVtRGlnaXRz
ID0gOTsKICAgICAvLyBUZW1wb3JhcnkgYnVmZmVyIGZvciB0aGUgZGlnaXRzLiBNYWtlcyBlYXNp
ZXIKICAgICAvLyB0byByZWNvbnN0cnVjdCB0aGUgaW5wdXQgY2hhcmFjdGVycyB3aGVuIG5lZWRl
ZC4KLSAgICBjaGFyIGRpZ2l0c1sxMF07CisgICAgTENoYXIgZGlnaXRzWzEwXTsKIAogICAgIGRv
IHsKICAgICAgICAgb2N0YWxWYWx1ZSA9IG9jdGFsVmFsdWUgKiA4ICsgKG1fY3VycmVudCAtICcw
Jyk7CkBAIC02OTMsNyArOTAxLDggQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU9j
dGFsKGRvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6
OnBhcnNlRGVjaW1hbChkb3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46OnBhcnNlRGVjaW1hbChkb3VibGUmIHJldHVy
blZhbHVlKQogewogICAgIC8vIE9wdGltaXphdGlvbjogbW9zdCBkZWNpbWFsIHZhbHVlcyBmaXQg
aW50byA0IGJ5dGVzLgogICAgIHVpbnQzMl90IGRlY2ltYWxWYWx1ZSA9IDA7CkBAIC03MDQsNyAr
OTEzLDcgQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZURlY2ltYWwoZAogICAgICAg
ICBpbnQgbWF4aW11bURpZ2l0cyA9IDk7CiAgICAgICAgIC8vIFRlbXBvcmFyeSBidWZmZXIgZm9y
IHRoZSBkaWdpdHMuIE1ha2VzIGVhc2llcgogICAgICAgICAvLyB0byByZWNvbnN0cnVjdCB0aGUg
aW5wdXQgY2hhcmFjdGVycyB3aGVuIG5lZWRlZC4KLSAgICAgICAgY2hhciBkaWdpdHNbMTBdOwor
ICAgICAgICBMQ2hhciBkaWdpdHNbMTBdOwogCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGRl
Y2ltYWxWYWx1ZSA9IGRlY2ltYWxWYWx1ZSAqIDEwICsgKG1fY3VycmVudCAtICcwJyk7CkBAIC03
MzAsNyArOTM5LDggQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZURlY2ltYWwoZAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpwYXJzZU51
bWJlckFmdGVyRGVjaW1hbFBvaW50KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lO
TElORSB2b2lkIExleGVyPFQ+OjpwYXJzZU51bWJlckFmdGVyRGVjaW1hbFBvaW50KCkKIHsKICAg
ICByZWNvcmQ4KCcuJyk7CiAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChtX2N1cnJlbnQpKSB7CkBA
IC03MzksNyArOTQ5LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpwYXJzZU51bWJlckFm
dAogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU51bWJlckFmdGVy
RXhwb25lbnRJbmRpY2F0b3IoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IGJvb2wgTGV4ZXI8VD46OnBhcnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigpCiB7CiAg
ICAgcmVjb3JkOCgnZScpOwogICAgIHNoaWZ0KCk7CkBAIC03NTgsNyArOTY5LDggQEAgQUxXQVlT
X0lOTElORSBib29sIExleGVyOjpwYXJzZU51bWJlckFmdAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlTXVsdGlsaW5lQ29tbWVudCgpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VNdWx0
aWxpbmVDb21tZW50KCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB3aGlsZSAoVU5M
SUtFTFkobV9jdXJyZW50ID09ICcqJykpIHsKQEAgLTc4MCwxNiArOTkyLDE4IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VNdWx0aWxpbmUKICAgICB9CiB9CiAKLWJvb2wgTGV4ZXI6
Om5leHRUb2tlbklzQ29sb24oKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+
OjpuZXh0VG9rZW5Jc0NvbG9uKCkKIHsKLSAgICBjb25zdCBVQ2hhciogY29kZSA9IG1fY29kZTsK
KyAgICBjb25zdCBUKiBjb2RlID0gbV9jb2RlOwogICAgIHdoaWxlIChjb2RlIDwgbV9jb2RlRW5k
ICYmIChpc1doaXRlU3BhY2UoKmNvZGUpIHx8IGlzTGluZVRlcm1pbmF0b3IoKmNvZGUpKSkKICAg
ICAgICAgY29kZSsrOwotICAgICAgICAKKyAgICAKICAgICByZXR1cm4gY29kZSA8IG1fY29kZUVu
ZCAmJiAqY29kZSA9PSAnOic7CiB9CiAKLUpTVG9rZW5UeXBlIExleGVyOjpsZXgoSlNUb2tlbkRh
dGEqIHRva2VuRGF0YSwgSlNUb2tlbkluZm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwg
Ym9vbCBzdHJpY3RNb2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitKU1Rva2VuVHlwZSBMZXhl
cjxUPjo6bGV4KEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZvKiB0b2tlbkluZm8s
IHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKIHsKICAgICBBU1NFUlQoIW1fZXJy
b3IpOwogICAgIEFTU0VSVChtX2J1ZmZlcjguaXNFbXB0eSgpKTsKQEAgLTEwOTUsNyArMTMwOSw3
IEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAvLyBOdWxsLXRlcm1pbmF0ZSBzdHJpbmcgZm9yIHN0cnRvZC4KICAgICAg
ICAgICAgICAgICBtX2J1ZmZlcjguYXBwZW5kKCdcMCcpOwotICAgICAgICAgICAgICAgIHRva2Vu
RGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6OnN0cnRvZChtX2J1ZmZlcjguZGF0YSgpLCAwKTsKKyAg
ICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gV1RGOjpzdHJ0b2QocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyICo+KG1fYnVmZmVyOC5kYXRhKCkpLCAwKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHRva2VuID0gTlVNQkVSOwogICAgICAgICB9CkBAIC0xMTc4LDcg
KzEzOTIsOCBAQCByZXR1cm5FcnJvcjoKICAgICByZXR1cm4gRVJST1JUT0s7CiB9CiAKLWJvb2wg
TGV4ZXI6OnNjYW5SZWdFeHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50
aWZpZXIqJiBmbGFncywgVUNoYXIgcGF0dGVyblByZWZpeCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorYm9vbCBMZXhlcjxUPjo6c2NhblJlZ0V4cChjb25zdCBJZGVudGlmaWVyKiYgcGF0dGVybiwg
Y29uc3QgSWRlbnRpZmllciomIGZsYWdzLCBVQ2hhciBwYXR0ZXJuUHJlZml4KQogewogICAgIEFT
U0VSVChtX2J1ZmZlcjE2LmlzRW1wdHkoKSk7CiAKQEAgLTEyMzksNyArMTQ1NCw4IEBAIGJvb2wg
TGV4ZXI6OnNjYW5SZWdFeHAoY29uc3QgSWRlbnRpZmllcioKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBMZXhlcjo6c2tpcFJlZ0V4cCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wg
TGV4ZXI8VD46OnNraXBSZWdFeHAoKQogewogICAgIGJvb2wgbGFzdFdhc0VzY2FwZSA9IGZhbHNl
OwogICAgIGJvb2wgaW5CcmFja2V0cyA9IGZhbHNlOwpAQCAtMTI3OSwxMSArMTQ5NSwxMiBAQCBi
b29sIExleGVyOjpza2lwUmVnRXhwKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMZXhl
cjo6Y2xlYXIoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpjbGVhcigp
CiB7CiAgICAgbV9hcmVuYSA9IDA7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbmV3QnVmZmVyODsKKyAg
ICBWZWN0b3I8TENoYXI+IG5ld0J1ZmZlcjg7CiAgICAgbV9idWZmZXI4LnN3YXAobmV3QnVmZmVy
OCk7CiAKICAgICBWZWN0b3I8VUNoYXI+IG5ld0J1ZmZlcjE2OwpAQCAtMTI5MiwxMSArMTUwOSwx
NiBAQCB2b2lkIExleGVyOjpjbGVhcigpCiAgICAgbV9pc1JlcGFyc2luZyA9IGZhbHNlOwogfQog
Ci1Tb3VyY2VDb2RlIExleGVyOjpzb3VyY2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJy
YWNlLCBpbnQgZmlyc3RMaW5lKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitTb3VyY2VDb2RlIExl
eGVyPFQ+Ojpzb3VyY2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmly
c3RMaW5lKQogewotICAgIEFTU0VSVChtX3NvdXJjZS0+cHJvdmlkZXIoKS0+ZGF0YSgpW29wZW5C
cmFjZV0gPT0gJ3snKTsKLSAgICBBU1NFUlQobV9zb3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtj
bG9zZUJyYWNlXSA9PSAnfScpOworICAgIEFTU0VSVCgoKm1fc291cmNlLT5wcm92aWRlcigpLT5k
YXRhKCkpW29wZW5CcmFjZV0gPT0gJ3snKTsKKyAgICBBU1NFUlQoKCptX3NvdXJjZS0+cHJvdmlk
ZXIoKS0+ZGF0YSgpKVtjbG9zZUJyYWNlXSA9PSAnfScpOwogICAgIHJldHVybiBTb3VyY2VDb2Rl
KG1fc291cmNlLT5wcm92aWRlcigpLCBvcGVuQnJhY2UsIGNsb3NlQnJhY2UgKyAxLCBmaXJzdExp
bmUpOwogfQogCisvLyBJbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgTGV4ZXIgd2UgbmVl
ZCBpbnN0ZWFkIG9mIHB1dHRpbmcgbW9zdCBvZiB0aGlzIGZpbGUgaW4gTGV4ZXIuaAordGVtcGxh
dGUgY2xhc3MgTGV4ZXI8TENoYXI+OwordGVtcGxhdGUgY2xhc3MgTGV4ZXI8VUNoYXI+OworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJ
KHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSwyMCBAQCBwcml2YXRlOgogICAgIGNvbnN0IEhh
c2hUYWJsZSBtX2tleXdvcmRUYWJsZTsKIH07CiAKKy8vIEZJWE1FOiBMZXhUeXBlIGFuZCBTaGlm
dFR5cGUgd2VyZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBMZXhlciBkZWZpbml0aW9uIGR1ZQorLy8g
dG8gYSBjbGFuZyBjb21waWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIHRoYXQg
ZG9lc24ndCBwcm9wZXJseQorLy8gaGFuZGxlIGZ1bGx5IHF1YWxpZmllZCBlbnVtcyBkZWZpbmVk
IHdpdGhpbiBhIHRlbXBsYXRlIGNsYXNzLgorZW51bSBMZXhUeXBlIHsKKyAgICBJZ25vcmVSZXNl
cnZlZFdvcmRzID0gMSwgCisgICAgRG9udEJ1aWxkU3RyaW5ncyA9IDIsCisgICAgRG9udEJ1aWxk
S2V5d29yZHMgPSA0Cit9OworCitlbnVtIFNoaWZ0VHlwZSB7IERvQm91bmRzQ2hlY2ssIERvTm90
Qm91bmRzQ2hlY2sgfTsKKwogY2xhc3MgUmVnRXhwOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IGNsYXNzIExleGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMZXhlcik7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC04MiwxMiArOTQsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRJc1JlcGFyc2luZygpIHsgbV9pc1JlcGFyc2luZyA9IHRydWU7IH0KICAgICBib29sIGlz
UmVwYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGFyc2luZzsgfQogCi0gICAgLy8gRnVu
Y3Rpb25zIGZvciB0aGUgcGFyc2VyIGl0c2VsZi4KLSAgICBlbnVtIExleFR5cGUgewotICAgICAg
ICBJZ25vcmVSZXNlcnZlZFdvcmRzID0gMSwgCi0gICAgICAgIERvbnRCdWlsZFN0cmluZ3MgPSAy
LAotICAgICAgICBEb250QnVpbGRLZXl3b3JkcyA9IDQKLSAgICB9OwogICAgIEpTVG9rZW5UeXBl
IGxleChKU1Rva2VuRGF0YSosIEpTVG9rZW5JbmZvKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9k
ZSk7CiAgICAgYm9vbCBuZXh0VG9rZW5Jc0NvbG9uKCk7CiAgICAgaW50IGxpbmVOdW1iZXIoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KQEAgLTEyNSwxMSArMTMxLDEyIEBAIHB1Ymxp
YzoKICAgICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNU
b2tlbkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwotCiAgICAgdm9pZCByZWNvcmQ4KGludCk7CisgICAg
dm9pZCBhcHBlbmQ4KGNvbnN0IFQqLCBzaXplX3QpOwogICAgIHZvaWQgcmVjb3JkMTYoaW50KTsK
LSAgICB2b2lkIHJlY29yZDE2KFVDaGFyKTsKKyAgICB2b2lkIHJlY29yZDE2KFQpOworICAgIHZv
aWQgYXBwZW5kMTYoY29uc3QgTENoYXIqLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kMTYoY29u
c3QgVUNoYXIqIHAsIHNpemVfdCBsZW5ndGgpIHsgbV9idWZmZXIxNi5hcHBlbmQocCwgbGVuZ3Ro
KTsgfQogCiAgICAgdm9pZCBjb3B5Q29kZVdpdGhvdXRCT01zKCk7CiAKQEAgLTEzOSwxOCArMTQ2
LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CiAKICAgICBV
U3RyaW5nIGdldEludmFsaWRDaGFyTWVzc2FnZSgpOwotICAgIEFMV0FZU19JTkxJTkUgY29uc3Qg
VUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IFQqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJy
ZW50T2Zmc2V0KCkgY29uc3Q7CiAKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIq
IG1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsK
ICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIG1ha2VJZGVudGlmaWVyKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKIAogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBsYXN0VG9rZW5XYXNSZXN0cktleXdvcmQoKSBjb25zdDsKIAotICAgIGVudW0gU2hpZnRU
eXBlIHsgRG9Cb3VuZHNDaGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9OwogICAgIHRlbXBsYXRlIDxp
bnQgc2hpZnRBbW91bnQsIFNoaWZ0VHlwZSBzaG91bGRCb3VuZHNDaGVjaz4gdm9pZCBpbnRlcm5h
bFNoaWZ0KCk7CiAgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxX
QVlTX0lOTElORSBKU1Rva2VuVHlwZSBwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqKTsKICAgICB0
ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBBTFdBWVNfSU5MSU5FIEpTVG9r
ZW5UeXBlIHBhcnNlSWRlbnRpZmllcihKU1Rva2VuRGF0YSosIHVuc2lnbmVkLCBib29sIHN0cmlj
dE1vZGUpOworICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkSWRlbnRpZmllcnM+IEpTVG9r
ZW5UeXBlIHBhcnNlSWRlbnRpZmllclNsb3dDYXNlKEpTVG9rZW5EYXRhKiwgdW5zaWduZWQsIGJv
b2wgc3RyaWN0TW9kZSk7CiAgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBB
TFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VTdHJpbmcoSlNUb2tlbkRhdGEqLCBib29sIHN0cmljdE1v
ZGUpOworICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gYm9vbCBwYXJzZVN0
cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSk7CiAgICAgQUxXQVlTX0lO
TElORSBib29sIHBhcnNlT2N0YWwoZG91YmxlJiByZXR1cm5WYWx1ZSk7CiAgICAgQUxXQVlTX0lO
TElORSBib29sIHBhcnNlRGVjaW1hbChkb3VibGUmIHJldHVyblZhbHVlKTsKQEAgLTE2MywxNiAr
MTcyLDE2IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGluZU51bWJlcjsKICAgICBpbnQgbV9sYXN0
TGluZU51bWJlcjsKIAotICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjg7CisgICAgVmVjdG9yPExD
aGFyPiBtX2J1ZmZlcjg7CiAgICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZlcjE2OwogICAgIGJvb2wg
bV90ZXJtaW5hdG9yOwogICAgIGJvb2wgbV9kZWxpbWl0ZWQ7IC8vIGVuY291bnRlcmVkIGRlbGlt
aXRlciBsaWtlICInIiBhbmQgIn0iIG9uIGxhc3QgcnVuCiAgICAgaW50IG1fbGFzdFRva2VuOwog
CiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7Ci0gICAgY29uc3QgVUNoYXIqIG1fY29k
ZTsKLSAgICBjb25zdCBVQ2hhciogbV9jb2RlU3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIG1fY29k
ZUVuZDsKKyAgICBjb25zdCBUKiBtX2NvZGU7CisgICAgY29uc3QgVCogbV9jb2RlU3RhcnQ7Cisg
ICAgY29uc3QgVCogbV9jb2RlRW5kOwogICAgIGJvb2wgbV9pc1JlcGFyc2luZzsKICAgICBib29s
IG1fYXRMaW5lU3RhcnQ7CiAgICAgYm9vbCBtX2Vycm9yOwpAQCAtMTg2LDM3ICsxOTUsNDkgQEAg
cHJpdmF0ZToKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIH07CiAKLUFMV0FZU19J
TkxJTkUgYm9vbCBMZXhlcjo6aXNXaGl0ZVNwYWNlKGludCBjaCkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojppc1doaXRlU3BhY2UoaW50IGNoKQog
ewogICAgIHJldHVybiBpc0FTQ0lJKGNoKSA/IChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBj
aCA9PSAweEIgfHwgY2ggPT0gMHhDKSA6IChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2Uo
Y2gpIHx8IGNoID09IDB4RkVGRik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6aXNM
aW5lVGVybWluYXRvcihpbnQgY2gpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJ
TkUgYm9vbCBMZXhlcjxUPjo6aXNMaW5lVGVybWluYXRvcihpbnQgY2gpCiB7CiAgICAgcmV0dXJu
IGNoID09ICdccicgfHwgY2ggPT0gJ1xuJyB8fCAoY2ggJiB+MSkgPT0gMHgyMDI4OwogfQogCi1p
bmxpbmUgdW5zaWduZWQgY2hhciBMZXhlcjo6Y29udmVydEhleChpbnQgYzEsIGludCBjMikKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIGNoYXIgTGV4ZXI8VD46OmNvbnZl
cnRIZXgoaW50IGMxLCBpbnQgYzIpCiB7CiAgICAgcmV0dXJuICh0b0FTQ0lJSGV4VmFsdWUoYzEp
IDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKGMyKTsKIH0KIAotaW5saW5lIFVDaGFyIExleGVyOjpj
b252ZXJ0VW5pY29kZShpbnQgYzEsIGludCBjMiwgaW50IGMzLCBpbnQgYzQpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK2lubGluZSBVQ2hhciBMZXhlcjxUPjo6Y29udmVydFVuaWNvZGUoaW50IGMx
LCBpbnQgYzIsIGludCBjMywgaW50IGM0KQogewogICAgIHJldHVybiAoY29udmVydEhleChjMSwg
YzIpIDw8IDgpIHwgY29udmVydEhleChjMywgYzQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGNvbnN0
IElkZW50aWZpZXIqIExleGVyOjptYWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyKiBMZXhlcjxUPjo6bWFrZUlkZW50aWZpZXIoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRl
bnRpZmllcihtX2dsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjxUPjo6
bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7
CiAgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGNoYXJh
Y3RlcnMsIGxlbmd0aCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6Omxl
eEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgSlNUb2tlbkluZm8qIHRv
a2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2RlKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFeHBlY3RJ
ZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZvKiB0b2tlbkluZm8s
IHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKIHsKICAgICBBU1NFUlQoKGxleFR5
cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSk7Ci0gICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gbV9j
b2RlOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSBzdGFydDsKLSAgICBjb25zdCBVQ2hhciogZW5k
ID0gbV9jb2RlRW5kOworICAgIGNvbnN0IFQqIHN0YXJ0ID0gbV9jb2RlOworICAgIGNvbnN0IFQq
IHB0ciA9IHN0YXJ0OworICAgIGNvbnN0IFQqIGVuZCA9IG1fY29kZUVuZDsKICAgICBpZiAocHRy
ID49IGVuZCkgewogICAgICAgICBBU1NFUlQocHRyID09IGVuZCk7CiAgICAgICAgIGdvdG8gc2xv
d0Nhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZp
c2lvbiA5ODk5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBQYXJzZXI6OlBhcnNlcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsCiAgICAgLCBtX2xhc3RJZGVudGlmaWVyKDApCiAgICAgLCBtX3NvdXJj
ZUVsZW1lbnRzKDApCiB7Ci0gICAgbV9sZXhlciA9IG5ldyBMZXhlcihnbG9iYWxEYXRhKTsKKyAg
ICBtX2xleGVyID0gbmV3IExleGVyPFVDaGFyPihnbG9iYWxEYXRhKTsKICAgICBtX2FyZW5hID0g
bV9nbG9iYWxEYXRhLT5wYXJzZXJBcmVuYTsKICAgICBtX2xleGVyLT5zZXRDb2RlKHNvdXJjZSwg
bV9hcmVuYSk7CiAKQEAgLTExNTgsOSArMTE1OCw5IEBAIHRlbXBsYXRlIDxib29sIGNvbXBsZXRl
LCBjbGFzcyBUcmVlQnVpbGQKICAgICBjYXNlIFNUUklORzogewogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwogICAgICAgICBpZiAoY29tcGxl
dGUgfHwgKHdhc0lkZW50ICYmICgqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5nZXQgfHwgKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+c2V0KSkpCi0g
ICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3Jk
cyk7CisgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihJZ25vcmVSZXNlcnZlZFdvcmRz
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXI6
Oklnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOwor
ICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRy
ZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CiAgICAgICAgIAogICAgICAgICBpZiAobWF0
Y2goQ09MT04pKSB7CiAgICAgICAgICAgICBuZXh0KCk7CkBAIC0xNDg5LDcgKzE0ODksNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIGNhc2UgRE9U
OiB7CiAgICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAg
ICAgIGludCBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAgICAgICBuZXh0
RXhwZWN0SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVy
OjpEb250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihJ
Z25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKICAg
ICAgICAgICAgIG1hdGNoT3JGYWlsKElERU5UKTsKICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
LmNyZWF0ZURvdEFjY2VzcyhtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBiYXNlLCBtX3Rva2Vu
Lm1fZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZCgp
KTsKICAgICAgICAgICAgIG5leHQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuaAkocmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDcgQEAgcHJpdmF0ZToKICAg
ICBtdXRhYmxlIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIGNvbnN0IFNv
dXJjZUNvZGUqIG1fc291cmNlOwogICAgIFBhcnNlckFyZW5hKiBtX2FyZW5hOwotICAgIExleGVy
KiBtX2xleGVyOworICAgIExleGVyPFVDaGFyPiogbV9sZXhlcjsKICAgICAKICAgICBTdGFja0Jv
dW5kcyBtX3N0YWNrOwogICAgIGJvb2wgbV9lcnJvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAg
fQogCisgICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgbWFrZUlkZW50aWZp
ZXIoSlNHbG9iYWxEYXRhKiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
OwogICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVy
KEpTR2xvYmFsRGF0YSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsK
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbWFrZU51bWVyaWNJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSosIGRvdWJsZSBudW1iZXIpOwogCkBAIC02NSw2ICs2NiwyOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgRml4ZWRBcnJheTxJZGVudGlmaWVyKiwgTWF4aW11bUNhY2hhYmxlQ2hhcmFj
dGVyPiBtX3JlY2VudElkZW50aWZpZXJzOwogICAgIH07CiAKKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
KyAgICB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJh
Y3RlcikgeworICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9i
YWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2lkZW50
aWZpZXJzLmxhc3QoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAg
ICAgICAgICAgIGlmIChJZGVudGlmaWVyKiBpZGVudCA9IG1fc2hvcnRJZGVudGlmaWVyc1tjaGFy
YWN0ZXJzWzBdXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKmlkZW50OworICAgICAgICAgICAg
bV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgpKTsKKyAgICAgICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9
ICZtX2lkZW50aWZpZXJzLmxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJz
Lmxhc3QoKTsKKyAgICAgICAgfQorICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9IG1fcmVjZW50
SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07CisgICAgICAgIGlmIChpZGVudCAmJiBJZGVudGlm
aWVyOjplcXVhbChpZGVudC0+aW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAg
ICAgcmV0dXJuICppZGVudDsKKyAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmll
cihnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgbV9yZWNlbnRJZGVu
dGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9ICZtX2lkZW50aWZpZXJzLmxhc3QoKTsKKyAgICAgICAg
cmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOworICAgIH0KKyAgICAKKwogICAgIEFMV0FZU19J
TkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hh
YmxlQ2hhcmFjdGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZUNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZUNvZGUuaAkocmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBpbnQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExp
bmU7IH0KICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENo
YXI7IH0KICAgICAgICAgaW50IGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ2hhcjsg
fQotICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXIt
PmRhdGEoKSArIG1fc3RhcnRDaGFyOyB9CisgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9wcm92aWRlci0+ZGF0YSgpLT5jaGFyYWN0ZXJzMTYoKSArIG1fc3RhcnRD
aGFyOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2VuZENoYXIgLSBt
X3N0YXJ0Q2hhcjsgfQogICAgICAgICAKLSAgICAgICAgU291cmNlQ29kZSBzdWJFeHByZXNzaW9u
KGludCwgaW50LCBpbnQpOworICAgICAgICBTb3VyY2VDb2RlIHN1YkV4cHJlc3Npb24odW5zaWdu
ZWQsIHVuc2lnbmVkLCBpbnQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwpAQCAtODgsMTEgKzg4LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHsKICAgICAgICAgcmV0dXJuIFNvdXJjZUNvZGUoVVN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpjcmVhdGUoc291cmNlLCB1cmwpLCBmaXJzdExpbmUpOwogICAgIH0KLSAgICAKLSAgICBpbmxp
bmUgU291cmNlQ29kZSBTb3VyY2VDb2RlOjpzdWJFeHByZXNzaW9uKGludCBvcGVuQnJhY2UsIGlu
dCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQorCisgICAgaW5saW5lIFNvdXJjZUNvZGUgU291
cmNlQ29kZTo6c3ViRXhwcmVzc2lvbih1bnNpZ25lZCBvcGVuQnJhY2UsIHVuc2lnbmVkIGNsb3Nl
QnJhY2UsIGludCBmaXJzdExpbmUpCiAgICAgewotICAgICAgICBBU1NFUlQocHJvdmlkZXIoKS0+
ZGF0YSgpW29wZW5CcmFjZV0gPT0gJ3snKTsKLSAgICAgICAgQVNTRVJUKHByb3ZpZGVyKCktPmRh
dGEoKVtjbG9zZUJyYWNlXSA9PSAnfScpOworICAgICAgICBBU1NFUlQoKCpwcm92aWRlcigpLT5k
YXRhKCkpW29wZW5CcmFjZV0gPT0gJ3snKTsKKyAgICAgICAgQVNTRVJUKCgqcHJvdmlkZXIoKS0+
ZGF0YSgpKVtjbG9zZUJyYWNlXSA9PSAnfScpOwogICAgICAgICByZXR1cm4gU291cmNlQ29kZShw
cm92aWRlcigpLCBvcGVuQnJhY2UsIGNsb3NlQnJhY2UgKyAxLCBmaXJzdExpbmUpOwogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIu
aAkocmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgVUNoYXIqIGRh
dGEoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nSW1wbCogZGF0YSgp
IGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBpbnQgbGVuZ3RoKCkgY29uc3QgPSAwOwogICAg
ICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJsKCkgeyByZXR1cm4gbV91cmw7IH0KQEAg
LTg4LDcgKzg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3NvdXJjZS5zdWJzdHJpbmdTaGFyaW5nSW1wbChzdGFydCwgZW5kIC0gc3RhcnQpOwog
ICAgICAgICB9Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CisgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZS5pbXBsKCk7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLmxlbmd0aCgpOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJKHJldmlzaW9uIDk4
OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCisjaWZuZGVmIFNvdXJjZVByb3ZpZGVyQ2FjaGVfaAorI2Rl
ZmluZSBTb3VyY2VQcm92aWRlckNhY2hlX2gKKwogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNDYsMyArNDksNSBAQCBwcml2YXRlOgog
fTsKIAogfQorCisjZW5kaWYgLy8gU291cmNlUHJvdmlkZXJDYWNoZV9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gOTg5OTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE1LDggKzExNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9v
bCBDcmVhdGVzQVNUID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFy
aWFibGVJbmZvID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ2FuVXNlRnVuY3Rpb25D
YWNoZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZEtleXdvcmRz
ID0gTGV4ZXI6OkRvbnRCdWlsZEtleXdvcmRzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBE
b250QnVpbGRTdHJpbmdzID0gTGV4ZXI6OkRvbnRCdWlsZFN0cmluZ3M7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIERvbnRCdWlsZEtleXdvcmRzID0gRG9udEJ1aWxkS2V5d29yZHM7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZFN0cmluZ3MgPSBEb250QnVpbGRTdHJpbmdz
OwogCiAgICAgaW50IGNyZWF0ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gMTsgfQogICAgIEV4
cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIENhbGxFeHByOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5ODk5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0
U2VtaWNvbG9uSWZOZWVkCiAKICAgICBmb3IgKHNpemVfdCBpID0gZnVuY3Rpb25Cb2R5Lmxlbmd0
aCgpIC0gMjsgaSA+IDA7IC0taSkgewogICAgICAgICBVQ2hhciBjaCA9IGZ1bmN0aW9uQm9keVtp
XTsKLSAgICAgICAgaWYgKCFMZXhlcjo6aXNXaGl0ZVNwYWNlKGNoKSAmJiAhTGV4ZXI6OmlzTGlu
ZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgIGlmICghTGV4ZXI8VUNoYXI+Ojppc1doaXRlU3Bh
Y2UoY2gpICYmICFMZXhlcjxVQ2hhcj46OmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CiAgICAgICAg
ICAgICBpZiAoY2ggIT0gJzsnICYmIGNoICE9ICd9JykKICAgICAgICAgICAgICAgICBmdW5jdGlv
bkJvZHkgPSBtYWtlVVN0cmluZyhmdW5jdGlvbkJvZHkuc3Vic3RyaW5nU2hhcmluZ0ltcGwoMCwg
aSArIDEpLCAiOyIsIGZ1bmN0aW9uQm9keS5zdWJzdHJpbmdTaGFyaW5nSW1wbChpICsgMSwgZnVu
Y3Rpb25Cb2R5Lmxlbmd0aCgpIC0gKGkgKyAxKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDk4OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsMzMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBJZGVudGlmaWVyOjphZGQoRQogICAgIHJldHVybiBhZGQoJmV4ZWMtPmdsb2JhbERhdGEo
KSwgYyk7CiB9CiAKK3N0cnVjdCBMQ2hhckJ1ZmZlciB7CisgICAgY29uc3QgTENoYXIqIHM7Cisg
ICAgdW5zaWduZWQgaW50IGxlbmd0aDsKK307CisKK3N0cnVjdCBJZGVudGlmaWVyTENoYXJCdWZm
ZXJUcmFuc2xhdG9yIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBMQ2hhckJ1ZmZl
ciYgYnVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2g8
TENoYXI+KGJ1Zi5zLCBidWYubGVuZ3RoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IExDaGFyQnVmZmVyJiBidWYpCisgICAgeworICAgICAg
ICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoc3RyLCBidWYucywgYnVmLmxlbmd0aCk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29u
c3QgTENoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIExDaGFy
KiBkOworICAgICAgICBTdHJpbmdJbXBsKiByID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFs
aXplZChidWYubGVuZ3RoLCBkKS5sZWFrUmVmKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgZFtpXSA9IGJ1Zi5zW2ldOwor
ICAgICAgICByLT5zZXRIYXNoKGhhc2gpOworICAgICAgICBsb2NhdGlvbiA9IHI7IAorICAgIH0K
K307CisKIHN0cnVjdCBVQ2hhckJ1ZmZlciB7CiAgICAgY29uc3QgVUNoYXIqIHM7CiAgICAgdW5z
aWduZWQgaW50IGxlbmd0aDsKQEAgLTE5Myw2ICsyMjAsMjMgQEAgdWludDMyX3QgSWRlbnRpZmll
cjo6dG9VSW50MzIoY29uc3QgVVN0cgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBj
b25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAg
ICAgICAgTENoYXIgYyA9IHNbMF07CisgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3Rl
clN0cmluZykKKyAgICAgICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CisgICAgfQorICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICBMQ2hh
ckJ1ZmZlciBidWYgPSB7cywgbGVuZ3RofTsgCisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwq
Pjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJs
ZS0+YWRkPExDaGFyQnVmZmVyLCBJZGVudGlmaWVyTENoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYp
OworICAgIAorICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3
ZSBuZWVkIHRvIGFkb3B0IGl0LgorICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxz
IHVzIGlmIHRoYXQgaXMgc28uCisgICAgcmV0dXJuIGFkZFJlc3VsdC5zZWNvbmQgPyBhZG9wdFJl
ZigqYWRkUmVzdWx0LmZpcnN0KSA6ICphZGRSZXN1bHQuZmlyc3Q7Cit9CisKIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CkBAIC0y
MTAsNiArMjU0LDExIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEoK
ICAgICByZXR1cm4gYWRkUmVzdWx0LnNlY29uZCA/IGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3Qp
IDogKmFkZFJlc3VsdC5maXJzdDsKIH0KIAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlm
aWVyOjphZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkKK3sK
KyAgICByZXR1cm4gYWRkKCZleGVjLT5nbG9iYWxEYXRhKCksIHMsIGxlbmd0aCk7Cit9CisKIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIGFkZCgmZXhlYy0+Z2xvYmFs
RGF0YSgpLCBzLCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuaAkocmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSWRlbnRpZmllcigpIHsgfQogCiAgICAgICAgIElkZW50
aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChleGVj
LCBzKSkgeyB9IC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KKyAgICAg
ICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3Ro
KSA6IG1fc3RyaW5nKGFkZChleGVjLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRlbnRpZmll
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5n
KGFkZChleGVjLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUq
IGV4ZWMsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQoZXhlYywgcmVwKSkgeyB9IAog
ICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykgOiBt
X3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IH0KIAogICAgICAgICBJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykgOiBtX3N0cmluZyhhZGQoZ2xv
YmFsRGF0YSwgcykpIHsgfSAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0ZXJhbHMu
CisgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBMQ2hh
ciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcywgbGVuZ3RoKSkg
eyB9CiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBV
Q2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcywgbGVuZ3Ro
KSkgeyB9CiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJp
bmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHJlcCkpIHsgfSAKICAgICAg
ICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMp
IDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHMuaW1wbCgpKSkgeyB9CkBAIC03Nyw2ICs3OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsKICAgICAgICAgc3RhdGljIGlubGluZSBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqYSwgY29uc3QgY2hhcipiKSB7IHJldHVybiBJZGVudGlm
aWVyOjplcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9OworICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJ
bXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJldHVy
biA6OmVxdWFsKGEsIGIpOyB9CiAKQEAgLTg5LDcgKzkyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50
aWZpZXImIGIpIHsgcmV0dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcuaW1wbCgp
OyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0
IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0KIAorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgY29uc3Qg
TENoYXIqLCBpbnQgbGVuZ3RoKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gYWRkKEV4ZWNTdGF0ZSosIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBMQ2hh
ciosIGludCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBh
ZGQoSlNHbG9iYWxEYXRhKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKIAogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJ
bXBsKiByKQpAQCAtMTUyLDcgKzE1NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAg
ICAgIHJldHVybiBXVEY6OmVxdWFsKHIsIHMpOwogICAgIH0KLSAgICAKKworICAgIGlubGluZSBi
b29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBz
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChyLCBz
LCBsZW5ndGgpOworICAgIH0KKwogICAgIGlubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFsKGNv
bnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAg
ewogICAgICAgICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcAkocmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcg
Kzg1LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogICAgICAg
ICBpZiAoYyA9PSAnJScpIHsKICAgICAgICAgICAgIGludCBjaGFyTGVuID0gMDsKICAgICAgICAg
ICAgIGlmIChrIDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0KHBbMV0pICYmIGlzQVNDSUlI
ZXhEaWdpdChwWzJdKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgYjAgPSBMZXhlcjo6
Y29udmVydEhleChwWzFdLCBwWzJdKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyIGIwID0g
TGV4ZXI8VUNoYXI+Ojpjb252ZXJ0SGV4KHBbMV0sIHBbMl0pOwogICAgICAgICAgICAgICAgIGNv
bnN0IGludCBzZXF1ZW5jZUxlbiA9IFVURjhTZXF1ZW5jZUxlbmd0aChiMCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHNlcXVlbmNlTGVuICE9IDAgJiYgayA8PSBsZW4gLSBzZXF1ZW5jZUxlbiAqIDMp
IHsKICAgICAgICAgICAgICAgICAgICAgY2hhckxlbiA9IHNlcXVlbmNlTGVuICogMzsKQEAgLTk0
LDcgKzk0LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNlcXVlbmNlTGVuOyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBxID0gcCArIGkgKiAzOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHFbMF0gPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChx
WzFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocVsyXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VxdWVuY2VbaV0gPSBMZXhlcjo6Y29udmVydEhleChxWzFdLCBxWzJdKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZVtpXSA9IExleGVyPFVDaGFyPjo6Y29udmVydEhl
eChxWzFdLCBxWzJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVj
U3RhdGUqIGV4ZWMsIGMKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdp
dChwWzJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocFszXSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIGlzQVNDSUlIZXhEaWdpdChwWzRdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocFs1XSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgY2hhckxlbiA9IDY7Ci0gICAgICAgICAgICAgICAgICAgIHUgPSBM
ZXhlcjo6Y29udmVydFVuaWNvZGUocFsyXSwgcFszXSwgcFs0XSwgcFs1XSk7CisgICAgICAgICAg
ICAgICAgICAgIHUgPSBMZXhlcjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKHBbMl0sIHBbM10sIHBb
NF0sIHBbNV0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChjaGFyTGVuICYmICh1ID09IDAgfHwgdSA+PSAxMjggfHwgIXN0cmNocihkb05vdFVuZXNj
YXBlLCB1KSkpIHsKQEAgLTE3MywxMiArMTczLDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VEaWdpdCh1
bnNpZ25lZCBzaG9ydCBjLCAKICAgICByZXR1cm4gZGlnaXQ7CiB9CiAKLWRvdWJsZSBwYXJzZUlu
dE92ZXJmbG93KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGludCByYWRpeCkKK2RvdWJsZSBw
YXJzZUludE92ZXJmbG93KGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpCiB7
CiAgICAgZG91YmxlIG51bWJlciA9IDAuMDsKICAgICBkb3VibGUgcmFkaXhNdWx0aXBsaWVyID0g
MS4wOwogCi0gICAgZm9yIChjb25zdCBjaGFyKiBwID0gcyArIGxlbmd0aCAtIDE7IHAgPj0gczsg
cC0tKSB7CisgICAgZm9yIChjb25zdCBMQ2hhciogcCA9IHMgKyBsZW5ndGggLSAxOyBwID49IHM7
IHAtLSkgewogICAgICAgICBpZiAocmFkaXhNdWx0aXBsaWVyID09IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewogICAgICAgICAgICAgaWYgKCpwICE9ICcwJykgewog
ICAgICAgICAgICAgICAgIG51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKTsKQEAgLTU3OCwxMiArNTc4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY1UKICAgICAgICAgVUNoYXIgdTsKICAgICAgICAgaWYgKGNbMF0gPT0gJyUn
ICYmIGsgPD0gbGVuIC0gNiAmJiBjWzFdID09ICd1JykgewogICAgICAgICAgICAgaWYgKGlzQVND
SUlIZXhEaWdpdChjWzJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY1szXSkgJiYgaXNBU0NJSUhleERp
Z2l0KGNbNF0pICYmIGlzQVNDSUlIZXhEaWdpdChjWzVdKSkgewotICAgICAgICAgICAgICAgIHUg
PSBMZXhlcjo6Y29udmVydFVuaWNvZGUoY1syXSwgY1szXSwgY1s0XSwgY1s1XSk7CisgICAgICAg
ICAgICAgICAgdSA9IExleGVyPFVDaGFyPjo6Y29udmVydFVuaWNvZGUoY1syXSwgY1szXSwgY1s0
XSwgY1s1XSk7CiAgICAgICAgICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgICAgICAgIGsgKz0g
NTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjWzBdID09ICclJyAmJiBrIDw9
IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0KGNbMV0pICYmIGlzQVNDSUlIZXhEaWdpdChjWzJd
KSkgewotICAgICAgICAgICAgdSA9IFVDaGFyKExleGVyOjpjb252ZXJ0SGV4KGNbMV0sIGNbMl0p
KTsKKyAgICAgICAgICAgIHUgPSBVQ2hhcihMZXhlcjxVQ2hhcj46OmNvbnZlcnRIZXgoY1sxXSwg
Y1syXSkpOwogICAgICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgICAgayArPSAyOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqKTsKIAogICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQgPSA5MDA3MTk5
MjU0NzQwOTkyLjA7Ci0gICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hhciosIGlu
dCBsZW5ndGgsIGludCByYWRpeCk7CisgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3Qg
TENoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOworICAgIEFMV0FZU19JTkxJTkUgZG91Ymxl
IHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hhciogcywgaW50IGxlbmd0aCwgaW50IHJhZGl4KSB7
IHJldHVybiBwYXJzZUludE92ZXJmbG93KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihz
KSwgbGVuZ3RoLCByYWRpeCk7IH0KICAgICBkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBV
Q2hhciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CiAgICAgYm9vbCBpc1N0cldoaXRlU3BhY2Uo
VUNoYXIpOwogICAgIGRvdWJsZSBqc1RvTnVtYmVyKGNvbnN0IFVTdHJpbmcmIHMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJl
dmlzaW9uIDk4OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNyBAQCB0ZW1wbGF0ZSA8TGl0
ZXJhbFBhcnNlcjo6UGFyc2VyTW9kZSBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFRva0Vycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKEpTQzo6TGV4ZXI6
OmNvbnZlcnRVbmljb2RlKG1fcHRyWzFdLCBtX3B0clsyXSwgbV9wdHJbM10sIG1fcHRyWzRdKSk7
CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKEpTQzo6TGV4ZXI8VUNoYXI+Ojpj
b252ZXJ0VW5pY29kZShtX3B0clsxXSwgbV9wdHJbMl0sIG1fcHRyWzNdLCBtX3B0cls0XSkpOwog
ICAgICAgICAgICAgICAgICAgICBtX3B0ciArPSA1OwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogLy8gTGFuZGluZyB0aGUgZmlsZSBtb3ZlcyBpbiBv
bmUgcGF0Y2gsIHdpbGwgZm9sbG93IG9uIHdpdGggcGF0Y2hlcyB0byBjaGFuZ2UgdGhlIG5hbWVz
cGFjZXMuCiBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0
b3I7Ci1zdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOworc3RydWN0IElkZW50
aWZpZXJMQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiBzdHJ1Y3QgSWRlbnRpZmllclVDaGFyQnVmZmVy
VHJhbnNsYXRvcjsKIH0KIApAQCAtNjMsNyArNjMsNyBAQCB0eXBlZGVmIGJvb2wgKCpJc1doaXRl
U3BhY2VGdW5jdGlvblB0cikoCiBjbGFzcyBTdHJpbmdJbXBsIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdHJpbmdJbXBsKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgZnJpZW5k
IHN0cnVjdCBKU0M6OklkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcjsKLSAgICBmcmllbmQgc3Ry
dWN0IEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOworICAgIGZyaWVuZCBzdHJ1
Y3QgSlNDOjpJZGVudGlmaWVyTENoYXJCdWZmZXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1
Y3QgSlNDOjpJZGVudGlmaWVyVUNoYXJCdWZmZXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1
Y3QgV1RGOjpDU3RyaW5nVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFu
ZENoYXJhY3RlcnNUcmFuc2xhdG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBA
QAorMjAxMS0xMS0wMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBUb3dhcmRzIDggQml0IFN0cmluZ3M6IFRlbXBsYXRpemUgSlNDOjpMZXhlciBjbGFzcyBi
eSBjaGFyYWN0ZXIgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzEzMzEKKworICAgICAgICBDaGFuZ2VkIHRoZSBTb3VyY2VQcm92aWRlcjo6ZGF0
YSgpIHZpcnR1YWwgbWV0aG9kIHRvIHJldHVybiBhCisgICAgICAgIFN0cmluZ0ltcGwqIGluc3Rl
YWQgb2YgYSBVQ2hhciouCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIC0gcmVmYWN0b3JlZCBTb3VyY2VQcm92aWRlciBjbGFzcyBh
bmQgc3ViLWNsYXNzZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlk
ZXI6OmRhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZhaWxl
ZFRvUGFyc2VTb3VyY2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3Zp
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6ZGF0YSk6CisK
IDIwMTEtMTEtMDEgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIEluZGV4ZWREQjogZ2V0IEV2ZW50UXVldWUgZnJvbSBTY3JpcHRFeGVjdXRpb25Db250ZXh0
IGluc3RlYWQgb2YgRG9jdW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0Nh
Y2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gOTg5OTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgfQogCiAgICAgICAgIEpTQzo6VVN0cmluZyBnZXRSYW5nZShpbnQgc3RhcnQsIGlu
dCBlbmQpIGNvbnN0IHsgcmV0dXJuIEpTQzo6VVN0cmluZyhtX2NhY2hlZFNjcmlwdC0+c2NyaXB0
KCkuY2hhcmFjdGVycygpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQotICAgICAgICBjb25zdCBV
Q2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5jaGFy
YWN0ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5pbXBsKCk7IH0KICAgICAgICAgaW50IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5sZW5ndGgoKTsgfQog
ICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2Ny
aXB0LT5zY3JpcHQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI1LDcgKzIyNSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2UK
IAogICAgIFNjcmlwdERlYnVnTGlzdGVuZXI6OlNjcmlwdCBzY3JpcHQ7CiAgICAgc2NyaXB0LnVy
bCA9IHVzdHJpbmdUb1N0cmluZyhzb3VyY2VQcm92aWRlci0+dXJsKCkpOwotICAgIHNjcmlwdC5z
b3VyY2UgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpVU3RyaW5nKHNvdXJjZVByb3ZpZGVyLT5kYXRh
KCksIHNvdXJjZVByb3ZpZGVyLT5sZW5ndGgoKSkpOworICAgIHNjcmlwdC5zb3VyY2UgPSB1c3Ry
aW5nVG9TdHJpbmcoSlNDOjpVU3RyaW5nKHNvdXJjZVByb3ZpZGVyLT5kYXRhKCktPmNoYXJhY3Rl
cnMoKSwgc291cmNlUHJvdmlkZXItPmxlbmd0aCgpKSk7CiAgICAgc2NyaXB0LnN0YXJ0TGluZSA9
IHNvdXJjZVByb3ZpZGVyLT5zdGFydFBvc2l0aW9uKCkubV9saW5lLnplcm9CYXNlZEludCgpOwog
ICAgIHNjcmlwdC5zdGFydENvbHVtbiA9IHNvdXJjZVByb3ZpZGVyLT5zdGFydFBvc2l0aW9uKCku
bV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7CiAgICAgc2NyaXB0LmlzQ29udGVudFNjcmlwdCA9IGlz
Q29udGVudFNjcmlwdDsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpkaXNwYXRjaERpZFBhcnNlCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZhaWxl
ZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgU291cmNlUHJvdmlk
ZXIqIHNvdXJjZVByb3ZpZGVyLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkKIHsKICAgICBTdHJpbmcgdXJsID0gdXN0cmluZ1RvU3RyaW5nKHNvdXJjZVByb3ZpZGVy
LT51cmwoKSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpVU3RyaW5n
KHNvdXJjZVByb3ZpZGVyLT5kYXRhKCksIHNvdXJjZVByb3ZpZGVyLT5sZW5ndGgoKSkpOworICAg
IFN0cmluZyBkYXRhID0gdXN0cmluZ1RvU3RyaW5nKEpTQzo6VVN0cmluZyhzb3VyY2VQcm92aWRl
ci0+ZGF0YSgpLT5jaGFyYWN0ZXJzKCksIHNvdXJjZVByb3ZpZGVyLT5sZW5ndGgoKSkpOwogICAg
IGludCBmaXJzdExpbmUgPSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigpLm1fbGluZS5v
bmVCYXNlZEludCgpOwogCiAgICAgVmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92
aWRlci5oCShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0
cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb247IH0KICAgICAgICAgSlNDOjpV
U3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyByZXR1cm4gSlNDOjpV
U3RyaW5nKG1fc291cmNlLmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBlbmQgLSBzdGFydCk7IH0KLSAg
ICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0
ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlLmltcGwoKTsgfQogICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UubGVuZ3RoKCk7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZTsgfQogCg==
</data>
<flag name="review"
          id="111558"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="111571"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113408</attachid>
            <date>2011-11-02 17:44:56 -0700</date>
            <delta_ts>2011-11-03 11:01:37 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>71331-2.patch</filename>
            <type>text/plain</type>
            <size>66018</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkwMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBA
CisyMDExLTExLTAxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5
IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZSB0aGUgTGV4ZXIgY2xhc3MgdG8gYmUgYSB0
ZW1wbGF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgIHR5cGUgb2YgdGhl
IHNvdXJjZS4gIEluIHRoZSBwcm9jZXNzIHVwZGF0ZWQgdGhlIHBhcnNlSWRlbnRpZmllcigpCisg
ICAgICAgIGFuZCBwYXJzZVN0cmluZygpIG1ldGhvZHMgdG8gY3JlYXRlIDggYml0IHN0cmluZ3Mg
d2hlcmUgcG9zc2libGUuCisgICAgICAgIEFsc28gYWRkZWQgc29tZSBoZWxwZXIgbWV0aG9kcyBm
b3IgYWNjdW11bGF0aW5nIHRlbXBvcmFyeSBzdHJpbmcKKyAgICAgICAgZGF0YSBpbiB0aGUgOCBh
bmQgMTYgYml0IHZlY3RvcnMuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFVwZGF0ZWQgdGhlIEtleXdvcmRMb29rdXAg
Z2VuZXJhdG9yIHRvIGNyZWF0ZSBjb2RlIHRvIG1hdGNoIGtleXdvcmRzCisgICAgICAgIGZvciBi
b3RoIDggYW5kIDE2IGJpdCBzb3VyY2Ugc3RyaW5ncy4KKworICAgICAgICBEdWUgdG8gYSBjb21w
aWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIG1vdmVkIGVudW0KKyAgICAgICAg
ZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBMZXhlciBjbGFzcyBkZWNsYXJhdGlvbi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAoSlNDOjphcHBlbmRT
b3VyY2VUb0Vycm9yKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlND
Ojo6OkxleGVyKToKKyAgICAgICAgKEpTQzo6Ojp+TGV4ZXIpOgorICAgICAgICAoSlNDOjo6Omdl
dEludmFsaWRDaGFyTWVzc2FnZSk6CisgICAgICAgIChKU0M6Ojo6Y3VycmVudENoYXJhY3Rlcik6
CisgICAgICAgIChKU0M6Ojo6Y3VycmVudE9mZnNldCk6CisgICAgICAgIChKU0M6Ojo6c2V0Q29k
ZSk6CisgICAgICAgIChKU0M6Ojo6aW50ZXJuYWxTaGlmdCk6CisgICAgICAgIChKU0M6Ojo6c2hp
ZnQpOgorICAgICAgICAoSlNDOjo6OnBlZWspOgorICAgICAgICAoSlNDOjo6OmdldFVuaWNvZGVD
aGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjo6OnNoaWZ0TGluZVRlcm1pbmF0b3IpOgorICAgICAg
ICAoSlNDOjo6Omxhc3RUb2tlbldhc1Jlc3RyS2V5d29yZCk6CisgICAgICAgIChKU0M6Ojo6cmVj
b3JkOCk6CisgICAgICAgIChKU0M6Ojo6YXBwZW5kOCk6CisgICAgICAgIChKU0M6Ojo6YXBwZW5k
MTYpOgorICAgICAgICAoSlNDOjo6OnJlY29yZDE2KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUlk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRpZmllclNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZVN0cmluZyk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpbmdT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VIZXgpOgorICAgICAgICAoSlNDOjo6OnBh
cnNlT2N0YWwpOgorICAgICAgICAoSlNDOjo6OnBhcnNlRGVjaW1hbCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VO
dW1iZXJBZnRlckV4cG9uZW50SW5kaWNhdG9yKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU11bHRp
bGluZUNvbW1lbnQpOgorICAgICAgICAoSlNDOjo6Om5leHRUb2tlbklzQ29sb24pOgorICAgICAg
ICAoSlNDOjo6OmxleCk6CisgICAgICAgIChKU0M6Ojo6c2NhblJlZ0V4cCk6CisgICAgICAgIChK
U0M6Ojo6c2tpcFJlZ0V4cCk6CisgICAgICAgIChKU0M6Ojo6Y2xlYXIpOgorICAgICAgICAoSlND
Ojo6OnNvdXJjZUNvZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5oOgorICAgICAgICAoSlND
OjpMZXhlcjo6YXBwZW5kMTYpOgorICAgICAgICAoSlNDOjo6OmlzV2hpdGVTcGFjZSk6CisgICAg
ICAgIChKU0M6Ojo6aXNMaW5lVGVybWluYXRvcik6CisgICAgICAgIChKU0M6Ojo6Y29udmVydEhl
eCk6CisgICAgICAgIChKU0M6Ojo6Y29udmVydFVuaWNvZGUpOgorICAgICAgICAoSlNDOjo6Om1h
a2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6OjpsZXhFeHBlY3RJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpQYXJzZXIp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5o
OgorICAgICAgICAqIHBhcnNlci9QYXJzZXJBcmVuYS5oOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZS5o
OgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlOjpkYXRhKToKKyAgICAgICAgKEpTQzo6U291cmNl
Q29kZTo6c3ViRXhwcmVzc2lvbik6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6
CisgICAgICAgIChKU0M6OlVTdHJpbmdTb3VyY2VQcm92aWRlcjo6ZGF0YSk6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hl
Y2tlci5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjppbnNlcnRTZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9JZGVu
dGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckxDaGFyQnVmZmVyVHJhbnNsYXRv
cjo6aGFzaCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJMQ2hhckJ1ZmZlclRyYW5zbGF0b3I6
OmVxdWFsKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckxDaGFyQnVmZmVyVHJhbnNsYXRvcjo6
dHJhbnNsYXRlKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKiBy
dW50aW1lL0lkZW50aWZpZXIuaDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6SWRlbnRpZmll
cik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmVxdWFsKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6cGFyc2VJbnRPdmVyZmxvdyk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNV
bmVzY2FwZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oOgor
ICAgICAgICAoSlNDOjpwYXJzZUludE92ZXJmbG93KToKKyAgICAgICAgKiBydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4U3Ry
aW5nKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisKIDIwMTEtMTEtMDEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgaW5saW5pbmcgYnJl
YWtzIGZ1bmN0aW9uLmFyZ3VtZW50cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdv
cmRMb29rdXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBUcmllOgogICAgICAgICBzZWxmLmtleXMgPSBbKHRyaWUu
cHJlZml4LCB0cmllKSBmb3IgdHJpZSBpbiBzb3J0ZWQoc2VsZi5rZXlzLnZhbHVlcygpLCBrZXk9
b3BlcmF0b3IuYXR0cmdldHRlcignd2VpZ2h0JyksIHJldmVyc2U9VHJ1ZSldCiAgICAgICAgIHNl
bGYud2VpZ2h0ID0gd2VpZ2h0CiAKLSAgICBkZWYgcHJpbnRTdWJUcmVlQXNDKHNlbGYsIGluZGVu
dCk6CisgICAgZGVmIHByaW50U3ViVHJlZUFzQyhzZWxmLCB0eXBlTmFtZSwgaW5kZW50KToKICAg
ICAgICAgc3RyID0gbWFrZVBhZGRpbmcoaW5kZW50KQogCiAgICAgICAgIGlmIHNlbGYudmFsdWUg
IT0gTm9uZToKQEAgLTE0NiwxMyArMTQ2LDEzIEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICAgICAg
ICAgYmFzZSA9ICJjb2RlIgogICAgICAgICAgICAgICAgIGlmIGJhc2VJbmRleCA+IDA6CiAgICAg
ICAgICAgICAgICAgICAgIGJhc2UgPSAiY29kZSArICVkIiAlIGJhc2VJbmRleAotICAgICAgICAg
ICAgICAgIGNvbXBhcmlzb24gPSAoIkNPTVBBUkVfQ0hBUkFDVEVSUyVkKCVzLCAiICUgKGxlbih0
ZXN0KSwgYmFzZSkpICsgIiwgIi5qb2luKHRlc3QpICsgIikiCisgICAgICAgICAgICAgICAgY29t
cGFyaXNvbiA9ICgiQ09NUEFSRV8lZCVzUyglcywgIiAlIChsZW4odGVzdCksIHR5cGVOYW1lLCBi
YXNlKSkgKyAiLCAiLmpvaW4odGVzdCkgKyAiKSIKICAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9
PSAwOgogICAgICAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIiArIGNvbXBhcmlzb24gKyAi
KSB7IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0g
ZWxzZSBpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7IikKIAotICAgICAgICAgICAgdHJpZS5wcmlu
dFN1YlRyZWVBc0MoaW5kZW50ICsgNCkKKyAgICAgICAgICAgIHRyaWUucHJpbnRTdWJUcmVlQXND
KHR5cGVOYW1lLCBpbmRlbnQgKyA0KQogICAgICAgICAgICAgaXRlbUNvdW50ID0gaXRlbUNvdW50
ICsgMQogCiAgICAgICAgICAgICBpZiBpdGVtQ291bnQgPT0gbGVuKHNlbGYua2V5cyk6CkBAIC0x
NzMsMTIgKzE3MywyMyBAQCBjbGFzcyBUcmllOgogICAgICAgICAjIG1heCBsZW5ndGggKyAxIHNv
IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IGJvdW5kcyBjaGVja2luZyBhdCBhbGwKICAgICAgICAg
cHJpbnQoInN0YXRpYyBjb25zdCBpbnQgbWF4VG9rZW5MZW5ndGggPSAlZDsiICUgKHNlbGYubWF4
TGVuZ3RoKCkgKyAxKSkKICAgICAgICAgcHJpbnQoIiIpCi0gICAgICAgIHByaW50KCJ0ZW1wbGF0
ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBl
IExleGVyOjpwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKKyAgICAgICAgcHJpbnQo
InRlbXBsYXRlIDw+IikKKyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0
ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8VUNoYXI+OjpwYXJz
ZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKICAgICAgICAgcHJpbnQoInsiKQogICAgICAg
ICBwcmludCgiICAgIEFTU0VSVChtX2NvZGVFbmQgLSBtX2NvZGUgPj0gbWF4VG9rZW5MZW5ndGgp
OyIpCiAgICAgICAgIHByaW50KCIiKQogICAgICAgICBwcmludCgiICAgIGNvbnN0IFVDaGFyKiBj
b2RlID0gbV9jb2RlOyIpCi0gICAgICAgIHNlbGYucHJpbnRTdWJUcmVlQXNDKDQpCisgICAgICAg
IHNlbGYucHJpbnRTdWJUcmVlQXNDKCJVQ0hBUiIsIDQpCisgICAgICAgIHByaW50KCIgICAgcmV0
dXJuIElERU5UOyIpCisgICAgICAgIHByaW50KCJ9IikKKyAgICAgICAgcHJpbnQoIiIpCisgICAg
ICAgIHByaW50KCJ0ZW1wbGF0ZSA8PiIpCisgICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8Ym9vbCBz
aG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExD
aGFyPjo6cGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKiBkYXRhKSIpCisgICAgICAgIHByaW50KCJ7
IikKKyAgICAgICAgcHJpbnQoIiAgICBBU1NFUlQobV9jb2RlRW5kIC0gbV9jb2RlID49IG1heFRv
a2VuTGVuZ3RoKTsiKQorICAgICAgICBwcmludCgiIikKKyAgICAgICAgcHJpbnQoIiAgICBjb25z
dCBMQ2hhciogY29kZSA9IG1fY29kZTsiKQorICAgICAgICBzZWxmLnByaW50U3ViVHJlZUFzQygi
Q0hBUiIsIDQpCiAgICAgICAgIHByaW50KCIgICAgcmV0dXJuIElERU5UOyIpCiAgICAgICAgIHBy
aW50KCJ9IikKICAgICAgICAgcHJpbnQoIiIpCkBAIC0xOTQsNTcgKzIwNSw4NSBAQCBwcmludCgi
Ly8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgS2V5CiBwcmludCgiIiIKICNpZiBDUFUoTkVF
RFNfQUxJR05FRF9BQ0NFU1MpCiAKLSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNz
LCBjaGFyMSwgY2hhcjIpIFxcCisjZGVmaW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMikgXFwKKyAgICAoKChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsx
XSA9PSBjaGFyMikpCisjZGVmaW5lIENPTVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFy
MiwgY2hhcjMsIGNoYXI0KSBcXAorICAgIChDT01QQVJFXzJDSEFSUyhhZGRyZXNzLCBjaGFyMSwg
Y2hhcjIpICYmIENPTVBBUkVfMkNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisj
ZGVmaW5lIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFxcCiAgICAgKCgo
YWRkcmVzcylbMF0gPT0gY2hhcjEpICYmICgoYWRkcmVzcylbMV0gPT0gY2hhcjIpKQotI2RlZmlu
ZSBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYg
Q09NUEFSRV9DSEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmlu
ZSBDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxc
CisgICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVf
MlVDSEFSUygoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQogCiAjZWxzZSAvLyBDUFUoTkVF
RFNfQUxJR05FRF9BQ0NFU1MpCiAKICNpZiBDUFUoQklHX0VORElBTikKIAotI2RlZmluZSBDSEFS
UEFJUl9UT1VJTlQzMihhLCBiKSBcXAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQxNihhLCBiKSBc
XAorICAgICgoKCh1aW50MTZfdCkoYSkpIDw8IDgpICsgKHVpbnQxNl90KShiKSkKKyNkZWZpbmUg
Q0hBUlFVQURfVE9VSU5UMzIoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDMyX3QpKENIQVJQ
QUlSX1RPVUlOVDE2KGEsIGIpKSkgPDwgMTYpICsgQ0hBUlBBSVJfVE9VSU5UMTYoYywgZCkpCisj
ZGVmaW5lIFVDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSBcXAogICAgICgoKCh1aW50MzJfdCkoYSkp
IDw8IDE2KSArICh1aW50MzJfdCkoYikpCi0jZGVmaW5lIENIQVJRVUFEX1RPVUlOVDY0KGEsIGIs
IGMsIGQpIFxcCi0gICAgKCgoKHVpbnQ2NF90KShDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkpIDw8
IDMyKSArIENIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKQorI2RlZmluZSBVQ0hBUlFVQURfVE9VSU5U
NjQoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDY0X3QpKFVDSEFSUVVBRF9UT1VJTlQ2NChh
LCBiKSkpIDw8IDMyKSArIFVDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkKIAogI2Vsc2UgLy8gQ1BV
KEJJR19FTkRJQU4pCiAKLSNkZWZpbmUgQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikgXFwKKyNkZWZp
bmUgQ0hBUlBBSVJfVE9VSU5UMTYoYSwgYikgXFwKKyAgICAoKCgodWludDE2X3QpKGIpKSA8PCA4
KSArICh1aW50MTZfdCkoYSkpCisjZGVmaW5lIENIQVJRVUFEX1RPVUlOVDMyKGEsIGIsIGMsIGQp
IFxcCisgICAgKCgoKHVpbnQzMl90KShDSEFSUEFJUl9UT1VJTlQxNihjLCBkKSkpIDw8IDE2KSAr
IENIQVJQQUlSX1RPVUlOVDE2KGEsIGIpKQorI2RlZmluZSBVQ0hBUlBBSVJfVE9VSU5UMzIoYSwg
YikgXFwKICAgICAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWludDMyX3QpKGEpKQotI2Rl
ZmluZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSBcXAotICAgICgoKCh1aW50NjRfdCko
Q0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBDSEFSUEFJUl9UT1VJTlQzMihhLCBi
KSkKKyNkZWZpbmUgVUNIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMsIGQpIFxcCisgICAgKCgoKHVp
bnQ2NF90KShVQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBVQ0hBUlBBSVJfVE9V
SU5UMzIoYSwgYikpCiAKICNlbmRpZiAvLyBDUFUoQklHX0VORElBTikKIAogCi0jZGVmaW5lIENP
TVBBUkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAotICAgICgoKHVpbnQz
Ml90KikoYWRkcmVzcykpWzBdID09IENIQVJQQUlSX1RPVUlOVDMyKGNoYXIxLCBjaGFyMikpCisj
ZGVmaW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKKyAgICAoKCh1
aW50MTZfdCopKGFkZHJlc3MpKVswXSA9PSBDSEFSUEFJUl9UT1VJTlQxNihjaGFyMSwgY2hhcjIp
KQorI2RlZmluZSBDT01QQVJFXzJVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAg
ICgoKHVpbnQzMl90KikoYWRkcmVzcykpWzBdID09IFVDSEFSUEFJUl9UT1VJTlQzMihjaGFyMSwg
Y2hhcjIpKQogCiAjaWYgQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM0
KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAgICgoKHVpbnQ2NF90
KikoYWRkcmVzcykpWzBdID09IENIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwgY2hhcjMs
IGNoYXI0KSkKKyNkZWZpbmUgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBj
aGFyMywgY2hhcjQpIFxcCisgICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFV
QURfVE9VSU5UMzIoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJF
XzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKCgo
dWludDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gVUNIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFy
MiwgY2hhcjMsIGNoYXI0KSkKIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01Q
QVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAot
ICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFS
RV9DSEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01Q
QVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAo
Q09NUEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiBDT01QQVJFXzJDSEFSUygo
YWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRVQ0hBUlMoYWRk
cmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKENPTVBBUkVfMlVDSEFS
UyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVDSEFSUygoYWRkcmVzcykgKyAy
LCBjaGFyMywgY2hhcjQpKQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogI2VuZGlmIC8vIENQ
VShORUVEU19BTElHTkVEX0FDQ0VTUykKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMzKGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIo
YWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiAoKGFkZHJlc3MpWzJdID09IChjaGFyMykpKQotI2Rl
ZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM1KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNo
YXI0LCBjaGFyNSkgXFwKLSAgICAoQ09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzLCBjaGFyMSwg
Y2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9PSAoY2hhcjUpKSkKLSNkZWZp
bmUgQ09NUEFSRV9DSEFSQUNURVJTNihhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFy
NCwgY2hhcjUsIGNoYXI2KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3Mg
KyA0LCBjaGFyNSwgY2hhcjYpKQotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM3KGFkZHJlc3Ms
IGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAotICAg
IChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyAzLCBjaGFyNCwgY2hhcjUsIGNoYXI2
LCBjaGFyNykpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzgoYWRkcmVzcywgY2hhcjEsIGNo
YXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcsIGNoYXI4KSBcXAotICAgIChD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAm
JiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBj
aGFyOCkpCisjZGVmaW5lIENPTVBBUkVfM0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hh
cjMpIFxcCisgICAgKENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChh
ZGRyZXNzKVsyXSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV8zVUNIQVJTKGFkZHJlc3Ms
IGNoYXIxLCBjaGFyMiwgY2hhcjMpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBj
aGFyMSwgY2hhcjIpICYmICgoYWRkcmVzcylbMl0gPT0gKGNoYXIzKSkpCisjZGVmaW5lIENPTVBB
UkVfNUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSkgXFwK
KyAgICAoQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQp
ICYmICgoYWRkcmVzcylbNF0gPT0gKGNoYXI1KSkpCisjZGVmaW5lIENPTVBBUkVfNVVDSEFSUyhh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUpIFxcCisgICAgKENPTVBB
UkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRy
ZXNzKVs0XSA9PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFSRV82Q0hBUlMoYWRkcmVzcywgY2hh
cjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAoQ09NUEFSRV80
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfMkNI
QVJTKGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYpKQorI2RlZmluZSBDT01QQVJFXzZVQ0hBUlMo
YWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAg
ICAoQ09NUEFSRV80VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAm
JiBDT01QQVJFXzJVQ0hBUlMoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENP
TVBBUkVfN0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwg
Y2hhcjYsIGNoYXI3KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcyArIDMsIGNoYXI0LCBj
aGFyNSwgY2hhcjYsIGNoYXI3KSkKKyNkZWZpbmUgQ09NUEFSRV83VUNIQVJTKGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAorICAgIChD
T01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENP
TVBBUkVfNFVDSEFSUyhhZGRyZXNzICsgMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQor
I2RlZmluZSBDT01QQVJFXzhDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFy
NCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCisgICAgKENPTVBBUkVfNENIQVJTKGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFXzRDSEFSUyhhZGRy
ZXNzICsgNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpKQorI2RlZmluZSBDT01QQVJFXzhV
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwg
Y2hhcjcsIGNoYXI4KSBcXAorICAgIChDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNo
YXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzICsgNCwgY2hhcjUs
IGNoYXI2LCBjaGFyNywgY2hhcjgpKQogIiIiKQogCiB0cmllLnByaW50QXNDKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
cmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5M
SU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBw
cmVwYXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdlIGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAg
ICAgICAgICAgICAvLyB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFs
UGFyc2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCks
IHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIExpdGVyYWxQYXJzZXI6Ok5vblN0cmljdEpTT04pOwor
ICAgICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291
cmNlLmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6
Tm9uU3RyaWN0SlNPTik7CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBw
cmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ZE9iamVjdDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9M
ZXhlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9M
ZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwxNyArMjI2LDIwIEBAIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzaG9ydCB0eXBlc09mQVNDSUkKIC8qIDEyNyAtIERlbGV0ZSAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJbnZhbGlkLAogfTsKIAotTGV4ZXI6OkxleGVyKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorTGV4ZXI8VD46OkxleGVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICA6IG1faXNSZXBhcnNpbmcoZmFsc2UpCiAgICAgLCBt
X2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKIH0KIAotTGV4ZXI6On5MZXhlcigpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0xleGVyPFQ+Ojp+TGV4ZXIoKQogewogfQotICAgIAotVVN0cmluZyBM
ZXhlcjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitV
U3RyaW5nIExleGVyPFQ+OjpnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQogewogICAgIHN3aXRjaCAo
bV9jdXJyZW50KSB7CiAgICAgY2FzZSAwOgpAQCAtMjU4LDI2ICsyNjEsMzUgQEAgVVN0cmluZyBM
ZXhlcjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUg
Y29uc3QgVUNoYXIqIExleGVyOjpjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBjb25zdCBUKiBMZXhlcjxUPjo6Y3VycmVudENoYXJh
Y3RlcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY29kZSA8PSBtX2NvZGVFbmQpOwogICAgIHJl
dHVybiBtX2NvZGU7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IExleGVyOjpjdXJyZW50T2Zmc2V0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcigpIC0gbV9jb2RlU3RhcnQ7
Ci19Ci0KLXZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJz
ZXJBcmVuYSogYXJlbmEpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnNl
dENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJBcmVuYSogYXJlbmEpCiB7CiAg
ICAgbV9hcmVuYSA9ICZhcmVuYS0+aWRlbnRpZmllckFyZW5hKCk7Ci0KKyAgICAKICAgICBtX2xp
bmVOdW1iZXIgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CiAgICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsK
ICAgICBtX2xhc3RUb2tlbiA9IC0xOworICAgIAorICAgIGNvbnN0IFQqIGRhdGE7CisgICAgY29u
c3QgU3RyaW5nSW1wbCogc291cmNlU3RyaW5nID0gc291cmNlLnByb3ZpZGVyKCktPnN0cmluZ0Rh
dGEoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gc291cmNlLnByb3ZpZGVyKCktPmRhdGEo
KTsKKyAgICBpZiAoc291cmNlU3RyaW5nKSB7CisgICAgICAgIGlmIChzb3VyY2VTdHJpbmctPmlz
OEJpdCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IHNpemVvZihMQ2hhcikp
OworICAgICAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHNvdXJjZVN0
cmluZy0+Y2hhcmFjdGVyczgoKSk7CisgICAgICAgIH0gZWxzZSAgeworICAgICAgICAgICAgQVNT
RVJUKHNpemVvZihUKSA9PSBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIGRhdGEgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFQqPihzb3VyY2VTdHJpbmctPmNoYXJhY3RlcnMxNigpKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBkYXRhID0gMDsKIAogICAgIG1fc291cmNlID0g
JnNvdXJjZTsKICAgICBtX2NvZGVTdGFydCA9IGRhdGE7CkBAIC0yODYsMTAgKzI5OCwxMCBAQCB2
b2lkIExleGVyOjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHNvCiAgICAgbV9lcnJvciA9IGZh
bHNlOwogICAgIG1fYXRMaW5lU3RhcnQgPSB0cnVlOwogICAgIG1fbGV4RXJyb3JNZXNzYWdlID0g
VVN0cmluZygpOwotCisgICAgCiAgICAgbV9idWZmZXI4LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
aW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CiAgICAgbV9idWZmZXIxNi5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KChtX2NvZGVFbmQgLSBtX2NvZGUpIC8gMik7Ci0KKyAgICAKICAgICBpZiAoTElL
RUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7CiAg
ICAgZWxzZQpAQCAtMjk3LDcgKzMwOSw4IEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291
cmNlQ29kZSYgc28KICAgICBBU1NFUlQoY3VycmVudE9mZnNldCgpID09IHNvdXJjZS5zdGFydE9m
ZnNldCgpKTsKIH0KIAotdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgTGV4ZXI6OlNoaWZ0VHlw
ZSBzaG91bGRCb3VuZHNDaGVjaz4gQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjppbnRlcm5hbFNo
aWZ0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwg
U2hpZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46
OmludGVybmFsU2hpZnQoKQogewogICAgIGlmIChzaG91bGRCb3VuZHNDaGVjayA9PSBEb0JvdW5k
c0NoZWNrKSB7CiAgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVuY2UKQEAg
LTMxMiwyMCArMzI1LDI4IEBAIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQsIExleGVyOjpTaGlm
dFQKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6c2hpZnQoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnNoaWZ0KCkKIHsK
LSAgICBpbnRlcm5hbFNoaWZ0PDEsIERvQm91bmRzQ2hlY2s+KCk7CisgICAgLy8gRmFzdGVyIHRo
YW4gYW4gaWYtZWxzZSBzZXF1ZW5jZQorICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gLTEpOworICAg
IG1fY3VycmVudCA9IC0xOworICAgIG1fY29kZSsrOworICAgIGlmIChMSUtFTFkobV9jb2RlIDwg
bV9jb2RlRW5kKSkKKyAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsKIH0KIAotQUxXQVlTX0lO
TElORSBpbnQgTGV4ZXI6OnBlZWsoaW50IG9mZnNldCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QUxXQVlTX0lOTElORSBpbnQgTGV4ZXI8VD46OnBlZWsoaW50IG9mZnNldCkKIHsKICAgICAvLyBP
bmx5IHVzZSBpZiBuZWNlc3NhcnkKICAgICBBU1NFUlQob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPCA1
KTsKLSAgICBjb25zdCBVQ2hhciogY29kZSA9IG1fY29kZSArIG9mZnNldDsKKyAgICBjb25zdCBU
KiBjb2RlID0gbV9jb2RlICsgb2Zmc2V0OwogICAgIHJldHVybiAoY29kZSA8IG1fY29kZUVuZCkg
PyAqY29kZSA6IC0xOwogfQogCi1pbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitpbnQgTGV4ZXI8VD46OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQog
ewogICAgIGludCBjaGFyMSA9IHBlZWsoMSk7CiAgICAgaW50IGNoYXIyID0gcGVlaygyKTsKQEAg
LTM0Miw3ICszNjMsOCBAQCBpbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdExpbmVUZXJtaW5hdG9yKCkK
IHsKICAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKTsKIApAQCAtMzU2LDcg
KzM3OCw4IEBAIHZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQogICAgICsrbV9saW5l
TnVtYmVyOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omxhc3RUb2tlbldhc1Jlc3Ry
S2V5d29yZCgpIGNvbnN0Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9v
bCBMZXhlcjxUPjo6bGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9sYXN0VG9rZW4gPT0gQ09OVElOVUUgfHwgbV9sYXN0VG9rZW4gPT0gQlJFQUsgfHwgbV9s
YXN0VG9rZW4gPT0gUkVUVVJOIHx8IG1fbGFzdFRva2VuID09IFRIUk9XOwogfQpAQCAtNDExLDM2
ICs0MzQsMTI4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbmdsZUVzY2FwZShpbnQgYykKICAgICB9
CiB9CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQ4KGludCBjKQordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkOChpbnQgYykKIHsKICAgICBBU1NF
UlQoYyA+PSAwKTsKICAgICBBU1NFUlQoYyA8PSAweEZGKTsKLSAgICBtX2J1ZmZlcjguYXBwZW5k
KHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICBtX2J1ZmZlcjguYXBwZW5kKHN0YXRpY19jYXN0
PExDaGFyPihjKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgTGV4
ZXI8VD46OmFwcGVuZDgoY29uc3QgVCogcCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICAvLyBGSVhN
RTogQ2hhbmdlIHRocmVlIG9jY3VycmFuY2VzIG9mIG1fYnVmZmVyMTYgdG8gbV9idWZmZXI4IGFu
ZAorICAgIC8vIFVDaGFyIHRvIExDaGFyIHdoZW4gOCBiaXQgc3RyaW5ncyBhcmUgdHVybmVkIG9u
LgorICAgIHNpemVfdCBjdXJyZW50U2l6ZSA9IG1fYnVmZmVyMTYuc2l6ZSgpOworICAgIG1fYnVm
ZmVyMTYuZ3JvdyhjdXJyZW50U2l6ZSArIGxlbmd0aCk7CisgICAgVUNoYXIqIHJhd0J1ZmZlciA9
IG1fYnVmZmVyMTYuZGF0YSgpICsgY3VycmVudFNpemU7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFQgYyA9IHBbaV07CisgICAgICAgIEFTU0VS
VChjID49IDApOworICAgICAgICBBU1NFUlQoYyA8PSAweEZGKTsKKyAgICAgICAgcmF3QnVmZmVy
W2ldID0gYzsKKyAgICB9CiB9CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQxNihVQ2hhciBj
KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6YXBwZW5kMTYo
Y29uc3QgTENoYXIqIHAsIHNpemVfdCBsZW5ndGgpCit7CisgICAgc2l6ZV90IGN1cnJlbnRTaXpl
ID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgbV9idWZmZXIxNi5ncm93KGN1cnJlbnRTaXplICsg
bGVuZ3RoKTsKKyAgICBVQ2hhciogcmF3QnVmZmVyID0gbV9idWZmZXIxNi5kYXRhKCkgKyBjdXJy
ZW50U2l6ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAg
ICAgIHJhd0J1ZmZlcltpXSA9IHBbaV07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5s
aW5lIHZvaWQgTGV4ZXI8VD46OnJlY29yZDE2KFQgYykKIHsKICAgICBtX2J1ZmZlcjE2LmFwcGVu
ZChjKTsKIH0KIAotaW5saW5lIHZvaWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkMTYoaW50IGMpCiB7CiAg
ICAgQVNTRVJUKGMgPj0gMCk7CiAgICAgQVNTRVJUKGMgPD0gVVNIUlRfTUFYKTsKLSAgICByZWNv
cmQxNihVQ2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYykpKTsKKyAgICBtX2J1ZmZl
cjE2LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOwogfQogCi10ZW1wbGF0ZSA8Ym9vbCBz
aG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpw
YXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwg
Ym9vbCBzdHJpY3RNb2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBz
aG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+
OjpwYXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlw
ZSwgYm9vbCBzdHJpY3RNb2RlKQogeworICAgIC8vIEZJWE1FOiBDaGFuZ2UgcmVjb3JkMTYgYW5k
IG1fYnVmZmVyMTYgdG8gcmVjb3JkOCBhbmQgbV9idWZmZXI4LCBhbmQgc2l6ZW9mKFVDaGFyKSB0
bworICAgIC8vIHNpemVvZihMQ2hhcikgYmVsb3cgd2hlbiA4IGJpdCBzdHJpbmdzIGFyZSB0dXJu
ZWQgb24uCisKICAgICBjb25zdCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9j
b2RlOwotICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleFR5cGUg
JiBJZ25vcmVSZXNlcnZlZFdvcmRzKSkgeworICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2Vu
TGVuZ3RoKSAmJiAhKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdvcmRzKSkgewogICAgICAg
ICBKU1Rva2VuVHlwZSBrZXl3b3JkID0gcGFyc2VLZXl3b3JkPHNob3VsZENyZWF0ZUlkZW50aWZp
ZXI+KHRva2VuRGF0YSk7CiAgICAgICAgIGlmIChrZXl3b3JkICE9IElERU5UKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoKCFzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB8fCB0b2tlbkRhdGEtPmlkZW50
KTsKICAgICAgICAgICAgIHJldHVybiBrZXl3b3JkID09IFJFU0VSVkVEX0lGX1NUUklDVCAmJiAh
c3RyaWN0TW9kZSA/IElERU5UIDoga2V5d29yZDsKICAgICAgICAgfQogICAgIH0KLSAgICBjb25z
dCBVQ2hhciogaWRlbnRpZmllclN0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworICAgIGNvbnN0
IFQqIGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBib29sIGJ1ZmZl
clJlcXVpcmVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNpemVvZihUKSAhPSBzaXplb2YoVUNo
YXIpKSAvLyBGSVhNRTogQ2hhbmdlIHRvIHNpemVvZihMQ2hhcikKKyAgICAgICAgYnVmZmVyUmVx
dWlyZWQgPSB0cnVlOworCisgICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpCisgICAg
ICAgIHNoaWZ0KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAnXFwnKSkg
eworICAgICAgICBzZXRPZmZzZXRGcm9tQ2hhck9mZnNldChpZGVudGlmaWVyU3RhcnQpOworICAg
ICAgICBpZiAoYnVmZmVyUmVxdWlyZWQpCisgICAgICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgw
KTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgcmV0dXJuIHBhcnNlSWRl
bnRpZmllclNsb3dDYXNlPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+KHRva2VuRGF0YSwgbGV4VHlw
ZSwgc3RyaWN0TW9kZSk7CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAw
OworICAgIAorICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB7CisgICAgICAgIGlmICgh
YnVmZmVyUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIGludCBpZGVudGlmaWVyTGVuZ3RoID0gY3Vy
cmVudENoYXJhY3RlcigpIC0gaWRlbnRpZmllclN0YXJ0OworICAgICAgICAgICAgaWRlbnQgPSBt
YWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBjdXJyZW50Q2hh
cmFjdGVyKCkpCisgICAgICAgICAgICAgICAgYXBwZW5kMTYoaWRlbnRpZmllclN0YXJ0LCBjdXJy
ZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIGFw
cGVuZDgKKyAgICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRh
KCksIG1fYnVmZmVyMTYuc2l6ZSgpKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAg
ICAgICAgfQorCisgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVudDsKKyAgICB9IGVsc2UK
KyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CisKKyAgICBtX2RlbGltaXRlZCA9IGZhbHNl
OworCisgICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdu
b3JlUmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlm
aWVyKTsKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7CisgICAgICAg
ICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0
S2V5d29yZCgqaWRlbnQpOworICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tl
bkxlbmd0aCkgfHwgIWVudHJ5KTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIElERU5UOworICAgICAgICAgICAgSlNUb2tlblR5cGUgdG9rZW4gPSBzdGF0
aWNfY2FzdDxKU1Rva2VuVHlwZT4oZW50cnktPmxleGVyVmFsdWUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gKHRva2VuICE9IFJFU0VSVkVEX0lGX1NUUklDVCkgfHwgc3RyaWN0TW9kZSA/IHRva2Vu
IDogSURFTlQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElERU5UOworICAgIH0KKworICAg
IGlmIChidWZmZXJSZXF1aXJlZCkKKyAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7IC8vIEZJ
WE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisKKyAgICByZXR1cm4gSURFTlQ7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4g
SlNUb2tlblR5cGUgTGV4ZXI8VD46OnBhcnNlSWRlbnRpZmllclNsb3dDYXNlKEpTVG9rZW5EYXRh
KiB0b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBj
b25zdCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2RlOworICAgIGNvbnN0
IFQqIGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICBib29sIGJ1ZmZl
clJlcXVpcmVkID0gZmFsc2U7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDY0LDMxICs1Nzks
MzAgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgICAgICAg
ICAgcmV0dXJuIEVSUk9SVE9LOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9idWZmZXIxNi5zaXpl
KCkgPyAhaXNJZGVudFBhcnQoY2hhcmFjdGVyKSA6ICFpc0lkZW50U3RhcnQoY2hhcmFjdGVyKSkp
CiAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7Ci0gICAgICAgIGlmICAoc2hvdWxkQ3JlYXRl
SWRlbnRpZmllcikKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpCiAgICAgICAg
ICAgICByZWNvcmQxNihjaGFyYWN0ZXIpOwogICAgICAgICBpZGVudGlmaWVyU3RhcnQgPSBjdXJy
ZW50Q2hhcmFjdGVyKCk7CiAgICAgfQotICAgIAorCiAgICAgaW50IGlkZW50aWZpZXJMZW5ndGg7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwogICAgIGlmIChzaG91bGRDcmVhdGVJ
ZGVudGlmaWVyKSB7Ci0gICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQpCisgICAgICAgIGlmICgh
YnVmZmVyUmVxdWlyZWQpIHsKICAgICAgICAgICAgIGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50
Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7Ci0gICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5n
dGgpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAh
PSBjdXJyZW50Q2hhcmFjdGVyKCkpCiAgICAgICAgICAgICAgICAgbV9idWZmZXIxNi5hcHBlbmQo
aWRlbnRpZmllclN0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOwot
ICAgICAgICAgICAgaWRlbnRpZmllclN0YXJ0ID0gbV9idWZmZXIxNi5kYXRhKCk7Ci0gICAgICAg
ICAgICBpZGVudGlmaWVyTGVuZ3RoID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgICAgICAgICBp
ZGVudCA9IG1ha2VJZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUo
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZp
ZXJTdGFydCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBp
ZGVudDsKICAgICB9IGVsc2UKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CiAKICAgICBt
X2RlbGltaXRlZCA9IGZhbHNlOwogCi0gICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYg
IShsZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgaWYgKExJS0VMWSghYnVm
ZmVyUmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAg
ICAgICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVyKTsKICAgICAgICAgLy8gS2V5d29y
ZHMgbXVzdCBub3QgYmUgcmVjb2duaXplZCBpZiB0aGVyZSB3YXMgYW4gXHVYWFhYIGluIHRoZSBp
ZGVudGlmaWVyLgogICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHsKQEAg
LTUwNiwxMiArNjIwLDgzIEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+
IEEKICAgICByZXR1cm4gSURFTlQ7CiB9CiAKLXRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3Ry
aW5ncz4gQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSog
dG9rZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+
OjpwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCiB7
CisgICAgLy8gRklYTUU6IENoYW5nZSByZWNvcmQxNiBhbmQgbV9idWZmZXIxNiB0byByZWNvcmQ4
IGFuZCBtX2J1ZmZlcjggYmVsb3cgd2hlbgorICAgIC8vIDggYml0IHN0cmluZ3MgYXJlIHR1cm5l
ZCBvbi4KKyAgICBpbnQgc3RhcnRpbmdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgaW50
IHN0YXJ0aW5nTGluZU51bWJlciA9IGxpbmVOdW1iZXIoKTsKICAgICBpbnQgc3RyaW5nUXVvdGVD
aGFyYWN0ZXIgPSBtX2N1cnJlbnQ7CiAgICAgc2hpZnQoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBz
dHJpbmdTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBjb25zdCBUKiBzdHJpbmdTdGFy
dCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKworICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gc3RyaW5n
UXVvdGVDaGFyYWN0ZXIpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKChtX2N1cnJlbnQgPT0gJ1xc
JykpKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nU3RhcnQgIT0gY3VycmVudENoYXJhY3Rlcigp
ICYmIHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0
YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7CisgICAgICAgICAgICBzaGlm
dCgpOworCisgICAgICAgICAgICBpbnQgZXNjYXBlID0gc2luZ2xlRXNjYXBlKG1fY3VycmVudCk7
CisKKyAgICAgICAgICAgIC8vIE1vc3QgY29tbW9uIGVzY2FwZSBzZXF1ZW5jZXMgZmlyc3QKKyAg
ICAgICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRT
dHJpbmdzKQorICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOyAvLyBGSVhNRTog
Q2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkpKQorICAgICAg
ICAgICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
Y3VycmVudCA9PSAneCcpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAg
ICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQobV9jdXJyZW50KSAmJiBpc0FTQ0lJSGV4RGlnaXQocGVl
aygxKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHByZXYgPSBtX2N1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRC
dWlsZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0SGV4
KHByZXYsIG1fY3VycmVudCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAg
ICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEJ1
aWxkU3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoJ3gnKTsgLy8gRklYTUU6
IENoYW5nZSB0byByZWNvcmQ4CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNldE9mZnNldChzdGFydGluZ09mZnNldCk7CisgICAgICAgICAgICAgICAgc2V0TGluZU51bWJl
cihzdGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXpl
KDApOyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZVN0cmluZ1Nsb3dDYXNlPHNob3VsZEJ1aWxkU3RyaW5ncz4odG9rZW5EYXRhLCBzdHJp
Y3RNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZ1N0YXJ0ID0gY3VycmVu
dENoYXJhY3RlcigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoVU5MSUtFTFkoKChtX2N1cnJlbnQgPiAweGZmKSB8fCAobV9jdXJyZW50IDwgMHhlKSkp
KSB7CisgICAgICAgICAgICBzZXRPZmZzZXQoc3RhcnRpbmdPZmZzZXQpOworICAgICAgICAgICAg
c2V0TGluZU51bWJlcihzdGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgbV9idWZmZXIx
Ni5yZXNpemUoMCk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VTdHJpbmdTbG93Q2FzZTxzaG91bGRCdWlsZFN0cmluZ3M+KHRva2VuRGF0YSwg
c3RyaWN0TW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBzaGlmdCgpOworICAgIH0KKworICAg
IGlmIChjdXJyZW50Q2hhcmFjdGVyKCkgIT0gc3RyaW5nU3RhcnQgJiYgc2hvdWxkQnVpbGRTdHJp
bmdzKQorICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBz
dHJpbmdTdGFydCk7CisgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgLy8gRklY
TUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJ
ZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7CisgICAgZWxz
ZQorICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKKworICAgIC8vIEZJWE1FOiBDaGFuZ2Ug
dG8gbV9idWZmZXI4CisgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRT
dHJpbmdzPiBib29sIExleGVyPFQ+OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiB0
b2tlbkRhdGEsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBpbnQgc3RyaW5nUXVvdGVDaGFyYWN0
ZXIgPSBtX2N1cnJlbnQ7CisgICAgc2hpZnQoKTsKKworICAgIGNvbnN0IFQqIHN0cmluZ1N0YXJ0
ID0gY3VycmVudENoYXJhY3RlcigpOwogCiAgICAgd2hpbGUgKG1fY3VycmVudCAhPSBzdHJpbmdR
dW90ZUNoYXJhY3RlcikgewogICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50ID09ICdcXCcp
KSB7CkBAIC01MjMsOCArNzA4LDggQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdz
PiBBTFdBWQogCiAgICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiBlc2NhcGUgc2VxdWVuY2VzIGZp
cnN0CiAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgIGlmIChzaG91
bGRCdWlsZFN0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOwor
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCisgICAgICAgICAgICAgICAg
ICAgIHJlY29yZDE2KGVzY2FwZSk7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSkKICAg
ICAgICAgICAgICAgICBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CkBAIC02MTgsNyArODAzLDggQEAg
dGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWQogICAgIHJldHVybiB0cnVl
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6OnBhcnNlSGV4KGRvdWJsZSYgcmV0dXJu
VmFsdWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxU
Pjo6cGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246
IG1vc3QgaGV4YWRlY2ltYWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3Qg
aGV4VmFsdWUgPSAwOwpAQCAtNjU3LDE0ICs4NDMsMTUgQEAgQUxXQVlTX0lOTElORSB2b2lkIExl
eGVyOjpwYXJzZUhleChkb3VibAogICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnRPdmVyZmxvdyht
X2J1ZmZlcjguZGF0YSgpLCBtX2J1ZmZlcjguc2l6ZSgpLCAxNik7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBMZXhlcjo6cGFyc2VPY3RhbChkb3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46OnBhcnNlT2N0YWwoZG91
YmxlJiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IG1vc3Qgb2N0YWwgdmFs
dWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3Qgb2N0YWxWYWx1ZSA9IDA7CiAgICAg
aW50IG1heGltdW1EaWdpdHMgPSA5OwogICAgIC8vIFRlbXBvcmFyeSBidWZmZXIgZm9yIHRoZSBk
aWdpdHMuIE1ha2VzIGVhc2llcgogICAgIC8vIHRvIHJlY29uc3RydWN0IHRoZSBpbnB1dCBjaGFy
YWN0ZXJzIHdoZW4gbmVlZGVkLgotICAgIGNoYXIgZGlnaXRzWzEwXTsKKyAgICBMQ2hhciBkaWdp
dHNbMTBdOwogCiAgICAgZG8gewogICAgICAgICBvY3RhbFZhbHVlID0gb2N0YWxWYWx1ZSAqIDgg
KyAobV9jdXJyZW50IC0gJzAnKTsKQEAgLTY5Myw3ICs4ODAsOCBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgTGV4ZXI6OnBhcnNlT2N0YWwoZG91CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19J
TkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VEZWNpbWFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VEZWNp
bWFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpCiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBtb3N0IGRl
Y2ltYWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3QgZGVjaW1hbFZhbHVl
ID0gMDsKQEAgLTcwNCw3ICs4OTIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNl
RGVjaW1hbChkCiAgICAgICAgIGludCBtYXhpbXVtRGlnaXRzID0gOTsKICAgICAgICAgLy8gVGVt
cG9yYXJ5IGJ1ZmZlciBmb3IgdGhlIGRpZ2l0cy4gTWFrZXMgZWFzaWVyCiAgICAgICAgIC8vIHRv
IHJlY29uc3RydWN0IHRoZSBpbnB1dCBjaGFyYWN0ZXJzIHdoZW4gbmVlZGVkLgotICAgICAgICBj
aGFyIGRpZ2l0c1sxMF07CisgICAgICAgIExDaGFyIGRpZ2l0c1sxMF07CiAKICAgICAgICAgZG8g
ewogICAgICAgICAgICAgZGVjaW1hbFZhbHVlID0gZGVjaW1hbFZhbHVlICogMTAgKyAobV9jdXJy
ZW50IC0gJzAnKTsKQEAgLTczMCw3ICs5MTgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6
OnBhcnNlRGVjaW1hbChkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgTGV4ZXI6OnBhcnNlTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQoKQordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnBhcnNlTnVtYmVyQWZ0ZXJEZWNp
bWFsUG9pbnQoKQogewogICAgIHJlY29yZDgoJy4nKTsKICAgICB3aGlsZSAoaXNBU0NJSURpZ2l0
KG1fY3VycmVudCkpIHsKQEAgLTczOSw3ICs5MjgsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4
ZXI6OnBhcnNlTnVtYmVyQWZ0CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6
OnBhcnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VOdW1iZXJBZnRlckV4cG9uZW50
SW5kaWNhdG9yKCkKIHsKICAgICByZWNvcmQ4KCdlJyk7CiAgICAgc2hpZnQoKTsKQEAgLTc1OCw3
ICs5NDgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlTnVtYmVyQWZ0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VNdWx0aWxp
bmVDb21tZW50KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExl
eGVyPFQ+OjpwYXJzZU11bHRpbGluZUNvbW1lbnQoKQogewogICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgIHdoaWxlIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gJyonKSkgewpAQCAtNzgwLDE2ICs5
NzEsMTggQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU11bHRpbGluZQogICAgIH0K
IH0KIAotYm9vbCBMZXhlcjo6bmV4dFRva2VuSXNDb2xvbigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK2Jvb2wgTGV4ZXI8VD46Om5leHRUb2tlbklzQ29sb24oKQogewotICAgIGNvbnN0IFVDaGFy
KiBjb2RlID0gbV9jb2RlOworICAgIGNvbnN0IFQqIGNvZGUgPSBtX2NvZGU7CiAgICAgd2hpbGUg
KGNvZGUgPCBtX2NvZGVFbmQgJiYgKGlzV2hpdGVTcGFjZSgqY29kZSkgfHwgaXNMaW5lVGVybWlu
YXRvcigqY29kZSkpKQogICAgICAgICBjb2RlKys7Ci0gICAgICAgIAorICAgIAogICAgIHJldHVy
biBjb2RlIDwgbV9jb2RlRW5kICYmICpjb2RlID09ICc6JzsKIH0KIAotSlNUb2tlblR5cGUgTGV4
ZXI6OmxleChKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZvLCB1
bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0pTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXgoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgSlNUb2tl
bkluZm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2RlKQogewog
ICAgIEFTU0VSVCghbV9lcnJvcik7CiAgICAgQVNTRVJUKG1fYnVmZmVyOC5pc0VtcHR5KCkpOwpA
QCAtMTA5NSw3ICsxMjg4LDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHN0cmluZyBm
b3Igc3RydG9kLgogICAgICAgICAgICAgICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7Ci0gICAg
ICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kKG1fYnVmZmVy
OC5kYXRhKCksIDApOworICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBX
VEY6OnN0cnRvZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2J1ZmZlcjguZGF0YSgp
KSwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0b2tlbiA9IE5VTUJFUjsKICAgICAg
ICAgfQpAQCAtMTEwOSw3ICsxMzAyLDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAg
ICAgICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGFy
YWN0ZXJRdW90ZToKLSAgICAgICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRTdHJpbmdzKSB7Cisg
ICAgICAgIGlmIChsZXhUeXBlICYgTGV4RG9udEJ1aWxkU3RyaW5ncykgewogICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFwYXJzZVN0cmluZzxmYWxzZT4odG9rZW5EYXRhLCBzdHJpY3RNb2RlKSkp
CiAgICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTExMjQsNyArMTMxNyw3IEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgIEFT
U0VSVChpc0lkZW50U3RhcnQobV9jdXJyZW50KSk7CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBp
bnRvIENoYXJhY3RlckJhY2tTbGFzaC4KICAgICBjYXNlIENoYXJhY3RlckJhY2tTbGFzaDoKLSAg
ICAgICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRLZXl3b3JkcykKKyAgICAgICAgaWYgKGxleFR5
cGUgJiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgICAgIHRva2VuID0gcGFyc2VJZGVu
dGlmaWVyPGZhbHNlPih0b2tlbkRhdGEsIGxleFR5cGUsIHN0cmljdE1vZGUpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlSWRlbnRpZmllcjx0cnVlPih0b2tlbkRhdGEs
IGxleFR5cGUsIHN0cmljdE1vZGUpOwpAQCAtMTE3OCw3ICsxMzcxLDggQEAgcmV0dXJuRXJyb3I6
CiAgICAgcmV0dXJuIEVSUk9SVE9LOwogfQogCi1ib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0
IElkZW50aWZpZXIqJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyKiYgZmxhZ3MsIFVDaGFyIHBh
dHRlcm5QcmVmaXgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgTGV4ZXI8VD46OnNjYW5S
ZWdFeHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIqJiBmbGFn
cywgVUNoYXIgcGF0dGVyblByZWZpeCkKIHsKICAgICBBU1NFUlQobV9idWZmZXIxNi5pc0VtcHR5
KCkpOwogCkBAIC0xMjM5LDcgKzE0MzMsOCBAQCBib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0
IElkZW50aWZpZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGV4ZXI6OnNraXBSZWdF
eHAoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+Ojpza2lwUmVnRXhwKCkK
IHsKICAgICBib29sIGxhc3RXYXNFc2NhcGUgPSBmYWxzZTsKICAgICBib29sIGluQnJhY2tldHMg
PSBmYWxzZTsKQEAgLTEyNzksMTEgKzE0NzQsMTIgQEAgYm9vbCBMZXhlcjo6c2tpcFJlZ0V4cCgp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGV4ZXI6OmNsZWFyKCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgordm9pZCBMZXhlcjxUPjo6Y2xlYXIoKQogewogICAgIG1fYXJlbmEgPSAwOwog
Ci0gICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7CisgICAgVmVjdG9yPExDaGFyPiBuZXdCdWZm
ZXI4OwogICAgIG1fYnVmZmVyOC5zd2FwKG5ld0J1ZmZlcjgpOwogCiAgICAgVmVjdG9yPFVDaGFy
PiBuZXdCdWZmZXIxNjsKQEAgLTEyOTIsMTEgKzE0ODgsMTYgQEAgdm9pZCBMZXhlcjo6Y2xlYXIo
KQogICAgIG1faXNSZXBhcnNpbmcgPSBmYWxzZTsKIH0KIAotU291cmNlQ29kZSBMZXhlcjo6c291
cmNlQ29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorU291cmNlQ29kZSBMZXhlcjxUPjo6c291cmNlQ29kZShpbnQg
b3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKIHsKICAgICBBU1NFUlQo
bV9zb3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7CiAgICAgQVNT
RVJUKG1fc291cmNlLT5wcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKICAg
ICByZXR1cm4gU291cmNlQ29kZShtX3NvdXJjZS0+cHJvdmlkZXIoKSwgb3BlbkJyYWNlLCBjbG9z
ZUJyYWNlICsgMSwgZmlyc3RMaW5lKTsKIH0KIAorLy8gSW5zdGFudGlhdGUgdGhlIHR3byBmbGF2
b3JzIG9mIExleGVyIHdlIG5lZWQgaW5zdGVhZCBvZiBwdXR0aW5nIG1vc3Qgb2YgdGhpcyBmaWxl
IGluIExleGVyLmgKK3RlbXBsYXRlIGNsYXNzIExleGVyPExDaGFyPjsKK3RlbXBsYXRlIGNsYXNz
IExleGVyPFVDaGFyPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsMTcgQEAgcHJp
dmF0ZToKICAgICBjb25zdCBIYXNoVGFibGUgbV9rZXl3b3JkVGFibGU7CiB9OwogCitlbnVtIExl
eFR5cGUgeworICAgIExleElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAKKyAgICBMZXhEb250QnVp
bGRTdHJpbmdzID0gMiwKKyAgICBMZXhEb250QnVpbGRLZXl3b3JkcyA9IDQKK307CisKK2VudW0g
U2hpZnRUeXBlIHsgRG9Cb3VuZHNDaGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9OworCiBjbGFzcyBS
ZWdFeHA7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgTGV4ZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKExleGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAg
LTgyLDEyICs5MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUmVwYXJzaW5nKCkgeyBtX2lz
UmVwYXJzaW5nID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNSZXBhcnNpbmcoKSBjb25zdCB7IHJldHVy
biBtX2lzUmVwYXJzaW5nOyB9CiAKLSAgICAvLyBGdW5jdGlvbnMgZm9yIHRoZSBwYXJzZXIgaXRz
ZWxmLgotICAgIGVudW0gTGV4VHlwZSB7Ci0gICAgICAgIElnbm9yZVJlc2VydmVkV29yZHMgPSAx
LCAKLSAgICAgICAgRG9udEJ1aWxkU3RyaW5ncyA9IDIsCi0gICAgICAgIERvbnRCdWlsZEtleXdv
cmRzID0gNAotICAgIH07CiAgICAgSlNUb2tlblR5cGUgbGV4KEpTVG9rZW5EYXRhKiwgSlNUb2tl
bkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICBib29sIG5leHRUb2tlbklz
Q29sb24oKTsKICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJl
cjsgfQpAQCAtMTAyLDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNhd0Vycm9yKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvcjsgfQogICAgIFVTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9sZXhFcnJvck1lc3NhZ2U7IH0KICAgICB2b2lkIGNsZWFyKCk7Ci0gICAg
aW50IGN1cnJlbnRPZmZzZXQoKSB7IHJldHVybiBtX2NvZGUgLSBtX2NvZGVTdGFydDsgfQogICAg
IHZvaWQgc2V0T2Zmc2V0KGludCBvZmZzZXQpCiAgICAgewogICAgICAgICBtX2Vycm9yID0gMDsK
QEAgLTEyNSwxMyArMTI3LDEyIEBAIHB1YmxpYzoKICAgICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJ
ZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJp
Y3RNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwotCiAg
ICAgdm9pZCByZWNvcmQ4KGludCk7CisgICAgdm9pZCBhcHBlbmQ4KGNvbnN0IFQqLCBzaXplX3Qp
OwogICAgIHZvaWQgcmVjb3JkMTYoaW50KTsKLSAgICB2b2lkIHJlY29yZDE2KFVDaGFyKTsKLQot
ICAgIHZvaWQgY29weUNvZGVXaXRob3V0Qk9NcygpOworICAgIHZvaWQgcmVjb3JkMTYoVCk7Cisg
ICAgdm9pZCBhcHBlbmQxNihjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmQx
Nihjb25zdCBVQ2hhciogcCwgc2l6ZV90IGxlbmd0aCkgeyBtX2J1ZmZlcjE2LmFwcGVuZChwLCBs
ZW5ndGgpOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2hpZnQoKTsKICAgICBBTFdBWVNf
SU5MSU5FIGludCBwZWVrKGludCBvZmZzZXQpOwpAQCAtMTM5LDE4ICsxNDAsMjEgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKIAogICAgIFVTdHJpbmcgZ2V0SW52
YWxpZENoYXJNZXNzYWdlKCk7Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciogY3VycmVu
dENoYXJhY3RlcigpIGNvbnN0OwotICAgIEFMV0FZU19JTkxJTkUgaW50IGN1cnJlbnRPZmZzZXQo
KSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQqIGN1cnJlbnRDaGFyYWN0ZXIoKSBj
b25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T2Zm
c2V0RnJvbUNoYXJPZmZzZXQoY29uc3QgVCogY2hhck9mZnNldCkgeyBzZXRPZmZzZXQoY2hhck9m
ZnNldCAtIG1fY29kZVN0YXJ0KTsgfQogCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlm
aWVyKiBtYWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCk7CiAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBtYWtlSWRlbnRpZmllcihj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAKICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgbGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3Q7CiAKLSAgICBlbnVtIFNo
aWZ0VHlwZSB7IERvQm91bmRzQ2hlY2ssIERvTm90Qm91bmRzQ2hlY2sgfTsKICAgICB0ZW1wbGF0
ZSA8aW50IHNoaWZ0QW1vdW50LCBTaGlmdFR5cGUgc2hvdWxkQm91bmRzQ2hlY2s+IHZvaWQgaW50
ZXJuYWxTaGlmdCgpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+
IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgcGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKik7CiAg
ICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRJZGVudGlmaWVycz4gQUxXQVlTX0lOTElORSBK
U1Rva2VuVHlwZSBwYXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqLCB1bnNpZ25lZCwgYm9vbCBz
dHJpY3RNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBK
U1Rva2VuVHlwZSBwYXJzZUlkZW50aWZpZXJTbG93Q2FzZShKU1Rva2VuRGF0YSosIHVuc2lnbmVk
LCBib29sIHN0cmljdE1vZGUpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5n
cz4gQUxXQVlTX0lOTElORSBib29sIHBhcnNlU3RyaW5nKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJp
Y3RNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IGJvb2wgcGFy
c2VTdHJpbmdTbG93Q2FzZShKU1Rva2VuRGF0YSosIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBwYXJzZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBwYXJzZURlY2ltYWwoZG91YmxlJiByZXR1cm5WYWx1ZSk7CkBAIC0xNjMs
MTYgKzE2NywxNiBAQCBwcml2YXRlOgogICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1f
bGFzdExpbmVOdW1iZXI7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI4OworICAgIFZlY3Rv
cjxMQ2hhcj4gbV9idWZmZXI4OwogICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZmZXIxNjsKICAgICBi
b29sIG1fdGVybWluYXRvcjsKICAgICBib29sIG1fZGVsaW1pdGVkOyAvLyBlbmNvdW50ZXJlZCBk
ZWxpbWl0ZXIgbGlrZSAiJyIgYW5kICJ9IiBvbiBsYXN0IHJ1bgogICAgIGludCBtX2xhc3RUb2tl
bjsKIAogICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwotICAgIGNvbnN0IFVDaGFyKiBt
X2NvZGU7Ci0gICAgY29uc3QgVUNoYXIqIG1fY29kZVN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBt
X2NvZGVFbmQ7CisgICAgY29uc3QgVCogbV9jb2RlOworICAgIGNvbnN0IFQqIG1fY29kZVN0YXJ0
OworICAgIGNvbnN0IFQqIG1fY29kZUVuZDsKICAgICBib29sIG1faXNSZXBhcnNpbmc7CiAgICAg
Ym9vbCBtX2F0TGluZVN0YXJ0OwogICAgIGJvb2wgbV9lcnJvcjsKQEAgLTE4NiwzNyArMTkwLDQ5
IEBAIHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiB9OwogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgTGV4ZXI6OmlzV2hpdGVTcGFjZShpbnQgY2gpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNXaGl0ZVNwYWNlKGludCBj
aCkKIHsKICAgICByZXR1cm4gaXNBU0NJSShjaCkgPyAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcg
fHwgY2ggPT0gMHhCIHx8IGNoID09IDB4QykgOiAoV1RGOjpVbmljb2RlOjppc1NlcGFyYXRvclNw
YWNlKGNoKSB8fCBjaCA9PSAweEZFRkYpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6
OmlzTGluZVRlcm1pbmF0b3IoaW50IGNoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNf
SU5MSU5FIGJvb2wgTGV4ZXI8VD46OmlzTGluZVRlcm1pbmF0b3IoaW50IGNoKQogewogICAgIHJl
dHVybiBjaCA9PSAnXHInIHx8IGNoID09ICdcbicgfHwgKGNoICYgfjEpID09IDB4MjAyODsKIH0K
IAotaW5saW5lIHVuc2lnbmVkIGNoYXIgTGV4ZXI6OmNvbnZlcnRIZXgoaW50IGMxLCBpbnQgYzIp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB1bnNpZ25lZCBjaGFyIExleGVyPFQ+Ojpj
b252ZXJ0SGV4KGludCBjMSwgaW50IGMyKQogewogICAgIHJldHVybiAodG9BU0NJSUhleFZhbHVl
KGMxKSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShjMik7CiB9CiAKLWlubGluZSBVQ2hhciBMZXhl
cjo6Y29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgVUNoYXIgTGV4ZXI8VD46OmNvbnZlcnRVbmljb2RlKGlu
dCBjMSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKIHsKICAgICByZXR1cm4gKGNvbnZlcnRIZXgo
YzEsIGMyKSA8PCA4KSB8IGNvbnZlcnRIZXgoYzMsIGM0KTsKIH0KIAotQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyKiBMZXhlcjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJ
TkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiAmbV9hcmVuYS0+bWFr
ZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8
VD46Om1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
KQogewogICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBj
aGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVy
OjpsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZv
KiB0b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhw
ZWN0SWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5J
bmZvLCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCiB7Ci0gICAgQVNTRVJUKChs
ZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpOwotICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9
IG1fY29kZTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gc3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIq
IGVuZCA9IG1fY29kZUVuZDsKKyAgICBBU1NFUlQoKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZl
ZFdvcmRzKSk7CisgICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CisgICAgY29uc3QgVCogcHRy
ID0gc3RhcnQ7CisgICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOwogICAgIGlmIChwdHIgPj0g
ZW5kKSB7CiAgICAgICAgIEFTU0VSVChwdHIgPT0gZW5kKTsKICAgICAgICAgZ290byBzbG93Q2Fz
ZTsKQEAgLTI0MSw3ICsyNTcsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjps
ZXhFeHBlCiAgICAgbV9jb2RlID0gcHRyOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBpZGVudGlmaWVy
IGlmIG5lZWRlZAotICAgIGlmIChsZXhUeXBlICYgRG9udEJ1aWxkS2V5d29yZHMpCisgICAgaWYg
KGxleFR5cGUgJiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgdG9rZW5EYXRhLT5pZGVu
dCA9IDA7CiAgICAgZWxzZQogICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gbWFrZUlkZW50aWZp
ZXIoc3RhcnQsIHB0ciAtIHN0YXJ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFBhcnNlcjo6
UGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwKICAgICAsIG1fbGFzdElkZW50aWZpZXIo
MCkKICAgICAsIG1fc291cmNlRWxlbWVudHMoMCkKIHsKLSAgICBtX2xleGVyID0gbmV3IExleGVy
KGdsb2JhbERhdGEpOworICAgIG1fbGV4ZXIgPSBuZXcgTGV4ZXI8VUNoYXI+KGdsb2JhbERhdGEp
OwogICAgIG1fYXJlbmEgPSBtX2dsb2JhbERhdGEtPnBhcnNlckFyZW5hOwogICAgIG1fbGV4ZXIt
PnNldENvZGUoc291cmNlLCBtX2FyZW5hKTsKIApAQCAtMTE1OCw5ICsxMTU4LDkgQEAgdGVtcGxh
dGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZAogICAgIGNhc2UgU1RSSU5HOiB7CiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAg
ICAgICAgIGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgKCppZGVudCA9PSBtX2dsb2JhbERh
dGEtPnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0
eU5hbWVzLT5zZXQpKSkKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJ
Z25vcmVSZXNlcnZlZFdvcmRzKTsKKyAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExl
eElnbm9yZVJlc2VydmVkV29yZHMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXh0RXhw
ZWN0SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpE
b250QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhJ
Z25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChtYXRjaChDT0xPTikpIHsKICAgICAgICAgICAgIG5leHQoKTsK
QEAgLTE0ODksNyArMTQ4OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3MKICAgICAgICAgY2FzZSBET1Q6IHsKICAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJl
c3Npb25Db3VudCsrOwogICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5F
bmQoKTsKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNl
cnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAg
IG5leHRFeHBlY3RJZGVudGlmaWVyKExleElnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRl
cjo6RG9udEJ1aWxkS2V5d29yZHMpOwogICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwog
ICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKG1fbGV4ZXItPmxhc3RM
aW5lTnVtYmVyKCksIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQs
IGV4cHJlc3Npb25FbmQsIHRva2VuRW5kKCkpOwogICAgICAgICAgICAgbmV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5ODk5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTky
MCw3ICs5MjAsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgY29uc3QgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2Vy
QXJlbmEqIG1fYXJlbmE7Ci0gICAgTGV4ZXIqIG1fbGV4ZXI7CisgICAgTGV4ZXI8VUNoYXI+KiBt
X2xleGVyOwogICAgIAogICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CiAgICAgYm9vbCBtX2Vycm9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkocmV2
aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5h
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBjbGVhcigpOwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25z
dCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgorICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVy
KEpTR2xvYmFsRGF0YSosIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoSlNHbG9iYWxEYXRh
KiwgZG91YmxlIG51bWJlcik7CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVycy5pc0VtcHR5KCk7IH0KQEAgLTY1LDcgKzY2LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEZpeGVkQXJyYXk8SWRlbnRpZmllciosIE1heGltdW1DYWNoYWJsZUNo
YXJhY3Rlcj4gbV9yZWNlbnRJZGVudGlmaWVyczsKICAgICB9OwogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKICAgICB7CiAg
ICAgICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3Rlcikgewog
ICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBj
aGFyYWN0ZXJzLCBsZW5ndGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U291cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U291cmNlQ29kZS5oCShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvdmlkZXItPmRhdGEoKSArIG1fc3RhcnRDaGFyOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2VuZENoYXIgLSBtX3N0YXJ0Q2hhcjsgfQogICAgICAgICAKLSAgICAg
ICAgU291cmNlQ29kZSBzdWJFeHByZXNzaW9uKGludCwgaW50LCBpbnQpOworICAgICAgICBTb3Vy
Y2VDb2RlIHN1YkV4cHJlc3Npb24odW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwpAQCAtODgs
OCArODgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVybiBTb3VyY2VD
b2RlKFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsKSwgZmlyc3RMaW5l
KTsKICAgICB9Ci0gICAgCi0gICAgaW5saW5lIFNvdXJjZUNvZGUgU291cmNlQ29kZTo6c3ViRXhw
cmVzc2lvbihpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKKwor
ICAgIGlubGluZSBTb3VyY2VDb2RlIFNvdXJjZUNvZGU6OnN1YkV4cHJlc3Npb24odW5zaWduZWQg
b3BlbkJyYWNlLCB1bnNpZ25lZCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7CiAgICAg
ICAgIEFTU0VSVChwcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgJKHJldmlz
aW9uIDk4OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHZpcnR1YWwgVVN0cmluZyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
ID0gMDsKICAgICAgICAgdmlydHVhbCBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0ID0gMDsKKyAg
ICAgICAgdmlydHVhbCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgPSAwOwog
ICAgICAgICB2aXJ0dWFsIGludCBsZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgICAgIAogICAgICAg
ICBjb25zdCBVU3RyaW5nJiB1cmwoKSB7IHJldHVybiBtX3VybDsgfQpAQCAtODksNiArOTAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZS5zdWJzdHJpbmdT
aGFyaW5nSW1wbChzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgICAgIGNvbnN0IFN0
cmluZ0ltcGwqIHN0cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5pbXBsKCk7IH0K
ICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9
CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3Vy
Y2VQcm92aWRlckNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDYgKzIzLDkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCisjaWZuZGVmIFNvdXJjZVByb3ZpZGVyQ2FjaGVfaAorI2RlZmluZSBTb3VyY2VQcm92aWRl
ckNhY2hlX2gKKwogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIApAQCAtNDYsMyArNDksNSBAQCBwcml2YXRlOgogfTsKIAogfQorCisjZW5kaWYg
Ly8gU291cmNlUHJvdmlkZXJDYWNoZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDgg
KzExNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBDcmVhdGVzQVNUID0gZmFs
c2U7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gZmFsc2U7
CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ2FuVXNlRnVuY3Rpb25DYWNoZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZEtleXdvcmRzID0gTGV4ZXI6OkRvbnRCdWls
ZEtleXdvcmRzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJpbmdzID0g
TGV4ZXI6OkRvbnRCdWlsZFN0cmluZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRC
dWlsZEtleXdvcmRzID0gTGV4RG9udEJ1aWxkS2V5d29yZHM7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIERvbnRCdWlsZFN0cmluZ3MgPSBMZXhEb250QnVpbGRTdHJpbmdzOwogCiAgICAgaW50
IGNyZWF0ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gMTsgfQogICAgIEV4cHJlc3Npb25UeXBl
IG1ha2VGdW5jdGlvbkNhbGxOb2RlKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIENhbGxFeHByOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODksNyArODksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0U2VtaWNvbG9uSWZO
ZWVkCiAKICAgICBmb3IgKHNpemVfdCBpID0gZnVuY3Rpb25Cb2R5Lmxlbmd0aCgpIC0gMjsgaSA+
IDA7IC0taSkgewogICAgICAgICBVQ2hhciBjaCA9IGZ1bmN0aW9uQm9keVtpXTsKLSAgICAgICAg
aWYgKCFMZXhlcjo6aXNXaGl0ZVNwYWNlKGNoKSAmJiAhTGV4ZXI6OmlzTGluZVRlcm1pbmF0b3Io
Y2gpKSB7CisgICAgICAgIGlmICghTGV4ZXI8VUNoYXI+Ojppc1doaXRlU3BhY2UoY2gpICYmICFM
ZXhlcjxVQ2hhcj46OmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CiAgICAgICAgICAgICBpZiAoY2gg
IT0gJzsnICYmIGNoICE9ICd9JykKICAgICAgICAgICAgICAgICBmdW5jdGlvbkJvZHkgPSBtYWtl
VVN0cmluZyhmdW5jdGlvbkJvZHkuc3Vic3RyaW5nU2hhcmluZ0ltcGwoMCwgaSArIDEpLCAiOyIs
IGZ1bmN0aW9uQm9keS5zdWJzdHJpbmdTaGFyaW5nSW1wbChpICsgMSwgZnVuY3Rpb25Cb2R5Lmxl
bmd0aCgpIC0gKGkgKyAxKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDk4OTk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KIAogdXNpbmcgV1RGOjpUaHJlYWRTcGVjaWZpYzsKQEAgLTQzLDE5ICs0MiwxMyBAQCBJZGVu
dGlmaWVyVGFibGU6On5JZGVudGlmaWVyVGFibGUoKQogICAgIGZvciAoSGFzaFNldDxTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCiAgICAgICAgICgqaXRlciktPnNldElzSWRlbnRpZmllcihmYWxzZSk7CiB9CisKIHN0ZDo6
cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IElkZW50aWZpZXJUYWJs
ZTo6YWRkKFN0cmluZ0ltcGwqIHZhbHVlKQogewogICAgIHN0ZDo6cGFpcjxIYXNoU2V0PFN0cmlu
Z0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFibGUuYWRkKHZhbHVlKTsKICAg
ICAoKnJlc3VsdC5maXJzdCktPnNldElzSWRlbnRpZmllcih0cnVlKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQotdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLXN0ZDo6cGFpcjxIYXNo
U2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IElkZW50aWZpZXJUYWJsZTo6YWRkKFUg
dmFsdWUpCi17Ci0gICAgc3RkOjpwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwg
Ym9vbD4gcmVzdWx0ID0gbV90YWJsZS5hZGQ8VSwgVj4odmFsdWUpOwotICAgICgqcmVzdWx0LmZp
cnN0KS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKIElk
ZW50aWZpZXJUYWJsZSogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkKIHsKQEAgLTEyMiwzMyArMTE1
LDYgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoRQogICAgIHJldHVy
biBhZGQoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYyk7CiB9CiAKLXN0cnVjdCBVQ2hhckJ1ZmZlciB7
Ci0gICAgY29uc3QgVUNoYXIqIHM7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aDsKLX07Ci0KLXN0
cnVjdCBJZGVudGlmaWVyVUNoYXJCdWZmZXJUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0
cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2g8VUNoYXI+KGJ1Zi5zLCBidWYubGVuZ3RoKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IFVDaGFyQnVm
ZmVyJiBidWYpCi0gICAgewotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoc3RyLCBi
dWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0
cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgVUNoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFz
aCkKLSAgICB7Ci0gICAgICAgIFVDaGFyKiBkOwotICAgICAgICBTdHJpbmdJbXBsKiByID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYubGVuZ3RoLCBkKS5sZWFrUmVmKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQotICAgICAg
ICAgICAgZFtpXSA9IGJ1Zi5zW2ldOwotICAgICAgICByLT5zZXRIYXNoKGhhc2gpOwotICAgICAg
ICBsb2NhdGlvbiA9IHI7IAotICAgIH0KLX07Ci0KIHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUlu
dDMyKGNvbnN0IFVTdHJpbmcmIHN0cmluZywgYm9vbCYgb2spCiB7CiAgICAgb2sgPSBmYWxzZTsK
QEAgLTE5MywyOCArMTU5LDYgQEAgdWludDMyX3QgSWRlbnRpZmllcjo6dG9VSW50MzIoY29uc3Qg
VVN0cgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhciogcywgaW50
IGxlbmd0aCkKLXsKLSAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgVUNoYXIgYyA9IHNb
MF07Ci0gICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAg
ICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7Ci0gICAgfQotICAgIGlmICghbGVuZ3RoKQotICAgICAg
ICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBVQ2hhckJ1ZmZlciBidWYgPSB7cywg
bGVuZ3RofTsgCi0gICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+
IGFkZFJlc3VsdCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRkPFVDaGFyQnVmZmVy
LCBJZGVudGlmaWVyVUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYpOwotCi0gICAgLy8gSWYgdGhl
IHN0cmluZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCi0g
ICAgLy8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KLSAg
ICByZXR1cm4gYWRkUmVzdWx0LnNlY29uZCA/IGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpIDog
KmFkZFJlc3VsdC5maXJzdDsKLX0KLQotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVy
OjphZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gYWRkKCZleGVjLT5nbG9iYWxEYXRhKCksIHMsIGxlbmd0aCk7Ci19Ci0KIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBTdHJpbmdJbXBsKiByKQogewogICAgIEFTU0VSVCghci0+aXNJZGVudGlmaWVy
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAko
cmV2aXNpb24gOTg5OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDExIEBACiAjaWZuZGVmIElkZW50aWZp
ZXJfaAogI2RlZmluZSBJZGVudGlmaWVyX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCiAjaW5j
bHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM2LDExICszOCwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSWRlbnRpZmllcigpIHsgfQogCiAgICAgICAg
IElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFk
ZChleGVjLCBzKSkgeyB9IC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4K
KyAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExDaGFyKiBzLCBpbnQg
bGVuZ3RoKSA6IG1fc3RyaW5nKGFkZChleGVjLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRl
bnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1f
c3RyaW5nKGFkZChleGVjLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRlbnRpZmllcihFeGVj
U3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQoZXhlYywgcmVwKSkg
eyB9IAogICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYg
cykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IH0KIAogICAgICAgICBJZGVudGlm
aWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykgOiBtX3N0cmluZyhh
ZGQoZ2xvYmFsRGF0YSwgcykpIHsgfSAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0
ZXJhbHMuCisgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25z
dCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcywgbGVu
Z3RoKSkgeyB9CiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBj
b25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcywg
bGVuZ3RoKSkgeyB9CiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHJlcCkpIHsgfSAK
ICAgICAgICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJp
bmcmIHMpIDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHMuaW1wbCgpKSkgeyB9CkBAIC03Nyw2
ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsKICAgICAgICAgc3RhdGljIGlubGlu
ZSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqYSwgY29uc3QgY2hhcipiKSB7IHJldHVybiBJ
ZGVudGlmaWVyOjplcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9
OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENo
YXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7
IHJldHVybiA6OmVxdWFsKGEsIGIpOyB9CiAKQEAgLTg5LDggKzk0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0
IElkZW50aWZpZXImIGIpIHsgcmV0dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcu
aW1wbCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEs
IGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0K
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwg
Y29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gYWRkKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBhZGQoRXhlY1N0YXRlKiwgY29uc3QgVCosIGludCBsZW5ndGgpOworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEpTR2xvYmFs
RGF0YSosIGNvbnN0IFQqLCBpbnQgbGVuZ3RoKTsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByKQogICAgICAg
ICB7CkBAIC0xMTcsNyArMTIyLDYxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
dm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKik7CiAgICAgICAgIHN0
YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShKU0dsb2JhbERhdGEqKTsKICAg
ICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IENoYXJCdWZmZXIg
eworICAgICAgICBjb25zdCBUKiBzOworICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworICAg
IH07CiAgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IElkZW50aWZp
ZXJDaGFyQnVmZmVyVHJhbnNsYXRvciB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IENoYXJCdWZmZXI8VD4mIGJ1ZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0
cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2g8VD4oYnVmLnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBzdHIsIGNv
bnN0IENoYXJCdWZmZXI8VD4mIGJ1ZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIElk
ZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3Qg
Q2hhckJ1ZmZlcjxUPiYgYnVmLCB1bnNpZ25lZCBoYXNoKQorICAgICAgICB7CisgICAgICAgICAg
ICBUKiBkOworICAgICAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1JlZigpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBidWYubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZFtp
XSA9IGJ1Zi5zW2ldOworICAgICAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKKyAgICAgICAgICAg
IGxvY2F0aW9uID0gcjsgCisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgaWYgKGxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICBUIGMgPSBzWzBdOworICAgICAgICAg
ICAgaWYgKChzaXplb2YoVCkgPT0gMSkgfHwgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBs
OjplbXB0eSgpOworICAgICAgICBDaGFyQnVmZmVyPFQ+IGJ1ZiA9IHtzLCBsZW5ndGh9OyAKKyAg
ICAgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3Vs
dCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRkPENoYXJCdWZmZXI8VD4sIElkZW50
aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxUPiA+KGJ1Zik7CisgICAgICAgIAorICAgICAgICAv
LyBJZiB0aGUgc3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9w
dCBpdC4KKyAgICAgICAgLy8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhh
dCBpcyBzby4KKyAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5zZWNvbmQgPyBhZG9wdFJlZigqYWRk
UmVzdWx0LmZpcnN0KSA6ICphZGRSZXN1bHQuZmlyc3Q7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgTkVWRVJfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVCogcywgaW50IGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZGQoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcywgbGVuZ3RoKTsK
KyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImIGEs
IGNvbnN0IElkZW50aWZpZXImIGIpCiAgICAgewogICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZXF1YWwoYSwgYik7CkBAIC0xNTIsNyArMjExLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsK
ICAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwociwgcyk7CiAgICAgfQotICAgIAorCisgICAgaW5s
aW5lIGJvb2wgSWRlbnRpZmllcjo6ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogciwgY29uc3QgTENo
YXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmVxdWFs
KHIsIHMsIGxlbmd0aCk7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgSWRlbnRpZmllcjo6ZXF1
YWwoY29uc3QgU3RyaW5nSW1wbCogciwgY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHIsIHMsIGxlbmd0aCk7CkBAIC0xNzcs
NiArMjQxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxTdHJpbmdJbXBsPiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8
U3RyaW5nSW1wbD4gPiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4gSWRlbnRpZmllck1h
cDsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgc3RkOjpwYWly
PEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4gSWRlbnRpZmllclRhYmxlOjph
ZGQoVSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0ZDo6cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwq
Pjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFibGUuYWRkPFUsIFY+KHZhbHVlKTsKKyAg
ICAgICAgKCpyZXN1bHQuZmlyc3QpLT5zZXRJc0lkZW50aWZpZXIodHJ1ZSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIElk
ZW50aWZpZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gOTg5OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4
ZWNTdGF0ZSogZXhlYywgYwogICAgICAgICBpZiAoYyA9PSAnJScpIHsKICAgICAgICAgICAgIGlu
dCBjaGFyTGVuID0gMDsKICAgICAgICAgICAgIGlmIChrIDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhl
eERpZ2l0KHBbMV0pICYmIGlzQVNDSUlIZXhEaWdpdChwWzJdKSkgewotICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgYjAgPSBMZXhlcjo6Y29udmVydEhleChwWzFdLCBwWzJdKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyIGIwID0gTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0SGV4KHBbMV0sIHBb
Ml0pOwogICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZXF1ZW5jZUxlbiA9IFVURjhTZXF1ZW5j
ZUxlbmd0aChiMCk7CiAgICAgICAgICAgICAgICAgaWYgKHNlcXVlbmNlTGVuICE9IDAgJiYgayA8
PSBsZW4gLSBzZXF1ZW5jZUxlbiAqIDMpIHsKICAgICAgICAgICAgICAgICAgICAgY2hhckxlbiA9
IHNlcXVlbmNlTGVuICogMzsKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgYwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IHNlcXVlbmNlTGVuOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiBxID0gcCArIGkgKiAzOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHFbMF0gPT0g
JyUnICYmIGlzQVNDSUlIZXhEaWdpdChxWzFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocVsyXSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBMZXhlcjo6Y29udmVydEhl
eChxWzFdLCBxWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZVtpXSA9
IExleGVyPFVDaGFyPjo6Y29udmVydEhleChxWzFdLCBxWzJdKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSAwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0
YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGMKICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChwWzJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocFszXSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChwWzRdKSAmJiBpc0FT
Q0lJSGV4RGlnaXQocFs1XSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hhckxlbiA9IDY7Ci0g
ICAgICAgICAgICAgICAgICAgIHUgPSBMZXhlcjo6Y29udmVydFVuaWNvZGUocFsyXSwgcFszXSwg
cFs0XSwgcFs1XSk7CisgICAgICAgICAgICAgICAgICAgIHUgPSBMZXhlcjxVQ2hhcj46OmNvbnZl
cnRVbmljb2RlKHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaGFyTGVuICYmICh1ID09IDAgfHwgdSA+PSAx
MjggfHwgIXN0cmNocihkb05vdFVuZXNjYXBlLCB1KSkpIHsKQEAgLTE3MywxMiArMTczLDEyIEBA
IHN0YXRpYyBpbnQgcGFyc2VEaWdpdCh1bnNpZ25lZCBzaG9ydCBjLCAKICAgICByZXR1cm4gZGln
aXQ7CiB9CiAKLWRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IGNoYXIqIHMsIGludCBsZW5n
dGgsIGludCByYWRpeCkKK2RvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IExDaGFyKiBzLCBp
bnQgbGVuZ3RoLCBpbnQgcmFkaXgpCiB7CiAgICAgZG91YmxlIG51bWJlciA9IDAuMDsKICAgICBk
b3VibGUgcmFkaXhNdWx0aXBsaWVyID0gMS4wOwogCi0gICAgZm9yIChjb25zdCBjaGFyKiBwID0g
cyArIGxlbmd0aCAtIDE7IHAgPj0gczsgcC0tKSB7CisgICAgZm9yIChjb25zdCBMQ2hhciogcCA9
IHMgKyBsZW5ndGggLSAxOyBwID49IHM7IHAtLSkgewogICAgICAgICBpZiAocmFkaXhNdWx0aXBs
aWVyID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewogICAgICAg
ICAgICAgaWYgKCpwICE9ICcwJykgewogICAgICAgICAgICAgICAgIG51bWJlciA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKQEAgLTU3OCwxMiArNTc4LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1UKICAgICAgICAgVUNoYXIgdTsK
ICAgICAgICAgaWYgKGNbMF0gPT0gJyUnICYmIGsgPD0gbGVuIC0gNiAmJiBjWzFdID09ICd1Jykg
ewogICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdChjWzJdKSAmJiBpc0FTQ0lJSGV4RGln
aXQoY1szXSkgJiYgaXNBU0NJSUhleERpZ2l0KGNbNF0pICYmIGlzQVNDSUlIZXhEaWdpdChjWzVd
KSkgewotICAgICAgICAgICAgICAgIHUgPSBMZXhlcjo6Y29udmVydFVuaWNvZGUoY1syXSwgY1sz
XSwgY1s0XSwgY1s1XSk7CisgICAgICAgICAgICAgICAgdSA9IExleGVyPFVDaGFyPjo6Y29udmVy
dFVuaWNvZGUoY1syXSwgY1szXSwgY1s0XSwgY1s1XSk7CiAgICAgICAgICAgICAgICAgYyA9ICZ1
OwogICAgICAgICAgICAgICAgIGsgKz0gNTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChjWzBdID09ICclJyAmJiBrIDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0KGNbMV0p
ICYmIGlzQVNDSUlIZXhEaWdpdChjWzJdKSkgewotICAgICAgICAgICAgdSA9IFVDaGFyKExleGVy
Ojpjb252ZXJ0SGV4KGNbMV0sIGNbMl0pKTsKKyAgICAgICAgICAgIHUgPSBVQ2hhcihMZXhlcjxV
Q2hhcj46OmNvbnZlcnRIZXgoY1sxXSwgY1syXSkpOwogICAgICAgICAgICAgYyA9ICZ1OwogICAg
ICAgICAgICAgayArPSAyOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9u
IDk4OTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVF
cnJvcihFeGVjU3RhdGUqKTsKIAogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVy
Zmxvd0xvd2VyQm91bmQgPSA5MDA3MTk5MjU0NzQwOTkyLjA7Ci0gICAgZG91YmxlIHBhcnNlSW50
T3ZlcmZsb3coY29uc3QgY2hhciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CisgICAgZG91Ymxl
IHBhcnNlSW50T3ZlcmZsb3coY29uc3QgTENoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOwor
ICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hhciogcywg
aW50IGxlbmd0aCwgaW50IHJhZGl4KSB7IHJldHVybiBwYXJzZUludE92ZXJmbG93KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3RoLCByYWRpeCk7IH0KICAgICBkb3VibGUg
cGFyc2VJbnRPdmVyZmxvdyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CiAg
ICAgYm9vbCBpc1N0cldoaXRlU3BhY2UoVUNoYXIpOwogICAgIGRvdWJsZSBqc1RvTnVtYmVyKGNv
bnN0IFVTdHJpbmcmIHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDk4OTk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3
ICszNDAsNyBAQCB0ZW1wbGF0ZSA8TGl0ZXJhbFBhcnNlcjo6UGFyc2VyTW9kZSBtb2RlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva0Vycm9yOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKEpTQzo6TGV4ZXI6OmNvbnZlcnRVbmljb2RlKG1fcHRyWzFdLCBtX3B0clsy
XSwgbV9wdHJbM10sIG1fcHRyWzRdKSk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKEpTQzo6TGV4ZXI8VUNoYXI+Ojpjb252ZXJ0VW5pY29kZShtX3B0clsxXSwgbV9wdHJbMl0s
IG1fcHRyWzNdLCBtX3B0cls0XSkpOwogICAgICAgICAgICAgICAgICAgICBtX3B0ciArPSA1Owog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDgg
KzQ0LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogLy8gTGFu
ZGluZyB0aGUgZmlsZSBtb3ZlcyBpbiBvbmUgcGF0Y2gsIHdpbGwgZm9sbG93IG9uIHdpdGggcGF0
Y2hlcyB0byBjaGFuZ2UgdGhlIG5hbWVzcGFjZXMuCiBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBJ
ZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I7Ci1zdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJU
cmFuc2xhdG9yOwotc3RydWN0IElkZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsK
IH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02Myw4ICs2Miw4IEBAIHR5cGVkZWYgYm9vbCAoKklz
V2hpdGVTcGFjZUZ1bmN0aW9uUHRyKSgKIGNsYXNzIFN0cmluZ0ltcGwgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFN0cmluZ0ltcGwpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBm
cmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOwotICAgIGZyaWVu
ZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Ci0gICAgZnJpZW5k
IHN0cnVjdCBKU0M6OklkZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CisgICAgZnJpZW5k
IHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxMQ2hhcj47CisgICAg
ZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxVQ2hhcj47
CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBz
dHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVj
dCBXVEY6Okhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3I7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5OTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTExLTAxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgorCisgICAgICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBK
U0M6OkxleGVyIGNsYXNzIGJ5IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZWQgdGhlIFNv
dXJjZVByb3ZpZGVyOjpkYXRhKCkgdmlydHVhbCBtZXRob2QgdG8gcmV0dXJuIGEKKyAgICAgICAg
U3RyaW5nSW1wbCogaW5zdGVhZCBvZiBhIFVDaGFyKi4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSByZWZhY3RvcmVkIFNvdXJj
ZVByb3ZpZGVyIGNsYXNzIGFuZCBzdWItY2xhc3Nlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRT
Y3JpcHRTb3VyY2VQcm92aWRlcjo6ZGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U3RyaW5nU291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1NvdXJjZVBy
b3ZpZGVyOjpkYXRhKToKKwogMjAxMS0xMS0wMSAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBnZXQgRXZlbnRRdWV1ZSBmcm9tIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgaW5zdGVhZCBvZiBEb2N1bWVudApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5o
CShyZXZpc2lvbiA5ODk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNj
cmlwdFNvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEpTQzo6VVN0cmluZyBnZXRSYW5nZShpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0IHsgcmV0dXJuIEpTQzo6VVN0cmluZyhtX2NhY2hlZFNjcmlwdC0+
c2NyaXB0KCkuY2hhcmFjdGVycygpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQogICAgICAgICBj
b25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQo
KS5jaGFyYWN0ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5pbXBsKCk7IH0KICAgICAg
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5s
ZW5ndGgoKTsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDk4OTk0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0UG9zaXRpb247IH0KICAgICAgICAgSlNDOjpVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwg
aW50IGVuZCkgY29uc3QgeyByZXR1cm4gSlNDOjpVU3RyaW5nKG1fc291cmNlLmNoYXJhY3RlcnMo
KSArIHN0YXJ0LCBlbmQgLSBzdGFydCk7IH0KICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgU3Ry
aW5nSW1wbCogc3RyaW5nRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmltcGwoKTsgfQog
ICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UubGVuZ3RoKCk7IH0K
ICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsg
fQogCkBAIC02NCw2ICs2NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB7CiAgICAgICAg
IHJldHVybiBKU0M6OlNvdXJjZUNvZGUoU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShzb3Vy
Y2UsIHVybCksIGZpcnN0TGluZSk7CiAgICAgfQorICAgIAorICAgIAogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAK
</data>
<flag name="commit-queue"
          id="111770"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113525</attachid>
            <date>2011-11-03 11:01:37 -0700</date>
            <delta_ts>2011-11-03 11:50:17 -0700</delta_ts>
            <desc>Patch with updates to fix build issues</desc>
            <filename>71331-3.patch</filename>
            <type>text/plain</type>
            <size>67137</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyMjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA2IEBA
CisyMDExLTExLTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5
IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZSB0aGUgTGV4ZXIgY2xhc3MgdG8gYmUgYSB0
ZW1wbGF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgIHR5cGUgb2YgdGhl
IHNvdXJjZS4gIEluIHRoZSBwcm9jZXNzIHVwZGF0ZWQgdGhlIHBhcnNlSWRlbnRpZmllcigpCisg
ICAgICAgIGFuZCBwYXJzZVN0cmluZygpIG1ldGhvZHMgdG8gY3JlYXRlIDggYml0IHN0cmluZ3Mg
d2hlcmUgcG9zc2libGUuCisgICAgICAgIEFsc28gYWRkZWQgc29tZSBoZWxwZXIgbWV0aG9kcyBm
b3IgYWNjdW11bGF0aW5nIHRlbXBvcmFyeSBzdHJpbmcKKyAgICAgICAgZGF0YSBpbiB0aGUgOCBh
bmQgMTYgYml0IHZlY3RvcnMuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFVwZGF0ZWQgdGhlIEtleXdvcmRMb29rdXAg
Z2VuZXJhdG9yIHRvIGNyZWF0ZSBjb2RlIHRvIG1hdGNoIGtleXdvcmRzCisgICAgICAgIGZvciBi
b3RoIDggYW5kIDE2IGJpdCBzb3VyY2Ugc3RyaW5ncy4KKworICAgICAgICBEdWUgdG8gYSBjb21w
aWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIG1vdmVkIGVudW0KKyAgICAgICAg
ZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBMZXhlciBjbGFzcyBkZWNsYXJhdGlvbi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHBhcnNlci9MZXhl
ci5jcHA6CisgICAgICAgIChKU0M6Ojo6TGV4ZXIpOgorICAgICAgICAoSlNDOjo6On5MZXhlcik6
CisgICAgICAgIChKU0M6Ojo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6
OjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6OjpzZXRDb2RlKToKKyAgICAgICAg
KEpTQzo6OjppbnRlcm5hbFNoaWZ0KToKKyAgICAgICAgKEpTQzo6OjpzaGlmdCk6CisgICAgICAg
IChKU0M6Ojo6cGVlayk6CisgICAgICAgIChKU0M6Ojo6Z2V0VW5pY29kZUNoYXJhY3Rlcik6Cisg
ICAgICAgIChKU0M6Ojo6c2hpZnRMaW5lVGVybWluYXRvcik6CisgICAgICAgIChKU0M6Ojo6bGFz
dFRva2VuV2FzUmVzdHJLZXl3b3JkKToKKyAgICAgICAgKEpTQzo6OjpyZWNvcmQ4KToKKyAgICAg
ICAgKEpTQzo6OjphcHBlbmQ4KToKKyAgICAgICAgKEpTQzo6OjphcHBlbmQxNik6CisgICAgICAg
IChKU0M6Ojo6cmVjb3JkMTYpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRpZmllcik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VJZGVudGlmaWVyU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUhleCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VPY3RhbCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VEZWNpbWFsKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJl
ckFmdGVyRGVjaW1hbFBvaW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJlckFmdGVyRXhw
b25lbnRJbmRpY2F0b3IpOgorICAgICAgICAoSlNDOjo6OnBhcnNlTXVsdGlsaW5lQ29tbWVudCk6
CisgICAgICAgIChKU0M6Ojo6bmV4dFRva2VuSXNDb2xvbik6CisgICAgICAgIChKU0M6Ojo6bGV4
KToKKyAgICAgICAgKEpTQzo6OjpzY2FuUmVnRXhwKToKKyAgICAgICAgKEpTQzo6Ojpza2lwUmVn
RXhwKToKKyAgICAgICAgKEpTQzo6OjpjbGVhcik6CisgICAgICAgIChKU0M6Ojo6c291cmNlQ29k
ZSk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjphcHBl
bmQxNik6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OnNldE9mZnNldEZyb21DaGFyT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Ojppc1do
aXRlU3BhY2UpOgorICAgICAgICAoSlNDOjo6OmlzTGluZVRlcm1pbmF0b3IpOgorICAgICAgICAo
SlNDOjo6OmNvbnZlcnRIZXgpOgorICAgICAgICAoSlNDOjo6OmNvbnZlcnRVbmljb2RlKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bGV4RXhwZWN0
SWRlbnRpZmllcik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAgICAgICAq
IHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgICogcGFy
c2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZTo6c3ViRXhwcmVzc2lv
bik6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcjo6c3RyaW5nRGF0YSk6CisgICAgICAgICogcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyQ2FjaGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppbnNl
cnRTZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllclRhYmxlOjphZGQpOgorICAgICAgICAqIHJ1bnRpbWUv
SWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAg
IChKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZXF1
YWwpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyVGFibGU6OmFkZCk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmRlY29kZSk6
CisgICAgICAgIChKU0M6OnBhcnNlSW50T3ZlcmZsb3cpOgorICAgICAgICAoSlNDOjpnbG9iYWxG
dW5jVW5lc2NhcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6cGFyc2VJbnRPdmVyZmxvdyk6CisgICAgICAgICogcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6TGV4ZXI6Omxl
eFN0cmluZyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorCiAyMDExLTExLTAz
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCBy
ZXZpZXdlZDogZml4aW5nIHdpbiBidWlsZC4gc3RlcDIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQkocmV2aXNpb24gOTkyMDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIFRyaWU6CiAgICAgICAgIHNlbGYua2V5
cyA9IFsodHJpZS5wcmVmaXgsIHRyaWUpIGZvciB0cmllIGluIHNvcnRlZChzZWxmLmtleXMudmFs
dWVzKCksIGtleT1vcGVyYXRvci5hdHRyZ2V0dGVyKCd3ZWlnaHQnKSwgcmV2ZXJzZT1UcnVlKV0K
ICAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHQKIAotICAgIGRlZiBwcmludFN1YlRyZWVBc0Mo
c2VsZiwgaW5kZW50KToKKyAgICBkZWYgcHJpbnRTdWJUcmVlQXNDKHNlbGYsIHR5cGVOYW1lLCBp
bmRlbnQpOgogICAgICAgICBzdHIgPSBtYWtlUGFkZGluZyhpbmRlbnQpCiAKICAgICAgICAgaWYg
c2VsZi52YWx1ZSAhPSBOb25lOgpAQCAtMTQ2LDEzICsxNDYsMTMgQEAgY2xhc3MgVHJpZToKICAg
ICAgICAgICAgICAgICBiYXNlID0gImNvZGUiCiAgICAgICAgICAgICAgICAgaWYgYmFzZUluZGV4
ID4gMDoKICAgICAgICAgICAgICAgICAgICAgYmFzZSA9ICJjb2RlICsgJWQiICUgYmFzZUluZGV4
Ci0gICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9ICgiQ09NUEFSRV9DSEFSQUNURVJTJWQoJXMs
ICIgJSAobGVuKHRlc3QpLCBiYXNlKSkgKyAiLCAiLmpvaW4odGVzdCkgKyAiKSIKKyAgICAgICAg
ICAgICAgICBjb21wYXJpc29uID0gKCJDT01QQVJFXyVkJXNTKCVzLCAiICUgKGxlbih0ZXN0KSwg
dHlwZU5hbWUsIGJhc2UpKSArICIsICIuam9pbih0ZXN0KSArICIpIgogICAgICAgICAgICAgaWYg
aXRlbUNvdW50ID09IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgImlmICgiICsgY29t
cGFyaXNvbiArICIpIHsiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwcmlu
dChzdHIgKyAifSBlbHNlIGlmICgiICsgY29tcGFyaXNvbiArICIpIHsiKQogCi0gICAgICAgICAg
ICB0cmllLnByaW50U3ViVHJlZUFzQyhpbmRlbnQgKyA0KQorICAgICAgICAgICAgdHJpZS5wcmlu
dFN1YlRyZWVBc0ModHlwZU5hbWUsIGluZGVudCArIDQpCiAgICAgICAgICAgICBpdGVtQ291bnQg
PSBpdGVtQ291bnQgKyAxCiAKICAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9PSBsZW4oc2VsZi5r
ZXlzKToKQEAgLTE3MywxMiArMTczLDIzIEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICMgbWF4IGxl
bmd0aCArIDEgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgYm91bmRzIGNoZWNraW5nIGF0IGFs
bAogICAgICAgICBwcmludCgic3RhdGljIGNvbnN0IGludCBtYXhUb2tlbkxlbmd0aCA9ICVkOyIg
JSAoc2VsZi5tYXhMZW5ndGgoKSArIDEpKQogICAgICAgICBwcmludCgiIikKLSAgICAgICAgcHJp
bnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUg
SlNUb2tlblR5cGUgTGV4ZXI6OnBhcnNlS2V5d29yZChKU1Rva2VuRGF0YSogZGF0YSkiKQorICAg
ICAgICBwcmludCgidGVtcGxhdGUgPD4iKQorICAgICAgICBwcmludCgidGVtcGxhdGUgPGJvb2wg
c2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxV
Q2hhcj46OnBhcnNlS2V5d29yZChKU1Rva2VuRGF0YSogZGF0YSkiKQogICAgICAgICBwcmludCgi
eyIpCiAgICAgICAgIHByaW50KCIgICAgQVNTRVJUKG1fY29kZUVuZCAtIG1fY29kZSA+PSBtYXhU
b2tlbkxlbmd0aCk7IikKICAgICAgICAgcHJpbnQoIiIpCiAgICAgICAgIHByaW50KCIgICAgY29u
c3QgVUNoYXIqIGNvZGUgPSBtX2NvZGU7IikKLSAgICAgICAgc2VsZi5wcmludFN1YlRyZWVBc0Mo
NCkKKyAgICAgICAgc2VsZi5wcmludFN1YlRyZWVBc0MoIlVDSEFSIiwgNCkKKyAgICAgICAgcHJp
bnQoIiAgICByZXR1cm4gSURFTlQ7IikKKyAgICAgICAgcHJpbnQoIn0iKQorICAgICAgICBwcmlu
dCgiIikKKyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDw+IikKKyAgICAgICAgcHJpbnQoInRlbXBs
YXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5
cGUgTGV4ZXI8TENoYXI+OjpwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKKyAgICAg
ICAgcHJpbnQoInsiKQorICAgICAgICBwcmludCgiICAgIEFTU0VSVChtX2NvZGVFbmQgLSBtX2Nv
ZGUgPj0gbWF4VG9rZW5MZW5ndGgpOyIpCisgICAgICAgIHByaW50KCIiKQorICAgICAgICBwcmlu
dCgiICAgIGNvbnN0IExDaGFyKiBjb2RlID0gbV9jb2RlOyIpCisgICAgICAgIHNlbGYucHJpbnRT
dWJUcmVlQXNDKCJDSEFSIiwgNCkKICAgICAgICAgcHJpbnQoIiAgICByZXR1cm4gSURFTlQ7IikK
ICAgICAgICAgcHJpbnQoIn0iKQogICAgICAgICBwcmludCgiIikKQEAgLTE5NCw1NyArMjA1LDg1
IEBAIHByaW50KCIvLyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBLZXkKIHByaW50KCIiIgog
I2lmIENQVShORUVEU19BTElHTkVEX0FDQ0VTUykKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RF
UlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKKyNkZWZpbmUgQ09NUEFSRV8yQ0hBUlMoYWRk
cmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAgICgoKGFkZHJlc3MpWzBdID09IGNoYXIxKSAmJiAo
KGFkZHJlc3MpWzFdID09IGNoYXIyKSkKKyNkZWZpbmUgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywg
Y2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKENPTVBBUkVfMkNIQVJTKGFkZHJl
c3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV8yQ0hBUlMoKGFkZHJlc3MpICsgMiwgY2hhcjMs
IGNoYXI0KSkKKyNkZWZpbmUgQ09NUEFSRV8yVUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikg
XFwKICAgICAoKChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsxXSA9PSBjaGFy
MikpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBj
aGFyMywgY2hhcjQpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEs
IGNoYXIyKSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFy
NCkpCisjZGVmaW5lIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIz
LCBjaGFyNCkgXFwKKyAgICAoQ09NUEFSRV8yVUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikg
JiYgQ09NUEFSRV8yVUNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCiAKICNlbHNl
IC8vIENQVShORUVEU19BTElHTkVEX0FDQ0VTUykKIAogI2lmIENQVShCSUdfRU5ESUFOKQogCi0j
ZGVmaW5lIENIQVJQQUlSX1RPVUlOVDMyKGEsIGIpIFxcCisjZGVmaW5lIENIQVJQQUlSX1RPVUlO
VDE2KGEsIGIpIFxcCisgICAgKCgoKHVpbnQxNl90KShhKSkgPDwgOCkgKyAodWludDE2X3QpKGIp
KQorI2RlZmluZSBDSEFSUVVBRF9UT1VJTlQzMihhLCBiLCBjLCBkKSBcXAorICAgICgoKCh1aW50
MzJfdCkoQ0hBUlBBSVJfVE9VSU5UMTYoYSwgYikpKSA8PCAxNikgKyBDSEFSUEFJUl9UT1VJTlQx
NihjLCBkKSkKKyNkZWZpbmUgVUNIQVJQQUlSX1RPVUlOVDMyKGEsIGIpIFxcCiAgICAgKCgoKHVp
bnQzMl90KShhKSkgPDwgMTYpICsgKHVpbnQzMl90KShiKSkKLSNkZWZpbmUgQ0hBUlFVQURfVE9V
SU5UNjQoYSwgYiwgYywgZCkgXFwKLSAgICAoKCgodWludDY0X3QpKENIQVJQQUlSX1RPVUlOVDMy
KGEsIGIpKSkgPDwgMzIpICsgQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpCisjZGVmaW5lIFVDSEFS
UVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSBcXAorICAgICgoKCh1aW50NjRfdCkoVUNIQVJRVUFE
X1RPVUlOVDY0KGEsIGIpKSkgPDwgMzIpICsgVUNIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKQogCiAj
ZWxzZSAvLyBDUFUoQklHX0VORElBTikKIAotI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQzMihhLCBi
KSBcXAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQxNihhLCBiKSBcXAorICAgICgoKCh1aW50MTZf
dCkoYikpIDw8IDgpICsgKHVpbnQxNl90KShhKSkKKyNkZWZpbmUgQ0hBUlFVQURfVE9VSU5UMzIo
YSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDMyX3QpKENIQVJQQUlSX1RPVUlOVDE2KGMsIGQp
KSkgPDwgMTYpICsgQ0hBUlBBSVJfVE9VSU5UMTYoYSwgYikpCisjZGVmaW5lIFVDSEFSUEFJUl9U
T1VJTlQzMihhLCBiKSBcXAogICAgICgoKCh1aW50MzJfdCkoYikpIDw8IDE2KSArICh1aW50MzJf
dCkoYSkpCi0jZGVmaW5lIENIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMsIGQpIFxcCi0gICAgKCgo
KHVpbnQ2NF90KShDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkpIDw8IDMyKSArIENIQVJQQUlSX1RP
VUlOVDMyKGEsIGIpKQorI2RlZmluZSBVQ0hBUlFVQURfVE9VSU5UNjQoYSwgYiwgYywgZCkgXFwK
KyAgICAoKCgodWludDY0X3QpKFVDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkpIDw8IDMyKSArIFVD
SEFSUEFJUl9UT1VJTlQzMihhLCBiKSkKIAogI2VuZGlmIC8vIENQVShCSUdfRU5ESUFOKQogCiAK
LSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFxcCi0g
ICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlBBSVJfVE9VSU5UMzIoY2hhcjEs
IGNoYXIyKSkKKyNkZWZpbmUgQ09NUEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBc
XAorICAgICgoKHVpbnQxNl90KikoYWRkcmVzcykpWzBdID09IENIQVJQQUlSX1RPVUlOVDE2KGNo
YXIxLCBjaGFyMikpCisjZGVmaW5lIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIpIFxcCisgICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gVUNIQVJQQUlSX1RPVUlO
VDMyKGNoYXIxLCBjaGFyMikpCiAKICNpZiBDUFUoWDg2XzY0KQogCi0jZGVmaW5lIENPTVBBUkVf
Q0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCi0gICAg
KCgodWludDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFVQURfVE9VSU5UNjQoY2hhcjEsIGNo
YXIyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFy
MSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoKCh1aW50MzJfdCopKGFkZHJlc3MpKVsw
XSA9PSBDSEFSUVVBRF9UT1VJTlQzMihjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkpCisjZGVm
aW5lIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkg
XFwKKyAgICAoKCh1aW50NjRfdCopKGFkZHJlc3MpKVswXSA9PSBVQ0hBUlFVQURfVE9VSU5UNjQo
Y2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQogCiAjZWxzZSAvLyBDUFUoWDg2XzY0KQogCi0j
ZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywg
Y2hhcjQpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIy
KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisj
ZGVmaW5lIENPTVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
KSBcXAorICAgIChDT01QQVJFXzJDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBB
UkVfMkNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisjZGVmaW5lIENPTVBBUkVf
NFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoQ09N
UEFSRV8yVUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV8yVUNIQVJTKChh
ZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCiAj
ZW5kaWYgLy8gQ1BVKE5FRURTX0FMSUdORURfQUNDRVNTKQogCi0jZGVmaW5lIENPTVBBUkVfQ0hB
UkFDVEVSUzMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMykgXFwKLSAgICAoQ09NUEFSRV9D
SEFSQUNURVJTMihhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmICgoYWRkcmVzcylbMl0gPT0gKGNo
YXIzKSkpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzUoYWRkcmVzcywgY2hhcjEsIGNoYXIy
LCBjaGFyMywgY2hhcjQsIGNoYXI1KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJl
c3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiAoKGFkZHJlc3MpWzRdID09IChjaGFy
NSkpKQotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM2KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzQo
YWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfQ0hBUkFDVEVS
UzIoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVS
UzcoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hh
cjcpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBj
aGFyMywgY2hhcjQpICYmIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcyArIDMsIGNoYXI0LCBj
aGFyNSwgY2hhcjYsIGNoYXI3KSkKLSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTOChhZGRyZXNz
LCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgp
IFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFy
MywgY2hhcjQpICYmIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFy
NiwgY2hhcjcsIGNoYXI4KSkKKyNkZWZpbmUgQ09NUEFSRV8zQ0hBUlMoYWRkcmVzcywgY2hhcjEs
IGNoYXIyLCBjaGFyMykgXFwKKyAgICAoQ09NUEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNo
YXIyKSAmJiAoKGFkZHJlc3MpWzJdID09IChjaGFyMykpKQorI2RlZmluZSBDT01QQVJFXzNVQ0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMykgXFwKKyAgICAoQ09NUEFSRV8yVUNIQVJT
KGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChhZGRyZXNzKVsyXSA9PSAoY2hhcjMpKSkKKyNk
ZWZpbmUgQ09NUEFSRV81Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQs
IGNoYXI1KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNo
YXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFS
RV81VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSkgXFwK
KyAgICAoQ09NUEFSRV80VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
KSAmJiAoKGFkZHJlc3MpWzRdID09IChjaGFyNSkpKQorI2RlZmluZSBDT01QQVJFXzZDSEFSUyhh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2KSBcXAorICAg
IChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYg
Q09NUEFSRV8yQ0hBUlMoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENPTVBB
UkVfNlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNo
YXI2KSBcXAorICAgIChDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFy
MywgY2hhcjQpICYmIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzICsgNCwgY2hhcjUsIGNoYXI2KSkK
KyNkZWZpbmUgQ09NUEFSRV83Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hh
cjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpIFxcCisgICAgKENPTVBBUkVfNENIQVJTKGFkZHJlc3Ms
IGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFXzRDSEFSUyhhZGRyZXNzICsg
MywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQorI2RlZmluZSBDT01QQVJFXzdVQ0hBUlMo
YWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcp
IFxcCisgICAgKENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBj
aGFyNCkgJiYgQ09NUEFSRV80VUNIQVJTKGFkZHJlc3MgKyAzLCBjaGFyNCwgY2hhcjUsIGNoYXI2
LCBjaGFyNykpCisjZGVmaW5lIENPTVBBUkVfOENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFyOCkgXFwKKyAgICAoQ09NUEFS
RV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVf
NENIQVJTKGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFyOCkpCisjZGVmaW5l
IENPTVBBUkVfOFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hh
cjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCisgICAgKENPTVBBUkVfNFVDSEFSUyhhZGRyZXNz
LCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV80VUNIQVJTKGFkZHJlc3Mg
KyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFyOCkpCiAiIiIpCiAKIHRyaWUucHJpbnRBc0Mo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBA
QCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6Y2FsbEV2CiAgICAgICAgIGlmICgh
Y29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNh
biB1c2UgdGhlIHByZXBhcnNlciBpbiBzdHJpY3QgbW9kZSwgd2UganVzdCBuZWVkIGFkZGl0aW9u
YWwgbG9naWMKICAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgZHVwbGljYXRlcy4KLSAgICAgICAg
ICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJjZS5jaGFy
YWN0ZXJzMTYoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3Ry
aWN0SlNPTik7CisgICAgICAgICAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihjYWxsRnJhbWUs
IHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVycygpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBMaXRl
cmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHBhcnNl
ZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VkT2JqZWN0OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDE3ICsyMjYsMjAgQEAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHR5cGVzT2ZBU0NJSQogLyogMTI3IC0gRGVsZXRl
ICAgICAgICAgICAgICovIENoYXJhY3RlckludmFsaWQsCiB9OwogCi1MZXhlcjo6TGV4ZXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitMZXhlcjxUPjo6
TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9pc1JlcGFyc2luZyhmYWxz
ZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogewogfQogCi1MZXhlcjo6fkxleGVy
KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorTGV4ZXI8VD46On5MZXhlcigpCiB7CiB9Ci0gICAg
Ci1VU3RyaW5nIExleGVyOjpnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK1VTdHJpbmcgTGV4ZXI8VD46OmdldEludmFsaWRDaGFyTWVzc2FnZSgpCiB7CiAg
ICAgc3dpdGNoIChtX2N1cnJlbnQpIHsKICAgICBjYXNlIDA6CkBAIC0yNTgsMjYgKzI2MSwzNSBA
QCBVU3RyaW5nIExleGVyOjpnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQogICAgIH0KIH0KIAotQUxX
QVlTX0lOTElORSBjb25zdCBVQ2hhciogTGV4ZXI6OmN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGNvbnN0IFQqIExleGVyPFQ+Ojpj
dXJyZW50Q2hhcmFjdGVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9jb2RlIDw9IG1fY29kZUVu
ZCk7CiAgICAgcmV0dXJuIG1fY29kZTsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQgTGV4ZXI6OmN1
cnJlbnRPZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyKCkgLSBt
X2NvZGVTdGFydDsKLX0KLQotdm9pZCBMZXhlcjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFBhcnNlckFyZW5hKiBhcmVuYSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBM
ZXhlcjxUPjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckFyZW5hKiBh
cmVuYSkKIHsKICAgICBtX2FyZW5hID0gJmFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKTsKLQorICAg
IAogICAgIG1fbGluZU51bWJlciA9IHNvdXJjZS5maXJzdExpbmUoKTsKICAgICBtX2RlbGltaXRl
ZCA9IGZhbHNlOwogICAgIG1fbGFzdFRva2VuID0gLTE7CisgICAgCisgICAgY29uc3QgVCogZGF0
YTsKKyAgICBjb25zdCBTdHJpbmdJbXBsKiBzb3VyY2VTdHJpbmcgPSBzb3VyY2UucHJvdmlkZXIo
KS0+c3RyaW5nRGF0YSgpOwogCi0gICAgY29uc3QgVUNoYXIqIGRhdGEgPSBzb3VyY2UucHJvdmlk
ZXIoKS0+ZGF0YSgpOworICAgIGlmIChzb3VyY2VTdHJpbmcpIHsKKyAgICAgICAgaWYgKHNvdXJj
ZVN0cmluZy0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzaXplb2YoVCkgPT0gc2l6
ZW9mKExDaGFyKSk7CisgICAgICAgICAgICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBU
Kj4oc291cmNlU3RyaW5nLT5jaGFyYWN0ZXJzOCgpKTsKKyAgICAgICAgfSBlbHNlICB7CisgICAg
ICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAg
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHNvdXJjZVN0cmluZy0+Y2hhcmFjdGVy
czE2KCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGRhdGEgPSAwOwogCiAgICAg
bV9zb3VyY2UgPSAmc291cmNlOwogICAgIG1fY29kZVN0YXJ0ID0gZGF0YTsKQEAgLTI4NiwxMCAr
Mjk4LDEwIEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc28KICAgICBt
X2Vycm9yID0gZmFsc2U7CiAgICAgbV9hdExpbmVTdGFydCA9IHRydWU7CiAgICAgbV9sZXhFcnJv
ck1lc3NhZ2UgPSBVU3RyaW5nKCk7Ci0KKyAgICAKICAgICBtX2J1ZmZlcjgucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKICAgICBtX2J1ZmZlcjE2LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoKG1fY29kZUVuZCAtIG1fY29kZSkgLyAyKTsKLQorICAgIAog
ICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9jb2RlRW5kKSkKICAgICAgICAgbV9jdXJyZW50ID0g
Km1fY29kZTsKICAgICBlbHNlCkBAIC0yOTcsNyArMzA5LDggQEAgdm9pZCBMZXhlcjo6c2V0Q29k
ZShjb25zdCBTb3VyY2VDb2RlJiBzbwogICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0KCkgPT0gc291
cmNlLnN0YXJ0T2Zmc2V0KCkpOwogfQogCi10ZW1wbGF0ZSA8aW50IHNoaWZ0QW1vdW50LCBMZXhl
cjo6U2hpZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6
OmludGVybmFsU2hpZnQoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8aW50IHNo
aWZ0QW1vdW50LCBTaGlmdFR5cGUgc2hvdWxkQm91bmRzQ2hlY2s+IEFMV0FZU19JTkxJTkUgdm9p
ZCBMZXhlcjxUPjo6aW50ZXJuYWxTaGlmdCgpCiB7CiAgICAgaWYgKHNob3VsZEJvdW5kc0NoZWNr
ID09IERvQm91bmRzQ2hlY2spIHsKICAgICAgICAgLy8gRmFzdGVyIHRoYW4gYW4gaWYtZWxzZSBz
ZXF1ZW5jZQpAQCAtMzEyLDIwICszMjUsMjggQEAgdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwg
TGV4ZXI6OlNoaWZ0VAogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpzaGlm
dCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxUPjo6
c2hpZnQoKQogewotICAgIGludGVybmFsU2hpZnQ8MSwgRG9Cb3VuZHNDaGVjaz4oKTsKKyAgICAv
LyBGYXN0ZXIgdGhhbiBhbiBpZi1lbHNlIHNlcXVlbmNlCisgICAgQVNTRVJUKG1fY3VycmVudCAh
PSAtMSk7CisgICAgbV9jdXJyZW50ID0gLTE7CisgICAgbV9jb2RlKys7CisgICAgaWYgKExJS0VM
WShtX2NvZGUgPCBtX2NvZGVFbmQpKQorICAgICAgICBtX2N1cnJlbnQgPSAqbV9jb2RlOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGludCBMZXhlcjo6cGVlayhpbnQgb2Zmc2V0KQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGludCBMZXhlcjxUPjo6cGVlayhpbnQgb2Zmc2V0KQog
ewogICAgIC8vIE9ubHkgdXNlIGlmIG5lY2Vzc2FyeQogICAgIEFTU0VSVChvZmZzZXQgPiAwICYm
IG9mZnNldCA8IDUpOwotICAgIGNvbnN0IFVDaGFyKiBjb2RlID0gbV9jb2RlICsgb2Zmc2V0Owor
ICAgIGNvbnN0IFQqIGNvZGUgPSBtX2NvZGUgKyBvZmZzZXQ7CiAgICAgcmV0dXJuIChjb2RlIDwg
bV9jb2RlRW5kKSA/ICpjb2RlIDogLTE7CiB9CiAKLWludCBMZXhlcjo6Z2V0VW5pY29kZUNoYXJh
Y3RlcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2ludCBMZXhlcjxUPjo6Z2V0VW5pY29kZUNo
YXJhY3RlcigpCiB7CiAgICAgaW50IGNoYXIxID0gcGVlaygxKTsKICAgICBpbnQgY2hhcjIgPSBw
ZWVrKDIpOwpAQCAtMzQyLDcgKzM2Myw4IEBAIGludCBMZXhlcjo6Z2V0VW5pY29kZUNoYXJhY3Rl
cigpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBMZXhlcjo6c2hpZnRMaW5lVGVybWlu
YXRvcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnNoaWZ0TGluZVRl
cm1pbmF0b3IoKQogewogICAgIEFTU0VSVChpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkpOwog
CkBAIC0zNTYsNyArMzc4LDggQEAgdm9pZCBMZXhlcjo6c2hpZnRMaW5lVGVybWluYXRvcigpCiAg
ICAgKyttX2xpbmVOdW1iZXI7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6bGFzdFRv
a2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3QKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlT
X0lOTElORSBib29sIExleGVyPFQ+OjpsYXN0VG9rZW5XYXNSZXN0cktleXdvcmQoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2xhc3RUb2tlbiA9PSBDT05USU5VRSB8fCBtX2xhc3RUb2tlbiA9PSBC
UkVBSyB8fCBtX2xhc3RUb2tlbiA9PSBSRVRVUk4gfHwgbV9sYXN0VG9rZW4gPT0gVEhST1c7CiB9
CkBAIC00MTEsMzYgKzQzNCwxMjggQEAgc3RhdGljIGlubGluZSBpbnQgc2luZ2xlRXNjYXBlKGlu
dCBjKQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgTGV4ZXI6OnJlY29yZDgoaW50IGMpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIExleGVyPFQ+OjpyZWNvcmQ4KGludCBjKQog
ewogICAgIEFTU0VSVChjID49IDApOwogICAgIEFTU0VSVChjIDw9IDB4RkYpOwotICAgIG1fYnVm
ZmVyOC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oYykpOworICAgIG1fYnVmZmVyOC5hcHBlbmQo
c3RhdGljX2Nhc3Q8TENoYXI+KGMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citpbmxp
bmUgdm9pZCBMZXhlcjxUPjo6YXBwZW5kOChjb25zdCBUKiBwLCBzaXplX3QgbGVuZ3RoKQorewor
ICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhyZWUgb2NjdXJyYW5jZXMgb2YgbV9idWZmZXIxNiB0byBt
X2J1ZmZlcjggYW5kCisgICAgLy8gVUNoYXIgdG8gTENoYXIgd2hlbiA4IGJpdCBzdHJpbmdzIGFy
ZSB0dXJuZWQgb24uCisgICAgc2l6ZV90IGN1cnJlbnRTaXplID0gbV9idWZmZXIxNi5zaXplKCk7
CisgICAgbV9idWZmZXIxNi5ncm93KGN1cnJlbnRTaXplICsgbGVuZ3RoKTsKKyAgICBVQ2hhciog
cmF3QnVmZmVyID0gbV9idWZmZXIxNi5kYXRhKCkgKyBjdXJyZW50U2l6ZTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgVCBjID0gcFtpXTsKKyAg
ICAgICAgQVNTRVJUKGMgPj0gMCk7CisgICAgICAgIEFTU0VSVChjIDw9IDB4RkYpOworICAgICAg
ICByYXdCdWZmZXJbaV0gPSBjOworICAgIH0KIH0KIAotaW5saW5lIHZvaWQgTGV4ZXI6OnJlY29y
ZDE2KFVDaGFyIGMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIExleGVyPFQ+
OjphcHBlbmQxNihjb25zdCBMQ2hhciogcCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBzaXplX3Qg
Y3VycmVudFNpemUgPSBtX2J1ZmZlcjE2LnNpemUoKTsKKyAgICBtX2J1ZmZlcjE2Lmdyb3coY3Vy
cmVudFNpemUgKyBsZW5ndGgpOworICAgIFVDaGFyKiByYXdCdWZmZXIgPSBtX2J1ZmZlcjE2LmRh
dGEoKSArIGN1cnJlbnRTaXplOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykKKyAgICAgICAgcmF3QnVmZmVyW2ldID0gcFtpXTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkMTYoVCBjKQogewogICAgIG1fYnVm
ZmVyMTYuYXBwZW5kKGMpOwogfQogCi1pbmxpbmUgdm9pZCBMZXhlcjo6cmVjb3JkMTYoaW50IGMp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIExleGVyPFQ+OjpyZWNvcmQxNihp
bnQgYykKIHsKICAgICBBU1NFUlQoYyA+PSAwKTsKICAgICBBU1NFUlQoYyA8PSBVU0hSVF9NQVgp
OwotICAgIHJlY29yZDE2KFVDaGFyKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihjKSkpOwor
ICAgIG1fYnVmZmVyMTYuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7CiB9CiAKLXRlbXBs
YXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5
cGUgTGV4ZXI6OnBhcnNlSWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCB1bnNpZ25l
ZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5
cGUgTGV4ZXI8VD46OnBhcnNlSWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCB1bnNp
Z25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCiB7CisgICAgLy8gRklYTUU6IENoYW5nZSBy
ZWNvcmQxNiBhbmQgbV9idWZmZXIxNiB0byByZWNvcmQ4IGFuZCBtX2J1ZmZlcjgsIGFuZCBzaXpl
b2YoVUNoYXIpIHRvCisgICAgLy8gc2l6ZW9mKExDaGFyKSBiZWxvdyB3aGVuIDggYml0IHN0cmlu
Z3MgYXJlIHR1cm5lZCBvbi4KKwogICAgIGNvbnN0IHB0cmRpZmZfdCByZW1haW5pbmcgPSBtX2Nv
ZGVFbmQgLSBtX2NvZGU7Ci0gICAgaWYgKChyZW1haW5pbmcgPj0gbWF4VG9rZW5MZW5ndGgpICYm
ICEobGV4VHlwZSAmIElnbm9yZVJlc2VydmVkV29yZHMpKSB7CisgICAgaWYgKChyZW1haW5pbmcg
Pj0gbWF4VG9rZW5MZW5ndGgpICYmICEobGV4VHlwZSAmIExleElnbm9yZVJlc2VydmVkV29yZHMp
KSB7CiAgICAgICAgIEpTVG9rZW5UeXBlIGtleXdvcmQgPSBwYXJzZUtleXdvcmQ8c2hvdWxkQ3Jl
YXRlSWRlbnRpZmllcj4odG9rZW5EYXRhKTsKICAgICAgICAgaWYgKGtleXdvcmQgIT0gSURFTlQp
IHsKICAgICAgICAgICAgIEFTU0VSVCgoIXNob3VsZENyZWF0ZUlkZW50aWZpZXIpIHx8IHRva2Vu
RGF0YS0+aWRlbnQpOwogICAgICAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gUkVTRVJWRURfSUZf
U1RSSUNUICYmICFzdHJpY3RNb2RlID8gSURFTlQgOiBrZXl3b3JkOwogICAgICAgICB9CiAgICAg
fQotICAgIGNvbnN0IFVDaGFyKiBpZGVudGlmaWVyU3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7
CisgICAgY29uc3QgVCogaWRlbnRpZmllclN0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworICAg
IGJvb2wgYnVmZmVyUmVxdWlyZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoc2l6ZW9mKFQpICE9
IHNpemVvZihVQ2hhcikpIC8vIEZJWE1FOiBDaGFuZ2UgdG8gc2l6ZW9mKExDaGFyKQorICAgICAg
ICBidWZmZXJSZXF1aXJlZCA9IHRydWU7CisKKyAgICB3aGlsZSAoaXNJZGVudFBhcnQobV9jdXJy
ZW50KSkKKyAgICAgICAgc2hpZnQoKTsKKyAgICAKKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50
ID09ICdcXCcpKSB7CisgICAgICAgIHNldE9mZnNldEZyb21DaGFyT2Zmc2V0KGlkZW50aWZpZXJT
dGFydCk7CisgICAgICAgIGlmIChidWZmZXJSZXF1aXJlZCkKKyAgICAgICAgICAgIG1fYnVmZmVy
MTYucmVzaXplKDApOyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICByZXR1
cm4gcGFyc2VJZGVudGlmaWVyU2xvd0Nhc2U8c2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4odG9rZW5E
YXRhLCBsZXhUeXBlLCBzdHJpY3RNb2RlKTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9IDA7CisgICAgCisgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpIHsKKyAg
ICAgICAgaWYgKCFidWZmZXJSZXF1aXJlZCkgeworICAgICAgICAgICAgaW50IGlkZW50aWZpZXJM
ZW5ndGggPSBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7CisgICAgICAgICAg
ICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJTdGFydCwgaWRlbnRpZmllckxlbmd0
aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllclN0YXJ0ICE9
IGN1cnJlbnRDaGFyYWN0ZXIoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmQxNihpZGVudGlmaWVy
U3RhcnQsIGN1cnJlbnRDaGFyYWN0ZXIoKSAtIGlkZW50aWZpZXJTdGFydCk7IC8vIEZJWE1FOiBD
aGFuZ2UgdG8gYXBwZW5kOAorICAgICAgICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihtX2J1
ZmZlcjE2LmRhdGEoKSwgbV9idWZmZXIxNi5zaXplKCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1f
YnVmZmVyOAorICAgICAgICB9CisKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IGlkZW50Owor
ICAgIH0gZWxzZQorICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKKworICAgIG1fZGVsaW1p
dGVkID0gZmFsc2U7CisKKyAgICBpZiAoTElLRUxZKCFidWZmZXJSZXF1aXJlZCAmJiAhKGxleFR5
cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdvcmRzKSkpIHsKKyAgICAgICAgQVNTRVJUKHNob3VsZENy
ZWF0ZUlkZW50aWZpZXIpOworICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgp
IHsKKyAgICAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX2dsb2JhbERhdGEtPmtl
eXdvcmRzLT5nZXRLZXl3b3JkKCppZGVudCk7CisgICAgICAgICAgICBBU1NFUlQoKHJlbWFpbmlu
ZyA8IG1heFRva2VuTGVuZ3RoKSB8fCAhZW50cnkpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gSURFTlQ7CisgICAgICAgICAgICBKU1Rva2VuVHlwZSB0
b2tlbiA9IHN0YXRpY19jYXN0PEpTVG9rZW5UeXBlPihlbnRyeS0+bGV4ZXJWYWx1ZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiAodG9rZW4gIT0gUkVTRVJWRURfSUZfU1RSSUNUKSB8fCBzdHJpY3RN
b2RlID8gdG9rZW4gOiBJREVOVDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURFTlQ7Cisg
ICAgfQorCisgICAgaWYgKGJ1ZmZlclJlcXVpcmVkKQorICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6
ZSgwKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKworICAgIHJldHVybiBJREVOVDsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJ
ZGVudGlmaWVyPiBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6cGFyc2VJZGVudGlmaWVyU2xvd0Nhc2Uo
SlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2Rl
KQoreworICAgIGNvbnN0IHB0cmRpZmZfdCByZW1haW5pbmcgPSBtX2NvZGVFbmQgLSBtX2NvZGU7
CisgICAgY29uc3QgVCogaWRlbnRpZmllclN0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOwogICAg
IGJvb2wgYnVmZmVyUmVxdWlyZWQgPSBmYWxzZTsKIAogICAgIHdoaWxlICh0cnVlKSB7CkBAIC00
NjQsMzEgKzU3OSwzMCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBB
CiAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2J1
ZmZlcjE2LnNpemUoKSA/ICFpc0lkZW50UGFydChjaGFyYWN0ZXIpIDogIWlzSWRlbnRTdGFydChj
aGFyYWN0ZXIpKSkKICAgICAgICAgICAgIHJldHVybiBFUlJPUlRPSzsKLSAgICAgICAgaWYgIChz
aG91bGRDcmVhdGVJZGVudGlmaWVyKQorICAgICAgICBpZiAoc2hvdWxkQ3JlYXRlSWRlbnRpZmll
cikKICAgICAgICAgICAgIHJlY29yZDE2KGNoYXJhY3Rlcik7CiAgICAgICAgIGlkZW50aWZpZXJT
dGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICB9Ci0gICAgCisKICAgICBpbnQgaWRlbnRp
Zmllckxlbmd0aDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IDA7CiAgICAgaWYgKHNo
b3VsZENyZWF0ZUlkZW50aWZpZXIpIHsKLSAgICAgICAgaWYgKCFidWZmZXJSZXF1aXJlZCkKKyAg
ICAgICAgaWYgKCFidWZmZXJSZXF1aXJlZCkgewogICAgICAgICAgICAgaWRlbnRpZmllckxlbmd0
aCA9IGN1cnJlbnRDaGFyYWN0ZXIoKSAtIGlkZW50aWZpZXJTdGFydDsKLSAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJTdGFydCwgaWRl
bnRpZmllckxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaWRlbnRp
ZmllclN0YXJ0ICE9IGN1cnJlbnRDaGFyYWN0ZXIoKSkKICAgICAgICAgICAgICAgICBtX2J1ZmZl
cjE2LmFwcGVuZChpZGVudGlmaWVyU3RhcnQsIGN1cnJlbnRDaGFyYWN0ZXIoKSAtIGlkZW50aWZp
ZXJTdGFydCk7Ci0gICAgICAgICAgICBpZGVudGlmaWVyU3RhcnQgPSBtX2J1ZmZlcjE2LmRhdGEo
KTsKLSAgICAgICAgICAgIGlkZW50aWZpZXJMZW5ndGggPSBtX2J1ZmZlcjE2LnNpemUoKTsKKyAg
ICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCksIG1fYnVm
ZmVyMTYuc2l6ZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZp
ZXIoaWRlbnRpZmllclN0YXJ0LCBpZGVudGlmaWVyTGVuZ3RoKTsKICAgICAgICAgdG9rZW5EYXRh
LT5pZGVudCA9IGlkZW50OwogICAgIH0gZWxzZQogICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0g
MDsKIAogICAgIG1fZGVsaW1pdGVkID0gZmFsc2U7CiAKLSAgICBpZiAoTElLRUxZKCFidWZmZXJS
ZXF1aXJlZCAmJiAhKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSkpIHsKKyAgICBpZiAo
TElLRUxZKCFidWZmZXJSZXF1aXJlZCAmJiAhKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdv
cmRzKSkpIHsKICAgICAgICAgQVNTRVJUKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpOwogICAgICAg
ICAvLyBLZXl3b3JkcyBtdXN0IG5vdCBiZSByZWNvZ25pemVkIGlmIHRoZXJlIHdhcyBhbiBcdVhY
WFggaW4gdGhlIGlkZW50aWZpZXIuCiAgICAgICAgIGlmIChyZW1haW5pbmcgPCBtYXhUb2tlbkxl
bmd0aCkgewpAQCAtNTA2LDEyICs2MjAsODMgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRl
SWRlbnRpZmllcj4gQQogICAgIHJldHVybiBJREVOVDsKIH0KIAotdGVtcGxhdGUgPGJvb2wgc2hv
dWxkQnVpbGRTdHJpbmdzPiBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlU3RyaW5nKEpT
VG9rZW5EYXRhKiB0b2tlbkRhdGEsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWVNfSU5MSU5FIGJv
b2wgTGV4ZXI8VD46OnBhcnNlU3RyaW5nKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIGJvb2wgc3Ry
aWN0TW9kZSkKIHsKKyAgICAvLyBGSVhNRTogQ2hhbmdlIHJlY29yZDE2IGFuZCBtX2J1ZmZlcjE2
IHRvIHJlY29yZDggYW5kIG1fYnVmZmVyOCBiZWxvdyB3aGVuCisgICAgLy8gOCBiaXQgc3RyaW5n
cyBhcmUgdHVybmVkIG9uLgorICAgIGludCBzdGFydGluZ09mZnNldCA9IGN1cnJlbnRPZmZzZXQo
KTsKKyAgICBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyID0gbGluZU51bWJlcigpOwogICAgIGludCBz
dHJpbmdRdW90ZUNoYXJhY3RlciA9IG1fY3VycmVudDsKICAgICBzaGlmdCgpOwogCi0gICAgY29u
c3QgVUNoYXIqIHN0cmluZ1N0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworICAgIGNvbnN0IFQq
IHN0cmluZ1N0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworCisgICAgd2hpbGUgKG1fY3VycmVu
dCAhPSBzdHJpbmdRdW90ZUNoYXJhY3RlcikgeworICAgICAgICBpZiAoVU5MSUtFTFkoKG1fY3Vy
cmVudCA9PSAnXFwnKSkpIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdTdGFydCAhPSBjdXJyZW50
Q2hhcmFjdGVyKCkgJiYgc2hvdWxkQnVpbGRTdHJpbmdzKQorICAgICAgICAgICAgICAgIGFwcGVu
ZDgoc3RyaW5nU3RhcnQsIGN1cnJlbnRDaGFyYWN0ZXIoKSAtIHN0cmluZ1N0YXJ0KTsKKyAgICAg
ICAgICAgIHNoaWZ0KCk7CisKKyAgICAgICAgICAgIGludCBlc2NhcGUgPSBzaW5nbGVFc2NhcGUo
bV9jdXJyZW50KTsKKworICAgICAgICAgICAgLy8gTW9zdCBjb21tb24gZXNjYXBlIHNlcXVlbmNl
cyBmaXJzdAorICAgICAgICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAgICAgICAgIGlmIChz
aG91bGRCdWlsZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KGVzY2FwZSk7
IC8vIEZJWE1FOiBDaGFuZ2UgdG8gcmVjb3JkOAorICAgICAgICAgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKGlzTGluZVRlcm1pbmF0b3IobV9jdXJyZW50
KSkpCisgICAgICAgICAgICAgICAgc2hpZnRMaW5lVGVybWluYXRvcigpOworICAgICAgICAgICAg
ZWxzZSBpZiAobV9jdXJyZW50ID09ICd4JykgeworICAgICAgICAgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdChtX2N1cnJlbnQpICYmIGlzQVNDSUlI
ZXhEaWdpdChwZWVrKDEpKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgcHJldiA9IG1fY3Vy
cmVudDsKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2
KGNvbnZlcnRIZXgocHJldiwgbV9jdXJyZW50KSk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gcmVjb3Jk
OAorICAgICAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQorICAgICAgICAgICAgICAgICAgICByZWNvcmQxNigneCcp
OyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgc2V0T2Zmc2V0KHN0YXJ0aW5nT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBz
ZXRMaW5lTnVtYmVyKHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgbV9idWZm
ZXIxNi5yZXNpemUoMCk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nU2xvd0Nhc2U8c2hvdWxkQnVpbGRTdHJpbmdzPih0b2tl
bkRhdGEsIHN0cmljdE1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RyaW5nU3Rh
cnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChVTkxJS0VMWSgoKG1fY3VycmVudCA+IDB4ZmYpIHx8IChtX2N1cnJl
bnQgPCAweGUpKSkpIHsKKyAgICAgICAgICAgIHNldE9mZnNldChzdGFydGluZ09mZnNldCk7Cisg
ICAgICAgICAgICBzZXRMaW5lTnVtYmVyKHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgICAgICAg
ICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZVN0cmluZ1Nsb3dDYXNlPHNob3VsZEJ1aWxkU3RyaW5ncz4o
dG9rZW5EYXRhLCBzdHJpY3RNb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHNoaWZ0KCk7Cisg
ICAgfQorCisgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoKSAhPSBzdHJpbmdTdGFydCAmJiBzaG91
bGRCdWlsZFN0cmluZ3MpCisgICAgICAgIGFwcGVuZDgoc3RyaW5nU3RhcnQsIGN1cnJlbnRDaGFy
YWN0ZXIoKSAtIHN0cmluZ1N0YXJ0KTsKKyAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKQorICAg
ICAgICAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICB0b2tlbkRhdGEtPmlk
ZW50ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCksIG1fYnVmZmVyMTYuc2l6ZSgp
KTsKKyAgICBlbHNlCisgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSAwOworCisgICAgLy8gRklY
TUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBz
aG91bGRCdWlsZFN0cmluZ3M+IGJvb2wgTGV4ZXI8VD46OnBhcnNlU3RyaW5nU2xvd0Nhc2UoSlNU
b2tlbkRhdGEqIHRva2VuRGF0YSwgYm9vbCBzdHJpY3RNb2RlKQoreworICAgIGludCBzdHJpbmdR
dW90ZUNoYXJhY3RlciA9IG1fY3VycmVudDsKKyAgICBzaGlmdCgpOworCisgICAgY29uc3QgVCog
c3RyaW5nU3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7CiAKICAgICB3aGlsZSAobV9jdXJyZW50
ICE9IHN0cmluZ1F1b3RlQ2hhcmFjdGVyKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2N1cnJl
bnQgPT0gJ1xcJykpIHsKQEAgLTUyMyw4ICs3MDgsOCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRC
dWlsZFN0cmluZ3M+IEFMV0FZCiAKICAgICAgICAgICAgIC8vIE1vc3QgY29tbW9uIGVzY2FwZSBz
ZXF1ZW5jZXMgZmlyc3QKICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKLSAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2
KGVzY2FwZSk7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAg
ICAgICAgICAgICAgICAgcmVjb3JkMTYoZXNjYXBlKTsKICAgICAgICAgICAgICAgICBzaGlmdCgp
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShpc0xpbmVUZXJtaW5hdG9yKG1fY3Vy
cmVudCkpKQogICAgICAgICAgICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKQEAgLTYxOCw3
ICs4MDMsOCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6cGFyc2VIZXgoZG91
YmxlJiByZXR1cm5WYWx1ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2
b2lkIExleGVyPFQ+OjpwYXJzZUhleChkb3VibGUmIHJldHVyblZhbHVlKQogewogICAgIC8vIE9w
dGltaXphdGlvbjogbW9zdCBoZXhhZGVjaW1hbCB2YWx1ZXMgZml0IGludG8gNCBieXRlcy4KICAg
ICB1aW50MzJfdCBoZXhWYWx1ZSA9IDA7CkBAIC02NTcsMTQgKzg0MywxNSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgTGV4ZXI6OnBhcnNlSGV4KGRvdWJsCiAgICAgcmV0dXJuVmFsdWUgPSBwYXJzZUlu
dE92ZXJmbG93KG1fYnVmZmVyOC5kYXRhKCksIG1fYnVmZmVyOC5zaXplKCksIDE2KTsKIH0KIAot
QUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFy
c2VPY3RhbChkb3VibGUmIHJldHVyblZhbHVlKQogewogICAgIC8vIE9wdGltaXphdGlvbjogbW9z
dCBvY3RhbCB2YWx1ZXMgZml0IGludG8gNCBieXRlcy4KICAgICB1aW50MzJfdCBvY3RhbFZhbHVl
ID0gMDsKICAgICBpbnQgbWF4aW11bURpZ2l0cyA9IDk7CiAgICAgLy8gVGVtcG9yYXJ5IGJ1ZmZl
ciBmb3IgdGhlIGRpZ2l0cy4gTWFrZXMgZWFzaWVyCiAgICAgLy8gdG8gcmVjb25zdHJ1Y3QgdGhl
IGlucHV0IGNoYXJhY3RlcnMgd2hlbiBuZWVkZWQuCi0gICAgY2hhciBkaWdpdHNbMTBdOworICAg
IExDaGFyIGRpZ2l0c1sxMF07CiAKICAgICBkbyB7CiAgICAgICAgIG9jdGFsVmFsdWUgPSBvY3Rh
bFZhbHVlICogOCArIChtX2N1cnJlbnQgLSAnMCcpOwpAQCAtNjkzLDcgKzg4MCw4IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VPY3RhbChkb3UKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZURlY2ltYWwoZG91YmxlJiByZXR1cm5W
YWx1ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+
OjpwYXJzZURlY2ltYWwoZG91YmxlJiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRp
b246IG1vc3QgZGVjaW1hbCB2YWx1ZXMgZml0IGludG8gNCBieXRlcy4KICAgICB1aW50MzJfdCBk
ZWNpbWFsVmFsdWUgPSAwOwpAQCAtNzA0LDcgKzg5Miw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBM
ZXhlcjo6cGFyc2VEZWNpbWFsKGQKICAgICAgICAgaW50IG1heGltdW1EaWdpdHMgPSA5OwogICAg
ICAgICAvLyBUZW1wb3JhcnkgYnVmZmVyIGZvciB0aGUgZGlnaXRzLiBNYWtlcyBlYXNpZXIKICAg
ICAgICAgLy8gdG8gcmVjb25zdHJ1Y3QgdGhlIGlucHV0IGNoYXJhY3RlcnMgd2hlbiBuZWVkZWQu
Ci0gICAgICAgIGNoYXIgZGlnaXRzWzEwXTsKKyAgICAgICAgTENoYXIgZGlnaXRzWzEwXTsKIAog
ICAgICAgICBkbyB7CiAgICAgICAgICAgICBkZWNpbWFsVmFsdWUgPSBkZWNpbWFsVmFsdWUgKiAx
MCArIChtX2N1cnJlbnQgLSAnMCcpOwpAQCAtNzMwLDcgKzkxOCw4IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjo6cGFyc2VEZWNpbWFsKGQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBMZXhlcjo6cGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCgpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxUPjo6cGFyc2VOdW1i
ZXJBZnRlckRlY2ltYWxQb2ludCgpCiB7CiAgICAgcmVjb3JkOCgnLicpOwogICAgIHdoaWxlIChp
c0FTQ0lJRGlnaXQobV9jdXJyZW50KSkgewpAQCAtNzM5LDcgKzkyOCw4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBMZXhlcjo6cGFyc2VOdW1iZXJBZnQKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjo6cGFyc2VOdW1iZXJBZnRlckV4cG9uZW50SW5kaWNhdG9yKCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+OjpwYXJzZU51bWJlckFm
dGVyRXhwb25lbnRJbmRpY2F0b3IoKQogewogICAgIHJlY29yZDgoJ2UnKTsKICAgICBzaGlmdCgp
OwpAQCAtNzU4LDcgKzk0OCw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VOdW1i
ZXJBZnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIExleGVyOjpw
YXJzZU11bHRpbGluZUNvbW1lbnQoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5M
SU5FIGJvb2wgTGV4ZXI8VD46OnBhcnNlTXVsdGlsaW5lQ29tbWVudCgpCiB7CiAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgd2hpbGUgKFVOTElLRUxZKG1fY3VycmVudCA9PSAnKicpKSB7CkBA
IC03ODAsMTYgKzk3MSwxOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlTXVsdGls
aW5lCiAgICAgfQogfQogCi1ib29sIExleGVyOjpuZXh0VG9rZW5Jc0NvbG9uKCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorYm9vbCBMZXhlcjxUPjo6bmV4dFRva2VuSXNDb2xvbigpCiB7Ci0gICAg
Y29uc3QgVUNoYXIqIGNvZGUgPSBtX2NvZGU7CisgICAgY29uc3QgVCogY29kZSA9IG1fY29kZTsK
ICAgICB3aGlsZSAoY29kZSA8IG1fY29kZUVuZCAmJiAoaXNXaGl0ZVNwYWNlKCpjb2RlKSB8fCBp
c0xpbmVUZXJtaW5hdG9yKCpjb2RlKSkpCiAgICAgICAgIGNvZGUrKzsKLSAgICAgICAgCisgICAg
CiAgICAgcmV0dXJuIGNvZGUgPCBtX2NvZGVFbmQgJiYgKmNvZGUgPT0gJzonOwogfQogCi1KU1Rv
a2VuVHlwZSBMZXhlcjo6bGV4KEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZvKiB0
b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleChKU1Rva2VuRGF0YSogdG9rZW5E
YXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZvLCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmlj
dE1vZGUpCiB7CiAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICBBU1NFUlQobV9idWZmZXI4Lmlz
RW1wdHkoKSk7CkBAIC0xMDk1LDcgKzEyODgsNyBAQCBpbk51bWJlckFmdGVyRGVjaW1hbFBvaW50
OgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gTnVsbC10ZXJtaW5h
dGUgc3RyaW5nIGZvciBzdHJ0b2QuCiAgICAgICAgICAgICAgICAgbV9idWZmZXI4LmFwcGVuZCgn
XDAnKTsKLSAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gV1RGOjpzdHJ0
b2QobV9idWZmZXI4LmRhdGEoKSwgMCk7CisgICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3Vi
bGVWYWx1ZSA9IFdURjo6c3RydG9kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1fYnVm
ZmVyOC5kYXRhKCkpLCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRva2VuID0gTlVN
QkVSOwogICAgICAgICB9CkBAIC0xMTA5LDcgKzEzMDIsNyBAQCBpbk51bWJlckFmdGVyRGVjaW1h
bFBvaW50OgogICAgICAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENoYXJhY3RlclF1b3RlOgotICAgICAgICBpZiAobGV4VHlwZSAmIERvbnRCdWlsZFN0
cmluZ3MpIHsKKyAgICAgICAgaWYgKGxleFR5cGUgJiBMZXhEb250QnVpbGRTdHJpbmdzKSB7CiAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlU3RyaW5nPGZhbHNlPih0b2tlbkRhdGEsIHN0
cmljdE1vZGUpKSkKICAgICAgICAgICAgICAgICBnb3RvIHJldHVybkVycm9yOwogICAgICAgICB9
IGVsc2UgewpAQCAtMTEyNCw3ICsxMzE3LDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoK
ICAgICAgICAgQVNTRVJUKGlzSWRlbnRTdGFydChtX2N1cnJlbnQpKTsKICAgICAgICAgLy8gRmFs
bCB0aHJvdWdoIGludG8gQ2hhcmFjdGVyQmFja1NsYXNoLgogICAgIGNhc2UgQ2hhcmFjdGVyQmFj
a1NsYXNoOgotICAgICAgICBpZiAobGV4VHlwZSAmIERvbnRCdWlsZEtleXdvcmRzKQorICAgICAg
ICBpZiAobGV4VHlwZSAmIExleERvbnRCdWlsZEtleXdvcmRzKQogICAgICAgICAgICAgdG9rZW4g
PSBwYXJzZUlkZW50aWZpZXI8ZmFsc2U+KHRva2VuRGF0YSwgbGV4VHlwZSwgc3RyaWN0TW9kZSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRva2VuID0gcGFyc2VJZGVudGlmaWVyPHRydWU+
KHRva2VuRGF0YSwgbGV4VHlwZSwgc3RyaWN0TW9kZSk7CkBAIC0xMTc4LDcgKzEzNzEsOCBAQCBy
ZXR1cm5FcnJvcjoKICAgICByZXR1cm4gRVJST1JUT0s7CiB9CiAKLWJvb2wgTGV4ZXI6OnNjYW5S
ZWdFeHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIqJiBmbGFn
cywgVUNoYXIgcGF0dGVyblByZWZpeCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYm9vbCBMZXhl
cjxUPjo6c2NhblJlZ0V4cChjb25zdCBJZGVudGlmaWVyKiYgcGF0dGVybiwgY29uc3QgSWRlbnRp
ZmllciomIGZsYWdzLCBVQ2hhciBwYXR0ZXJuUHJlZml4KQogewogICAgIEFTU0VSVChtX2J1ZmZl
cjE2LmlzRW1wdHkoKSk7CiAKQEAgLTEyMzksNyArMTQzMyw4IEBAIGJvb2wgTGV4ZXI6OnNjYW5S
ZWdFeHAoY29uc3QgSWRlbnRpZmllcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZXhl
cjo6c2tpcFJlZ0V4cCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgTGV4ZXI8VD46OnNr
aXBSZWdFeHAoKQogewogICAgIGJvb2wgbGFzdFdhc0VzY2FwZSA9IGZhbHNlOwogICAgIGJvb2wg
aW5CcmFja2V0cyA9IGZhbHNlOwpAQCAtMTI3OSwxMSArMTQ3NCwxMiBAQCBib29sIExleGVyOjpz
a2lwUmVnRXhwKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMZXhlcjo6Y2xlYXIoKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpjbGVhcigpCiB7CiAgICAgbV9h
cmVuYSA9IDA7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbmV3QnVmZmVyODsKKyAgICBWZWN0b3I8TENo
YXI+IG5ld0J1ZmZlcjg7CiAgICAgbV9idWZmZXI4LnN3YXAobmV3QnVmZmVyOCk7CiAKICAgICBW
ZWN0b3I8VUNoYXI+IG5ld0J1ZmZlcjE2OwpAQCAtMTI5MiwxMSArMTQ4OCwxNiBAQCB2b2lkIExl
eGVyOjpjbGVhcigpCiAgICAgbV9pc1JlcGFyc2luZyA9IGZhbHNlOwogfQogCi1Tb3VyY2VDb2Rl
IExleGVyOjpzb3VyY2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmly
c3RMaW5lKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitTb3VyY2VDb2RlIExleGVyPFQ+Ojpzb3Vy
Y2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQogewog
ICAgIEFTU0VSVChtX3NvdXJjZS0+cHJvdmlkZXIoKS0+ZGF0YSgpW29wZW5CcmFjZV0gPT0gJ3sn
KTsKICAgICBBU1NFUlQobV9zb3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtjbG9zZUJyYWNlXSA9
PSAnfScpOwogICAgIHJldHVybiBTb3VyY2VDb2RlKG1fc291cmNlLT5wcm92aWRlcigpLCBvcGVu
QnJhY2UsIGNsb3NlQnJhY2UgKyAxLCBmaXJzdExpbmUpOwogfQogCisvLyBJbnN0YW50aWF0ZSB0
aGUgdHdvIGZsYXZvcnMgb2YgTGV4ZXIgd2UgbmVlZCBpbnN0ZWFkIG9mIHB1dHRpbmcgbW9zdCBv
ZiB0aGlzIGZpbGUgaW4gTGV4ZXIuaAordGVtcGxhdGUgY2xhc3MgTGV4ZXI8TENoYXI+OwordGVt
cGxhdGUgY2xhc3MgTGV4ZXI8VUNoYXI+OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2
MSwxNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEhhc2hUYWJsZSBtX2tleXdvcmRUYWJsZTsKIH07
CiAKK2VudW0gTGV4VHlwZSB7CisgICAgTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcyA9IDEsIAorICAg
IExleERvbnRCdWlsZFN0cmluZ3MgPSAyLAorICAgIExleERvbnRCdWlsZEtleXdvcmRzID0gNAor
fTsKKworZW51bSBTaGlmdFR5cGUgeyBEb0JvdW5kc0NoZWNrLCBEb05vdEJvdW5kc0NoZWNrIH07
CisKIGNsYXNzIFJlZ0V4cDsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBMZXhlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGV4ZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwpAQCAtODIsMTIgKzkxLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNSZXBhcnNp
bmcoKSB7IG1faXNSZXBhcnNpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBpc1JlcGFyc2luZygpIGNv
bnN0IHsgcmV0dXJuIG1faXNSZXBhcnNpbmc7IH0KIAotICAgIC8vIEZ1bmN0aW9ucyBmb3IgdGhl
IHBhcnNlciBpdHNlbGYuCi0gICAgZW51bSBMZXhUeXBlIHsKLSAgICAgICAgSWdub3JlUmVzZXJ2
ZWRXb3JkcyA9IDEsIAotICAgICAgICBEb250QnVpbGRTdHJpbmdzID0gMiwKLSAgICAgICAgRG9u
dEJ1aWxkS2V5d29yZHMgPSA0Ci0gICAgfTsKICAgICBKU1Rva2VuVHlwZSBsZXgoSlNUb2tlbkRh
dGEqLCBKU1Rva2VuSW5mbyosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOwogICAgIGJvb2wg
bmV4dFRva2VuSXNDb2xvbigpOwogICAgIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lTnVtYmVyOyB9CkBAIC0xMDIsNyArMTA1LDYgQEAgcHVibGljOgogICAgIGJvb2wgc2F3
RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CiAgICAgVVN0cmluZyBnZXRFcnJvck1l
c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xleEVycm9yTWVzc2FnZTsgfQogICAgIHZvaWQgY2xl
YXIoKTsKLSAgICBpbnQgY3VycmVudE9mZnNldCgpIHsgcmV0dXJuIG1fY29kZSAtIG1fY29kZVN0
YXJ0OyB9CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCkKICAgICB7CiAgICAgICAgIG1f
ZXJyb3IgPSAwOwpAQCAtMTI1LDEzICsxMjcsMTIgQEAgcHVibGljOgogICAgIEpTVG9rZW5UeXBl
IGxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEqLCBKU1Rva2VuSW5mbyosIHVuc2lnbmVk
LCBib29sIHN0cmljdE1vZGUpOwogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBKU0dsb2Jh
bERhdGE7Ci0KICAgICB2b2lkIHJlY29yZDgoaW50KTsKKyAgICB2b2lkIGFwcGVuZDgoY29uc3Qg
VCosIHNpemVfdCk7CiAgICAgdm9pZCByZWNvcmQxNihpbnQpOwotICAgIHZvaWQgcmVjb3JkMTYo
VUNoYXIpOwotCi0gICAgdm9pZCBjb3B5Q29kZVdpdGhvdXRCT01zKCk7CisgICAgdm9pZCByZWNv
cmQxNihUKTsKKyAgICB2b2lkIGFwcGVuZDE2KGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKKyAgICB2
b2lkIGFwcGVuZDE2KGNvbnN0IFVDaGFyKiBwLCBzaXplX3QgbGVuZ3RoKSB7IG1fYnVmZmVyMTYu
YXBwZW5kKHAsIGxlbmd0aCk7IH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzaGlmdCgpOwog
ICAgIEFMV0FZU19JTkxJTkUgaW50IHBlZWsoaW50IG9mZnNldCk7CkBAIC0xMzksMTggKzE0MCwy
MSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2hpZnRMaW5lVGVybWluYXRvcigpOwogCiAgICAgVVN0
cmluZyBnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKTsKLSAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFVD
aGFyKiBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Q7Ci0gICAgQUxXQVlTX0lOTElORSBpbnQgY3Vy
cmVudE9mZnNldCgpIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCogY3VycmVudENo
YXJhY3RlcigpIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUgaW50IGN1cnJlbnRPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvZGUgLSBtX2NvZGVTdGFydDsgfQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXRPZmZzZXRGcm9tQ2hhck9mZnNldChjb25zdCBUKiBjaGFyT2Zmc2V0KSB7IHNldE9m
ZnNldChjaGFyT2Zmc2V0IC0gbV9jb2RlU3RhcnQpOyB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IElkZW50aWZpZXIqIG1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoKTsKICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIG1ha2VJ
ZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKIAogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBsYXN0VG9rZW5XYXNSZXN0cktleXdvcmQoKSBjb25zdDsKIAot
ICAgIGVudW0gU2hpZnRUeXBlIHsgRG9Cb3VuZHNDaGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9Owog
ICAgIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQsIFNoaWZ0VHlwZSBzaG91bGRCb3VuZHNDaGVj
az4gdm9pZCBpbnRlcm5hbFNoaWZ0KCk7CiAgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRl
SWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBwYXJzZUtleXdvcmQoSlNUb2tl
bkRhdGEqKTsKICAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBBTFdB
WVNfSU5MSU5FIEpTVG9rZW5UeXBlIHBhcnNlSWRlbnRpZmllcihKU1Rva2VuRGF0YSosIHVuc2ln
bmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkSWRl
bnRpZmllcnM+IEpTVG9rZW5UeXBlIHBhcnNlSWRlbnRpZmllclNsb3dDYXNlKEpTVG9rZW5EYXRh
KiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxk
QnVpbGRTdHJpbmdzPiBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VTdHJpbmcoSlNUb2tlbkRhdGEq
LCBib29sIHN0cmljdE1vZGUpOworICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5n
cz4gYm9vbCBwYXJzZVN0cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJpY3RNb2Rl
KTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSk7
CiAgICAgQUxXQVlTX0lOTElORSBib29sIHBhcnNlT2N0YWwoZG91YmxlJiByZXR1cm5WYWx1ZSk7
CiAgICAgQUxXQVlTX0lOTElORSBib29sIHBhcnNlRGVjaW1hbChkb3VibGUmIHJldHVyblZhbHVl
KTsKQEAgLTE2MywxNiArMTY3LDE2IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGluZU51bWJlcjsK
ICAgICBpbnQgbV9sYXN0TGluZU51bWJlcjsKIAotICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjg7
CisgICAgVmVjdG9yPExDaGFyPiBtX2J1ZmZlcjg7CiAgICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZl
cjE2OwogICAgIGJvb2wgbV90ZXJtaW5hdG9yOwogICAgIGJvb2wgbV9kZWxpbWl0ZWQ7IC8vIGVu
Y291bnRlcmVkIGRlbGltaXRlciBsaWtlICInIiBhbmQgIn0iIG9uIGxhc3QgcnVuCiAgICAgaW50
IG1fbGFzdFRva2VuOwogCiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7Ci0gICAgY29u
c3QgVUNoYXIqIG1fY29kZTsKLSAgICBjb25zdCBVQ2hhciogbV9jb2RlU3RhcnQ7Ci0gICAgY29u
c3QgVUNoYXIqIG1fY29kZUVuZDsKKyAgICBjb25zdCBUKiBtX2NvZGU7CisgICAgY29uc3QgVCog
bV9jb2RlU3RhcnQ7CisgICAgY29uc3QgVCogbV9jb2RlRW5kOwogICAgIGJvb2wgbV9pc1JlcGFy
c2luZzsKICAgICBib29sIG1fYXRMaW5lU3RhcnQ7CiAgICAgYm9vbCBtX2Vycm9yOwpAQCAtMTg2
LDM3ICsxOTAsNDkgQEAgcHJpdmF0ZToKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
IH07CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6aXNXaGl0ZVNwYWNlKGludCBjaCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojppc1doaXRl
U3BhY2UoaW50IGNoKQogewogICAgIHJldHVybiBpc0FTQ0lJKGNoKSA/IChjaCA9PSAnICcgfHwg
Y2ggPT0gJ1x0JyB8fCBjaCA9PSAweEIgfHwgY2ggPT0gMHhDKSA6IChXVEY6OlVuaWNvZGU6Omlz
U2VwYXJhdG9yU3BhY2UoY2gpIHx8IGNoID09IDB4RkVGRik7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjo6aXNMaW5lVGVybWluYXRvcihpbnQgY2gpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNMaW5lVGVybWluYXRvcihpbnQgY2gp
CiB7CiAgICAgcmV0dXJuIGNoID09ICdccicgfHwgY2ggPT0gJ1xuJyB8fCAoY2ggJiB+MSkgPT0g
MHgyMDI4OwogfQogCi1pbmxpbmUgdW5zaWduZWQgY2hhciBMZXhlcjo6Y29udmVydEhleChpbnQg
YzEsIGludCBjMikKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIGNoYXIg
TGV4ZXI8VD46OmNvbnZlcnRIZXgoaW50IGMxLCBpbnQgYzIpCiB7CiAgICAgcmV0dXJuICh0b0FT
Q0lJSGV4VmFsdWUoYzEpIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKGMyKTsKIH0KIAotaW5saW5l
IFVDaGFyIExleGVyOjpjb252ZXJ0VW5pY29kZShpbnQgYzEsIGludCBjMiwgaW50IGMzLCBpbnQg
YzQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBVQ2hhciBMZXhlcjxUPjo6Y29udmVy
dFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQogewogICAgIHJldHVybiAo
Y29udmVydEhleChjMSwgYzIpIDw8IDgpIHwgY29udmVydEhleChjMywgYzQpOwogfQogCi1BTFdB
WVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyOjptYWtlSWRlbnRpZmllcihjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjxUPjo6bWFrZUlkZW50aWZpZXIo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuICZt
X2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlm
aWVyKiBMZXhlcjxUPjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX2ds
b2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNUb2tl
blR5cGUgTGV4ZXI6OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwg
SlNUb2tlbkluZm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2Rl
KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVy
PFQ+OjpsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5J
bmZvKiB0b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKIHsKLSAg
ICBBU1NFUlQoKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSk7Ci0gICAgY29uc3QgVUNo
YXIqIHN0YXJ0ID0gbV9jb2RlOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSBzdGFydDsKLSAgICBj
b25zdCBVQ2hhciogZW5kID0gbV9jb2RlRW5kOworICAgIEFTU0VSVCgobGV4VHlwZSAmIExleEln
bm9yZVJlc2VydmVkV29yZHMpKTsKKyAgICBjb25zdCBUKiBzdGFydCA9IG1fY29kZTsKKyAgICBj
b25zdCBUKiBwdHIgPSBzdGFydDsKKyAgICBjb25zdCBUKiBlbmQgPSBtX2NvZGVFbmQ7CiAgICAg
aWYgKHB0ciA+PSBlbmQpIHsKICAgICAgICAgQVNTRVJUKHB0ciA9PSBlbmQpOwogICAgICAgICBn
b3RvIHNsb3dDYXNlOwpAQCAtMjQxLDcgKzI1Nyw3IEBAIEFMV0FZU19JTkxJTkUgSlNUb2tlblR5
cGUgTGV4ZXI6OmxleEV4cGUKICAgICBtX2NvZGUgPSBwdHI7CiAKICAgICAvLyBDcmVhdGUgdGhl
IGlkZW50aWZpZXIgaWYgbmVlZGVkCi0gICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRLZXl3b3Jk
cykKKyAgICBpZiAobGV4VHlwZSAmIExleERvbnRCdWlsZEtleXdvcmRzKQogICAgICAgICB0b2tl
bkRhdGEtPmlkZW50ID0gMDsKICAgICBlbHNlCiAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBt
YWtlSWRlbnRpZmllcihzdGFydCwgcHRyIC0gc3RhcnQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgUGFyc2VyOjpQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLAogICAgICwgbV9sYXN0
SWRlbnRpZmllcigwKQogICAgICwgbV9zb3VyY2VFbGVtZW50cygwKQogewotICAgIG1fbGV4ZXIg
PSBuZXcgTGV4ZXIoZ2xvYmFsRGF0YSk7CisgICAgbV9sZXhlciA9IG5ldyBMZXhlcjxVQ2hhcj4o
Z2xvYmFsRGF0YSk7CiAgICAgbV9hcmVuYSA9IG1fZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmE7CiAg
ICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsIG1fYXJlbmEpOwogCkBAIC0xMTU4LDkgKzExNTgs
OSBAQCB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxkCiAgICAgY2FzZSBT
VFJJTkc6IHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0
YS5pZGVudDsKICAgICAgICAgaWYgKGNvbXBsZXRlIHx8ICh3YXNJZGVudCAmJiAoKmlkZW50ID09
IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+Z2V0IHx8ICppZGVudCA9PSBtX2dsb2JhbERh
dGEtPnByb3BlcnR5TmFtZXMtPnNldCkpKQotICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZp
ZXIoTGV4ZXI6Oklnbm9yZVJlc2VydmVkV29yZHMpOworICAgICAgICAgICAgbmV4dEV4cGVjdElk
ZW50aWZpZXIoTGV4SWdub3JlUmVzZXJ2ZWRXb3Jkcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJl
ZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAgIG5leHRFeHBlY3RJZGVu
dGlmaWVyKExleElnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5
d29yZHMpOwogICAgICAgICAKICAgICAgICAgaWYgKG1hdGNoKENPTE9OKSkgewogICAgICAgICAg
ICAgbmV4dCgpOwpAQCAtMTQ4OSw3ICsxNDg5LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBjYXNlIERPVDogewogICAgICAgICAgICAgbV9ub25U
cml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9
IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXI6
Oklnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOwor
ICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcyB8
IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CiAgICAgICAgICAgICBtYXRjaE9yRmFp
bChJREVOVCk7CiAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3MobV9s
ZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJl
c3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmQoKSk7CiAgICAgICAgICAgICBuZXh0
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDk5
MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBjb25zdCBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBtX3NvdXJjZTsK
ICAgICBQYXJzZXJBcmVuYSogbV9hcmVuYTsKLSAgICBMZXhlciogbV9sZXhlcjsKKyAgICBMZXhl
cjxVQ2hhcj4qIG1fbGV4ZXI7CiAgICAgCiAgICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKICAgICBi
b29sIG1fZXJyb3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFy
ZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJB
cmVuYS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyQXJlbmEuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNf
SU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgbWFr
ZUlkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1ha2VOdW1lcmljSWRlbnRpZmllcihK
U0dsb2JhbERhdGEqLCBkb3VibGUgbnVtYmVyKTsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzLmlzRW1wdHkoKTsgfQpAQCAtNjUsNyArNjYsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRml4ZWRBcnJheTxJZGVudGlmaWVyKiwgTWF4aW11
bUNhY2hhYmxlQ2hhcmFjdGVyPiBtX3JlY2VudElkZW50aWZpZXJzOwogICAgIH07CiAKLSAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50
aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
KQogICAgIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hh
cmFjdGVyKSB7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKGds
b2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm92aWRlci0+ZGF0YSgpICsgbV9zdGFydENoYXI7IH0KICAgICAgICAgaW50
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ2hhciAtIG1fc3RhcnRDaGFyOyB9CiAgICAg
ICAgIAotICAgICAgICBTb3VyY2VDb2RlIHN1YkV4cHJlc3Npb24oaW50LCBpbnQsIGludCk7Cisg
ICAgICAgIFNvdXJjZUNvZGUgc3ViRXhwcmVzc2lvbih1bnNpZ25lZCwgdW5zaWduZWQsIGludCk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fcHJvdmlk
ZXI7CkBAIC04OCw4ICs4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgcmV0
dXJuIFNvdXJjZUNvZGUoVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmws
IHN0YXJ0UG9zaXRpb24pLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpKTsKICAg
ICB9Ci0gICAgCi0gICAgaW5saW5lIFNvdXJjZUNvZGUgU291cmNlQ29kZTo6c3ViRXhwcmVzc2lv
bihpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKKworICAgIGlu
bGluZSBTb3VyY2VDb2RlIFNvdXJjZUNvZGU6OnN1YkV4cHJlc3Npb24odW5zaWduZWQgb3BlbkJy
YWNlLCB1bnNpZ25lZCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQogICAgIHsKICAgICAgICAg
QVNTRVJUKHByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7CiAgICAgICAgIEFT
U0VSVChwcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDk5
MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZpcnR1YWwgVVN0cmluZyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0ID0gMDsK
ICAgICAgICAgdmlydHVhbCBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0ID0gMDsKKyAgICAgICAg
dmlydHVhbCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgPSAwOwogICAgICAg
ICB2aXJ0dWFsIGludCBsZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgICAgIAogICAgICAgICBjb25z
dCBVU3RyaW5nJiB1cmwoKSB7IHJldHVybiBtX3VybDsgfQpAQCAtOTEsNiArOTIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZS5zdWJzdHJpbmdTaGFyaW5n
SW1wbChzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IFVDaGFy
KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgICAgIGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5pbXBsKCk7IH0KICAgICAg
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9CiAKICAg
ICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlckNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VQcm92aWRlckNhY2hlLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisj
aWZuZGVmIFNvdXJjZVByb3ZpZGVyQ2FjaGVfaAorI2RlZmluZSBTb3VyY2VQcm92aWRlckNhY2hl
X2gKKwogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KIApAQCAtNDYsMyArNDksNSBAQCBwcml2YXRlOgogfTsKIAogfQorCisjZW5kaWYgLy8gU291
cmNlUHJvdmlkZXJDYWNoZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5
bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDggKzExNSw4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBDcmVhdGVzQVNUID0gZmFsc2U7CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gZmFsc2U7CiAgICAg
c3RhdGljIGNvbnN0IGJvb2wgQ2FuVXNlRnVuY3Rpb25DYWNoZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZEtleXdvcmRzID0gTGV4ZXI6OkRvbnRCdWlsZEtleXdv
cmRzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXI6
OkRvbnRCdWlsZFN0cmluZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERvbnRCdWlsZEtl
eXdvcmRzID0gTGV4RG9udEJ1aWxkS2V5d29yZHM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IERvbnRCdWlsZFN0cmluZ3MgPSBMZXhEb250QnVpbGRTdHJpbmdzOwogCiAgICAgaW50IGNyZWF0
ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gMTsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VG
dW5jdGlvbkNhbGxOb2RlKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIENh
bGxFeHByOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksNyArODksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0U2VtaWNvbG9uSWZOZWVkCiAK
ICAgICBmb3IgKHNpemVfdCBpID0gZnVuY3Rpb25Cb2R5Lmxlbmd0aCgpIC0gMjsgaSA+IDA7IC0t
aSkgewogICAgICAgICBVQ2hhciBjaCA9IGZ1bmN0aW9uQm9keVtpXTsKLSAgICAgICAgaWYgKCFM
ZXhlcjo6aXNXaGl0ZVNwYWNlKGNoKSAmJiAhTGV4ZXI6OmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7
CisgICAgICAgIGlmICghTGV4ZXI8VUNoYXI+Ojppc1doaXRlU3BhY2UoY2gpICYmICFMZXhlcjxV
Q2hhcj46OmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CiAgICAgICAgICAgICBpZiAoY2ggIT0gJzsn
ICYmIGNoICE9ICd9JykKICAgICAgICAgICAgICAgICBmdW5jdGlvbkJvZHkgPSBtYWtlVVN0cmlu
ZyhmdW5jdGlvbkJvZHkuc3Vic3RyaW5nU2hhcmluZ0ltcGwoMCwgaSArIDEpLCAiOyIsIGZ1bmN0
aW9uQm9keS5zdWJzdHJpbmdTaGFyaW5nSW1wbChpICsgMSwgZnVuY3Rpb25Cb2R5Lmxlbmd0aCgp
IC0gKGkgKyAxKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvV1RGVGhyZWFkRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
dXNpbmcgV1RGOjpUaHJlYWRTcGVjaWZpYzsKQEAgLTQzLDE5ICs0MiwxMyBAQCBJZGVudGlmaWVy
VGFibGU6On5JZGVudGlmaWVyVGFibGUoKQogICAgIGZvciAoSGFzaFNldDxTdHJpbmdJbXBsKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAg
ICAgICAgICgqaXRlciktPnNldElzSWRlbnRpZmllcihmYWxzZSk7CiB9CisKIHN0ZDo6cGFpcjxI
YXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IElkZW50aWZpZXJUYWJsZTo6YWRk
KFN0cmluZ0ltcGwqIHZhbHVlKQogewogICAgIHN0ZDo6cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwq
Pjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFibGUuYWRkKHZhbHVlKTsKICAgICAoKnJl
c3VsdC5maXJzdCktPnNldElzSWRlbnRpZmllcih0cnVlKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQotdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLXN0ZDo6cGFpcjxIYXNoU2V0PFN0
cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IElkZW50aWZpZXJUYWJsZTo6YWRkKFUgdmFsdWUp
Ci17Ci0gICAgc3RkOjpwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4g
cmVzdWx0ID0gbV90YWJsZS5hZGQ8VSwgVj4odmFsdWUpOwotICAgICgqcmVzdWx0LmZpcnN0KS0+
c2V0SXNJZGVudGlmaWVyKHRydWUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKIElkZW50aWZp
ZXJUYWJsZSogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkKIHsKQEAgLTEyMiwzMyArMTE1LDYgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoRQogICAgIHJldHVybiBhZGQo
JmV4ZWMtPmdsb2JhbERhdGEoKSwgYyk7CiB9CiAKLXN0cnVjdCBVQ2hhckJ1ZmZlciB7Ci0gICAg
Y29uc3QgVUNoYXIqIHM7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aDsKLX07Ci0KLXN0cnVjdCBJ
ZGVudGlmaWVyVUNoYXJCdWZmZXJUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hh
c2hlcjo6Y29tcHV0ZUhhc2g8VUNoYXI+KGJ1Zi5zLCBidWYubGVuZ3RoKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IFVDaGFyQnVmZmVyJiBi
dWYpCi0gICAgewotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoc3RyLCBidWYucywg
YnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0lt
cGwqJiBsb2NhdGlvbiwgY29uc3QgVUNoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKLSAg
ICB7Ci0gICAgICAgIFVDaGFyKiBkOwotICAgICAgICBTdHJpbmdJbXBsKiByID0gU3RyaW5nSW1w
bDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYubGVuZ3RoLCBkKS5sZWFrUmVmKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAg
ZFtpXSA9IGJ1Zi5zW2ldOwotICAgICAgICByLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2Nh
dGlvbiA9IHI7IAotICAgIH0KLX07Ci0KIHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNv
bnN0IFVTdHJpbmcmIHN0cmluZywgYm9vbCYgb2spCiB7CiAgICAgb2sgPSBmYWxzZTsKQEAgLTE5
MywyOCArMTU5LDYgQEAgdWludDMyX3QgSWRlbnRpZmllcjo6dG9VSW50MzIoY29uc3QgVVN0cgog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVy
OjphZGQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0
aCkKLXsKLSAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgVUNoYXIgYyA9IHNbMF07Ci0g
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHJl
dHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZ1JlcChjKSk7Ci0gICAgfQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1
cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBVQ2hhckJ1ZmZlciBidWYgPSB7cywgbGVuZ3Ro
fTsgCi0gICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJl
c3VsdCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRkPFVDaGFyQnVmZmVyLCBJZGVu
dGlmaWVyVUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYpOwotCi0gICAgLy8gSWYgdGhlIHN0cmlu
ZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCi0gICAgLy8g
VGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KLSAgICByZXR1
cm4gYWRkUmVzdWx0LnNlY29uZCA/IGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpIDogKmFkZFJl
c3VsdC5maXJzdDsKLX0KLQotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gYWRkKCZleGVjLT5nbG9iYWxEYXRhKCksIHMsIGxlbmd0aCk7Ci19Ci0KIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBTdHJpbmdJbXBsKiByKQogewogICAgIEFTU0VSVCghci0+aXNJZGVudGlmaWVyKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkocmV2aXNp
b24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDExIEBACiAjaWZuZGVmIElkZW50aWZpZXJfaAog
I2RlZmluZSBJZGVudGlmaWVyX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCiAjaW5jbHVkZSAi
VVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM2LDExICszOCwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSWRlbnRpZmllcigpIHsgfQogCiAgICAgICAgIElkZW50
aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChleGVj
LCBzKSkgeyB9IC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KKyAgICAg
ICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3Ro
KSA6IG1fc3RyaW5nKGFkZChleGVjLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRlbnRpZmll
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5n
KGFkZChleGVjLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUq
IGV4ZWMsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQoZXhlYywgcmVwKSkgeyB9IAog
ICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykgOiBt
X3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IH0KIAogICAgICAgICBJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykgOiBtX3N0cmluZyhhZGQoZ2xv
YmFsRGF0YSwgcykpIHsgfSAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0ZXJhbHMu
CisgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBMQ2hh
ciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcywgbGVuZ3RoKSkg
eyB9CiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBV
Q2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcywgbGVuZ3Ro
KSkgeyB9CiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJp
bmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHJlcCkpIHsgfSAKICAgICAg
ICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMp
IDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHMuaW1wbCgpKSkgeyB9CkBAIC03Nyw2ICs4MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsKICAgICAgICAgc3RhdGljIGlubGluZSBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqYSwgY29uc3QgY2hhcipiKSB7IHJldHVybiBJZGVudGlm
aWVyOjplcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9OworICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJ
bXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJldHVy
biA6OmVxdWFsKGEsIGIpOyB9CiAKQEAgLTg5LDggKzk0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50
aWZpZXImIGIpIHsgcmV0dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcuaW1wbCgp
OyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0
IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0KIAotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgY29uc3Qg
VUNoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gYWRkKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQo
RXhlY1N0YXRlKiwgY29uc3QgVCosIGludCBsZW5ndGgpOworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEpTR2xvYmFsRGF0YSos
IGNvbnN0IFQqLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEFM
V0FZU19JTkxJTkUgc3RhdGljIGJvb2wgY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFQpOwog
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqIGV4
ZWMsIFN0cmluZ0ltcGwqIHIpCiAgICAgICAgIHsKQEAgLTExNyw3ICsxMjMsNzIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJs
ZShFeGVjU3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRpZmll
clRhYmxlKEpTR2xvYmFsRGF0YSopOwogICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8PiBBTFdBWVNf
SU5MSU5FIGJvb2wgSWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKExDaGFy
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyA9PSAweGZm
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGUgPD4gQUxXQVlT
X0lOTElORSBib29sIElkZW50aWZpZXI6OmNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhVQ2hh
ciBjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmlu
Zyk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IENoYXJC
dWZmZXIgeworICAgICAgICBjb25zdCBUKiBzOworICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3Ro
OworICAgIH07CiAgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IElk
ZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvciB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IENoYXJCdWZmZXI8VD4mIGJ1ZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2g8VD4oYnVmLnMsIGJ1Zi5sZW5ndGgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBz
dHIsIGNvbnN0IENoYXJCdWZmZXI8VD4mIGJ1ZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwg
Y29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmLCB1bnNpZ25lZCBoYXNoKQorICAgICAgICB7CisgICAg
ICAgICAgICBUKiBkOworICAgICAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1JlZigpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBidWYubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAg
ICAgZFtpXSA9IGJ1Zi5zW2ldOworICAgICAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKKyAgICAg
ICAgICAgIGxvY2F0aW9uID0gcjsgCisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQorICAgIHsK
KyAgICAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICBUIGMgPSBzWzBdOworICAg
ICAgICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOworICAg
ICAgICBDaGFyQnVmZmVyPFQ+IGJ1ZiA9IHtzLCBsZW5ndGh9OyAKKyAgICAgICAgcGFpcjxIYXNo
U2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IGdsb2JhbERhdGEt
PmlkZW50aWZpZXJUYWJsZS0+YWRkPENoYXJCdWZmZXI8VD4sIElkZW50aWZpZXJDaGFyQnVmZmVy
VHJhbnNsYXRvcjxUPiA+KGJ1Zik7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgc3RyaW5n
IGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KKyAgICAgICAg
Ly8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KKyAgICAg
ICAgcmV0dXJuIGFkZFJlc3VsdC5zZWNvbmQgPyBhZG9wdFJlZigqYWRkUmVzdWx0LmZpcnN0KSA6
ICphZGRSZXN1bHQuZmlyc3Q7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgTkVWRVJfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgVCogcywgaW50IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZGQoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcywgbGVuZ3RoKTsKKyAgICB9CisKICAgICBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50aWZp
ZXImIGIpCiAgICAgewogICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgYik7CkBA
IC0xNTIsNyArMjIzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgcmV0dXJu
IFdURjo6ZXF1YWwociwgcyk7CiAgICAgfQotICAgIAorCisgICAgaW5saW5lIGJvb2wgSWRlbnRp
Zmllcjo6ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogciwgY29uc3QgTENoYXIqIHMsIHVuc2lnbmVk
IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHIsIHMsIGxlbmd0aCk7
CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgSWRlbnRpZmllcjo6ZXF1YWwoY29uc3QgU3RyaW5n
SW1wbCogciwgY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAgICAg
IHJldHVybiBXVEY6OmVxdWFsKHIsIHMsIGxlbmd0aCk7CkBAIC0xNzcsNiArMjUzLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwg
aW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1wbD4gPiwg
SWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4gSWRlbnRpZmllck1hcDsKIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgc3RkOjpwYWlyPEhhc2hTZXQ8U3RyaW5n
SW1wbCo+OjppdGVyYXRvciwgYm9vbD4gSWRlbnRpZmllclRhYmxlOjphZGQoVSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHN0ZDo6cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJv
b2w+IHJlc3VsdCA9IG1fdGFibGUuYWRkPFUsIFY+KHZhbHVlKTsKKyAgICAgICAgKCpyZXN1bHQu
Zmlyc3QpLT5zZXRJc0lkZW50aWZpZXIodHJ1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIElkZW50aWZpZXJfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywg
YwogICAgICAgICBpZiAoYyA9PSAnJScpIHsKICAgICAgICAgICAgIGludCBjaGFyTGVuID0gMDsK
ICAgICAgICAgICAgIGlmIChrIDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0KHBbMV0pICYm
IGlzQVNDSUlIZXhEaWdpdChwWzJdKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgYjAg
PSBMZXhlcjo6Y29udmVydEhleChwWzFdLCBwWzJdKTsKKyAgICAgICAgICAgICAgICBjb25zdCBj
aGFyIGIwID0gTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0SGV4KHBbMV0sIHBbMl0pOwogICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBzZXF1ZW5jZUxlbiA9IFVURjhTZXF1ZW5jZUxlbmd0aChiMCk7CiAg
ICAgICAgICAgICAgICAgaWYgKHNlcXVlbmNlTGVuICE9IDAgJiYgayA8PSBsZW4gLSBzZXF1ZW5j
ZUxlbiAqIDMpIHsKICAgICAgICAgICAgICAgICAgICAgY2hhckxlbiA9IHNlcXVlbmNlTGVuICog
MzsKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhl
YywgYwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNlcXVlbmNlTGVu
OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBxID0gcCArIGkg
KiAzOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHFbMF0gPT0gJyUnICYmIGlzQVNDSUlI
ZXhEaWdpdChxWzFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocVsyXSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBMZXhlcjo6Y29udmVydEhleChxWzFdLCBxWzJdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZVtpXSA9IExleGVyPFVDaGFyPjo6
Y29udmVydEhleChxWzFdLCBxWzJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSAwOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRl
Y29kZShFeGVjU3RhdGUqIGV4ZWMsIGMKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQVND
SUlIZXhEaWdpdChwWzJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocFszXSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChwWzRdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocFs1
XSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hhckxlbiA9IDY7Ci0gICAgICAgICAgICAgICAg
ICAgIHUgPSBMZXhlcjo6Y29udmVydFVuaWNvZGUocFsyXSwgcFszXSwgcFs0XSwgcFs1XSk7Cisg
ICAgICAgICAgICAgICAgICAgIHUgPSBMZXhlcjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKHBbMl0s
IHBbM10sIHBbNF0sIHBbNV0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChjaGFyTGVuICYmICh1ID09IDAgfHwgdSA+PSAxMjggfHwgIXN0cmNocihk
b05vdFVuZXNjYXBlLCB1KSkpIHsKQEAgLTE3MywxMiArMTczLDEyIEBAIHN0YXRpYyBpbnQgcGFy
c2VEaWdpdCh1bnNpZ25lZCBzaG9ydCBjLCAKICAgICByZXR1cm4gZGlnaXQ7CiB9CiAKLWRvdWJs
ZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGludCByYWRpeCkK
K2RvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoLCBpbnQg
cmFkaXgpCiB7CiAgICAgZG91YmxlIG51bWJlciA9IDAuMDsKICAgICBkb3VibGUgcmFkaXhNdWx0
aXBsaWVyID0gMS4wOwogCi0gICAgZm9yIChjb25zdCBjaGFyKiBwID0gcyArIGxlbmd0aCAtIDE7
IHAgPj0gczsgcC0tKSB7CisgICAgZm9yIChjb25zdCBMQ2hhciogcCA9IHMgKyBsZW5ndGggLSAx
OyBwID49IHM7IHAtLSkgewogICAgICAgICBpZiAocmFkaXhNdWx0aXBsaWVyID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewogICAgICAgICAgICAgaWYgKCpwICE9
ICcwJykgewogICAgICAgICAgICAgICAgIG51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKTsKQEAgLTU3OCwxMiArNTc4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY1UKICAgICAgICAgVUNoYXIgdTsKICAgICAgICAgaWYgKGNb
MF0gPT0gJyUnICYmIGsgPD0gbGVuIC0gNiAmJiBjWzFdID09ICd1JykgewogICAgICAgICAgICAg
aWYgKGlzQVNDSUlIZXhEaWdpdChjWzJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY1szXSkgJiYgaXNB
U0NJSUhleERpZ2l0KGNbNF0pICYmIGlzQVNDSUlIZXhEaWdpdChjWzVdKSkgewotICAgICAgICAg
ICAgICAgIHUgPSBMZXhlcjo6Y29udmVydFVuaWNvZGUoY1syXSwgY1szXSwgY1s0XSwgY1s1XSk7
CisgICAgICAgICAgICAgICAgdSA9IExleGVyPFVDaGFyPjo6Y29udmVydFVuaWNvZGUoY1syXSwg
Y1szXSwgY1s0XSwgY1s1XSk7CiAgICAgICAgICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgICAg
ICAgIGsgKz0gNTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjWzBdID09ICcl
JyAmJiBrIDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0KGNbMV0pICYmIGlzQVNDSUlIZXhE
aWdpdChjWzJdKSkgewotICAgICAgICAgICAgdSA9IFVDaGFyKExleGVyOjpjb252ZXJ0SGV4KGNb
MV0sIGNbMl0pKTsKKyAgICAgICAgICAgIHUgPSBVQ2hhcihMZXhlcjxVQ2hhcj46OmNvbnZlcnRI
ZXgoY1sxXSwgY1syXSkpOwogICAgICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgICAgayArPSAy
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUq
KTsKIAogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQg
PSA5MDA3MTk5MjU0NzQwOTkyLjA7Ci0gICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3Qg
Y2hhciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CisgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZs
b3coY29uc3QgTENoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOworICAgIEFMV0FZU19JTkxJ
TkUgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hhciogcywgaW50IGxlbmd0aCwgaW50
IHJhZGl4KSB7IHJldHVybiBwYXJzZUludE92ZXJmbG93KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihzKSwgbGVuZ3RoLCByYWRpeCk7IH0KICAgICBkb3VibGUgcGFyc2VJbnRPdmVyZmxv
dyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CiAgICAgYm9vbCBpc1N0cldo
aXRlU3BhY2UoVUNoYXIpOwogICAgIGRvdWJsZSBqc1RvTnVtYmVyKGNvbnN0IFVTdHJpbmcmIHMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNl
ci5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNyBAQCB0ZW1w
bGF0ZSA8TGl0ZXJhbFBhcnNlcjo6UGFyc2VyTW9kZSBtb2RlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFRva0Vycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKEpT
Qzo6TGV4ZXI6OmNvbnZlcnRVbmljb2RlKG1fcHRyWzFdLCBtX3B0clsyXSwgbV9wdHJbM10sIG1f
cHRyWzRdKSk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKEpTQzo6TGV4ZXI8
VUNoYXI+Ojpjb252ZXJ0VW5pY29kZShtX3B0clsxXSwgbV9wdHJbMl0sIG1fcHRyWzNdLCBtX3B0
cls0XSkpOwogICAgICAgICAgICAgICAgICAgICBtX3B0ciArPSA1OwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDcgQEAgdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogLy8gTGFuZGluZyB0aGUgZmlsZSBt
b3ZlcyBpbiBvbmUgcGF0Y2gsIHdpbGwgZm9sbG93IG9uIHdpdGggcGF0Y2hlcyB0byBjaGFuZ2Ug
dGhlIG5hbWVzcGFjZXMuCiBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBJZGVudGlmaWVyQ1N0cmlu
Z1RyYW5zbGF0b3I7Ci1zdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwotc3Ry
dWN0IElkZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gc3RydWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsKIH0KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC02Myw4ICs2Miw4IEBAIHR5cGVkZWYgYm9vbCAoKklzV2hpdGVTcGFjZUZ1bmN0
aW9uUHRyKSgKIGNsYXNzIFN0cmluZ0ltcGwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
cmluZ0ltcGwpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQgc3RydWN0IEpT
Qzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJ
ZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6Oklk
ZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6Oklk
ZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxMQ2hhcj47CisgICAgZnJpZW5kIHN0cnVjdCBK
U0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxVQ2hhcj47CiAgICAgZnJpZW5kIHN0
cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNo
QW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRV
VEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5OTIwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIz
IEBACisyMDExLTExLTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisg
ICAgICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNz
IGJ5IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZWQgdGhlIFNvdXJjZVByb3ZpZGVyOjpk
YXRhKCkgdmlydHVhbCBtZXRob2QgdG8gcmV0dXJuIGEKKyAgICAgICAgU3RyaW5nSW1wbCogaW5z
dGVhZCBvZiBhIFVDaGFyKi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLSByZWZhY3RvcmVkIFNvdXJjZVByb3ZpZGVyIGNsYXNz
IGFuZCBzdWItY2xhc3Nlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNv
dXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlcjo6ZGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRmFp
bGVkVG9QYXJzZVNvdXJjZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJv
dmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1NvdXJjZVByb3ZpZGVyOjpkYXRhKToK
KwogMjAxMS0xMS0wMyAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQ1NTUnVsZUxpc3Q6IE1vdmUgcnVsZSBvcnBoYW5pbmcgZnJvbSBkZWxldGVSdWxlKCkgb3V0
IHRvIGNhbGxlcnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3Jp
cHRTb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgSlNDOjpVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyByZXR1
cm4gSlNDOjpVU3RyaW5nKG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5jaGFyYWN0ZXJzKCkgKyBz
dGFydCwgZW5kIC0gc3RhcnQpOyB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmNoYXJhY3RlcnMoKTsgfQorICAgICAg
ICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRT
Y3JpcHQtPnNjcmlwdCgpLmltcGwoKTsgfQogICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmxlbmd0aCgpOyB9CiAgICAgICAgIGNvbnN0
IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgp
OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3Zp
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291
cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBKU0M6OlVTdHJpbmcgZ2V0UmFuZ2Uo
aW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCB7IHJldHVybiBKU0M6OlVTdHJpbmcobV9zb3VyY2Uu
Y2hhcmFjdGVycygpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQogICAgICAgICBjb25zdCBVQ2hh
ciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmNoYXJhY3RlcnMoKTsgfQorICAgICAg
ICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2Uu
aW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5s
ZW5ndGgoKTsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlOyB9CiAKQEAgLTYxLDYgKzYyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IHsKICAgICAgICAgcmV0dXJuIEpTQzo6U291cmNlQ29kZShTdHJpbmdTb3VyY2VQcm92aWRlcjo6
Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3RhcnRQb3NpdGlvbi5tX2xpbmUu
b25lQmFzZWRJbnQoKSk7CiAgICAgfQorICAgIAorICAgIAogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDk5MjA1KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpJbmplY3RlZEJ1bmRsZVBhZ2UoVwogICAgICAgICB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0
Rm9yRnJhbWUsCiAgICAgICAgIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lLAogICAgICAg
ICAwLCAvLyBkaWRMYXlvdXRGb3JGcmFtZQotICAgICAgICBkaWREZXRlY3RYU1NGb3JGcmFtZSwK
KyAgICAgICAgLy8gZGlkRGV0ZWN0WFNTRm9yRnJhbWUsCiAgICAgfTsKICAgICBXS0J1bmRsZVBh
Z2VTZXRQYWdlTG9hZGVyQ2xpZW50KG1fcGFnZSwgJmxvYWRlckNsaWVudCk7CiAK
</data>
<flag name="commit-queue"
          id="111925"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113533</attachid>
            <date>2011-11-03 11:50:17 -0700</date>
            <delta_ts>2011-11-03 13:31:32 -0700</delta_ts>
            <desc>Updated patch with another build fix</desc>
            <filename>71331-4.patch</filename>
            <type>text/plain</type>
            <size>69134</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA3IEBA
CisyMDExLTExLTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5
IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZSB0aGUgTGV4ZXIgY2xhc3MgdG8gYmUgYSB0
ZW1wbGF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgIHR5cGUgb2YgdGhl
IHNvdXJjZS4gIEluIHRoZSBwcm9jZXNzIHVwZGF0ZWQgdGhlIHBhcnNlSWRlbnRpZmllcigpCisg
ICAgICAgIGFuZCBwYXJzZVN0cmluZygpIG1ldGhvZHMgdG8gY3JlYXRlIDggYml0IHN0cmluZ3Mg
d2hlcmUgcG9zc2libGUuCisgICAgICAgIEFsc28gYWRkZWQgc29tZSBoZWxwZXIgbWV0aG9kcyBm
b3IgYWNjdW11bGF0aW5nIHRlbXBvcmFyeSBzdHJpbmcKKyAgICAgICAgZGF0YSBpbiB0aGUgOCBh
bmQgMTYgYml0IHZlY3RvcnMuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFVwZGF0ZWQgdGhlIEtleXdvcmRMb29rdXAg
Z2VuZXJhdG9yIHRvIGNyZWF0ZSBjb2RlIHRvIG1hdGNoIGtleXdvcmRzCisgICAgICAgIGZvciBi
b3RoIDggYW5kIDE2IGJpdCBzb3VyY2Ugc3RyaW5ncy4KKworICAgICAgICBEdWUgdG8gYSBjb21w
aWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIG1vdmVkIGVudW0KKyAgICAgICAg
ZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBMZXhlciBjbGFzcyBkZWNsYXJhdGlvbi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHBhcnNlci9MZXhl
ci5jcHA6CisgICAgICAgIChKU0M6Ojo6TGV4ZXIpOgorICAgICAgICAoSlNDOjo6On5MZXhlcik6
CisgICAgICAgIChKU0M6Ojo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6
OjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6OjpzZXRDb2RlKToKKyAgICAgICAg
KEpTQzo6OjppbnRlcm5hbFNoaWZ0KToKKyAgICAgICAgKEpTQzo6OjpzaGlmdCk6CisgICAgICAg
IChKU0M6Ojo6cGVlayk6CisgICAgICAgIChKU0M6Ojo6Z2V0VW5pY29kZUNoYXJhY3Rlcik6Cisg
ICAgICAgIChKU0M6Ojo6c2hpZnRMaW5lVGVybWluYXRvcik6CisgICAgICAgIChKU0M6Ojo6bGFz
dFRva2VuV2FzUmVzdHJLZXl3b3JkKToKKyAgICAgICAgKEpTQzo6OjpyZWNvcmQ4KToKKyAgICAg
ICAgKEpTQzo6OjphcHBlbmQ4KToKKyAgICAgICAgKEpTQzo6OjphcHBlbmQxNik6CisgICAgICAg
IChKU0M6Ojo6cmVjb3JkMTYpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRpZmllcik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VJZGVudGlmaWVyU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUhleCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VPY3RhbCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VEZWNpbWFsKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJl
ckFmdGVyRGVjaW1hbFBvaW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJlckFmdGVyRXhw
b25lbnRJbmRpY2F0b3IpOgorICAgICAgICAoSlNDOjo6OnBhcnNlTXVsdGlsaW5lQ29tbWVudCk6
CisgICAgICAgIChKU0M6Ojo6bmV4dFRva2VuSXNDb2xvbik6CisgICAgICAgIChKU0M6Ojo6bGV4
KToKKyAgICAgICAgKEpTQzo6OjpzY2FuUmVnRXhwKToKKyAgICAgICAgKEpTQzo6Ojpza2lwUmVn
RXhwKToKKyAgICAgICAgKEpTQzo6OjpjbGVhcik6CisgICAgICAgIChKU0M6Ojo6c291cmNlQ29k
ZSk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjphcHBl
bmQxNik6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OnNldE9mZnNldEZyb21DaGFyT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Ojppc1do
aXRlU3BhY2UpOgorICAgICAgICAoSlNDOjo6OmlzTGluZVRlcm1pbmF0b3IpOgorICAgICAgICAo
SlNDOjo6OmNvbnZlcnRIZXgpOgorICAgICAgICAoSlNDOjo6OmNvbnZlcnRVbmljb2RlKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bGV4RXhwZWN0
SWRlbnRpZmllcik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAgICAgICAq
IHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgICogcGFy
c2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZTo6c3ViRXhwcmVzc2lv
bik6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcjo6c3RyaW5nRGF0YSk6CisgICAgICAgICogcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyQ2FjaGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppbnNl
cnRTZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllclRhYmxlOjphZGQpOgorICAgICAgICAqIHJ1bnRpbWUv
SWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAg
IChKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZXF1
YWwpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyVGFibGU6OmFkZCk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmRlY29kZSk6
CisgICAgICAgIChKU0M6OnBhcnNlSW50T3ZlcmZsb3cpOgorICAgICAgICAoSlNDOjpnbG9iYWxG
dW5jVW5lc2NhcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6cGFyc2VJbnRPdmVyZmxvdyk6CisgICAgICAgICogcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQ
YXJzZSk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXhTdHJpbmcpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKwogMjAxMS0xMS0wMyAgTWFyayBIYWhu
ZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERlLXZpcnR1YWxpemUg
SlNPYmplY3Q6OmNsYXNzTmFtZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdvcmRM
b29rdXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0tl
eXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCBjbGFzcyBUcmllOgogICAgICAgICBzZWxmLmtleXMgPSBbKHRyaWUucHJl
Zml4LCB0cmllKSBmb3IgdHJpZSBpbiBzb3J0ZWQoc2VsZi5rZXlzLnZhbHVlcygpLCBrZXk9b3Bl
cmF0b3IuYXR0cmdldHRlcignd2VpZ2h0JyksIHJldmVyc2U9VHJ1ZSldCiAgICAgICAgIHNlbGYu
d2VpZ2h0ID0gd2VpZ2h0CiAKLSAgICBkZWYgcHJpbnRTdWJUcmVlQXNDKHNlbGYsIGluZGVudCk6
CisgICAgZGVmIHByaW50U3ViVHJlZUFzQyhzZWxmLCB0eXBlTmFtZSwgaW5kZW50KToKICAgICAg
ICAgc3RyID0gbWFrZVBhZGRpbmcoaW5kZW50KQogCiAgICAgICAgIGlmIHNlbGYudmFsdWUgIT0g
Tm9uZToKQEAgLTE0NiwxMyArMTQ2LDEzIEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICAgICAgICAg
YmFzZSA9ICJjb2RlIgogICAgICAgICAgICAgICAgIGlmIGJhc2VJbmRleCA+IDA6CiAgICAgICAg
ICAgICAgICAgICAgIGJhc2UgPSAiY29kZSArICVkIiAlIGJhc2VJbmRleAotICAgICAgICAgICAg
ICAgIGNvbXBhcmlzb24gPSAoIkNPTVBBUkVfQ0hBUkFDVEVSUyVkKCVzLCAiICUgKGxlbih0ZXN0
KSwgYmFzZSkpICsgIiwgIi5qb2luKHRlc3QpICsgIikiCisgICAgICAgICAgICAgICAgY29tcGFy
aXNvbiA9ICgiQ09NUEFSRV8lZCVzUyglcywgIiAlIChsZW4odGVzdCksIHR5cGVOYW1lLCBiYXNl
KSkgKyAiLCAiLmpvaW4odGVzdCkgKyAiKSIKICAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9PSAw
OgogICAgICAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7
IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0gZWxz
ZSBpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7IikKIAotICAgICAgICAgICAgdHJpZS5wcmludFN1
YlRyZWVBc0MoaW5kZW50ICsgNCkKKyAgICAgICAgICAgIHRyaWUucHJpbnRTdWJUcmVlQXNDKHR5
cGVOYW1lLCBpbmRlbnQgKyA0KQogICAgICAgICAgICAgaXRlbUNvdW50ID0gaXRlbUNvdW50ICsg
MQogCiAgICAgICAgICAgICBpZiBpdGVtQ291bnQgPT0gbGVuKHNlbGYua2V5cyk6CkBAIC0xNzMs
MTIgKzE3MywyMyBAQCBjbGFzcyBUcmllOgogICAgICAgICAjIG1heCBsZW5ndGggKyAxIHNvIHdl
IGRvbid0IG5lZWQgdG8gZG8gYW55IGJvdW5kcyBjaGVja2luZyBhdCBhbGwKICAgICAgICAgcHJp
bnQoInN0YXRpYyBjb25zdCBpbnQgbWF4VG9rZW5MZW5ndGggPSAlZDsiICUgKHNlbGYubWF4TGVu
Z3RoKCkgKyAxKSkKICAgICAgICAgcHJpbnQoIiIpCi0gICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8
Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExl
eGVyOjpwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKKyAgICAgICAgcHJpbnQoInRl
bXBsYXRlIDw+IikKKyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlk
ZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8VUNoYXI+OjpwYXJzZUtl
eXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKICAgICAgICAgcHJpbnQoInsiKQogICAgICAgICBw
cmludCgiICAgIEFTU0VSVChtX2NvZGVFbmQgLSBtX2NvZGUgPj0gbWF4VG9rZW5MZW5ndGgpOyIp
CiAgICAgICAgIHByaW50KCIiKQogICAgICAgICBwcmludCgiICAgIGNvbnN0IFVDaGFyKiBjb2Rl
ID0gbV9jb2RlOyIpCi0gICAgICAgIHNlbGYucHJpbnRTdWJUcmVlQXNDKDQpCisgICAgICAgIHNl
bGYucHJpbnRTdWJUcmVlQXNDKCJVQ0hBUiIsIDQpCisgICAgICAgIHByaW50KCIgICAgcmV0dXJu
IElERU5UOyIpCisgICAgICAgIHByaW50KCJ9IikKKyAgICAgICAgcHJpbnQoIiIpCisgICAgICAg
IHByaW50KCJ0ZW1wbGF0ZSA8PiIpCisgICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExDaGFy
Pjo6cGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKiBkYXRhKSIpCisgICAgICAgIHByaW50KCJ7IikK
KyAgICAgICAgcHJpbnQoIiAgICBBU1NFUlQobV9jb2RlRW5kIC0gbV9jb2RlID49IG1heFRva2Vu
TGVuZ3RoKTsiKQorICAgICAgICBwcmludCgiIikKKyAgICAgICAgcHJpbnQoIiAgICBjb25zdCBM
Q2hhciogY29kZSA9IG1fY29kZTsiKQorICAgICAgICBzZWxmLnByaW50U3ViVHJlZUFzQygiQ0hB
UiIsIDQpCiAgICAgICAgIHByaW50KCIgICAgcmV0dXJuIElERU5UOyIpCiAgICAgICAgIHByaW50
KCJ9IikKICAgICAgICAgcHJpbnQoIiIpCkBAIC0xOTQsNTcgKzIwNSw4NSBAQCBwcmludCgiLy8g
VGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgS2V5CiBwcmludCgiIiIKICNpZiBDUFUoTkVFRFNf
QUxJR05FRF9BQ0NFU1MpCiAKLSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBj
aGFyMSwgY2hhcjIpIFxcCisjZGVmaW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBj
aGFyMikgXFwKKyAgICAoKChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsxXSA9
PSBjaGFyMikpCisjZGVmaW5lIENPTVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0KSBcXAorICAgIChDT01QQVJFXzJDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIpICYmIENPTVBBUkVfMkNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisjZGVm
aW5lIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFxcCiAgICAgKCgoYWRk
cmVzcylbMF0gPT0gY2hhcjEpICYmICgoYWRkcmVzcylbMV0gPT0gY2hhcjIpKQotI2RlZmluZSBD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBc
XAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09N
UEFSRV9DSEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBD
T01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisg
ICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVD
SEFSUygoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQogCiAjZWxzZSAvLyBDUFUoTkVFRFNf
QUxJR05FRF9BQ0NFU1MpCiAKICNpZiBDUFUoQklHX0VORElBTikKIAotI2RlZmluZSBDSEFSUEFJ
Ul9UT1VJTlQzMihhLCBiKSBcXAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQxNihhLCBiKSBcXAor
ICAgICgoKCh1aW50MTZfdCkoYSkpIDw8IDgpICsgKHVpbnQxNl90KShiKSkKKyNkZWZpbmUgQ0hB
UlFVQURfVE9VSU5UMzIoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDMyX3QpKENIQVJQQUlS
X1RPVUlOVDE2KGEsIGIpKSkgPDwgMTYpICsgQ0hBUlBBSVJfVE9VSU5UMTYoYywgZCkpCisjZGVm
aW5lIFVDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSBcXAogICAgICgoKCh1aW50MzJfdCkoYSkpIDw8
IDE2KSArICh1aW50MzJfdCkoYikpCi0jZGVmaW5lIENIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMs
IGQpIFxcCi0gICAgKCgoKHVpbnQ2NF90KShDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkpIDw8IDMy
KSArIENIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKQorI2RlZmluZSBVQ0hBUlFVQURfVE9VSU5UNjQo
YSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDY0X3QpKFVDSEFSUVVBRF9UT1VJTlQ2NChhLCBi
KSkpIDw8IDMyKSArIFVDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkKIAogI2Vsc2UgLy8gQ1BVKEJJ
R19FTkRJQU4pCiAKLSNkZWZpbmUgQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikgXFwKKyNkZWZpbmUg
Q0hBUlBBSVJfVE9VSU5UMTYoYSwgYikgXFwKKyAgICAoKCgodWludDE2X3QpKGIpKSA8PCA4KSAr
ICh1aW50MTZfdCkoYSkpCisjZGVmaW5lIENIQVJRVUFEX1RPVUlOVDMyKGEsIGIsIGMsIGQpIFxc
CisgICAgKCgoKHVpbnQzMl90KShDSEFSUEFJUl9UT1VJTlQxNihjLCBkKSkpIDw8IDE2KSArIENI
QVJQQUlSX1RPVUlOVDE2KGEsIGIpKQorI2RlZmluZSBVQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikg
XFwKICAgICAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWludDMyX3QpKGEpKQotI2RlZmlu
ZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSBcXAotICAgICgoKCh1aW50NjRfdCkoQ0hB
UlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkK
KyNkZWZpbmUgVUNIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMsIGQpIFxcCisgICAgKCgoKHVpbnQ2
NF90KShVQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBVQ0hBUlBBSVJfVE9VSU5U
MzIoYSwgYikpCiAKICNlbmRpZiAvLyBDUFUoQklHX0VORElBTikKIAogCi0jZGVmaW5lIENPTVBB
UkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAotICAgICgoKHVpbnQzMl90
KikoYWRkcmVzcykpWzBdID09IENIQVJQQUlSX1RPVUlOVDMyKGNoYXIxLCBjaGFyMikpCisjZGVm
aW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKKyAgICAoKCh1aW50
MTZfdCopKGFkZHJlc3MpKVswXSA9PSBDSEFSUEFJUl9UT1VJTlQxNihjaGFyMSwgY2hhcjIpKQor
I2RlZmluZSBDT01QQVJFXzJVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAgICgo
KHVpbnQzMl90KikoYWRkcmVzcykpWzBdID09IFVDSEFSUEFJUl9UT1VJTlQzMihjaGFyMSwgY2hh
cjIpKQogCiAjaWYgQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM0KGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAgICgoKHVpbnQ2NF90Kiko
YWRkcmVzcykpWzBdID09IENIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNo
YXI0KSkKKyNkZWZpbmUgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFy
MywgY2hhcjQpIFxcCisgICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFVQURf
VE9VSU5UMzIoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRV
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKCgodWlu
dDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gVUNIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0KSkKIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJF
X0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAg
IChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV9D
SEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJF
XzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoQ09N
UEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiBDT01QQVJFXzJDSEFSUygoYWRk
cmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRVQ0hBUlMoYWRkcmVz
cywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVDSEFSUygoYWRkcmVzcykgKyAyLCBj
aGFyMywgY2hhcjQpKQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogI2VuZGlmIC8vIENQVShO
RUVEU19BTElHTkVEX0FDQ0VTUykKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMzKGFkZHJl
c3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRk
cmVzcywgY2hhcjEsIGNoYXIyKSAmJiAoKGFkZHJlc3MpWzJdID09IChjaGFyMykpKQotI2RlZmlu
ZSBDT01QQVJFX0NIQVJBQ1RFUlM1KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
LCBjaGFyNSkgXFwKLSAgICAoQ09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9PSAoY2hhcjUpKSkKLSNkZWZpbmUg
Q09NUEFSRV9DSEFSQUNURVJTNihhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwg
Y2hhcjUsIGNoYXI2KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MgKyA0
LCBjaGFyNSwgY2hhcjYpKQotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM3KGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAotICAgIChD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAm
JiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyAzLCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBj
aGFyNykpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzgoYWRkcmVzcywgY2hhcjEsIGNoYXIy
LCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcsIGNoYXI4KSBcXAotICAgIChDT01Q
QVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFy
OCkpCisjZGVmaW5lIENPTVBBUkVfM0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMp
IFxcCisgICAgKENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChhZGRy
ZXNzKVsyXSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV8zVUNIQVJTKGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFy
MSwgY2hhcjIpICYmICgoYWRkcmVzcylbMl0gPT0gKGNoYXIzKSkpCisjZGVmaW5lIENPTVBBUkVf
NUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSkgXFwKKyAg
ICAoQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYm
ICgoYWRkcmVzcylbNF0gPT0gKGNoYXI1KSkpCisjZGVmaW5lIENPTVBBUkVfNVVDSEFSUyhhZGRy
ZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUpIFxcCisgICAgKENPTVBBUkVf
NFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNz
KVs0XSA9PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFSRV82Q0hBUlMoYWRkcmVzcywgY2hhcjEs
IGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAoQ09NUEFSRV80Q0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfMkNIQVJT
KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYpKQorI2RlZmluZSBDT01QQVJFXzZVQ0hBUlMoYWRk
cmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAo
Q09NUEFSRV80VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBD
T01QQVJFXzJVQ0hBUlMoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENPTVBB
UkVfN0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hh
cjYsIGNoYXI3KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIs
IGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcyArIDMsIGNoYXI0LCBjaGFy
NSwgY2hhcjYsIGNoYXI3KSkKKyNkZWZpbmUgQ09NUEFSRV83VUNIQVJTKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAorICAgIChDT01Q
QVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBB
UkVfNFVDSEFSUyhhZGRyZXNzICsgMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQorI2Rl
ZmluZSBDT01QQVJFXzhDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwg
Y2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCisgICAgKENPTVBBUkVfNENIQVJTKGFkZHJl
c3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFXzRDSEFSUyhhZGRyZXNz
ICsgNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpKQorI2RlZmluZSBDT01QQVJFXzhVQ0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hh
cjcsIGNoYXI4KSBcXAorICAgIChDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIy
LCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzICsgNCwgY2hhcjUsIGNo
YXI2LCBjaGFyNywgY2hhcjgpKQogIiIiKQogCiB0cmllLnByaW50QXNDKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVw
YXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdlIGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAg
ICAgICAgICAvLyB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFy
c2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCksIHBy
b2dyYW1Tb3VyY2UubGVuZ3RoKCksIExpdGVyYWxQYXJzZXI6Ok5vblN0cmljdEpTT04pOworICAg
ICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291cmNl
LmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9u
U3RyaWN0SlNPTik7CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVw
YXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9i
amVjdDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5j
cHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwxNyArMjI2LDIwIEBAIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCB0eXBlc09mQVNDSUkKIC8qIDEyNyAtIERlbGV0ZSAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJbnZhbGlkLAogfTsKIAotTGV4ZXI6OkxleGVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorTGV4ZXI8VD46OkxleGVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKICAgICA6IG1faXNSZXBhcnNpbmcoZmFsc2UpCiAgICAgLCBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKIH0KIAotTGV4ZXI6On5MZXhlcigpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0xleGVyPFQ+Ojp+TGV4ZXIoKQogewogfQotICAgIAotVVN0cmluZyBMZXhl
cjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitVU3Ry
aW5nIExleGVyPFQ+OjpnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQogewogICAgIHN3aXRjaCAobV9j
dXJyZW50KSB7CiAgICAgY2FzZSAwOgpAQCAtMjU4LDI2ICsyNjEsMzUgQEAgVVN0cmluZyBMZXhl
cjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgY29u
c3QgVUNoYXIqIExleGVyOjpjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQUxXQVlTX0lOTElORSBjb25zdCBUKiBMZXhlcjxUPjo6Y3VycmVudENoYXJhY3Rl
cigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY29kZSA8PSBtX2NvZGVFbmQpOwogICAgIHJldHVy
biBtX2NvZGU7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IExleGVyOjpjdXJyZW50T2Zmc2V0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcigpIC0gbV9jb2RlU3RhcnQ7Ci19
Ci0KLXZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJB
cmVuYSogYXJlbmEpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnNldENv
ZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJBcmVuYSogYXJlbmEpCiB7CiAgICAg
bV9hcmVuYSA9ICZhcmVuYS0+aWRlbnRpZmllckFyZW5hKCk7Ci0KKyAgICAKICAgICBtX2xpbmVO
dW1iZXIgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CiAgICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAg
ICBtX2xhc3RUb2tlbiA9IC0xOworICAgIAorICAgIGNvbnN0IFQqIGRhdGE7CisgICAgY29uc3Qg
U3RyaW5nSW1wbCogc291cmNlU3RyaW5nID0gc291cmNlLnByb3ZpZGVyKCktPnN0cmluZ0RhdGEo
KTsKIAotICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKTsK
KyAgICBpZiAoc291cmNlU3RyaW5nKSB7CisgICAgICAgIGlmIChzb3VyY2VTdHJpbmctPmlzOEJp
dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IHNpemVvZihMQ2hhcikpOwor
ICAgICAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHNvdXJjZVN0cmlu
Zy0+Y2hhcmFjdGVyczgoKSk7CisgICAgICAgIH0gZWxzZSAgeworICAgICAgICAgICAgQVNTRVJU
KHNpemVvZihUKSA9PSBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIGRhdGEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFQqPihzb3VyY2VTdHJpbmctPmNoYXJhY3RlcnMxNigpKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZQorICAgICAgICBkYXRhID0gMDsKIAogICAgIG1fc291cmNlID0gJnNv
dXJjZTsKICAgICBtX2NvZGVTdGFydCA9IGRhdGE7CkBAIC0yODYsMTAgKzI5OCwxMCBAQCB2b2lk
IExleGVyOjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHNvCiAgICAgbV9lcnJvciA9IGZhbHNl
OwogICAgIG1fYXRMaW5lU3RhcnQgPSB0cnVlOwogICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gVVN0
cmluZygpOwotCisgICAgCiAgICAgbV9idWZmZXI4LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5p
dGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CiAgICAgbV9idWZmZXIxNi5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KChtX2NvZGVFbmQgLSBtX2NvZGUpIC8gMik7Ci0KKyAgICAKICAgICBpZiAoTElLRUxZ
KG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7CiAgICAg
ZWxzZQpAQCAtMjk3LDcgKzMwOSw4IEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNl
Q29kZSYgc28KICAgICBBU1NFUlQoY3VycmVudE9mZnNldCgpID09IHNvdXJjZS5zdGFydE9mZnNl
dCgpKTsKIH0KIAotdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgTGV4ZXI6OlNoaWZ0VHlwZSBz
aG91bGRCb3VuZHNDaGVjaz4gQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjppbnRlcm5hbFNoaWZ0
KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgU2hp
ZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46Omlu
dGVybmFsU2hpZnQoKQogewogICAgIGlmIChzaG91bGRCb3VuZHNDaGVjayA9PSBEb0JvdW5kc0No
ZWNrKSB7CiAgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVuY2UKQEAgLTMx
MiwyMCArMzI1LDI4IEBAIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQsIExleGVyOjpTaGlmdFQK
ICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6c2hpZnQoKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnNoaWZ0KCkKIHsKLSAg
ICBpbnRlcm5hbFNoaWZ0PDEsIERvQm91bmRzQ2hlY2s+KCk7CisgICAgLy8gRmFzdGVyIHRoYW4g
YW4gaWYtZWxzZSBzZXF1ZW5jZQorICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gLTEpOworICAgIG1f
Y3VycmVudCA9IC0xOworICAgIG1fY29kZSsrOworICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9j
b2RlRW5kKSkKKyAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsKIH0KIAotQUxXQVlTX0lOTElO
RSBpbnQgTGV4ZXI6OnBlZWsoaW50IG9mZnNldCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxX
QVlTX0lOTElORSBpbnQgTGV4ZXI8VD46OnBlZWsoaW50IG9mZnNldCkKIHsKICAgICAvLyBPbmx5
IHVzZSBpZiBuZWNlc3NhcnkKICAgICBBU1NFUlQob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPCA1KTsK
LSAgICBjb25zdCBVQ2hhciogY29kZSA9IG1fY29kZSArIG9mZnNldDsKKyAgICBjb25zdCBUKiBj
b2RlID0gbV9jb2RlICsgb2Zmc2V0OwogICAgIHJldHVybiAoY29kZSA8IG1fY29kZUVuZCkgPyAq
Y29kZSA6IC0xOwogfQogCi1pbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbnQgTGV4ZXI8VD46OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQogewog
ICAgIGludCBjaGFyMSA9IHBlZWsoMSk7CiAgICAgaW50IGNoYXIyID0gcGVlaygyKTsKQEAgLTM0
Miw3ICszNjMsOCBAQCBpbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdExpbmVUZXJtaW5hdG9yKCkKIHsK
ICAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKTsKIApAQCAtMzU2LDcgKzM3
OCw4IEBAIHZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQogICAgICsrbV9saW5lTnVt
YmVyOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omxhc3RUb2tlbldhc1Jlc3RyS2V5
d29yZCgpIGNvbnN0Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBM
ZXhlcjxUPjo6bGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9sYXN0VG9rZW4gPT0gQ09OVElOVUUgfHwgbV9sYXN0VG9rZW4gPT0gQlJFQUsgfHwgbV9sYXN0
VG9rZW4gPT0gUkVUVVJOIHx8IG1fbGFzdFRva2VuID09IFRIUk9XOwogfQpAQCAtNDExLDM2ICs0
MzQsMTI4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbmdsZUVzY2FwZShpbnQgYykKICAgICB9CiB9
CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQ4KGludCBjKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkOChpbnQgYykKIHsKICAgICBBU1NFUlQo
YyA+PSAwKTsKICAgICBBU1NFUlQoYyA8PSAweEZGKTsKLSAgICBtX2J1ZmZlcjguYXBwZW5kKHN0
YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICBtX2J1ZmZlcjguYXBwZW5kKHN0YXRpY19jYXN0PExD
aGFyPihjKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgTGV4ZXI8
VD46OmFwcGVuZDgoY29uc3QgVCogcCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTog
Q2hhbmdlIHRocmVlIG9jY3VycmFuY2VzIG9mIG1fYnVmZmVyMTYgdG8gbV9idWZmZXI4IGFuZAor
ICAgIC8vIFVDaGFyIHRvIExDaGFyIHdoZW4gOCBiaXQgc3RyaW5ncyBhcmUgdHVybmVkIG9uLgor
ICAgIHNpemVfdCBjdXJyZW50U2l6ZSA9IG1fYnVmZmVyMTYuc2l6ZSgpOworICAgIG1fYnVmZmVy
MTYuZ3JvdyhjdXJyZW50U2l6ZSArIGxlbmd0aCk7CisgICAgVUNoYXIqIHJhd0J1ZmZlciA9IG1f
YnVmZmVyMTYuZGF0YSgpICsgY3VycmVudFNpemU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFQgYyA9IHBbaV07CisgICAgICAgIEFTU0VSVChj
ID49IDApOworICAgICAgICBBU1NFUlQoYyA8PSAweEZGKTsKKyAgICAgICAgcmF3QnVmZmVyW2ld
ID0gYzsKKyAgICB9CiB9CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQxNihVQ2hhciBjKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6YXBwZW5kMTYoY29u
c3QgTENoYXIqIHAsIHNpemVfdCBsZW5ndGgpCit7CisgICAgc2l6ZV90IGN1cnJlbnRTaXplID0g
bV9idWZmZXIxNi5zaXplKCk7CisgICAgbV9idWZmZXIxNi5ncm93KGN1cnJlbnRTaXplICsgbGVu
Z3RoKTsKKyAgICBVQ2hhciogcmF3QnVmZmVyID0gbV9idWZmZXIxNi5kYXRhKCkgKyBjdXJyZW50
U2l6ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAg
IHJhd0J1ZmZlcltpXSA9IHBbaV07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5l
IHZvaWQgTGV4ZXI8VD46OnJlY29yZDE2KFQgYykKIHsKICAgICBtX2J1ZmZlcjE2LmFwcGVuZChj
KTsKIH0KIAotaW5saW5lIHZvaWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkMTYoaW50IGMpCiB7CiAgICAg
QVNTRVJUKGMgPj0gMCk7CiAgICAgQVNTRVJUKGMgPD0gVVNIUlRfTUFYKTsKLSAgICByZWNvcmQx
NihVQ2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYykpKTsKKyAgICBtX2J1ZmZlcjE2
LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOwogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpwYXJz
ZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwgYm9v
bCBzdHJpY3RNb2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+Ojpw
YXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwg
Ym9vbCBzdHJpY3RNb2RlKQogeworICAgIC8vIEZJWE1FOiBDaGFuZ2UgcmVjb3JkMTYgYW5kIG1f
YnVmZmVyMTYgdG8gcmVjb3JkOCBhbmQgbV9idWZmZXI4LCBhbmQgc2l6ZW9mKFVDaGFyKSB0bwor
ICAgIC8vIHNpemVvZihMQ2hhcikgYmVsb3cgd2hlbiA4IGJpdCBzdHJpbmdzIGFyZSB0dXJuZWQg
b24uCisKICAgICBjb25zdCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2Rl
OwotICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleFR5cGUgJiBJ
Z25vcmVSZXNlcnZlZFdvcmRzKSkgeworICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVu
Z3RoKSAmJiAhKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdvcmRzKSkgewogICAgICAgICBK
U1Rva2VuVHlwZSBrZXl3b3JkID0gcGFyc2VLZXl3b3JkPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+
KHRva2VuRGF0YSk7CiAgICAgICAgIGlmIChrZXl3b3JkICE9IElERU5UKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoKCFzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB8fCB0b2tlbkRhdGEtPmlkZW50KTsK
ICAgICAgICAgICAgIHJldHVybiBrZXl3b3JkID09IFJFU0VSVkVEX0lGX1NUUklDVCAmJiAhc3Ry
aWN0TW9kZSA/IElERU5UIDoga2V5d29yZDsKICAgICAgICAgfQogICAgIH0KLSAgICBjb25zdCBV
Q2hhciogaWRlbnRpZmllclN0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNpemVvZihUKSAhPSBzaXplb2YoVUNoYXIp
KSAvLyBGSVhNRTogQ2hhbmdlIHRvIHNpemVvZihMQ2hhcikKKyAgICAgICAgYnVmZmVyUmVxdWly
ZWQgPSB0cnVlOworCisgICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpCisgICAgICAg
IHNoaWZ0KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAnXFwnKSkgewor
ICAgICAgICBzZXRPZmZzZXRGcm9tQ2hhck9mZnNldChpZGVudGlmaWVyU3RhcnQpOworICAgICAg
ICBpZiAoYnVmZmVyUmVxdWlyZWQpCisgICAgICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsg
Ly8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgcmV0dXJuIHBhcnNlSWRlbnRp
ZmllclNsb3dDYXNlPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+KHRva2VuRGF0YSwgbGV4VHlwZSwg
c3RyaWN0TW9kZSk7CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwor
ICAgIAorICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB7CisgICAgICAgIGlmICghYnVm
ZmVyUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIGludCBpZGVudGlmaWVyTGVuZ3RoID0gY3VycmVu
dENoYXJhY3RlcigpIC0gaWRlbnRpZmllclN0YXJ0OworICAgICAgICAgICAgaWRlbnQgPSBtYWtl
SWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBjdXJyZW50Q2hhcmFj
dGVyKCkpCisgICAgICAgICAgICAgICAgYXBwZW5kMTYoaWRlbnRpZmllclN0YXJ0LCBjdXJyZW50
Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIGFwcGVu
ZDgKKyAgICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCks
IG1fYnVmZmVyMTYuc2l6ZSgpKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAg
ICAgfQorCisgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVudDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CisKKyAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwor
CisgICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3Jl
UmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7CisgICAgICAgICAg
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0S2V5
d29yZCgqaWRlbnQpOworICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tlbkxl
bmd0aCkgfHwgIWVudHJ5KTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIElERU5UOworICAgICAgICAgICAgSlNUb2tlblR5cGUgdG9rZW4gPSBzdGF0aWNf
Y2FzdDxKU1Rva2VuVHlwZT4oZW50cnktPmxleGVyVmFsdWUoKSk7CisgICAgICAgICAgICByZXR1
cm4gKHRva2VuICE9IFJFU0VSVkVEX0lGX1NUUklDVCkgfHwgc3RyaWN0TW9kZSA/IHRva2VuIDog
SURFTlQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElERU5UOworICAgIH0KKworICAgIGlm
IChidWZmZXJSZXF1aXJlZCkKKyAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7IC8vIEZJWE1F
OiBDaGFuZ2UgdG8gbV9idWZmZXI4CisKKyAgICByZXR1cm4gSURFTlQ7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gSlNU
b2tlblR5cGUgTGV4ZXI8VD46OnBhcnNlSWRlbnRpZmllclNsb3dDYXNlKEpTVG9rZW5EYXRhKiB0
b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBjb25z
dCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2RlOworICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDY0LDMxICs1NzksMzAg
QEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgICAgICAgICAg
cmV0dXJuIEVSUk9SVE9LOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9idWZmZXIxNi5zaXplKCkg
PyAhaXNJZGVudFBhcnQoY2hhcmFjdGVyKSA6ICFpc0lkZW50U3RhcnQoY2hhcmFjdGVyKSkpCiAg
ICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7Ci0gICAgICAgIGlmICAoc2hvdWxkQ3JlYXRlSWRl
bnRpZmllcikKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpCiAgICAgICAgICAg
ICByZWNvcmQxNihjaGFyYWN0ZXIpOwogICAgICAgICBpZGVudGlmaWVyU3RhcnQgPSBjdXJyZW50
Q2hhcmFjdGVyKCk7CiAgICAgfQotICAgIAorCiAgICAgaW50IGlkZW50aWZpZXJMZW5ndGg7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwogICAgIGlmIChzaG91bGRDcmVhdGVJZGVu
dGlmaWVyKSB7Ci0gICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQpCisgICAgICAgIGlmICghYnVm
ZmVyUmVxdWlyZWQpIHsKICAgICAgICAgICAgIGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50Q2hh
cmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7Ci0gICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgp
OworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBj
dXJyZW50Q2hhcmFjdGVyKCkpCiAgICAgICAgICAgICAgICAgbV9idWZmZXIxNi5hcHBlbmQoaWRl
bnRpZmllclN0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOwotICAg
ICAgICAgICAgaWRlbnRpZmllclN0YXJ0ID0gbV9idWZmZXIxNi5kYXRhKCk7Ci0gICAgICAgICAg
ICBpZGVudGlmaWVyTGVuZ3RoID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgICAgICAgICBpZGVu
dCA9IG1ha2VJZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJT
dGFydCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVu
dDsKICAgICB9IGVsc2UKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CiAKICAgICBtX2Rl
bGltaXRlZCA9IGZhbHNlOwogCi0gICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShs
ZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgaWYgKExJS0VMWSghYnVmZmVy
UmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAgICAg
ICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVyKTsKICAgICAgICAgLy8gS2V5d29yZHMg
bXVzdCBub3QgYmUgcmVjb2duaXplZCBpZiB0aGVyZSB3YXMgYW4gXHVYWFhYIGluIHRoZSBpZGVu
dGlmaWVyLgogICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHsKQEAgLTUw
NiwxMiArNjIwLDgzIEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEK
ICAgICByZXR1cm4gSURFTlQ7CiB9CiAKLXRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5n
cz4gQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9r
ZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRl
IDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojpw
YXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCiB7Cisg
ICAgLy8gRklYTUU6IENoYW5nZSByZWNvcmQxNiBhbmQgbV9idWZmZXIxNiB0byByZWNvcmQ4IGFu
ZCBtX2J1ZmZlcjggYmVsb3cgd2hlbgorICAgIC8vIDggYml0IHN0cmluZ3MgYXJlIHR1cm5lZCBv
bi4KKyAgICBpbnQgc3RhcnRpbmdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgaW50IHN0
YXJ0aW5nTGluZU51bWJlciA9IGxpbmVOdW1iZXIoKTsKICAgICBpbnQgc3RyaW5nUXVvdGVDaGFy
YWN0ZXIgPSBtX2N1cnJlbnQ7CiAgICAgc2hpZnQoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBzdHJp
bmdTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBjb25zdCBUKiBzdHJpbmdTdGFydCA9
IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKworICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gc3RyaW5nUXVv
dGVDaGFyYWN0ZXIpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKChtX2N1cnJlbnQgPT0gJ1xcJykp
KSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nU3RhcnQgIT0gY3VycmVudENoYXJhY3RlcigpICYm
IHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0
LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7CisgICAgICAgICAgICBzaGlmdCgp
OworCisgICAgICAgICAgICBpbnQgZXNjYXBlID0gc2luZ2xlRXNjYXBlKG1fY3VycmVudCk7CisK
KyAgICAgICAgICAgIC8vIE1vc3QgY29tbW9uIGVzY2FwZSBzZXF1ZW5jZXMgZmlyc3QKKyAgICAg
ICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJp
bmdzKQorICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOyAvLyBGSVhNRTogQ2hh
bmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChVTkxJS0VMWShpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkpKQorICAgICAgICAg
ICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fY3Vy
cmVudCA9PSAneCcpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAg
IGlmIChpc0FTQ0lJSGV4RGlnaXQobV9jdXJyZW50KSAmJiBpc0FTQ0lJSGV4RGlnaXQocGVlaygx
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHByZXYgPSBtX2N1cnJlbnQ7CisgICAgICAg
ICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWls
ZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0SGV4KHBy
ZXYsIG1fY3VycmVudCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAg
ICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEJ1aWxk
U3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoJ3gnKTsgLy8gRklYTUU6IENo
YW5nZSB0byByZWNvcmQ4CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNl
dE9mZnNldChzdGFydGluZ09mZnNldCk7CisgICAgICAgICAgICAgICAgc2V0TGluZU51bWJlcihz
dGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDAp
OyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZVN0cmluZ1Nsb3dDYXNlPHNob3VsZEJ1aWxkU3RyaW5ncz4odG9rZW5EYXRhLCBzdHJpY3RN
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZ1N0YXJ0ID0gY3VycmVudENo
YXJhY3RlcigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoVU5MSUtFTFkoKChtX2N1cnJlbnQgPiAweGZmKSB8fCAobV9jdXJyZW50IDwgMHhlKSkpKSB7
CisgICAgICAgICAgICBzZXRPZmZzZXQoc3RhcnRpbmdPZmZzZXQpOworICAgICAgICAgICAgc2V0
TGluZU51bWJlcihzdGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgbV9idWZmZXIxNi5y
ZXNpemUoMCk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgICAgICByZXR1
cm4gcGFyc2VTdHJpbmdTbG93Q2FzZTxzaG91bGRCdWlsZFN0cmluZ3M+KHRva2VuRGF0YSwgc3Ry
aWN0TW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBzaGlmdCgpOworICAgIH0KKworICAgIGlm
IChjdXJyZW50Q2hhcmFjdGVyKCkgIT0gc3RyaW5nU3RhcnQgJiYgc2hvdWxkQnVpbGRTdHJpbmdz
KQorICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJp
bmdTdGFydCk7CisgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgLy8gRklYTUU6
IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJZGVu
dGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7CisgICAgZWxzZQor
ICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKKworICAgIC8vIEZJWE1FOiBDaGFuZ2UgdG8g
bV9idWZmZXI4CisgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJp
bmdzPiBib29sIExleGVyPFQ+OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiB0b2tl
bkRhdGEsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBpbnQgc3RyaW5nUXVvdGVDaGFyYWN0ZXIg
PSBtX2N1cnJlbnQ7CisgICAgc2hpZnQoKTsKKworICAgIGNvbnN0IFQqIHN0cmluZ1N0YXJ0ID0g
Y3VycmVudENoYXJhY3RlcigpOwogCiAgICAgd2hpbGUgKG1fY3VycmVudCAhPSBzdHJpbmdRdW90
ZUNoYXJhY3RlcikgewogICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50ID09ICdcXCcpKSB7
CkBAIC01MjMsOCArNzA4LDggQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBB
TFdBWQogCiAgICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiBlc2NhcGUgc2VxdWVuY2VzIGZpcnN0
CiAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgIGlmIChzaG91bGRC
dWlsZFN0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOworICAg
ICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAg
IHJlY29yZDE2KGVzY2FwZSk7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAgICAg
IH0gZWxzZSBpZiAoVU5MSUtFTFkoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSkKICAgICAg
ICAgICAgICAgICBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CkBAIC02MTgsNyArODAzLDggQEAgdGVt
cGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWQogICAgIHJldHVybiB0cnVlOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6OnBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFs
dWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxUPjo6
cGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IG1v
c3QgaGV4YWRlY2ltYWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3QgaGV4
VmFsdWUgPSAwOwpAQCAtNjU3LDE0ICs4NDMsMTUgQEAgQUxXQVlTX0lOTElORSB2b2lkIExleGVy
OjpwYXJzZUhleChkb3VibAogICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnRPdmVyZmxvdyhtX2J1
ZmZlcjguZGF0YSgpLCBtX2J1ZmZlcjguc2l6ZSgpLCAxNik7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjo6cGFyc2VPY3RhbChkb3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46OnBhcnNlT2N0YWwoZG91Ymxl
JiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IG1vc3Qgb2N0YWwgdmFsdWVz
IGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3Qgb2N0YWxWYWx1ZSA9IDA7CiAgICAgaW50
IG1heGltdW1EaWdpdHMgPSA5OwogICAgIC8vIFRlbXBvcmFyeSBidWZmZXIgZm9yIHRoZSBkaWdp
dHMuIE1ha2VzIGVhc2llcgogICAgIC8vIHRvIHJlY29uc3RydWN0IHRoZSBpbnB1dCBjaGFyYWN0
ZXJzIHdoZW4gbmVlZGVkLgotICAgIGNoYXIgZGlnaXRzWzEwXTsKKyAgICBMQ2hhciBkaWdpdHNb
MTBdOwogCiAgICAgZG8gewogICAgICAgICBvY3RhbFZhbHVlID0gb2N0YWxWYWx1ZSAqIDggKyAo
bV9jdXJyZW50IC0gJzAnKTsKQEAgLTY5Myw3ICs4ODAsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
TGV4ZXI6OnBhcnNlT2N0YWwoZG91CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBMZXhlcjo6cGFyc2VEZWNpbWFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VEZWNpbWFs
KGRvdWJsZSYgcmV0dXJuVmFsdWUpCiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBtb3N0IGRlY2lt
YWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3QgZGVjaW1hbFZhbHVlID0g
MDsKQEAgLTcwNCw3ICs4OTIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlRGVj
aW1hbChkCiAgICAgICAgIGludCBtYXhpbXVtRGlnaXRzID0gOTsKICAgICAgICAgLy8gVGVtcG9y
YXJ5IGJ1ZmZlciBmb3IgdGhlIGRpZ2l0cy4gTWFrZXMgZWFzaWVyCiAgICAgICAgIC8vIHRvIHJl
Y29uc3RydWN0IHRoZSBpbnB1dCBjaGFyYWN0ZXJzIHdoZW4gbmVlZGVkLgotICAgICAgICBjaGFy
IGRpZ2l0c1sxMF07CisgICAgICAgIExDaGFyIGRpZ2l0c1sxMF07CiAKICAgICAgICAgZG8gewog
ICAgICAgICAgICAgZGVjaW1hbFZhbHVlID0gZGVjaW1hbFZhbHVlICogMTAgKyAobV9jdXJyZW50
IC0gJzAnKTsKQEAgLTczMCw3ICs5MTgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBh
cnNlRGVjaW1hbChkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
TGV4ZXI6OnBhcnNlTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQoKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnBhcnNlTnVtYmVyQWZ0ZXJEZWNpbWFs
UG9pbnQoKQogewogICAgIHJlY29yZDgoJy4nKTsKICAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KG1f
Y3VycmVudCkpIHsKQEAgLTczOSw3ICs5MjgsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6
OnBhcnNlTnVtYmVyQWZ0CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBh
cnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VOdW1iZXJBZnRlckV4cG9uZW50SW5k
aWNhdG9yKCkKIHsKICAgICByZWNvcmQ4KCdlJyk7CiAgICAgc2hpZnQoKTsKQEAgLTc1OCw3ICs5
NDgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlTnVtYmVyQWZ0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VNdWx0aWxpbmVD
b21tZW50KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVy
PFQ+OjpwYXJzZU11bHRpbGluZUNvbW1lbnQoKQogewogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIHdoaWxlIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gJyonKSkgewpAQCAtNzgwLDE2ICs5NzEs
MTggQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU11bHRpbGluZQogICAgIH0KIH0K
IAotYm9vbCBMZXhlcjo6bmV4dFRva2VuSXNDb2xvbigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2Jvb2wgTGV4ZXI8VD46Om5leHRUb2tlbklzQ29sb24oKQogewotICAgIGNvbnN0IFVDaGFyKiBj
b2RlID0gbV9jb2RlOworICAgIGNvbnN0IFQqIGNvZGUgPSBtX2NvZGU7CiAgICAgd2hpbGUgKGNv
ZGUgPCBtX2NvZGVFbmQgJiYgKGlzV2hpdGVTcGFjZSgqY29kZSkgfHwgaXNMaW5lVGVybWluYXRv
cigqY29kZSkpKQogICAgICAgICBjb2RlKys7Ci0gICAgICAgIAorICAgIAogICAgIHJldHVybiBj
b2RlIDwgbV9jb2RlRW5kICYmICpjb2RlID09ICc6JzsKIH0KIAotSlNUb2tlblR5cGUgTGV4ZXI6
OmxleChKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZvLCB1bnNp
Z25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0pT
VG9rZW5UeXBlIExleGVyPFQ+OjpsZXgoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgSlNUb2tlbklu
Zm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2RlKQogewogICAg
IEFTU0VSVCghbV9lcnJvcik7CiAgICAgQVNTRVJUKG1fYnVmZmVyOC5pc0VtcHR5KCkpOwpAQCAt
MTA5NSw3ICsxMjg4LDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHN0cmluZyBmb3Ig
c3RydG9kLgogICAgICAgICAgICAgICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7Ci0gICAgICAg
ICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kKG1fYnVmZmVyOC5k
YXRhKCksIDApOworICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6
OnN0cnRvZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2J1ZmZlcjguZGF0YSgpKSwg
MCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0b2tlbiA9IE5VTUJFUjsKICAgICAgICAg
fQpAQCAtMTEwOSw3ICsxMzAyLDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAg
ICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGFyYWN0
ZXJRdW90ZToKLSAgICAgICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRTdHJpbmdzKSB7CisgICAg
ICAgIGlmIChsZXhUeXBlICYgTGV4RG9udEJ1aWxkU3RyaW5ncykgewogICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFwYXJzZVN0cmluZzxmYWxzZT4odG9rZW5EYXRhLCBzdHJpY3RNb2RlKSkpCiAg
ICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEx
MjQsNyArMTMxNyw3IEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgIEFTU0VS
VChpc0lkZW50U3RhcnQobV9jdXJyZW50KSk7CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBpbnRv
IENoYXJhY3RlckJhY2tTbGFzaC4KICAgICBjYXNlIENoYXJhY3RlckJhY2tTbGFzaDoKLSAgICAg
ICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRLZXl3b3JkcykKKyAgICAgICAgaWYgKGxleFR5cGUg
JiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgICAgIHRva2VuID0gcGFyc2VJZGVudGlm
aWVyPGZhbHNlPih0b2tlbkRhdGEsIGxleFR5cGUsIHN0cmljdE1vZGUpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlSWRlbnRpZmllcjx0cnVlPih0b2tlbkRhdGEsIGxl
eFR5cGUsIHN0cmljdE1vZGUpOwpAQCAtMTE3OCw3ICsxMzcxLDggQEAgcmV0dXJuRXJyb3I6CiAg
ICAgcmV0dXJuIEVSUk9SVE9LOwogfQogCi1ib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0IElk
ZW50aWZpZXIqJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyKiYgZmxhZ3MsIFVDaGFyIHBhdHRl
cm5QcmVmaXgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgTGV4ZXI8VD46OnNjYW5SZWdF
eHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIqJiBmbGFncywg
VUNoYXIgcGF0dGVyblByZWZpeCkKIHsKICAgICBBU1NFUlQobV9idWZmZXIxNi5pc0VtcHR5KCkp
OwogCkBAIC0xMjM5LDcgKzE0MzMsOCBAQCBib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0IElk
ZW50aWZpZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGV4ZXI6OnNraXBSZWdFeHAo
KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+Ojpza2lwUmVnRXhwKCkKIHsK
ICAgICBib29sIGxhc3RXYXNFc2NhcGUgPSBmYWxzZTsKICAgICBib29sIGluQnJhY2tldHMgPSBm
YWxzZTsKQEAgLTEyNzksMTEgKzE0NzQsMTIgQEAgYm9vbCBMZXhlcjo6c2tpcFJlZ0V4cCgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGV4ZXI6OmNsZWFyKCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgordm9pZCBMZXhlcjxUPjo6Y2xlYXIoKQogewogICAgIG1fYXJlbmEgPSAwOwogCi0g
ICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7CisgICAgVmVjdG9yPExDaGFyPiBuZXdCdWZmZXI4
OwogICAgIG1fYnVmZmVyOC5zd2FwKG5ld0J1ZmZlcjgpOwogCiAgICAgVmVjdG9yPFVDaGFyPiBu
ZXdCdWZmZXIxNjsKQEAgLTEyOTIsMTEgKzE0ODgsMTYgQEAgdm9pZCBMZXhlcjo6Y2xlYXIoKQog
ICAgIG1faXNSZXBhcnNpbmcgPSBmYWxzZTsKIH0KIAotU291cmNlQ29kZSBMZXhlcjo6c291cmNl
Q29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorU291cmNlQ29kZSBMZXhlcjxUPjo6c291cmNlQ29kZShpbnQgb3Bl
bkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKIHsKICAgICBBU1NFUlQobV9z
b3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7CiAgICAgQVNTRVJU
KG1fc291cmNlLT5wcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKICAgICBy
ZXR1cm4gU291cmNlQ29kZShtX3NvdXJjZS0+cHJvdmlkZXIoKSwgb3BlbkJyYWNlLCBjbG9zZUJy
YWNlICsgMSwgZmlyc3RMaW5lKTsKIH0KIAorLy8gSW5zdGFudGlhdGUgdGhlIHR3byBmbGF2b3Jz
IG9mIExleGVyIHdlIG5lZWQgaW5zdGVhZCBvZiBwdXR0aW5nIG1vc3Qgb2YgdGhpcyBmaWxlIGlu
IExleGVyLmgKK3RlbXBsYXRlIGNsYXNzIExleGVyPExDaGFyPjsKK3RlbXBsYXRlIGNsYXNzIExl
eGVyPFVDaGFyPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsMTcgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBIYXNoVGFibGUgbV9rZXl3b3JkVGFibGU7CiB9OwogCitlbnVtIExleFR5
cGUgeworICAgIExleElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAKKyAgICBMZXhEb250QnVpbGRT
dHJpbmdzID0gMiwKKyAgICBMZXhEb250QnVpbGRLZXl3b3JkcyA9IDQKK307CisKK2VudW0gU2hp
ZnRUeXBlIHsgRG9Cb3VuZHNDaGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9OworCiBjbGFzcyBSZWdF
eHA7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgTGV4ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKExleGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTgy
LDEyICs5MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUmVwYXJzaW5nKCkgeyBtX2lzUmVw
YXJzaW5nID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNSZXBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBt
X2lzUmVwYXJzaW5nOyB9CiAKLSAgICAvLyBGdW5jdGlvbnMgZm9yIHRoZSBwYXJzZXIgaXRzZWxm
LgotICAgIGVudW0gTGV4VHlwZSB7Ci0gICAgICAgIElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAK
LSAgICAgICAgRG9udEJ1aWxkU3RyaW5ncyA9IDIsCi0gICAgICAgIERvbnRCdWlsZEtleXdvcmRz
ID0gNAotICAgIH07CiAgICAgSlNUb2tlblR5cGUgbGV4KEpTVG9rZW5EYXRhKiwgSlNUb2tlbklu
Zm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICBib29sIG5leHRUb2tlbklzQ29s
b24oKTsKICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsg
fQpAQCAtMTAyLDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNhd0Vycm9yKCkgY29uc3Qg
eyByZXR1cm4gbV9lcnJvcjsgfQogICAgIFVTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9sZXhFcnJvck1lc3NhZ2U7IH0KICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgaW50
IGN1cnJlbnRPZmZzZXQoKSB7IHJldHVybiBtX2NvZGUgLSBtX2NvZGVTdGFydDsgfQogICAgIHZv
aWQgc2V0T2Zmc2V0KGludCBvZmZzZXQpCiAgICAgewogICAgICAgICBtX2Vycm9yID0gMDsKQEAg
LTEyNSwxMyArMTI3LDEyIEBAIHB1YmxpYzoKICAgICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVu
dGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RN
b2RlKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwotCiAgICAg
dm9pZCByZWNvcmQ4KGludCk7CisgICAgdm9pZCBhcHBlbmQ4KGNvbnN0IFQqLCBzaXplX3QpOwog
ICAgIHZvaWQgcmVjb3JkMTYoaW50KTsKLSAgICB2b2lkIHJlY29yZDE2KFVDaGFyKTsKLQotICAg
IHZvaWQgY29weUNvZGVXaXRob3V0Qk9NcygpOworICAgIHZvaWQgcmVjb3JkMTYoVCk7CisgICAg
dm9pZCBhcHBlbmQxNihjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmQxNihj
b25zdCBVQ2hhciogcCwgc2l6ZV90IGxlbmd0aCkgeyBtX2J1ZmZlcjE2LmFwcGVuZChwLCBsZW5n
dGgpOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2hpZnQoKTsKICAgICBBTFdBWVNfSU5M
SU5FIGludCBwZWVrKGludCBvZmZzZXQpOwpAQCAtMTM5LDE4ICsxNDAsMjEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKIAogICAgIFVTdHJpbmcgZ2V0SW52YWxp
ZENoYXJNZXNzYWdlKCk7Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlcigpIGNvbnN0OwotICAgIEFMV0FZU19JTkxJTkUgaW50IGN1cnJlbnRPZmZzZXQoKSBj
b25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25z
dDsKKyAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T2Zmc2V0
RnJvbUNoYXJPZmZzZXQoY29uc3QgVCogY2hhck9mZnNldCkgeyBzZXRPZmZzZXQoY2hhck9mZnNl
dCAtIG1fY29kZVN0YXJ0KTsgfQogCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVy
KiBtYWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7
CiAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBtYWtlSWRlbnRpZmllcihjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAKICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgbGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3Q7CiAKLSAgICBlbnVtIFNoaWZ0
VHlwZSB7IERvQm91bmRzQ2hlY2ssIERvTm90Qm91bmRzQ2hlY2sgfTsKICAgICB0ZW1wbGF0ZSA8
aW50IHNoaWZ0QW1vdW50LCBTaGlmdFR5cGUgc2hvdWxkQm91bmRzQ2hlY2s+IHZvaWQgaW50ZXJu
YWxTaGlmdCgpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFM
V0FZU19JTkxJTkUgSlNUb2tlblR5cGUgcGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKik7CiAgICAg
dGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRJZGVudGlmaWVycz4gQUxXQVlTX0lOTElORSBKU1Rv
a2VuVHlwZSBwYXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqLCB1bnNpZ25lZCwgYm9vbCBzdHJp
Y3RNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBKU1Rv
a2VuVHlwZSBwYXJzZUlkZW50aWZpZXJTbG93Q2FzZShKU1Rva2VuRGF0YSosIHVuc2lnbmVkLCBi
b29sIHN0cmljdE1vZGUpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4g
QUxXQVlTX0lOTElORSBib29sIHBhcnNlU3RyaW5nKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJpY3RN
b2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IGJvb2wgcGFyc2VT
dHJpbmdTbG93Q2FzZShKU1Rva2VuRGF0YSosIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBwYXJzZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBwYXJzZURlY2ltYWwoZG91YmxlJiByZXR1cm5WYWx1ZSk7CkBAIC0xNjMsMTYg
KzE2NywxNiBAQCBwcml2YXRlOgogICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFz
dExpbmVOdW1iZXI7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI4OworICAgIFZlY3RvcjxM
Q2hhcj4gbV9idWZmZXI4OwogICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZmZXIxNjsKICAgICBib29s
IG1fdGVybWluYXRvcjsKICAgICBib29sIG1fZGVsaW1pdGVkOyAvLyBlbmNvdW50ZXJlZCBkZWxp
bWl0ZXIgbGlrZSAiJyIgYW5kICJ9IiBvbiBsYXN0IHJ1bgogICAgIGludCBtX2xhc3RUb2tlbjsK
IAogICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwotICAgIGNvbnN0IFVDaGFyKiBtX2Nv
ZGU7Ci0gICAgY29uc3QgVUNoYXIqIG1fY29kZVN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBtX2Nv
ZGVFbmQ7CisgICAgY29uc3QgVCogbV9jb2RlOworICAgIGNvbnN0IFQqIG1fY29kZVN0YXJ0Owor
ICAgIGNvbnN0IFQqIG1fY29kZUVuZDsKICAgICBib29sIG1faXNSZXBhcnNpbmc7CiAgICAgYm9v
bCBtX2F0TGluZVN0YXJ0OwogICAgIGJvb2wgbV9lcnJvcjsKQEAgLTE4NiwzNyArMTkwLDQ5IEBA
IHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiB9OwogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgTGV4ZXI6OmlzV2hpdGVTcGFjZShpbnQgY2gpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNXaGl0ZVNwYWNlKGludCBjaCkK
IHsKICAgICByZXR1cm4gaXNBU0NJSShjaCkgPyAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwg
Y2ggPT0gMHhCIHx8IGNoID09IDB4QykgOiAoV1RGOjpVbmljb2RlOjppc1NlcGFyYXRvclNwYWNl
KGNoKSB8fCBjaCA9PSAweEZFRkYpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omlz
TGluZVRlcm1pbmF0b3IoaW50IGNoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5M
SU5FIGJvb2wgTGV4ZXI8VD46OmlzTGluZVRlcm1pbmF0b3IoaW50IGNoKQogewogICAgIHJldHVy
biBjaCA9PSAnXHInIHx8IGNoID09ICdcbicgfHwgKGNoICYgfjEpID09IDB4MjAyODsKIH0KIAot
aW5saW5lIHVuc2lnbmVkIGNoYXIgTGV4ZXI6OmNvbnZlcnRIZXgoaW50IGMxLCBpbnQgYzIpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB1bnNpZ25lZCBjaGFyIExleGVyPFQ+Ojpjb252
ZXJ0SGV4KGludCBjMSwgaW50IGMyKQogewogICAgIHJldHVybiAodG9BU0NJSUhleFZhbHVlKGMx
KSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShjMik7CiB9CiAKLWlubGluZSBVQ2hhciBMZXhlcjo6
Y29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitpbmxpbmUgVUNoYXIgTGV4ZXI8VD46OmNvbnZlcnRVbmljb2RlKGludCBj
MSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKIHsKICAgICByZXR1cm4gKGNvbnZlcnRIZXgoYzEs
IGMyKSA8PCA4KSB8IGNvbnZlcnRIZXgoYzMsIGM0KTsKIH0KIAotQUxXQVlTX0lOTElORSBjb25z
dCBJZGVudGlmaWVyKiBMZXhlcjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlk
ZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46
Om1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQog
ewogICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjps
ZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZvKiB0
b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhwZWN0
SWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZv
LCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCiB7Ci0gICAgQVNTRVJUKChsZXhU
eXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpOwotICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1f
Y29kZTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gc3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIGVu
ZCA9IG1fY29kZUVuZDsKKyAgICBBU1NFUlQoKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdv
cmRzKSk7CisgICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CisgICAgY29uc3QgVCogcHRyID0g
c3RhcnQ7CisgICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOwogICAgIGlmIChwdHIgPj0gZW5k
KSB7CiAgICAgICAgIEFTU0VSVChwdHIgPT0gZW5kKTsKICAgICAgICAgZ290byBzbG93Q2FzZTsK
QEAgLTI0MSw3ICsyNTcsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpsZXhF
eHBlCiAgICAgbV9jb2RlID0gcHRyOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBpZGVudGlmaWVyIGlm
IG5lZWRlZAotICAgIGlmIChsZXhUeXBlICYgRG9udEJ1aWxkS2V5d29yZHMpCisgICAgaWYgKGxl
eFR5cGUgJiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9
IDA7CiAgICAgZWxzZQogICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gbWFrZUlkZW50aWZpZXIo
c3RhcnQsIHB0ciAtIHN0YXJ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFBhcnNlcjo6UGFy
c2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwKICAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkK
ICAgICAsIG1fc291cmNlRWxlbWVudHMoMCkKIHsKLSAgICBtX2xleGVyID0gbmV3IExleGVyKGds
b2JhbERhdGEpOworICAgIG1fbGV4ZXIgPSBuZXcgTGV4ZXI8VUNoYXI+KGdsb2JhbERhdGEpOwog
ICAgIG1fYXJlbmEgPSBtX2dsb2JhbERhdGEtPnBhcnNlckFyZW5hOwogICAgIG1fbGV4ZXItPnNl
dENvZGUoc291cmNlLCBtX2FyZW5hKTsKIApAQCAtMTE1OCw5ICsxMTU4LDkgQEAgdGVtcGxhdGUg
PGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZAogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAg
ICAgIGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5zZXQpKSkKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25v
cmVSZXNlcnZlZFdvcmRzKTsKKyAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleEln
bm9yZVJlc2VydmVkV29yZHMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250
QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhJZ25v
cmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChtYXRjaChDT0xPTikpIHsKICAgICAgICAgICAgIG5leHQoKTsKQEAg
LTE0ODksNyArMTQ4OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICAgICAgY2FzZSBET1Q6IHsKICAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCsrOwogICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQo
KTsKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNlcnZl
ZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAgIG5l
eHRFeHBlY3RJZGVudGlmaWVyKExleElnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6
RG9udEJ1aWxkS2V5d29yZHMpOwogICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwogICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKG1fbGV4ZXItPmxhc3RMaW5l
TnVtYmVyKCksIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4
cHJlc3Npb25FbmQsIHRva2VuRW5kKCkpOwogICAgICAgICAgICAgbmV4dCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyMCw3
ICs5MjAsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgY29uc3QgSlNHbG9iYWxEYXRhKiBtX2ds
b2JhbERhdGE7CiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJl
bmEqIG1fYXJlbmE7Ci0gICAgTGV4ZXIqIG1fbGV4ZXI7CisgICAgTGV4ZXI8VUNoYXI+KiBtX2xl
eGVyOwogICAgIAogICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CiAgICAgYm9vbCBtX2Vycm9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkocmV2aXNp
b24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBjbGVhcigpOwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSosIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwg
ZG91YmxlIG51bWJlcik7CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9pZGVudGlmaWVycy5pc0VtcHR5KCk7IH0KQEAgLTY1LDcgKzY2LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEZpeGVkQXJyYXk8SWRlbnRpZmllciosIE1heGltdW1DYWNoYWJsZUNoYXJh
Y3Rlcj4gbV9yZWNlbnRJZGVudGlmaWVyczsKICAgICB9OwogCi0gICAgQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVu
dGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKICAgICB7CiAgICAg
ICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikgewogICAg
ICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dmlkZXItPmRhdGEoKSArIG1fc3RhcnRDaGFyOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2VuZENoYXIgLSBtX3N0YXJ0Q2hhcjsgfQogICAgICAgICAKLSAgICAgICAg
U291cmNlQ29kZSBzdWJFeHByZXNzaW9uKGludCwgaW50LCBpbnQpOworICAgICAgICBTb3VyY2VD
b2RlIHN1YkV4cHJlc3Npb24odW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwpAQCAtODgsOCAr
ODgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVybiBTb3VyY2VDb2Rl
KFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9u
KSwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSk7CiAgICAgfQotICAgIAotICAg
IGlubGluZSBTb3VyY2VDb2RlIFNvdXJjZUNvZGU6OnN1YkV4cHJlc3Npb24oaW50IG9wZW5CcmFj
ZSwgaW50IGNsb3NlQnJhY2UsIGludCBmaXJzdExpbmUpCisKKyAgICBpbmxpbmUgU291cmNlQ29k
ZSBTb3VyY2VDb2RlOjpzdWJFeHByZXNzaW9uKHVuc2lnbmVkIG9wZW5CcmFjZSwgdW5zaWduZWQg
Y2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChwcm92aWRl
cigpLT5kYXRhKClbb3BlbkJyYWNlXSA9PSAneycpOwogICAgICAgICBBU1NFUlQocHJvdmlkZXIo
KS0+ZGF0YSgpW2Nsb3NlQnJhY2VdID09ICd9Jyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJp
bmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nSW1wbCogc3RyaW5nRGF0YSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBpbnQg
bGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJs
KCkgeyByZXR1cm4gbV91cmw7IH0KQEAgLTkxLDYgKzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gbV9zb3VyY2Uuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhcnQsIGVu
ZCAtIHN0YXJ0KTsKICAgICAgICAgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5sZW5ndGgoKTsgfQogCiAgICAgcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJD
YWNoZS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U291cmNlUHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBTb3VyY2VQ
cm92aWRlckNhY2hlX2gKKyNkZWZpbmUgU291cmNlUHJvdmlkZXJDYWNoZV9oCisKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTQ2LDMg
KzQ5LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0KKworI2VuZGlmIC8vIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2Vy
LmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw4ICsxMTUsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25z
dCBib29sIE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBi
b29sIENhblVzZUZ1bmN0aW9uQ2FjaGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBEb250QnVpbGRLZXl3b3JkcyA9IExleGVyOjpEb250QnVpbGRLZXl3b3JkczsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgRG9udEJ1aWxkU3RyaW5ncyA9IExleGVyOjpEb250QnVpbGRTdHJp
bmdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRLZXl3b3JkcyA9IExleERv
bnRCdWlsZEtleXdvcmRzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJp
bmdzID0gTGV4RG9udEJ1aWxkU3RyaW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50
cygpIHsgcmV0dXJuIDE7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9k
ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
c3RhdGljIGlubGluZSB2b2lkIGluc2VydFNlbWljb2xvbklmTmVlZAogCiAgICAgZm9yIChzaXpl
X3QgaSA9IGZ1bmN0aW9uQm9keS5sZW5ndGgoKSAtIDI7IGkgPiAwOyAtLWkpIHsKICAgICAgICAg
VUNoYXIgY2ggPSBmdW5jdGlvbkJvZHlbaV07Ci0gICAgICAgIGlmICghTGV4ZXI6OmlzV2hpdGVT
cGFjZShjaCkgJiYgIUxleGVyOjppc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICBpZiAo
IUxleGVyPFVDaGFyPjo6aXNXaGl0ZVNwYWNlKGNoKSAmJiAhTGV4ZXI8VUNoYXI+Ojppc0xpbmVU
ZXJtaW5hdG9yKGNoKSkgewogICAgICAgICAgICAgaWYgKGNoICE9ICc7JyAmJiBjaCAhPSAnfScp
CiAgICAgICAgICAgICAgICAgZnVuY3Rpb25Cb2R5ID0gbWFrZVVTdHJpbmcoZnVuY3Rpb25Cb2R5
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKDAsIGkgKyAxKSwgIjsiLCBmdW5jdGlvbkJvZHkuc3Vic3Ry
aW5nU2hhcmluZ0ltcGwoaSArIDEsIGZ1bmN0aW9uQm9keS5sZW5ndGgoKSAtIChpICsgMSkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERh
dGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIHVzaW5nIFdURjo6VGhy
ZWFkU3BlY2lmaWM7CkBAIC00MywxOSArNDIsMTMgQEAgSWRlbnRpZmllclRhYmxlOjp+SWRlbnRp
ZmllclRhYmxlKCkKICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVy
ID0gbV90YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAoKml0ZXIp
LT5zZXRJc0lkZW50aWZpZXIoZmFsc2UpOwogfQorCiBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yLCBib29sPiBJZGVudGlmaWVyVGFibGU6OmFkZChTdHJpbmdJbXBsKiB2
YWx1ZSkKIHsKICAgICBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX3RhYmxlLmFkZCh2YWx1ZSk7CiAgICAgKCpyZXN1bHQuZmlyc3QpLT5z
ZXRJc0lkZW50aWZpZXIodHJ1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLXRlbXBsYXRlPHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1zdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yLCBib29sPiBJZGVudGlmaWVyVGFibGU6OmFkZChVIHZhbHVlKQotewotICAgIHN0ZDo6
cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFi
bGUuYWRkPFUsIFY+KHZhbHVlKTsKLSAgICAoKnJlc3VsdC5maXJzdCktPnNldElzSWRlbnRpZmll
cih0cnVlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBJZGVudGlmaWVyVGFibGUqIGNyZWF0
ZUlkZW50aWZpZXJUYWJsZSgpCiB7CkBAIC0xMjIsMzMgKzExNSw2IEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEUKICAgICByZXR1cm4gYWRkKCZleGVjLT5nbG9iYWxE
YXRhKCksIGMpOwogfQogCi1zdHJ1Y3QgVUNoYXJCdWZmZXIgewotICAgIGNvbnN0IFVDaGFyKiBz
OwotICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci19OwotCi1zdHJ1Y3QgSWRlbnRpZmllclVDaGFy
QnVmZmVyVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVUNoYXJC
dWZmZXImIGJ1ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVI
YXNoPFVDaGFyPihidWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
ZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24s
IGNvbnN0IFVDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICBV
Q2hhciogZDsKLSAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1JlZigpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpICE9IGJ1Zi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGRbaV0gPSBidWYuc1tp
XTsKLSAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24gPSByOyAKLSAg
ICB9Ci19OwotCiB1aW50MzJfdCBJZGVudGlmaWVyOjp0b1VJbnQzMihjb25zdCBVU3RyaW5nJiBz
dHJpbmcsIGJvb2wmIG9rKQogewogICAgIG9rID0gZmFsc2U7CkBAIC0xOTMsMjggKzE1OSw2IEBA
IHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNvbnN0IFVTdHIKICAgICByZXR1cm4gdmFs
dWU7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYg
KGxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzWzBdOwotICAgICAgICBpZiAoYyA8
PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gYWRkKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAo
YykpOwotICAgIH0KLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmVtcHR5KCk7Ci0gICAgVUNoYXJCdWZmZXIgYnVmID0ge3MsIGxlbmd0aH07IAotICAgIHBhaXI8
SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxE
YXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZDxVQ2hhckJ1ZmZlciwgSWRlbnRpZmllclVDaGFyQnVm
ZmVyVHJhbnNsYXRvcj4oYnVmKTsKLQotICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJh
bnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAgIC8vIFRoZSBib29sZWFuIGlu
IHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAgcmV0dXJuIGFkZFJlc3VsdC5z
ZWNvbmQgPyBhZG9wdFJlZigqYWRkUmVzdWx0LmZpcnN0KSA6ICphZGRSZXN1bHQuZmlyc3Q7Ci19
Ci0KLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGFkZCgmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzLCBsZW5ndGgpOwotfQotCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1w
bCogcikKIHsKICAgICBBU1NFUlQoIXItPmlzSWRlbnRpZmllcigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDk5MjA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAi
VGhyZWFkU3BlY2lmaWMuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1dU
RlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMzYsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJZGVu
dGlmaWVyKCkgeyB9CiAKICAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IGNoYXIqIHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMpKSB7IH0gLy8gT25seSB0byBiZSB1c2Vk
IHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMsIGxl
bmd0aCkpIHsgfQogICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1w
bCogcmVwKSA6IG1fc3RyaW5nKGFkZChleGVjLCByZXApKSB7IH0gCiAgICAgICAgIElkZW50aWZp
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChleGVj
LCBzLmltcGwoKSkpIHsgfQogCiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzKSkgeyB9
IC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KKyAgICAgICAgSWRlbnRp
ZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3Ro
KSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRl
bnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVu
Z3RoKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAg
SWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cmluZ0ltcGwqIHJlcCkgOiBt
X3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcmVwKSkgeyB9IAogICAgICAgICBJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQo
Z2xvYmFsRGF0YSwgcy5pbXBsKCkpKSB7IH0KQEAgLTc3LDYgKzc4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBj
b25zdCBMQ2hhciopOwogICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nSW1wbCphLCBjb25zdCBjaGFyKmIpIHsgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH07CisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7
IH0KIApAQCAtODksOCArOTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikgeyByZXR1
cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBsKCk7IH0KICAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0
dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBVQ2hhciosIGludCBsZW5n
dGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoSlNHbG9iYWxE
YXRhKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKKy8vICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSosIGNv
bnN0IFQqLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBUKiwgaW50
IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsKIAogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBs
KiByKQogICAgICAgICB7CkBAIC0xMTcsNyArMTIwLDc0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShKU0dsb2Jh
bERhdGEqKTsKICAgICB9OworCisgICAgdGVtcGxhdGUgPD4gQUxXQVlTX0lOTElORSBib29sIElk
ZW50aWZpZXI6OmNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhMQ2hhcikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcgPT0gMHhmZik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDw+IEFMV0FZU19JTkxJTkUgYm9vbCBJ
ZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNoYXIgYykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBDaGFyQnVmZmVyIHsKKyAgICAg
ICAgY29uc3QgVCogczsKKyAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgICB9OwogICAg
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ2hhckJ1
ZmZlclRyYW5zbGF0b3IgeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFy
QnVmZmVyPFQ+JiBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVIYXNoPFQ+KGJ1Zi5zLCBidWYubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBDaGFy
QnVmZmVyPFQ+JiBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBJZGVudGlmaWVy
OjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IENoYXJCdWZm
ZXI8VD4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAgVCogZDsK
KyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKGJ1Zi5sZW5ndGgsIGQpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRbaV0gPSBidWYu
c1tpXTsKKyAgICAgICAgICAgIHItPnNldEhhc2goaGFzaCk7CisgICAgICAgICAgICBsb2NhdGlv
biA9IHI7IAorICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMSkgeworICAgICAgICAgICAgVCBjID0gc1swXTsKKyAgICAgICAgICAgIGlmIChj
YW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFk
ZChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nUmVwKGMpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgQ2hhckJ1ZmZl
cjxUPiBidWYgPSB7cywgbGVuZ3RofTsgCisgICAgICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBs
Kj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFi
bGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4g
PihidWYpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFu
c2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCisgICAgICAgIC8vIFRoZSBib29sZWFu
IGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCisgICAgICAgIHJldHVybiBhZGRS
ZXN1bHQuc2Vjb25kID8gYWRvcHRSZWYoKmFkZFJlc3VsdC5maXJzdCkgOiAqYWRkUmVzdWx0LmZp
cnN0OworICAgIH0KKworI2lmIDAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBORVZF
Ul9JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
ZCgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzLCBsZW5ndGgpOworICAgIH0KKyNlbmRpZgorCiAgICAg
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlm
aWVyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIGIpOwpA
QCAtMTUyLDcgKzIyMiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVy
biBXVEY6OmVxdWFsKHIsIHMpOwogICAgIH0KLSAgICAKKworICAgIGlubGluZSBib29sIElkZW50
aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgp
OworICAgIH0KKwogICAgIGlubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwqIHIsIGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAg
ICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgpOwpAQCAtMTc3LDYgKzI1MiwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4s
IGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+ID4s
IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CiAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHN0ZDo6cGFpcjxIYXNoU2V0PFN0cmlu
Z0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IElkZW50aWZpZXJUYWJsZTo6YWRkKFUgdmFsdWUpCisg
ICAgeworICAgICAgICBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX3RhYmxlLmFkZDxVLCBWPih2YWx1ZSk7CisgICAgICAgICgqcmVzdWx0
LmZpcnN0KS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBJZGVudGlmaWVyX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMs
IGMKICAgICAgICAgaWYgKGMgPT0gJyUnKSB7CiAgICAgICAgICAgICBpbnQgY2hhckxlbiA9IDA7
CiAgICAgICAgICAgICBpZiAoayA8PSBsZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChwWzFdKSAm
JiBpc0FTQ0lJSGV4RGlnaXQocFsyXSkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyIGIw
ID0gTGV4ZXI6OmNvbnZlcnRIZXgocFsxXSwgcFsyXSk7CisgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciBiMCA9IExleGVyPFVDaGFyPjo6Y29udmVydEhleChwWzFdLCBwWzJdKTsKICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgc2VxdWVuY2VMZW4gPSBVVEY4U2VxdWVuY2VMZW5ndGgoYjApOwog
ICAgICAgICAgICAgICAgIGlmIChzZXF1ZW5jZUxlbiAhPSAwICYmIGsgPD0gbGVuIC0gc2VxdWVu
Y2VMZW4gKiAzKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSBzZXF1ZW5jZUxlbiAq
IDM7CkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGMKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzZXF1ZW5jZUxl
bjsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcSA9IHAgKyBp
ICogMzsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxWzBdID09ICclJyAmJiBpc0FTQ0lJ
SGV4RGlnaXQocVsxXSkgJiYgaXNBU0NJSUhleERpZ2l0KHFbMl0pKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcXVlbmNlW2ldID0gTGV4ZXI6OmNvbnZlcnRIZXgocVsxXSwgcVsyXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBMZXhlcjxVQ2hhcj46
OmNvbnZlcnRIZXgocVsxXSwgcVsyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyTGVuID0gMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgSlNWYWx1ZSBk
ZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc0FT
Q0lJSGV4RGlnaXQocFsyXSkgJiYgaXNBU0NJSUhleERpZ2l0KHBbM10pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQocFs0XSkgJiYgaXNBU0NJSUhleERpZ2l0KHBb
NV0pKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSA2OwotICAgICAgICAgICAgICAg
ICAgICB1ID0gTGV4ZXI6OmNvbnZlcnRVbmljb2RlKHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOwor
ICAgICAgICAgICAgICAgICAgICB1ID0gTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0VW5pY29kZShwWzJd
LCBwWzNdLCBwWzRdLCBwWzVdKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoY2hhckxlbiAmJiAodSA9PSAwIHx8IHUgPj0gMTI4IHx8ICFzdHJjaHIo
ZG9Ob3RVbmVzY2FwZSwgdSkpKSB7CkBAIC0xNzMsMTIgKzE3MywxMiBAQCBzdGF0aWMgaW50IHBh
cnNlRGlnaXQodW5zaWduZWQgc2hvcnQgYywgCiAgICAgcmV0dXJuIGRpZ2l0OwogfQogCi1kb3Vi
bGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBjaGFyKiBzLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgp
Citkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCwgaW50
IHJhZGl4KQogewogICAgIGRvdWJsZSBudW1iZXIgPSAwLjA7CiAgICAgZG91YmxlIHJhZGl4TXVs
dGlwbGllciA9IDEuMDsKIAotICAgIGZvciAoY29uc3QgY2hhciogcCA9IHMgKyBsZW5ndGggLSAx
OyBwID49IHM7IHAtLSkgeworICAgIGZvciAoY29uc3QgTENoYXIqIHAgPSBzICsgbGVuZ3RoIC0g
MTsgcCA+PSBzOyBwLS0pIHsKICAgICAgICAgaWYgKHJhZGl4TXVsdGlwbGllciA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpIHsKICAgICAgICAgICAgIGlmICgqcCAh
PSAnMCcpIHsKICAgICAgICAgICAgICAgICBudW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmluZmluaXR5KCk7CkBAIC01NzgsMTIgKzU3OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVCiAgICAgICAgIFVDaGFyIHU7CiAgICAgICAgIGlmIChj
WzBdID09ICclJyAmJiBrIDw9IGxlbiAtIDYgJiYgY1sxXSA9PSAndScpIHsKICAgICAgICAgICAg
IGlmIChpc0FTQ0lJSGV4RGlnaXQoY1syXSkgJiYgaXNBU0NJSUhleERpZ2l0KGNbM10pICYmIGlz
QVNDSUlIZXhEaWdpdChjWzRdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY1s1XSkpIHsKLSAgICAgICAg
ICAgICAgICB1ID0gTGV4ZXI6OmNvbnZlcnRVbmljb2RlKGNbMl0sIGNbM10sIGNbNF0sIGNbNV0p
OworICAgICAgICAgICAgICAgIHUgPSBMZXhlcjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKGNbMl0s
IGNbM10sIGNbNF0sIGNbNV0pOwogICAgICAgICAgICAgICAgIGMgPSAmdTsKICAgICAgICAgICAg
ICAgICBrICs9IDU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY1swXSA9PSAn
JScgJiYgayA8PSBsZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChjWzFdKSAmJiBpc0FTQ0lJSGV4
RGlnaXQoY1syXSkpIHsKLSAgICAgICAgICAgIHUgPSBVQ2hhcihMZXhlcjo6Y29udmVydEhleChj
WzFdLCBjWzJdKSk7CisgICAgICAgICAgICB1ID0gVUNoYXIoTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0
SGV4KGNbMV0sIGNbMl0pKTsKICAgICAgICAgICAgIGMgPSAmdTsKICAgICAgICAgICAgIGsgKz0g
MjsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
Kik7CiAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5k
ID0gOTAwNzE5OTI1NDc0MDk5Mi4wOwotICAgIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0
IGNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOworICAgIGRvdWJsZSBwYXJzZUludE92ZXJm
bG93KGNvbnN0IExDaGFyKiwgaW50IGxlbmd0aCwgaW50IHJhZGl4KTsKKyAgICBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGlu
dCByYWRpeCkgeyByZXR1cm4gcGFyc2VJbnRPdmVyZmxvdyhyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4ocyksIGxlbmd0aCwgcmFkaXgpOyB9CiAgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZs
b3coY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOwogICAgIGJvb2wgaXNTdHJX
aGl0ZVNwYWNlKFVDaGFyKTsKICAgICBkb3VibGUganNUb051bWJlcihjb25zdCBVU3RyaW5nJiBz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJz
ZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAsMTcgQEAgYm9v
bCBMaXRlcmFsUGFyc2VyOjp0cnlKU09OUFBhcnNlKFZlY3RvcgogICAgIGRvIHsKICAgICAgICAg
VmVjdG9yPEpTT05QUGF0aEVudHJ5PiBwYXRoOwogICAgICAgICAvLyBVbmd1YXJkZWQgbmV4dCB0
byBzdGFydCBvZmYgdGhlIGxleGVyCi0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZp
ZXIobV9leGVjLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOworICAgICAgICBJZGVu
dGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAgICAgSlNPTlBQYXRoRW50cnkgZW50cnk7CiAg
ICAgICAgIGlmIChuYW1lID09IG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnZh
cktleXdvcmQpIHsKICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tJZGVudGlm
aWVyKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGVudHJ5Lm1f
dHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURlY2xhcmU7Ci0gICAgICAgICAgICBlbnRyeS5tX3Bh
dGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKG1fZXhlYywgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5z
dGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnN0YXJ0KTsKKyAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXIo
Jm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwog
ICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlUeXBlRG90OwotICAgICAgICAgICAg
ZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJ
ZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5z
dGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnN0YXJ0KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAgICAgICAgfQogICAg
ICAgICBpZiAobV9leGVjLT5nbG9iYWxEYXRhKCkua2V5d29yZHMtPmlzS2V5d29yZChlbnRyeS5t
X3BhdGhFbnRyeU5hbWUpKQpAQCAtODUsNyArODUsNyBAQCBib29sIExpdGVyYWxQYXJzZXI6OnRy
eUpTT05QUGFyc2UoVmVjdG9yCiAgICAgICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQ
YXRoRW50cnlUeXBlRG90OwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBU
b2tJZGVudGlmaWVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIG1fbGV4
ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICAgICAgZW50cnkubV9wYXRo
RW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIFRva0xQYXJlbjogewpAQCAtMzQwLDcgKzM0MCw3IEBAIHRl
bXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1vZGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVG9rRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
SlNDOjpMZXhlcjo6Y29udmVydFVuaWNvZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clszXSwg
bV9wdHJbNF0pKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoSlNDOjpMZXhl
cjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKG1fcHRyWzFdLCBtX3B0clsyXSwgbV9wdHJbM10sIG1f
cHRyWzRdKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fcHRyICs9IDU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdJbXBsLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsNyBAQCB0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpCiAvLyBMYW5kaW5nIHRoZSBmaWxl
IG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBmb2xsb3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5n
ZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBKU0Mgewogc3RydWN0IElkZW50aWZpZXJDU3Ry
aW5nVHJhbnNsYXRvcjsKLXN0cnVjdCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Ci1z
dHJ1Y3QgSWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwogfQogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTYzLDggKzYyLDggQEAgdHlwZWRlZiBib29sICgqSXNXaGl0ZVNwYWNlRnVu
Y3Rpb25QdHIpKAogY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U3RyaW5nSW1wbCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIGZyaWVuZCBzdHJ1Y3Qg
SlNDOjpJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I7Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6
OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsKLSAgICBmcmllbmQgc3RydWN0IEpTQzo6
SWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKKyAgICBmcmllbmQgc3RydWN0IEpTQzo6
SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPExDaGFyPjsKKyAgICBmcmllbmQgc3RydWN0
IEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPFVDaGFyPjsKICAgICBmcmllbmQg
c3RydWN0IFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhh
c2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFu
ZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MjA0
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTEtMTEtMDMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisK
KyAgICAgICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6TGV4ZXIgY2xh
c3MgYnkgY2hhcmFjdGVyIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxMzMxCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIHJlZmFjdG9yZWQgU291cmNlUHJvdmlkZXIgY2xh
c3MgYW5kIHN1Yi1jbGFzc2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0
U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdFNvdXJjZVBy
b3ZpZGVyOjpkYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJz
ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hG
YWlsZWRUb1BhcnNlU291cmNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQ
cm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nU291cmNlUHJvdmlkZXI6OmRhdGEp
OgorCiAyMDExLTExLTAzICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBDU1NSdWxlTGlzdDogTW92ZSBydWxlIG9ycGhhbmluZyBmcm9tIGRlbGV0ZVJ1bGUoKSBv
dXQgdG8gY2FsbGVycy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNj
cmlwdFNvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gOTkyMDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBKU0M6OlVTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCB7IHJl
dHVybiBKU0M6OlVTdHJpbmcobV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmNoYXJhY3RlcnMoKSAr
IHN0YXJ0LCBlbmQgLSBzdGFydCk7IH0KICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0KCkuY2hhcmFjdGVycygpOyB9CisgICAg
ICAgIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
ZFNjcmlwdC0+c2NyaXB0KCkuaW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0KCkubGVuZ3RoKCk7IH0KICAgICAgICAgY29u
c3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0
KCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJv
dmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdT
b3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEpTQzo6VVN0cmluZyBnZXRSYW5n
ZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0IHsgcmV0dXJuIEpTQzo6VVN0cmluZyhtX3NvdXJj
ZS5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgZW5kIC0gc3RhcnQpOyB9CiAgICAgICAgIGNvbnN0IFVD
aGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuY2hhcmFjdGVycygpOyB9CisgICAg
ICAgIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZS5pbXBsKCk7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
Lmxlbmd0aCgpOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KIApAQCAtNjEsNiArNjIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgewogICAgICAgICByZXR1cm4gSlNDOjpTb3VyY2VDb2RlKFN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpjcmVhdGUoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFydFBvc2l0aW9uLm1fbGlu
ZS5vbmVCYXNlZEludCgpKTsKICAgICB9CisgICAgCisgICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gOTkyMDUpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw3ICsyMTUsNyBAQCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OkluamVjdGVkQnVuZGxlUGFnZShXCiAgICAgICAgIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJl
Y3RGb3JGcmFtZSwKICAgICAgICAgZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUsCiAgICAg
ICAgIDAsIC8vIGRpZExheW91dEZvckZyYW1lCi0gICAgICAgIGRpZERldGVjdFhTU0ZvckZyYW1l
LAorICAgICAgICAvLyBkaWREZXRlY3RYU1NGb3JGcmFtZSwKICAgICB9OwogICAgIFdLQnVuZGxl
UGFnZVNldFBhZ2VMb2FkZXJDbGllbnQobV9wYWdlLCAmbG9hZGVyQ2xpZW50KTsKIAo=
</data>
<flag name="commit-queue"
          id="111942"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113548</attachid>
            <date>2011-11-03 13:31:32 -0700</date>
            <delta_ts>2011-11-03 16:33:53 -0700</delta_ts>
            <desc>Patch updated for qt build failure</desc>
            <filename>71331-5.patch</filename>
            <type>text/plain</type>
            <size>69930</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA3IEBA
CisyMDExLTExLTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5
IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZSB0aGUgTGV4ZXIgY2xhc3MgdG8gYmUgYSB0
ZW1wbGF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgIHR5cGUgb2YgdGhl
IHNvdXJjZS4gIEluIHRoZSBwcm9jZXNzIHVwZGF0ZWQgdGhlIHBhcnNlSWRlbnRpZmllcigpCisg
ICAgICAgIGFuZCBwYXJzZVN0cmluZygpIG1ldGhvZHMgdG8gY3JlYXRlIDggYml0IHN0cmluZ3Mg
d2hlcmUgcG9zc2libGUuCisgICAgICAgIEFsc28gYWRkZWQgc29tZSBoZWxwZXIgbWV0aG9kcyBm
b3IgYWNjdW11bGF0aW5nIHRlbXBvcmFyeSBzdHJpbmcKKyAgICAgICAgZGF0YSBpbiB0aGUgOCBh
bmQgMTYgYml0IHZlY3RvcnMuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFVwZGF0ZWQgdGhlIEtleXdvcmRMb29rdXAg
Z2VuZXJhdG9yIHRvIGNyZWF0ZSBjb2RlIHRvIG1hdGNoIGtleXdvcmRzCisgICAgICAgIGZvciBi
b3RoIDggYW5kIDE2IGJpdCBzb3VyY2Ugc3RyaW5ncy4KKworICAgICAgICBEdWUgdG8gYSBjb21w
aWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIG1vdmVkIGVudW0KKyAgICAgICAg
ZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBMZXhlciBjbGFzcyBkZWNsYXJhdGlvbi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHBhcnNlci9MZXhl
ci5jcHA6CisgICAgICAgIChKU0M6Ojo6TGV4ZXIpOgorICAgICAgICAoSlNDOjo6On5MZXhlcik6
CisgICAgICAgIChKU0M6Ojo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6
OjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6OjpzZXRDb2RlKToKKyAgICAgICAg
KEpTQzo6OjppbnRlcm5hbFNoaWZ0KToKKyAgICAgICAgKEpTQzo6OjpzaGlmdCk6CisgICAgICAg
IChKU0M6Ojo6cGVlayk6CisgICAgICAgIChKU0M6Ojo6Z2V0VW5pY29kZUNoYXJhY3Rlcik6Cisg
ICAgICAgIChKU0M6Ojo6c2hpZnRMaW5lVGVybWluYXRvcik6CisgICAgICAgIChKU0M6Ojo6bGFz
dFRva2VuV2FzUmVzdHJLZXl3b3JkKToKKyAgICAgICAgKEpTQzo6OjpyZWNvcmQ4KToKKyAgICAg
ICAgKEpTQzo6OjphcHBlbmQ4KToKKyAgICAgICAgKEpTQzo6OjphcHBlbmQxNik6CisgICAgICAg
IChKU0M6Ojo6cmVjb3JkMTYpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRpZmllcik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VJZGVudGlmaWVyU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUhleCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VPY3RhbCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VEZWNpbWFsKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJl
ckFmdGVyRGVjaW1hbFBvaW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJlckFmdGVyRXhw
b25lbnRJbmRpY2F0b3IpOgorICAgICAgICAoSlNDOjo6OnBhcnNlTXVsdGlsaW5lQ29tbWVudCk6
CisgICAgICAgIChKU0M6Ojo6bmV4dFRva2VuSXNDb2xvbik6CisgICAgICAgIChKU0M6Ojo6bGV4
KToKKyAgICAgICAgKEpTQzo6OjpzY2FuUmVnRXhwKToKKyAgICAgICAgKEpTQzo6Ojpza2lwUmVn
RXhwKToKKyAgICAgICAgKEpTQzo6OjpjbGVhcik6CisgICAgICAgIChKU0M6Ojo6c291cmNlQ29k
ZSk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjphcHBl
bmQxNik6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OnNldE9mZnNldEZyb21DaGFyT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Ojppc1do
aXRlU3BhY2UpOgorICAgICAgICAoSlNDOjo6OmlzTGluZVRlcm1pbmF0b3IpOgorICAgICAgICAo
SlNDOjo6OmNvbnZlcnRIZXgpOgorICAgICAgICAoSlNDOjo6OmNvbnZlcnRVbmljb2RlKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bGV4RXhwZWN0
SWRlbnRpZmllcik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAgICAgICAq
IHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgICogcGFy
c2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZTo6c3ViRXhwcmVzc2lv
bik6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcjo6c3RyaW5nRGF0YSk6CisgICAgICAgICogcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyQ2FjaGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppbnNl
cnRTZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllclRhYmxlOjphZGQpOgorICAgICAgICAqIHJ1bnRpbWUv
SWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAg
IChKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZXF1
YWwpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyVGFibGU6OmFkZCk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmRlY29kZSk6
CisgICAgICAgIChKU0M6OnBhcnNlSW50T3ZlcmZsb3cpOgorICAgICAgICAoSlNDOjpnbG9iYWxG
dW5jVW5lc2NhcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6cGFyc2VJbnRPdmVyZmxvdyk6CisgICAgICAgICogcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQ
YXJzZSk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXhTdHJpbmcpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKwogMjAxMS0xMS0wMyAgTWFyayBIYWhu
ZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERlLXZpcnR1YWxpemUg
SlNPYmplY3Q6OmNsYXNzTmFtZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdvcmRM
b29rdXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0tl
eXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCBjbGFzcyBUcmllOgogICAgICAgICBzZWxmLmtleXMgPSBbKHRyaWUucHJl
Zml4LCB0cmllKSBmb3IgdHJpZSBpbiBzb3J0ZWQoc2VsZi5rZXlzLnZhbHVlcygpLCBrZXk9b3Bl
cmF0b3IuYXR0cmdldHRlcignd2VpZ2h0JyksIHJldmVyc2U9VHJ1ZSldCiAgICAgICAgIHNlbGYu
d2VpZ2h0ID0gd2VpZ2h0CiAKLSAgICBkZWYgcHJpbnRTdWJUcmVlQXNDKHNlbGYsIGluZGVudCk6
CisgICAgZGVmIHByaW50U3ViVHJlZUFzQyhzZWxmLCB0eXBlTmFtZSwgaW5kZW50KToKICAgICAg
ICAgc3RyID0gbWFrZVBhZGRpbmcoaW5kZW50KQogCiAgICAgICAgIGlmIHNlbGYudmFsdWUgIT0g
Tm9uZToKQEAgLTE0NiwxMyArMTQ2LDEzIEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICAgICAgICAg
YmFzZSA9ICJjb2RlIgogICAgICAgICAgICAgICAgIGlmIGJhc2VJbmRleCA+IDA6CiAgICAgICAg
ICAgICAgICAgICAgIGJhc2UgPSAiY29kZSArICVkIiAlIGJhc2VJbmRleAotICAgICAgICAgICAg
ICAgIGNvbXBhcmlzb24gPSAoIkNPTVBBUkVfQ0hBUkFDVEVSUyVkKCVzLCAiICUgKGxlbih0ZXN0
KSwgYmFzZSkpICsgIiwgIi5qb2luKHRlc3QpICsgIikiCisgICAgICAgICAgICAgICAgY29tcGFy
aXNvbiA9ICgiQ09NUEFSRV8lZCVzUyglcywgIiAlIChsZW4odGVzdCksIHR5cGVOYW1lLCBiYXNl
KSkgKyAiLCAiLmpvaW4odGVzdCkgKyAiKSIKICAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9PSAw
OgogICAgICAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7
IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0gZWxz
ZSBpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7IikKIAotICAgICAgICAgICAgdHJpZS5wcmludFN1
YlRyZWVBc0MoaW5kZW50ICsgNCkKKyAgICAgICAgICAgIHRyaWUucHJpbnRTdWJUcmVlQXNDKHR5
cGVOYW1lLCBpbmRlbnQgKyA0KQogICAgICAgICAgICAgaXRlbUNvdW50ID0gaXRlbUNvdW50ICsg
MQogCiAgICAgICAgICAgICBpZiBpdGVtQ291bnQgPT0gbGVuKHNlbGYua2V5cyk6CkBAIC0xNzMs
MTIgKzE3MywyMyBAQCBjbGFzcyBUcmllOgogICAgICAgICAjIG1heCBsZW5ndGggKyAxIHNvIHdl
IGRvbid0IG5lZWQgdG8gZG8gYW55IGJvdW5kcyBjaGVja2luZyBhdCBhbGwKICAgICAgICAgcHJp
bnQoInN0YXRpYyBjb25zdCBpbnQgbWF4VG9rZW5MZW5ndGggPSAlZDsiICUgKHNlbGYubWF4TGVu
Z3RoKCkgKyAxKSkKICAgICAgICAgcHJpbnQoIiIpCi0gICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8
Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExl
eGVyOjpwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKKyAgICAgICAgcHJpbnQoInRl
bXBsYXRlIDw+IikKKyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlk
ZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8VUNoYXI+OjpwYXJzZUtl
eXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKICAgICAgICAgcHJpbnQoInsiKQogICAgICAgICBw
cmludCgiICAgIEFTU0VSVChtX2NvZGVFbmQgLSBtX2NvZGUgPj0gbWF4VG9rZW5MZW5ndGgpOyIp
CiAgICAgICAgIHByaW50KCIiKQogICAgICAgICBwcmludCgiICAgIGNvbnN0IFVDaGFyKiBjb2Rl
ID0gbV9jb2RlOyIpCi0gICAgICAgIHNlbGYucHJpbnRTdWJUcmVlQXNDKDQpCisgICAgICAgIHNl
bGYucHJpbnRTdWJUcmVlQXNDKCJVQ0hBUiIsIDQpCisgICAgICAgIHByaW50KCIgICAgcmV0dXJu
IElERU5UOyIpCisgICAgICAgIHByaW50KCJ9IikKKyAgICAgICAgcHJpbnQoIiIpCisgICAgICAg
IHByaW50KCJ0ZW1wbGF0ZSA8PiIpCisgICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExDaGFy
Pjo6cGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKiBkYXRhKSIpCisgICAgICAgIHByaW50KCJ7IikK
KyAgICAgICAgcHJpbnQoIiAgICBBU1NFUlQobV9jb2RlRW5kIC0gbV9jb2RlID49IG1heFRva2Vu
TGVuZ3RoKTsiKQorICAgICAgICBwcmludCgiIikKKyAgICAgICAgcHJpbnQoIiAgICBjb25zdCBM
Q2hhciogY29kZSA9IG1fY29kZTsiKQorICAgICAgICBzZWxmLnByaW50U3ViVHJlZUFzQygiQ0hB
UiIsIDQpCiAgICAgICAgIHByaW50KCIgICAgcmV0dXJuIElERU5UOyIpCiAgICAgICAgIHByaW50
KCJ9IikKICAgICAgICAgcHJpbnQoIiIpCkBAIC0xOTQsNTcgKzIwNSw4NSBAQCBwcmludCgiLy8g
VGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgS2V5CiBwcmludCgiIiIKICNpZiBDUFUoTkVFRFNf
QUxJR05FRF9BQ0NFU1MpCiAKLSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBj
aGFyMSwgY2hhcjIpIFxcCisjZGVmaW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBj
aGFyMikgXFwKKyAgICAoKChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsxXSA9
PSBjaGFyMikpCisjZGVmaW5lIENPTVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0KSBcXAorICAgIChDT01QQVJFXzJDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIpICYmIENPTVBBUkVfMkNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisjZGVm
aW5lIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFxcCiAgICAgKCgoYWRk
cmVzcylbMF0gPT0gY2hhcjEpICYmICgoYWRkcmVzcylbMV0gPT0gY2hhcjIpKQotI2RlZmluZSBD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBc
XAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09N
UEFSRV9DSEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBD
T01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisg
ICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVD
SEFSUygoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQogCiAjZWxzZSAvLyBDUFUoTkVFRFNf
QUxJR05FRF9BQ0NFU1MpCiAKICNpZiBDUFUoQklHX0VORElBTikKIAotI2RlZmluZSBDSEFSUEFJ
Ul9UT1VJTlQzMihhLCBiKSBcXAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQxNihhLCBiKSBcXAor
ICAgICgoKCh1aW50MTZfdCkoYSkpIDw8IDgpICsgKHVpbnQxNl90KShiKSkKKyNkZWZpbmUgQ0hB
UlFVQURfVE9VSU5UMzIoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDMyX3QpKENIQVJQQUlS
X1RPVUlOVDE2KGEsIGIpKSkgPDwgMTYpICsgQ0hBUlBBSVJfVE9VSU5UMTYoYywgZCkpCisjZGVm
aW5lIFVDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSBcXAogICAgICgoKCh1aW50MzJfdCkoYSkpIDw8
IDE2KSArICh1aW50MzJfdCkoYikpCi0jZGVmaW5lIENIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMs
IGQpIFxcCi0gICAgKCgoKHVpbnQ2NF90KShDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkpIDw8IDMy
KSArIENIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKQorI2RlZmluZSBVQ0hBUlFVQURfVE9VSU5UNjQo
YSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDY0X3QpKFVDSEFSUVVBRF9UT1VJTlQ2NChhLCBi
KSkpIDw8IDMyKSArIFVDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkKIAogI2Vsc2UgLy8gQ1BVKEJJ
R19FTkRJQU4pCiAKLSNkZWZpbmUgQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikgXFwKKyNkZWZpbmUg
Q0hBUlBBSVJfVE9VSU5UMTYoYSwgYikgXFwKKyAgICAoKCgodWludDE2X3QpKGIpKSA8PCA4KSAr
ICh1aW50MTZfdCkoYSkpCisjZGVmaW5lIENIQVJRVUFEX1RPVUlOVDMyKGEsIGIsIGMsIGQpIFxc
CisgICAgKCgoKHVpbnQzMl90KShDSEFSUEFJUl9UT1VJTlQxNihjLCBkKSkpIDw8IDE2KSArIENI
QVJQQUlSX1RPVUlOVDE2KGEsIGIpKQorI2RlZmluZSBVQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikg
XFwKICAgICAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWludDMyX3QpKGEpKQotI2RlZmlu
ZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSBcXAotICAgICgoKCh1aW50NjRfdCkoQ0hB
UlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkK
KyNkZWZpbmUgVUNIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMsIGQpIFxcCisgICAgKCgoKHVpbnQ2
NF90KShVQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBVQ0hBUlBBSVJfVE9VSU5U
MzIoYSwgYikpCiAKICNlbmRpZiAvLyBDUFUoQklHX0VORElBTikKIAogCi0jZGVmaW5lIENPTVBB
UkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAotICAgICgoKHVpbnQzMl90
KikoYWRkcmVzcykpWzBdID09IENIQVJQQUlSX1RPVUlOVDMyKGNoYXIxLCBjaGFyMikpCisjZGVm
aW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKKyAgICAoKCh1aW50
MTZfdCopKGFkZHJlc3MpKVswXSA9PSBDSEFSUEFJUl9UT1VJTlQxNihjaGFyMSwgY2hhcjIpKQor
I2RlZmluZSBDT01QQVJFXzJVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAgICgo
KHVpbnQzMl90KikoYWRkcmVzcykpWzBdID09IFVDSEFSUEFJUl9UT1VJTlQzMihjaGFyMSwgY2hh
cjIpKQogCiAjaWYgQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM0KGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAgICgoKHVpbnQ2NF90Kiko
YWRkcmVzcykpWzBdID09IENIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNo
YXI0KSkKKyNkZWZpbmUgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFy
MywgY2hhcjQpIFxcCisgICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFVQURf
VE9VSU5UMzIoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRV
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKCgodWlu
dDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gVUNIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0KSkKIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJF
X0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAg
IChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV9D
SEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJF
XzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoQ09N
UEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiBDT01QQVJFXzJDSEFSUygoYWRk
cmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRVQ0hBUlMoYWRkcmVz
cywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVDSEFSUygoYWRkcmVzcykgKyAyLCBj
aGFyMywgY2hhcjQpKQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogI2VuZGlmIC8vIENQVShO
RUVEU19BTElHTkVEX0FDQ0VTUykKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMzKGFkZHJl
c3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRk
cmVzcywgY2hhcjEsIGNoYXIyKSAmJiAoKGFkZHJlc3MpWzJdID09IChjaGFyMykpKQotI2RlZmlu
ZSBDT01QQVJFX0NIQVJBQ1RFUlM1KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
LCBjaGFyNSkgXFwKLSAgICAoQ09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9PSAoY2hhcjUpKSkKLSNkZWZpbmUg
Q09NUEFSRV9DSEFSQUNURVJTNihhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwg
Y2hhcjUsIGNoYXI2KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MgKyA0
LCBjaGFyNSwgY2hhcjYpKQotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM3KGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAotICAgIChD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAm
JiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyAzLCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBj
aGFyNykpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzgoYWRkcmVzcywgY2hhcjEsIGNoYXIy
LCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcsIGNoYXI4KSBcXAotICAgIChDT01Q
QVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFy
OCkpCisjZGVmaW5lIENPTVBBUkVfM0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMp
IFxcCisgICAgKENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChhZGRy
ZXNzKVsyXSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV8zVUNIQVJTKGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFy
MSwgY2hhcjIpICYmICgoYWRkcmVzcylbMl0gPT0gKGNoYXIzKSkpCisjZGVmaW5lIENPTVBBUkVf
NUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSkgXFwKKyAg
ICAoQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYm
ICgoYWRkcmVzcylbNF0gPT0gKGNoYXI1KSkpCisjZGVmaW5lIENPTVBBUkVfNVVDSEFSUyhhZGRy
ZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUpIFxcCisgICAgKENPTVBBUkVf
NFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNz
KVs0XSA9PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFSRV82Q0hBUlMoYWRkcmVzcywgY2hhcjEs
IGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAoQ09NUEFSRV80Q0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfMkNIQVJT
KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYpKQorI2RlZmluZSBDT01QQVJFXzZVQ0hBUlMoYWRk
cmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAo
Q09NUEFSRV80VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBD
T01QQVJFXzJVQ0hBUlMoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENPTVBB
UkVfN0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hh
cjYsIGNoYXI3KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIs
IGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcyArIDMsIGNoYXI0LCBjaGFy
NSwgY2hhcjYsIGNoYXI3KSkKKyNkZWZpbmUgQ09NUEFSRV83VUNIQVJTKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAorICAgIChDT01Q
QVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBB
UkVfNFVDSEFSUyhhZGRyZXNzICsgMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQorI2Rl
ZmluZSBDT01QQVJFXzhDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwg
Y2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCisgICAgKENPTVBBUkVfNENIQVJTKGFkZHJl
c3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFXzRDSEFSUyhhZGRyZXNz
ICsgNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpKQorI2RlZmluZSBDT01QQVJFXzhVQ0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hh
cjcsIGNoYXI4KSBcXAorICAgIChDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIy
LCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzICsgNCwgY2hhcjUsIGNo
YXI2LCBjaGFyNywgY2hhcjgpKQogIiIiKQogCiB0cmllLnByaW50QXNDKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVw
YXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdlIGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAg
ICAgICAgICAvLyB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFy
c2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCksIHBy
b2dyYW1Tb3VyY2UubGVuZ3RoKCksIExpdGVyYWxQYXJzZXI6Ok5vblN0cmljdEpTT04pOworICAg
ICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291cmNl
LmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9u
U3RyaWN0SlNPTik7CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVw
YXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9i
amVjdDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5j
cHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwxNyArMjI2LDIwIEBAIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCB0eXBlc09mQVNDSUkKIC8qIDEyNyAtIERlbGV0ZSAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJbnZhbGlkLAogfTsKIAotTGV4ZXI6OkxleGVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorTGV4ZXI8VD46OkxleGVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKICAgICA6IG1faXNSZXBhcnNpbmcoZmFsc2UpCiAgICAgLCBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKIH0KIAotTGV4ZXI6On5MZXhlcigpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0xleGVyPFQ+Ojp+TGV4ZXIoKQogewogfQotICAgIAotVVN0cmluZyBMZXhl
cjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitVU3Ry
aW5nIExleGVyPFQ+OjpnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQogewogICAgIHN3aXRjaCAobV9j
dXJyZW50KSB7CiAgICAgY2FzZSAwOgpAQCAtMjU4LDI2ICsyNjEsMzUgQEAgVVN0cmluZyBMZXhl
cjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgY29u
c3QgVUNoYXIqIExleGVyOjpjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQUxXQVlTX0lOTElORSBjb25zdCBUKiBMZXhlcjxUPjo6Y3VycmVudENoYXJhY3Rl
cigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY29kZSA8PSBtX2NvZGVFbmQpOwogICAgIHJldHVy
biBtX2NvZGU7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IExleGVyOjpjdXJyZW50T2Zmc2V0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcigpIC0gbV9jb2RlU3RhcnQ7Ci19
Ci0KLXZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJB
cmVuYSogYXJlbmEpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnNldENv
ZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJBcmVuYSogYXJlbmEpCiB7CiAgICAg
bV9hcmVuYSA9ICZhcmVuYS0+aWRlbnRpZmllckFyZW5hKCk7Ci0KKyAgICAKICAgICBtX2xpbmVO
dW1iZXIgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CiAgICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAg
ICBtX2xhc3RUb2tlbiA9IC0xOworICAgIAorICAgIGNvbnN0IFQqIGRhdGE7CisgICAgY29uc3Qg
U3RyaW5nSW1wbCogc291cmNlU3RyaW5nID0gc291cmNlLnByb3ZpZGVyKCktPnN0cmluZ0RhdGEo
KTsKIAotICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKTsK
KyAgICBpZiAoc291cmNlU3RyaW5nKSB7CisgICAgICAgIGlmIChzb3VyY2VTdHJpbmctPmlzOEJp
dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IHNpemVvZihMQ2hhcikpOwor
ICAgICAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHNvdXJjZVN0cmlu
Zy0+Y2hhcmFjdGVyczgoKSk7CisgICAgICAgIH0gZWxzZSAgeworICAgICAgICAgICAgQVNTRVJU
KHNpemVvZihUKSA9PSBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIGRhdGEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFQqPihzb3VyY2VTdHJpbmctPmNoYXJhY3RlcnMxNigpKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZQorICAgICAgICBkYXRhID0gMDsKIAogICAgIG1fc291cmNlID0gJnNv
dXJjZTsKICAgICBtX2NvZGVTdGFydCA9IGRhdGE7CkBAIC0yODYsMTAgKzI5OCwxMCBAQCB2b2lk
IExleGVyOjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHNvCiAgICAgbV9lcnJvciA9IGZhbHNl
OwogICAgIG1fYXRMaW5lU3RhcnQgPSB0cnVlOwogICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gVVN0
cmluZygpOwotCisgICAgCiAgICAgbV9idWZmZXI4LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5p
dGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CiAgICAgbV9idWZmZXIxNi5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KChtX2NvZGVFbmQgLSBtX2NvZGUpIC8gMik7Ci0KKyAgICAKICAgICBpZiAoTElLRUxZ
KG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7CiAgICAg
ZWxzZQpAQCAtMjk3LDcgKzMwOSw4IEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNl
Q29kZSYgc28KICAgICBBU1NFUlQoY3VycmVudE9mZnNldCgpID09IHNvdXJjZS5zdGFydE9mZnNl
dCgpKTsKIH0KIAotdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgTGV4ZXI6OlNoaWZ0VHlwZSBz
aG91bGRCb3VuZHNDaGVjaz4gQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjppbnRlcm5hbFNoaWZ0
KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgU2hp
ZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46Omlu
dGVybmFsU2hpZnQoKQogewogICAgIGlmIChzaG91bGRCb3VuZHNDaGVjayA9PSBEb0JvdW5kc0No
ZWNrKSB7CiAgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVuY2UKQEAgLTMx
MiwyMCArMzI1LDI4IEBAIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQsIExleGVyOjpTaGlmdFQK
ICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6c2hpZnQoKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnNoaWZ0KCkKIHsKLSAg
ICBpbnRlcm5hbFNoaWZ0PDEsIERvQm91bmRzQ2hlY2s+KCk7CisgICAgLy8gRmFzdGVyIHRoYW4g
YW4gaWYtZWxzZSBzZXF1ZW5jZQorICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gLTEpOworICAgIG1f
Y3VycmVudCA9IC0xOworICAgIG1fY29kZSsrOworICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9j
b2RlRW5kKSkKKyAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsKIH0KIAotQUxXQVlTX0lOTElO
RSBpbnQgTGV4ZXI6OnBlZWsoaW50IG9mZnNldCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxX
QVlTX0lOTElORSBpbnQgTGV4ZXI8VD46OnBlZWsoaW50IG9mZnNldCkKIHsKICAgICAvLyBPbmx5
IHVzZSBpZiBuZWNlc3NhcnkKICAgICBBU1NFUlQob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPCA1KTsK
LSAgICBjb25zdCBVQ2hhciogY29kZSA9IG1fY29kZSArIG9mZnNldDsKKyAgICBjb25zdCBUKiBj
b2RlID0gbV9jb2RlICsgb2Zmc2V0OwogICAgIHJldHVybiAoY29kZSA8IG1fY29kZUVuZCkgPyAq
Y29kZSA6IC0xOwogfQogCi1pbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbnQgTGV4ZXI8VD46OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQogewog
ICAgIGludCBjaGFyMSA9IHBlZWsoMSk7CiAgICAgaW50IGNoYXIyID0gcGVlaygyKTsKQEAgLTM0
Miw3ICszNjMsOCBAQCBpbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdExpbmVUZXJtaW5hdG9yKCkKIHsK
ICAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKTsKIApAQCAtMzU2LDcgKzM3
OCw4IEBAIHZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQogICAgICsrbV9saW5lTnVt
YmVyOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omxhc3RUb2tlbldhc1Jlc3RyS2V5
d29yZCgpIGNvbnN0Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBM
ZXhlcjxUPjo6bGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9sYXN0VG9rZW4gPT0gQ09OVElOVUUgfHwgbV9sYXN0VG9rZW4gPT0gQlJFQUsgfHwgbV9sYXN0
VG9rZW4gPT0gUkVUVVJOIHx8IG1fbGFzdFRva2VuID09IFRIUk9XOwogfQpAQCAtNDExLDM2ICs0
MzQsMTI4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbmdsZUVzY2FwZShpbnQgYykKICAgICB9CiB9
CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQ4KGludCBjKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkOChpbnQgYykKIHsKICAgICBBU1NFUlQo
YyA+PSAwKTsKICAgICBBU1NFUlQoYyA8PSAweEZGKTsKLSAgICBtX2J1ZmZlcjguYXBwZW5kKHN0
YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICBtX2J1ZmZlcjguYXBwZW5kKHN0YXRpY19jYXN0PExD
aGFyPihjKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgTGV4ZXI8
VD46OmFwcGVuZDgoY29uc3QgVCogcCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTog
Q2hhbmdlIHRocmVlIG9jY3VycmFuY2VzIG9mIG1fYnVmZmVyMTYgdG8gbV9idWZmZXI4IGFuZAor
ICAgIC8vIFVDaGFyIHRvIExDaGFyIHdoZW4gOCBiaXQgc3RyaW5ncyBhcmUgdHVybmVkIG9uLgor
ICAgIHNpemVfdCBjdXJyZW50U2l6ZSA9IG1fYnVmZmVyMTYuc2l6ZSgpOworICAgIG1fYnVmZmVy
MTYuZ3JvdyhjdXJyZW50U2l6ZSArIGxlbmd0aCk7CisgICAgVUNoYXIqIHJhd0J1ZmZlciA9IG1f
YnVmZmVyMTYuZGF0YSgpICsgY3VycmVudFNpemU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFQgYyA9IHBbaV07CisgICAgICAgIEFTU0VSVChj
ID49IDApOworICAgICAgICBBU1NFUlQoYyA8PSAweEZGKTsKKyAgICAgICAgcmF3QnVmZmVyW2ld
ID0gYzsKKyAgICB9CiB9CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQxNihVQ2hhciBjKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6YXBwZW5kMTYoY29u
c3QgTENoYXIqIHAsIHNpemVfdCBsZW5ndGgpCit7CisgICAgc2l6ZV90IGN1cnJlbnRTaXplID0g
bV9idWZmZXIxNi5zaXplKCk7CisgICAgbV9idWZmZXIxNi5ncm93KGN1cnJlbnRTaXplICsgbGVu
Z3RoKTsKKyAgICBVQ2hhciogcmF3QnVmZmVyID0gbV9idWZmZXIxNi5kYXRhKCkgKyBjdXJyZW50
U2l6ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAg
IHJhd0J1ZmZlcltpXSA9IHBbaV07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5l
IHZvaWQgTGV4ZXI8VD46OnJlY29yZDE2KFQgYykKIHsKICAgICBtX2J1ZmZlcjE2LmFwcGVuZChj
KTsKIH0KIAotaW5saW5lIHZvaWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkMTYoaW50IGMpCiB7CiAgICAg
QVNTRVJUKGMgPj0gMCk7CiAgICAgQVNTRVJUKGMgPD0gVVNIUlRfTUFYKTsKLSAgICByZWNvcmQx
NihVQ2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYykpKTsKKyAgICBtX2J1ZmZlcjE2
LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOwogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpwYXJz
ZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwgYm9v
bCBzdHJpY3RNb2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+Ojpw
YXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwg
Ym9vbCBzdHJpY3RNb2RlKQogeworICAgIC8vIEZJWE1FOiBDaGFuZ2UgcmVjb3JkMTYgYW5kIG1f
YnVmZmVyMTYgdG8gcmVjb3JkOCBhbmQgbV9idWZmZXI4LCBhbmQgc2l6ZW9mKFVDaGFyKSB0bwor
ICAgIC8vIHNpemVvZihMQ2hhcikgYmVsb3cgd2hlbiA4IGJpdCBzdHJpbmdzIGFyZSB0dXJuZWQg
b24uCisKICAgICBjb25zdCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2Rl
OwotICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleFR5cGUgJiBJ
Z25vcmVSZXNlcnZlZFdvcmRzKSkgeworICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVu
Z3RoKSAmJiAhKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdvcmRzKSkgewogICAgICAgICBK
U1Rva2VuVHlwZSBrZXl3b3JkID0gcGFyc2VLZXl3b3JkPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+
KHRva2VuRGF0YSk7CiAgICAgICAgIGlmIChrZXl3b3JkICE9IElERU5UKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoKCFzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB8fCB0b2tlbkRhdGEtPmlkZW50KTsK
ICAgICAgICAgICAgIHJldHVybiBrZXl3b3JkID09IFJFU0VSVkVEX0lGX1NUUklDVCAmJiAhc3Ry
aWN0TW9kZSA/IElERU5UIDoga2V5d29yZDsKICAgICAgICAgfQogICAgIH0KLSAgICBjb25zdCBV
Q2hhciogaWRlbnRpZmllclN0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNpemVvZihUKSAhPSBzaXplb2YoVUNoYXIp
KSAvLyBGSVhNRTogQ2hhbmdlIHRvIHNpemVvZihMQ2hhcikKKyAgICAgICAgYnVmZmVyUmVxdWly
ZWQgPSB0cnVlOworCisgICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpCisgICAgICAg
IHNoaWZ0KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAnXFwnKSkgewor
ICAgICAgICBzZXRPZmZzZXRGcm9tQ2hhck9mZnNldChpZGVudGlmaWVyU3RhcnQpOworICAgICAg
ICBpZiAoYnVmZmVyUmVxdWlyZWQpCisgICAgICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsg
Ly8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgcmV0dXJuIHBhcnNlSWRlbnRp
ZmllclNsb3dDYXNlPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+KHRva2VuRGF0YSwgbGV4VHlwZSwg
c3RyaWN0TW9kZSk7CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwor
ICAgIAorICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB7CisgICAgICAgIGlmICghYnVm
ZmVyUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIGludCBpZGVudGlmaWVyTGVuZ3RoID0gY3VycmVu
dENoYXJhY3RlcigpIC0gaWRlbnRpZmllclN0YXJ0OworICAgICAgICAgICAgaWRlbnQgPSBtYWtl
SWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBjdXJyZW50Q2hhcmFj
dGVyKCkpCisgICAgICAgICAgICAgICAgYXBwZW5kMTYoaWRlbnRpZmllclN0YXJ0LCBjdXJyZW50
Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIGFwcGVu
ZDgKKyAgICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCks
IG1fYnVmZmVyMTYuc2l6ZSgpKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAg
ICAgfQorCisgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVudDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CisKKyAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwor
CisgICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3Jl
UmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7CisgICAgICAgICAg
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0S2V5
d29yZCgqaWRlbnQpOworICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tlbkxl
bmd0aCkgfHwgIWVudHJ5KTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIElERU5UOworICAgICAgICAgICAgSlNUb2tlblR5cGUgdG9rZW4gPSBzdGF0aWNf
Y2FzdDxKU1Rva2VuVHlwZT4oZW50cnktPmxleGVyVmFsdWUoKSk7CisgICAgICAgICAgICByZXR1
cm4gKHRva2VuICE9IFJFU0VSVkVEX0lGX1NUUklDVCkgfHwgc3RyaWN0TW9kZSA/IHRva2VuIDog
SURFTlQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElERU5UOworICAgIH0KKworICAgIGlm
IChidWZmZXJSZXF1aXJlZCkKKyAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7IC8vIEZJWE1F
OiBDaGFuZ2UgdG8gbV9idWZmZXI4CisKKyAgICByZXR1cm4gSURFTlQ7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gSlNU
b2tlblR5cGUgTGV4ZXI8VD46OnBhcnNlSWRlbnRpZmllclNsb3dDYXNlKEpTVG9rZW5EYXRhKiB0
b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBjb25z
dCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2RlOworICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDY0LDMxICs1NzksMzAg
QEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgICAgICAgICAg
cmV0dXJuIEVSUk9SVE9LOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9idWZmZXIxNi5zaXplKCkg
PyAhaXNJZGVudFBhcnQoY2hhcmFjdGVyKSA6ICFpc0lkZW50U3RhcnQoY2hhcmFjdGVyKSkpCiAg
ICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7Ci0gICAgICAgIGlmICAoc2hvdWxkQ3JlYXRlSWRl
bnRpZmllcikKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpCiAgICAgICAgICAg
ICByZWNvcmQxNihjaGFyYWN0ZXIpOwogICAgICAgICBpZGVudGlmaWVyU3RhcnQgPSBjdXJyZW50
Q2hhcmFjdGVyKCk7CiAgICAgfQotICAgIAorCiAgICAgaW50IGlkZW50aWZpZXJMZW5ndGg7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwogICAgIGlmIChzaG91bGRDcmVhdGVJZGVu
dGlmaWVyKSB7Ci0gICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQpCisgICAgICAgIGlmICghYnVm
ZmVyUmVxdWlyZWQpIHsKICAgICAgICAgICAgIGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50Q2hh
cmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7Ci0gICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgp
OworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBj
dXJyZW50Q2hhcmFjdGVyKCkpCiAgICAgICAgICAgICAgICAgbV9idWZmZXIxNi5hcHBlbmQoaWRl
bnRpZmllclN0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOwotICAg
ICAgICAgICAgaWRlbnRpZmllclN0YXJ0ID0gbV9idWZmZXIxNi5kYXRhKCk7Ci0gICAgICAgICAg
ICBpZGVudGlmaWVyTGVuZ3RoID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgICAgICAgICBpZGVu
dCA9IG1ha2VJZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJT
dGFydCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVu
dDsKICAgICB9IGVsc2UKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CiAKICAgICBtX2Rl
bGltaXRlZCA9IGZhbHNlOwogCi0gICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShs
ZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgaWYgKExJS0VMWSghYnVmZmVy
UmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAgICAg
ICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVyKTsKICAgICAgICAgLy8gS2V5d29yZHMg
bXVzdCBub3QgYmUgcmVjb2duaXplZCBpZiB0aGVyZSB3YXMgYW4gXHVYWFhYIGluIHRoZSBpZGVu
dGlmaWVyLgogICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHsKQEAgLTUw
NiwxMiArNjIwLDgzIEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEK
ICAgICByZXR1cm4gSURFTlQ7CiB9CiAKLXRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5n
cz4gQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9r
ZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRl
IDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojpw
YXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCiB7Cisg
ICAgLy8gRklYTUU6IENoYW5nZSByZWNvcmQxNiBhbmQgbV9idWZmZXIxNiB0byByZWNvcmQ4IGFu
ZCBtX2J1ZmZlcjggYmVsb3cgd2hlbgorICAgIC8vIDggYml0IHN0cmluZ3MgYXJlIHR1cm5lZCBv
bi4KKyAgICBpbnQgc3RhcnRpbmdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgaW50IHN0
YXJ0aW5nTGluZU51bWJlciA9IGxpbmVOdW1iZXIoKTsKICAgICBpbnQgc3RyaW5nUXVvdGVDaGFy
YWN0ZXIgPSBtX2N1cnJlbnQ7CiAgICAgc2hpZnQoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBzdHJp
bmdTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBjb25zdCBUKiBzdHJpbmdTdGFydCA9
IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKworICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gc3RyaW5nUXVv
dGVDaGFyYWN0ZXIpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKChtX2N1cnJlbnQgPT0gJ1xcJykp
KSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nU3RhcnQgIT0gY3VycmVudENoYXJhY3RlcigpICYm
IHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0
LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7CisgICAgICAgICAgICBzaGlmdCgp
OworCisgICAgICAgICAgICBpbnQgZXNjYXBlID0gc2luZ2xlRXNjYXBlKG1fY3VycmVudCk7CisK
KyAgICAgICAgICAgIC8vIE1vc3QgY29tbW9uIGVzY2FwZSBzZXF1ZW5jZXMgZmlyc3QKKyAgICAg
ICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJp
bmdzKQorICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOyAvLyBGSVhNRTogQ2hh
bmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChVTkxJS0VMWShpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkpKQorICAgICAgICAg
ICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fY3Vy
cmVudCA9PSAneCcpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAg
IGlmIChpc0FTQ0lJSGV4RGlnaXQobV9jdXJyZW50KSAmJiBpc0FTQ0lJSGV4RGlnaXQocGVlaygx
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHByZXYgPSBtX2N1cnJlbnQ7CisgICAgICAg
ICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWls
ZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0SGV4KHBy
ZXYsIG1fY3VycmVudCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAg
ICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEJ1aWxk
U3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoJ3gnKTsgLy8gRklYTUU6IENo
YW5nZSB0byByZWNvcmQ4CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNl
dE9mZnNldChzdGFydGluZ09mZnNldCk7CisgICAgICAgICAgICAgICAgc2V0TGluZU51bWJlcihz
dGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDAp
OyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZVN0cmluZ1Nsb3dDYXNlPHNob3VsZEJ1aWxkU3RyaW5ncz4odG9rZW5EYXRhLCBzdHJpY3RN
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZ1N0YXJ0ID0gY3VycmVudENo
YXJhY3RlcigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoVU5MSUtFTFkoKChtX2N1cnJlbnQgPiAweGZmKSB8fCAobV9jdXJyZW50IDwgMHhlKSkpKSB7
CisgICAgICAgICAgICBzZXRPZmZzZXQoc3RhcnRpbmdPZmZzZXQpOworICAgICAgICAgICAgc2V0
TGluZU51bWJlcihzdGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgbV9idWZmZXIxNi5y
ZXNpemUoMCk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgICAgICByZXR1
cm4gcGFyc2VTdHJpbmdTbG93Q2FzZTxzaG91bGRCdWlsZFN0cmluZ3M+KHRva2VuRGF0YSwgc3Ry
aWN0TW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBzaGlmdCgpOworICAgIH0KKworICAgIGlm
IChjdXJyZW50Q2hhcmFjdGVyKCkgIT0gc3RyaW5nU3RhcnQgJiYgc2hvdWxkQnVpbGRTdHJpbmdz
KQorICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJp
bmdTdGFydCk7CisgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgLy8gRklYTUU6
IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJZGVu
dGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7CisgICAgZWxzZQor
ICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKKworICAgIC8vIEZJWE1FOiBDaGFuZ2UgdG8g
bV9idWZmZXI4CisgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJp
bmdzPiBib29sIExleGVyPFQ+OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiB0b2tl
bkRhdGEsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBpbnQgc3RyaW5nUXVvdGVDaGFyYWN0ZXIg
PSBtX2N1cnJlbnQ7CisgICAgc2hpZnQoKTsKKworICAgIGNvbnN0IFQqIHN0cmluZ1N0YXJ0ID0g
Y3VycmVudENoYXJhY3RlcigpOwogCiAgICAgd2hpbGUgKG1fY3VycmVudCAhPSBzdHJpbmdRdW90
ZUNoYXJhY3RlcikgewogICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50ID09ICdcXCcpKSB7
CkBAIC01MjMsOCArNzA4LDggQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBB
TFdBWQogCiAgICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiBlc2NhcGUgc2VxdWVuY2VzIGZpcnN0
CiAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgIGlmIChzaG91bGRC
dWlsZFN0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOworICAg
ICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAg
IHJlY29yZDE2KGVzY2FwZSk7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAgICAg
IH0gZWxzZSBpZiAoVU5MSUtFTFkoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSkKICAgICAg
ICAgICAgICAgICBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CkBAIC02MTgsNyArODAzLDggQEAgdGVt
cGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWQogICAgIHJldHVybiB0cnVlOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6OnBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFs
dWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxUPjo6
cGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IG1v
c3QgaGV4YWRlY2ltYWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3QgaGV4
VmFsdWUgPSAwOwpAQCAtNjU3LDE0ICs4NDMsMTUgQEAgQUxXQVlTX0lOTElORSB2b2lkIExleGVy
OjpwYXJzZUhleChkb3VibAogICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnRPdmVyZmxvdyhtX2J1
ZmZlcjguZGF0YSgpLCBtX2J1ZmZlcjguc2l6ZSgpLCAxNik7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjo6cGFyc2VPY3RhbChkb3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46OnBhcnNlT2N0YWwoZG91Ymxl
JiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IG1vc3Qgb2N0YWwgdmFsdWVz
IGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3Qgb2N0YWxWYWx1ZSA9IDA7CiAgICAgaW50
IG1heGltdW1EaWdpdHMgPSA5OwogICAgIC8vIFRlbXBvcmFyeSBidWZmZXIgZm9yIHRoZSBkaWdp
dHMuIE1ha2VzIGVhc2llcgogICAgIC8vIHRvIHJlY29uc3RydWN0IHRoZSBpbnB1dCBjaGFyYWN0
ZXJzIHdoZW4gbmVlZGVkLgotICAgIGNoYXIgZGlnaXRzWzEwXTsKKyAgICBMQ2hhciBkaWdpdHNb
MTBdOwogCiAgICAgZG8gewogICAgICAgICBvY3RhbFZhbHVlID0gb2N0YWxWYWx1ZSAqIDggKyAo
bV9jdXJyZW50IC0gJzAnKTsKQEAgLTY5Myw3ICs4ODAsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
TGV4ZXI6OnBhcnNlT2N0YWwoZG91CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBMZXhlcjo6cGFyc2VEZWNpbWFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VEZWNpbWFs
KGRvdWJsZSYgcmV0dXJuVmFsdWUpCiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBtb3N0IGRlY2lt
YWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3QgZGVjaW1hbFZhbHVlID0g
MDsKQEAgLTcwNCw3ICs4OTIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlRGVj
aW1hbChkCiAgICAgICAgIGludCBtYXhpbXVtRGlnaXRzID0gOTsKICAgICAgICAgLy8gVGVtcG9y
YXJ5IGJ1ZmZlciBmb3IgdGhlIGRpZ2l0cy4gTWFrZXMgZWFzaWVyCiAgICAgICAgIC8vIHRvIHJl
Y29uc3RydWN0IHRoZSBpbnB1dCBjaGFyYWN0ZXJzIHdoZW4gbmVlZGVkLgotICAgICAgICBjaGFy
IGRpZ2l0c1sxMF07CisgICAgICAgIExDaGFyIGRpZ2l0c1sxMF07CiAKICAgICAgICAgZG8gewog
ICAgICAgICAgICAgZGVjaW1hbFZhbHVlID0gZGVjaW1hbFZhbHVlICogMTAgKyAobV9jdXJyZW50
IC0gJzAnKTsKQEAgLTczMCw3ICs5MTgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBh
cnNlRGVjaW1hbChkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
TGV4ZXI6OnBhcnNlTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQoKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnBhcnNlTnVtYmVyQWZ0ZXJEZWNpbWFs
UG9pbnQoKQogewogICAgIHJlY29yZDgoJy4nKTsKICAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KG1f
Y3VycmVudCkpIHsKQEAgLTczOSw3ICs5MjgsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6
OnBhcnNlTnVtYmVyQWZ0CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBh
cnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VOdW1iZXJBZnRlckV4cG9uZW50SW5k
aWNhdG9yKCkKIHsKICAgICByZWNvcmQ4KCdlJyk7CiAgICAgc2hpZnQoKTsKQEAgLTc1OCw3ICs5
NDgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlTnVtYmVyQWZ0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VNdWx0aWxpbmVD
b21tZW50KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVy
PFQ+OjpwYXJzZU11bHRpbGluZUNvbW1lbnQoKQogewogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIHdoaWxlIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gJyonKSkgewpAQCAtNzgwLDE2ICs5NzEs
MTggQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU11bHRpbGluZQogICAgIH0KIH0K
IAotYm9vbCBMZXhlcjo6bmV4dFRva2VuSXNDb2xvbigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2Jvb2wgTGV4ZXI8VD46Om5leHRUb2tlbklzQ29sb24oKQogewotICAgIGNvbnN0IFVDaGFyKiBj
b2RlID0gbV9jb2RlOworICAgIGNvbnN0IFQqIGNvZGUgPSBtX2NvZGU7CiAgICAgd2hpbGUgKGNv
ZGUgPCBtX2NvZGVFbmQgJiYgKGlzV2hpdGVTcGFjZSgqY29kZSkgfHwgaXNMaW5lVGVybWluYXRv
cigqY29kZSkpKQogICAgICAgICBjb2RlKys7Ci0gICAgICAgIAorICAgIAogICAgIHJldHVybiBj
b2RlIDwgbV9jb2RlRW5kICYmICpjb2RlID09ICc6JzsKIH0KIAotSlNUb2tlblR5cGUgTGV4ZXI6
OmxleChKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZvLCB1bnNp
Z25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0pT
VG9rZW5UeXBlIExleGVyPFQ+OjpsZXgoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgSlNUb2tlbklu
Zm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2RlKQogewogICAg
IEFTU0VSVCghbV9lcnJvcik7CiAgICAgQVNTRVJUKG1fYnVmZmVyOC5pc0VtcHR5KCkpOwpAQCAt
MTA5NSw3ICsxMjg4LDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHN0cmluZyBmb3Ig
c3RydG9kLgogICAgICAgICAgICAgICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7Ci0gICAgICAg
ICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kKG1fYnVmZmVyOC5k
YXRhKCksIDApOworICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6
OnN0cnRvZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2J1ZmZlcjguZGF0YSgpKSwg
MCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0b2tlbiA9IE5VTUJFUjsKICAgICAgICAg
fQpAQCAtMTEwOSw3ICsxMzAyLDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAg
ICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGFyYWN0
ZXJRdW90ZToKLSAgICAgICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRTdHJpbmdzKSB7CisgICAg
ICAgIGlmIChsZXhUeXBlICYgTGV4RG9udEJ1aWxkU3RyaW5ncykgewogICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFwYXJzZVN0cmluZzxmYWxzZT4odG9rZW5EYXRhLCBzdHJpY3RNb2RlKSkpCiAg
ICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEx
MjQsNyArMTMxNyw3IEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgIEFTU0VS
VChpc0lkZW50U3RhcnQobV9jdXJyZW50KSk7CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBpbnRv
IENoYXJhY3RlckJhY2tTbGFzaC4KICAgICBjYXNlIENoYXJhY3RlckJhY2tTbGFzaDoKLSAgICAg
ICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRLZXl3b3JkcykKKyAgICAgICAgaWYgKGxleFR5cGUg
JiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgICAgIHRva2VuID0gcGFyc2VJZGVudGlm
aWVyPGZhbHNlPih0b2tlbkRhdGEsIGxleFR5cGUsIHN0cmljdE1vZGUpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlSWRlbnRpZmllcjx0cnVlPih0b2tlbkRhdGEsIGxl
eFR5cGUsIHN0cmljdE1vZGUpOwpAQCAtMTE3OCw3ICsxMzcxLDggQEAgcmV0dXJuRXJyb3I6CiAg
ICAgcmV0dXJuIEVSUk9SVE9LOwogfQogCi1ib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0IElk
ZW50aWZpZXIqJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyKiYgZmxhZ3MsIFVDaGFyIHBhdHRl
cm5QcmVmaXgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgTGV4ZXI8VD46OnNjYW5SZWdF
eHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIqJiBmbGFncywg
VUNoYXIgcGF0dGVyblByZWZpeCkKIHsKICAgICBBU1NFUlQobV9idWZmZXIxNi5pc0VtcHR5KCkp
OwogCkBAIC0xMjM5LDcgKzE0MzMsOCBAQCBib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0IElk
ZW50aWZpZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGV4ZXI6OnNraXBSZWdFeHAo
KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+Ojpza2lwUmVnRXhwKCkKIHsK
ICAgICBib29sIGxhc3RXYXNFc2NhcGUgPSBmYWxzZTsKICAgICBib29sIGluQnJhY2tldHMgPSBm
YWxzZTsKQEAgLTEyNzksMTEgKzE0NzQsMTIgQEAgYm9vbCBMZXhlcjo6c2tpcFJlZ0V4cCgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGV4ZXI6OmNsZWFyKCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgordm9pZCBMZXhlcjxUPjo6Y2xlYXIoKQogewogICAgIG1fYXJlbmEgPSAwOwogCi0g
ICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7CisgICAgVmVjdG9yPExDaGFyPiBuZXdCdWZmZXI4
OwogICAgIG1fYnVmZmVyOC5zd2FwKG5ld0J1ZmZlcjgpOwogCiAgICAgVmVjdG9yPFVDaGFyPiBu
ZXdCdWZmZXIxNjsKQEAgLTEyOTIsMTEgKzE0ODgsMTYgQEAgdm9pZCBMZXhlcjo6Y2xlYXIoKQog
ICAgIG1faXNSZXBhcnNpbmcgPSBmYWxzZTsKIH0KIAotU291cmNlQ29kZSBMZXhlcjo6c291cmNl
Q29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorU291cmNlQ29kZSBMZXhlcjxUPjo6c291cmNlQ29kZShpbnQgb3Bl
bkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKIHsKICAgICBBU1NFUlQobV9z
b3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7CiAgICAgQVNTRVJU
KG1fc291cmNlLT5wcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKICAgICBy
ZXR1cm4gU291cmNlQ29kZShtX3NvdXJjZS0+cHJvdmlkZXIoKSwgb3BlbkJyYWNlLCBjbG9zZUJy
YWNlICsgMSwgZmlyc3RMaW5lKTsKIH0KIAorLy8gSW5zdGFudGlhdGUgdGhlIHR3byBmbGF2b3Jz
IG9mIExleGVyIHdlIG5lZWQgaW5zdGVhZCBvZiBwdXR0aW5nIG1vc3Qgb2YgdGhpcyBmaWxlIGlu
IExleGVyLmgKK3RlbXBsYXRlIGNsYXNzIExleGVyPExDaGFyPjsKK3RlbXBsYXRlIGNsYXNzIExl
eGVyPFVDaGFyPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsMTcgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBIYXNoVGFibGUgbV9rZXl3b3JkVGFibGU7CiB9OwogCitlbnVtIExleFR5
cGUgeworICAgIExleElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAKKyAgICBMZXhEb250QnVpbGRT
dHJpbmdzID0gMiwKKyAgICBMZXhEb250QnVpbGRLZXl3b3JkcyA9IDQKK307CisKK2VudW0gU2hp
ZnRUeXBlIHsgRG9Cb3VuZHNDaGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9OworCiBjbGFzcyBSZWdF
eHA7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgTGV4ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKExleGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTgy
LDEyICs5MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUmVwYXJzaW5nKCkgeyBtX2lzUmVw
YXJzaW5nID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNSZXBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBt
X2lzUmVwYXJzaW5nOyB9CiAKLSAgICAvLyBGdW5jdGlvbnMgZm9yIHRoZSBwYXJzZXIgaXRzZWxm
LgotICAgIGVudW0gTGV4VHlwZSB7Ci0gICAgICAgIElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAK
LSAgICAgICAgRG9udEJ1aWxkU3RyaW5ncyA9IDIsCi0gICAgICAgIERvbnRCdWlsZEtleXdvcmRz
ID0gNAotICAgIH07CiAgICAgSlNUb2tlblR5cGUgbGV4KEpTVG9rZW5EYXRhKiwgSlNUb2tlbklu
Zm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICBib29sIG5leHRUb2tlbklzQ29s
b24oKTsKICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsg
fQpAQCAtMTAyLDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNhd0Vycm9yKCkgY29uc3Qg
eyByZXR1cm4gbV9lcnJvcjsgfQogICAgIFVTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9sZXhFcnJvck1lc3NhZ2U7IH0KICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgaW50
IGN1cnJlbnRPZmZzZXQoKSB7IHJldHVybiBtX2NvZGUgLSBtX2NvZGVTdGFydDsgfQogICAgIHZv
aWQgc2V0T2Zmc2V0KGludCBvZmZzZXQpCiAgICAgewogICAgICAgICBtX2Vycm9yID0gMDsKQEAg
LTEyNSwxMyArMTI3LDEyIEBAIHB1YmxpYzoKICAgICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVu
dGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RN
b2RlKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwotCiAgICAg
dm9pZCByZWNvcmQ4KGludCk7CisgICAgdm9pZCBhcHBlbmQ4KGNvbnN0IFQqLCBzaXplX3QpOwog
ICAgIHZvaWQgcmVjb3JkMTYoaW50KTsKLSAgICB2b2lkIHJlY29yZDE2KFVDaGFyKTsKLQotICAg
IHZvaWQgY29weUNvZGVXaXRob3V0Qk9NcygpOworICAgIHZvaWQgcmVjb3JkMTYoVCk7CisgICAg
dm9pZCBhcHBlbmQxNihjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmQxNihj
b25zdCBVQ2hhciogcCwgc2l6ZV90IGxlbmd0aCkgeyBtX2J1ZmZlcjE2LmFwcGVuZChwLCBsZW5n
dGgpOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2hpZnQoKTsKICAgICBBTFdBWVNfSU5M
SU5FIGludCBwZWVrKGludCBvZmZzZXQpOwpAQCAtMTM5LDE4ICsxNDAsMjEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKIAogICAgIFVTdHJpbmcgZ2V0SW52YWxp
ZENoYXJNZXNzYWdlKCk7Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlcigpIGNvbnN0OwotICAgIEFMV0FZU19JTkxJTkUgaW50IGN1cnJlbnRPZmZzZXQoKSBj
b25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25z
dDsKKyAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T2Zmc2V0
RnJvbUNoYXJPZmZzZXQoY29uc3QgVCogY2hhck9mZnNldCkgeyBzZXRPZmZzZXQoY2hhck9mZnNl
dCAtIG1fY29kZVN0YXJ0KTsgfQogCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVy
KiBtYWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7
CiAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBtYWtlSWRlbnRpZmllcihjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAKICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgbGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3Q7CiAKLSAgICBlbnVtIFNoaWZ0
VHlwZSB7IERvQm91bmRzQ2hlY2ssIERvTm90Qm91bmRzQ2hlY2sgfTsKICAgICB0ZW1wbGF0ZSA8
aW50IHNoaWZ0QW1vdW50LCBTaGlmdFR5cGUgc2hvdWxkQm91bmRzQ2hlY2s+IHZvaWQgaW50ZXJu
YWxTaGlmdCgpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFM
V0FZU19JTkxJTkUgSlNUb2tlblR5cGUgcGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKik7CiAgICAg
dGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRJZGVudGlmaWVycz4gQUxXQVlTX0lOTElORSBKU1Rv
a2VuVHlwZSBwYXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqLCB1bnNpZ25lZCwgYm9vbCBzdHJp
Y3RNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBKU1Rv
a2VuVHlwZSBwYXJzZUlkZW50aWZpZXJTbG93Q2FzZShKU1Rva2VuRGF0YSosIHVuc2lnbmVkLCBi
b29sIHN0cmljdE1vZGUpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4g
QUxXQVlTX0lOTElORSBib29sIHBhcnNlU3RyaW5nKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJpY3RN
b2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IGJvb2wgcGFyc2VT
dHJpbmdTbG93Q2FzZShKU1Rva2VuRGF0YSosIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBwYXJzZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBwYXJzZURlY2ltYWwoZG91YmxlJiByZXR1cm5WYWx1ZSk7CkBAIC0xNjMsMTYg
KzE2NywxNiBAQCBwcml2YXRlOgogICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFz
dExpbmVOdW1iZXI7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI4OworICAgIFZlY3RvcjxM
Q2hhcj4gbV9idWZmZXI4OwogICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZmZXIxNjsKICAgICBib29s
IG1fdGVybWluYXRvcjsKICAgICBib29sIG1fZGVsaW1pdGVkOyAvLyBlbmNvdW50ZXJlZCBkZWxp
bWl0ZXIgbGlrZSAiJyIgYW5kICJ9IiBvbiBsYXN0IHJ1bgogICAgIGludCBtX2xhc3RUb2tlbjsK
IAogICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwotICAgIGNvbnN0IFVDaGFyKiBtX2Nv
ZGU7Ci0gICAgY29uc3QgVUNoYXIqIG1fY29kZVN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBtX2Nv
ZGVFbmQ7CisgICAgY29uc3QgVCogbV9jb2RlOworICAgIGNvbnN0IFQqIG1fY29kZVN0YXJ0Owor
ICAgIGNvbnN0IFQqIG1fY29kZUVuZDsKICAgICBib29sIG1faXNSZXBhcnNpbmc7CiAgICAgYm9v
bCBtX2F0TGluZVN0YXJ0OwogICAgIGJvb2wgbV9lcnJvcjsKQEAgLTE4NiwzNyArMTkwLDQ5IEBA
IHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiB9OwogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgTGV4ZXI6OmlzV2hpdGVTcGFjZShpbnQgY2gpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNXaGl0ZVNwYWNlKGludCBjaCkK
IHsKICAgICByZXR1cm4gaXNBU0NJSShjaCkgPyAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwg
Y2ggPT0gMHhCIHx8IGNoID09IDB4QykgOiAoV1RGOjpVbmljb2RlOjppc1NlcGFyYXRvclNwYWNl
KGNoKSB8fCBjaCA9PSAweEZFRkYpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omlz
TGluZVRlcm1pbmF0b3IoaW50IGNoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5M
SU5FIGJvb2wgTGV4ZXI8VD46OmlzTGluZVRlcm1pbmF0b3IoaW50IGNoKQogewogICAgIHJldHVy
biBjaCA9PSAnXHInIHx8IGNoID09ICdcbicgfHwgKGNoICYgfjEpID09IDB4MjAyODsKIH0KIAot
aW5saW5lIHVuc2lnbmVkIGNoYXIgTGV4ZXI6OmNvbnZlcnRIZXgoaW50IGMxLCBpbnQgYzIpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB1bnNpZ25lZCBjaGFyIExleGVyPFQ+Ojpjb252
ZXJ0SGV4KGludCBjMSwgaW50IGMyKQogewogICAgIHJldHVybiAodG9BU0NJSUhleFZhbHVlKGMx
KSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShjMik7CiB9CiAKLWlubGluZSBVQ2hhciBMZXhlcjo6
Y29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitpbmxpbmUgVUNoYXIgTGV4ZXI8VD46OmNvbnZlcnRVbmljb2RlKGludCBj
MSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKIHsKICAgICByZXR1cm4gKGNvbnZlcnRIZXgoYzEs
IGMyKSA8PCA4KSB8IGNvbnZlcnRIZXgoYzMsIGM0KTsKIH0KIAotQUxXQVlTX0lOTElORSBjb25z
dCBJZGVudGlmaWVyKiBMZXhlcjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlk
ZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46
Om1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQog
ewogICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjps
ZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZvKiB0
b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhwZWN0
SWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZv
LCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCiB7Ci0gICAgQVNTRVJUKChsZXhU
eXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpOwotICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1f
Y29kZTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gc3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIGVu
ZCA9IG1fY29kZUVuZDsKKyAgICBBU1NFUlQoKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdv
cmRzKSk7CisgICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CisgICAgY29uc3QgVCogcHRyID0g
c3RhcnQ7CisgICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOwogICAgIGlmIChwdHIgPj0gZW5k
KSB7CiAgICAgICAgIEFTU0VSVChwdHIgPT0gZW5kKTsKICAgICAgICAgZ290byBzbG93Q2FzZTsK
QEAgLTI0MSw3ICsyNTcsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpsZXhF
eHBlCiAgICAgbV9jb2RlID0gcHRyOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBpZGVudGlmaWVyIGlm
IG5lZWRlZAotICAgIGlmIChsZXhUeXBlICYgRG9udEJ1aWxkS2V5d29yZHMpCisgICAgaWYgKGxl
eFR5cGUgJiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9
IDA7CiAgICAgZWxzZQogICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gbWFrZUlkZW50aWZpZXIo
c3RhcnQsIHB0ciAtIHN0YXJ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFBhcnNlcjo6UGFy
c2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwKICAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkK
ICAgICAsIG1fc291cmNlRWxlbWVudHMoMCkKIHsKLSAgICBtX2xleGVyID0gbmV3IExleGVyKGds
b2JhbERhdGEpOworICAgIG1fbGV4ZXIgPSBuZXcgTGV4ZXI8VUNoYXI+KGdsb2JhbERhdGEpOwog
ICAgIG1fYXJlbmEgPSBtX2dsb2JhbERhdGEtPnBhcnNlckFyZW5hOwogICAgIG1fbGV4ZXItPnNl
dENvZGUoc291cmNlLCBtX2FyZW5hKTsKIApAQCAtMTE1OCw5ICsxMTU4LDkgQEAgdGVtcGxhdGUg
PGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZAogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAg
ICAgIGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5zZXQpKSkKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25v
cmVSZXNlcnZlZFdvcmRzKTsKKyAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleEln
bm9yZVJlc2VydmVkV29yZHMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250
QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhJZ25v
cmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChtYXRjaChDT0xPTikpIHsKICAgICAgICAgICAgIG5leHQoKTsKQEAg
LTE0ODksNyArMTQ4OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICAgICAgY2FzZSBET1Q6IHsKICAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCsrOwogICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQo
KTsKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNlcnZl
ZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAgIG5l
eHRFeHBlY3RJZGVudGlmaWVyKExleElnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6
RG9udEJ1aWxkS2V5d29yZHMpOwogICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwogICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKG1fbGV4ZXItPmxhc3RMaW5l
TnVtYmVyKCksIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4
cHJlc3Npb25FbmQsIHRva2VuRW5kKCkpOwogICAgICAgICAgICAgbmV4dCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyMCw3
ICs5MjAsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgY29uc3QgSlNHbG9iYWxEYXRhKiBtX2ds
b2JhbERhdGE7CiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJl
bmEqIG1fYXJlbmE7Ci0gICAgTGV4ZXIqIG1fbGV4ZXI7CisgICAgTGV4ZXI8VUNoYXI+KiBtX2xl
eGVyOwogICAgIAogICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CiAgICAgYm9vbCBtX2Vycm9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkocmV2aXNp
b24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBjbGVhcigpOwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSosIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwg
ZG91YmxlIG51bWJlcik7CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9pZGVudGlmaWVycy5pc0VtcHR5KCk7IH0KQEAgLTY1LDcgKzY2LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEZpeGVkQXJyYXk8SWRlbnRpZmllciosIE1heGltdW1DYWNoYWJsZUNoYXJh
Y3Rlcj4gbV9yZWNlbnRJZGVudGlmaWVyczsKICAgICB9OwogCi0gICAgQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVu
dGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKICAgICB7CiAgICAg
ICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikgewogICAg
ICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dmlkZXItPmRhdGEoKSArIG1fc3RhcnRDaGFyOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2VuZENoYXIgLSBtX3N0YXJ0Q2hhcjsgfQogICAgICAgICAKLSAgICAgICAg
U291cmNlQ29kZSBzdWJFeHByZXNzaW9uKGludCwgaW50LCBpbnQpOworICAgICAgICBTb3VyY2VD
b2RlIHN1YkV4cHJlc3Npb24odW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwpAQCAtODgsOCAr
ODgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVybiBTb3VyY2VDb2Rl
KFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9u
KSwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSk7CiAgICAgfQotICAgIAotICAg
IGlubGluZSBTb3VyY2VDb2RlIFNvdXJjZUNvZGU6OnN1YkV4cHJlc3Npb24oaW50IG9wZW5CcmFj
ZSwgaW50IGNsb3NlQnJhY2UsIGludCBmaXJzdExpbmUpCisKKyAgICBpbmxpbmUgU291cmNlQ29k
ZSBTb3VyY2VDb2RlOjpzdWJFeHByZXNzaW9uKHVuc2lnbmVkIG9wZW5CcmFjZSwgdW5zaWduZWQg
Y2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChwcm92aWRl
cigpLT5kYXRhKClbb3BlbkJyYWNlXSA9PSAneycpOwogICAgICAgICBBU1NFUlQocHJvdmlkZXIo
KS0+ZGF0YSgpW2Nsb3NlQnJhY2VdID09ICd9Jyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJp
bmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nSW1wbCogc3RyaW5nRGF0YSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBpbnQg
bGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJs
KCkgeyByZXR1cm4gbV91cmw7IH0KQEAgLTkxLDYgKzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gbV9zb3VyY2Uuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhcnQsIGVu
ZCAtIHN0YXJ0KTsKICAgICAgICAgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5sZW5ndGgoKTsgfQogCiAgICAgcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJD
YWNoZS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U291cmNlUHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBTb3VyY2VQ
cm92aWRlckNhY2hlX2gKKyNkZWZpbmUgU291cmNlUHJvdmlkZXJDYWNoZV9oCisKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTQ2LDMg
KzQ5LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0KKworI2VuZGlmIC8vIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2Vy
LmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw4ICsxMTUsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25z
dCBib29sIE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBi
b29sIENhblVzZUZ1bmN0aW9uQ2FjaGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBEb250QnVpbGRLZXl3b3JkcyA9IExleGVyOjpEb250QnVpbGRLZXl3b3JkczsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgRG9udEJ1aWxkU3RyaW5ncyA9IExleGVyOjpEb250QnVpbGRTdHJp
bmdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRLZXl3b3JkcyA9IExleERv
bnRCdWlsZEtleXdvcmRzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJp
bmdzID0gTGV4RG9udEJ1aWxkU3RyaW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50
cygpIHsgcmV0dXJuIDE7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9k
ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
c3RhdGljIGlubGluZSB2b2lkIGluc2VydFNlbWljb2xvbklmTmVlZAogCiAgICAgZm9yIChzaXpl
X3QgaSA9IGZ1bmN0aW9uQm9keS5sZW5ndGgoKSAtIDI7IGkgPiAwOyAtLWkpIHsKICAgICAgICAg
VUNoYXIgY2ggPSBmdW5jdGlvbkJvZHlbaV07Ci0gICAgICAgIGlmICghTGV4ZXI6OmlzV2hpdGVT
cGFjZShjaCkgJiYgIUxleGVyOjppc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICBpZiAo
IUxleGVyPFVDaGFyPjo6aXNXaGl0ZVNwYWNlKGNoKSAmJiAhTGV4ZXI8VUNoYXI+Ojppc0xpbmVU
ZXJtaW5hdG9yKGNoKSkgewogICAgICAgICAgICAgaWYgKGNoICE9ICc7JyAmJiBjaCAhPSAnfScp
CiAgICAgICAgICAgICAgICAgZnVuY3Rpb25Cb2R5ID0gbWFrZVVTdHJpbmcoZnVuY3Rpb25Cb2R5
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKDAsIGkgKyAxKSwgIjsiLCBmdW5jdGlvbkJvZHkuc3Vic3Ry
aW5nU2hhcmluZ0ltcGwoaSArIDEsIGZ1bmN0aW9uQm9keS5sZW5ndGgoKSAtIChpICsgMSkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERh
dGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIHVzaW5nIFdURjo6VGhy
ZWFkU3BlY2lmaWM7CkBAIC00MywxOSArNDIsMTMgQEAgSWRlbnRpZmllclRhYmxlOjp+SWRlbnRp
ZmllclRhYmxlKCkKICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVy
ID0gbV90YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAoKml0ZXIp
LT5zZXRJc0lkZW50aWZpZXIoZmFsc2UpOwogfQorCiBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yLCBib29sPiBJZGVudGlmaWVyVGFibGU6OmFkZChTdHJpbmdJbXBsKiB2
YWx1ZSkKIHsKICAgICBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX3RhYmxlLmFkZCh2YWx1ZSk7CiAgICAgKCpyZXN1bHQuZmlyc3QpLT5z
ZXRJc0lkZW50aWZpZXIodHJ1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLXRlbXBsYXRlPHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1zdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yLCBib29sPiBJZGVudGlmaWVyVGFibGU6OmFkZChVIHZhbHVlKQotewotICAgIHN0ZDo6
cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFi
bGUuYWRkPFUsIFY+KHZhbHVlKTsKLSAgICAoKnJlc3VsdC5maXJzdCktPnNldElzSWRlbnRpZmll
cih0cnVlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBJZGVudGlmaWVyVGFibGUqIGNyZWF0
ZUlkZW50aWZpZXJUYWJsZSgpCiB7CkBAIC0xMjIsMzMgKzExNSw2IEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEUKICAgICByZXR1cm4gYWRkKCZleGVjLT5nbG9iYWxE
YXRhKCksIGMpOwogfQogCi1zdHJ1Y3QgVUNoYXJCdWZmZXIgewotICAgIGNvbnN0IFVDaGFyKiBz
OwotICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci19OwotCi1zdHJ1Y3QgSWRlbnRpZmllclVDaGFy
QnVmZmVyVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVUNoYXJC
dWZmZXImIGJ1ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVI
YXNoPFVDaGFyPihidWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
ZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24s
IGNvbnN0IFVDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICBV
Q2hhciogZDsKLSAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1JlZigpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpICE9IGJ1Zi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGRbaV0gPSBidWYuc1tp
XTsKLSAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24gPSByOyAKLSAg
ICB9Ci19OwotCiB1aW50MzJfdCBJZGVudGlmaWVyOjp0b1VJbnQzMihjb25zdCBVU3RyaW5nJiBz
dHJpbmcsIGJvb2wmIG9rKQogewogICAgIG9rID0gZmFsc2U7CkBAIC0xOTMsMjggKzE1OSw2IEBA
IHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNvbnN0IFVTdHIKICAgICByZXR1cm4gdmFs
dWU7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYg
KGxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzWzBdOwotICAgICAgICBpZiAoYyA8
PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gYWRkKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAo
YykpOwotICAgIH0KLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmVtcHR5KCk7Ci0gICAgVUNoYXJCdWZmZXIgYnVmID0ge3MsIGxlbmd0aH07IAotICAgIHBhaXI8
SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxE
YXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZDxVQ2hhckJ1ZmZlciwgSWRlbnRpZmllclVDaGFyQnVm
ZmVyVHJhbnNsYXRvcj4oYnVmKTsKLQotICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJh
bnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAgIC8vIFRoZSBib29sZWFuIGlu
IHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAgcmV0dXJuIGFkZFJlc3VsdC5z
ZWNvbmQgPyBhZG9wdFJlZigqYWRkUmVzdWx0LmZpcnN0KSA6ICphZGRSZXN1bHQuZmlyc3Q7Ci19
Ci0KLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGFkZCgmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzLCBsZW5ndGgpOwotfQotCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1w
bCogcikKIHsKICAgICBBU1NFUlQoIXItPmlzSWRlbnRpZmllcigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDk5MjA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAi
VGhyZWFkU3BlY2lmaWMuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1dU
RlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMzYsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJZGVu
dGlmaWVyKCkgeyB9CiAKICAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IGNoYXIqIHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMpKSB7IH0gLy8gT25seSB0byBiZSB1c2Vk
IHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMsIGxl
bmd0aCkpIHsgfQogICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1w
bCogcmVwKSA6IG1fc3RyaW5nKGFkZChleGVjLCByZXApKSB7IH0gCiAgICAgICAgIElkZW50aWZp
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChleGVj
LCBzLmltcGwoKSkpIHsgfQogCiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzKSkgeyB9
IC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KKyAgICAgICAgSWRlbnRp
ZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3Ro
KSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRl
bnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVu
Z3RoKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAg
SWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cmluZ0ltcGwqIHJlcCkgOiBt
X3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcmVwKSkgeyB9IAogICAgICAgICBJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQo
Z2xvYmFsRGF0YSwgcy5pbXBsKCkpKSB7IH0KQEAgLTc3LDYgKzc4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBj
b25zdCBMQ2hhciopOwogICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nSW1wbCphLCBjb25zdCBjaGFyKmIpIHsgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH07CisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7
IH0KIApAQCAtODksOCArOTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikgeyByZXR1
cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBsKCk7IH0KICAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0
dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBVQ2hhciosIGludCBsZW5n
dGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoSlNHbG9iYWxE
YXRhKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKKy8vICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSosIGNv
bnN0IFQqLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBUKiwgaW50
IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsKIAogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBs
KiByKQogICAgICAgICB7CkBAIC0xMTcsNyArMTIwLDc0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShKU0dsb2Jh
bERhdGEqKTsKICAgICB9OworCisgICAgdGVtcGxhdGUgPD4gQUxXQVlTX0lOTElORSBib29sIElk
ZW50aWZpZXI6OmNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhMQ2hhcikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcgPT0gMHhmZik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDw+IEFMV0FZU19JTkxJTkUgYm9vbCBJ
ZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNoYXIgYykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBDaGFyQnVmZmVyIHsKKyAgICAg
ICAgY29uc3QgVCogczsKKyAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgICB9OwogICAg
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ2hhckJ1
ZmZlclRyYW5zbGF0b3IgeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFy
QnVmZmVyPFQ+JiBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVIYXNoPFQ+KGJ1Zi5zLCBidWYubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBDaGFy
QnVmZmVyPFQ+JiBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBJZGVudGlmaWVy
OjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IENoYXJCdWZm
ZXI8VD4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAgVCogZDsK
KyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKGJ1Zi5sZW5ndGgsIGQpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRbaV0gPSBidWYu
c1tpXTsKKyAgICAgICAgICAgIHItPnNldEhhc2goaGFzaCk7CisgICAgICAgICAgICBsb2NhdGlv
biA9IHI7IAorICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMSkgeworICAgICAgICAgICAgVCBjID0gc1swXTsKKyAgICAgICAgICAgIGlmIChj
YW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFk
ZChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nUmVwKGMpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgQ2hhckJ1ZmZl
cjxUPiBidWYgPSB7cywgbGVuZ3RofTsgCisgICAgICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBs
Kj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFi
bGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4g
PihidWYpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFu
c2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCisgICAgICAgIC8vIFRoZSBib29sZWFu
IGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCisgICAgICAgIHJldHVybiBhZGRS
ZXN1bHQuc2Vjb25kID8gYWRvcHRSZWYoKmFkZFJlc3VsdC5maXJzdCkgOiAqYWRkUmVzdWx0LmZp
cnN0OworICAgIH0KKworI2lmIDAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBORVZF
Ul9JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
ZCgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzLCBsZW5ndGgpOworICAgIH0KKyNlbmRpZgorCiAgICAg
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlm
aWVyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIGIpOwpA
QCAtMTUyLDcgKzIyMiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVy
biBXVEY6OmVxdWFsKHIsIHMpOwogICAgIH0KLSAgICAKKworICAgIGlubGluZSBib29sIElkZW50
aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgp
OworICAgIH0KKwogICAgIGlubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwqIHIsIGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAg
ICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgpOwpAQCAtMTc3LDYgKzI1MiwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4s
IGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+ID4s
IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CiAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHN0ZDo6cGFpcjxIYXNoU2V0PFN0cmlu
Z0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IElkZW50aWZpZXJUYWJsZTo6YWRkKFUgdmFsdWUpCisg
ICAgeworICAgICAgICBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX3RhYmxlLmFkZDxVLCBWPih2YWx1ZSk7CisgICAgICAgICgqcmVzdWx0
LmZpcnN0KS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBJZGVudGlmaWVyX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMs
IGMKICAgICAgICAgaWYgKGMgPT0gJyUnKSB7CiAgICAgICAgICAgICBpbnQgY2hhckxlbiA9IDA7
CiAgICAgICAgICAgICBpZiAoayA8PSBsZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChwWzFdKSAm
JiBpc0FTQ0lJSGV4RGlnaXQocFsyXSkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyIGIw
ID0gTGV4ZXI6OmNvbnZlcnRIZXgocFsxXSwgcFsyXSk7CisgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciBiMCA9IExleGVyPFVDaGFyPjo6Y29udmVydEhleChwWzFdLCBwWzJdKTsKICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgc2VxdWVuY2VMZW4gPSBVVEY4U2VxdWVuY2VMZW5ndGgoYjApOwog
ICAgICAgICAgICAgICAgIGlmIChzZXF1ZW5jZUxlbiAhPSAwICYmIGsgPD0gbGVuIC0gc2VxdWVu
Y2VMZW4gKiAzKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSBzZXF1ZW5jZUxlbiAq
IDM7CkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGMKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzZXF1ZW5jZUxl
bjsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcSA9IHAgKyBp
ICogMzsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxWzBdID09ICclJyAmJiBpc0FTQ0lJ
SGV4RGlnaXQocVsxXSkgJiYgaXNBU0NJSUhleERpZ2l0KHFbMl0pKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcXVlbmNlW2ldID0gTGV4ZXI6OmNvbnZlcnRIZXgocVsxXSwgcVsyXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBMZXhlcjxVQ2hhcj46
OmNvbnZlcnRIZXgocVsxXSwgcVsyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyTGVuID0gMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgSlNWYWx1ZSBk
ZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc0FT
Q0lJSGV4RGlnaXQocFsyXSkgJiYgaXNBU0NJSUhleERpZ2l0KHBbM10pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQocFs0XSkgJiYgaXNBU0NJSUhleERpZ2l0KHBb
NV0pKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSA2OwotICAgICAgICAgICAgICAg
ICAgICB1ID0gTGV4ZXI6OmNvbnZlcnRVbmljb2RlKHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOwor
ICAgICAgICAgICAgICAgICAgICB1ID0gTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0VW5pY29kZShwWzJd
LCBwWzNdLCBwWzRdLCBwWzVdKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoY2hhckxlbiAmJiAodSA9PSAwIHx8IHUgPj0gMTI4IHx8ICFzdHJjaHIo
ZG9Ob3RVbmVzY2FwZSwgdSkpKSB7CkBAIC0xNzMsMTIgKzE3MywxMiBAQCBzdGF0aWMgaW50IHBh
cnNlRGlnaXQodW5zaWduZWQgc2hvcnQgYywgCiAgICAgcmV0dXJuIGRpZ2l0OwogfQogCi1kb3Vi
bGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBjaGFyKiBzLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgp
Citkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCwgaW50
IHJhZGl4KQogewogICAgIGRvdWJsZSBudW1iZXIgPSAwLjA7CiAgICAgZG91YmxlIHJhZGl4TXVs
dGlwbGllciA9IDEuMDsKIAotICAgIGZvciAoY29uc3QgY2hhciogcCA9IHMgKyBsZW5ndGggLSAx
OyBwID49IHM7IHAtLSkgeworICAgIGZvciAoY29uc3QgTENoYXIqIHAgPSBzICsgbGVuZ3RoIC0g
MTsgcCA+PSBzOyBwLS0pIHsKICAgICAgICAgaWYgKHJhZGl4TXVsdGlwbGllciA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpIHsKICAgICAgICAgICAgIGlmICgqcCAh
PSAnMCcpIHsKICAgICAgICAgICAgICAgICBudW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmluZmluaXR5KCk7CkBAIC01NzgsMTIgKzU3OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVCiAgICAgICAgIFVDaGFyIHU7CiAgICAgICAgIGlmIChj
WzBdID09ICclJyAmJiBrIDw9IGxlbiAtIDYgJiYgY1sxXSA9PSAndScpIHsKICAgICAgICAgICAg
IGlmIChpc0FTQ0lJSGV4RGlnaXQoY1syXSkgJiYgaXNBU0NJSUhleERpZ2l0KGNbM10pICYmIGlz
QVNDSUlIZXhEaWdpdChjWzRdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY1s1XSkpIHsKLSAgICAgICAg
ICAgICAgICB1ID0gTGV4ZXI6OmNvbnZlcnRVbmljb2RlKGNbMl0sIGNbM10sIGNbNF0sIGNbNV0p
OworICAgICAgICAgICAgICAgIHUgPSBMZXhlcjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKGNbMl0s
IGNbM10sIGNbNF0sIGNbNV0pOwogICAgICAgICAgICAgICAgIGMgPSAmdTsKICAgICAgICAgICAg
ICAgICBrICs9IDU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY1swXSA9PSAn
JScgJiYgayA8PSBsZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChjWzFdKSAmJiBpc0FTQ0lJSGV4
RGlnaXQoY1syXSkpIHsKLSAgICAgICAgICAgIHUgPSBVQ2hhcihMZXhlcjo6Y29udmVydEhleChj
WzFdLCBjWzJdKSk7CisgICAgICAgICAgICB1ID0gVUNoYXIoTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0
SGV4KGNbMV0sIGNbMl0pKTsKICAgICAgICAgICAgIGMgPSAmdTsKICAgICAgICAgICAgIGsgKz0g
MjsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
Kik7CiAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5k
ID0gOTAwNzE5OTI1NDc0MDk5Mi4wOwotICAgIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0
IGNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOworICAgIGRvdWJsZSBwYXJzZUludE92ZXJm
bG93KGNvbnN0IExDaGFyKiwgaW50IGxlbmd0aCwgaW50IHJhZGl4KTsKKyAgICBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGlu
dCByYWRpeCkgeyByZXR1cm4gcGFyc2VJbnRPdmVyZmxvdyhyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4ocyksIGxlbmd0aCwgcmFkaXgpOyB9CiAgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZs
b3coY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOwogICAgIGJvb2wgaXNTdHJX
aGl0ZVNwYWNlKFVDaGFyKTsKICAgICBkb3VibGUganNUb051bWJlcihjb25zdCBVU3RyaW5nJiBz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJz
ZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAsMTcgQEAgYm9v
bCBMaXRlcmFsUGFyc2VyOjp0cnlKU09OUFBhcnNlKFZlY3RvcgogICAgIGRvIHsKICAgICAgICAg
VmVjdG9yPEpTT05QUGF0aEVudHJ5PiBwYXRoOwogICAgICAgICAvLyBVbmd1YXJkZWQgbmV4dCB0
byBzdGFydCBvZmYgdGhlIGxleGVyCi0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZp
ZXIobV9leGVjLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOworICAgICAgICBJZGVu
dGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAgICAgSlNPTlBQYXRoRW50cnkgZW50cnk7CiAg
ICAgICAgIGlmIChuYW1lID09IG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnZh
cktleXdvcmQpIHsKICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tJZGVudGlm
aWVyKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGVudHJ5Lm1f
dHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURlY2xhcmU7Ci0gICAgICAgICAgICBlbnRyeS5tX3Bh
dGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKG1fZXhlYywgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5z
dGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnN0YXJ0KTsKKyAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXIo
Jm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwog
ICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlUeXBlRG90OwotICAgICAgICAgICAg
ZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJ
ZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5z
dGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnN0YXJ0KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAgICAgICAgfQogICAg
ICAgICBpZiAobV9leGVjLT5nbG9iYWxEYXRhKCkua2V5d29yZHMtPmlzS2V5d29yZChlbnRyeS5t
X3BhdGhFbnRyeU5hbWUpKQpAQCAtODUsNyArODUsNyBAQCBib29sIExpdGVyYWxQYXJzZXI6OnRy
eUpTT05QUGFyc2UoVmVjdG9yCiAgICAgICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQ
YXRoRW50cnlUeXBlRG90OwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBU
b2tJZGVudGlmaWVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIG1fbGV4
ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICAgICAgZW50cnkubV9wYXRo
RW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIFRva0xQYXJlbjogewpAQCAtMzQwLDcgKzM0MCw3IEBAIHRl
bXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1vZGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVG9rRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
SlNDOjpMZXhlcjo6Y29udmVydFVuaWNvZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clszXSwg
bV9wdHJbNF0pKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoSlNDOjpMZXhl
cjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKG1fcHRyWzFdLCBtX3B0clsyXSwgbV9wdHJbM10sIG1f
cHRyWzRdKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fcHRyICs9IDU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdJbXBsLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsNyBAQCB0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpCiAvLyBMYW5kaW5nIHRoZSBmaWxl
IG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBmb2xsb3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5n
ZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBKU0Mgewogc3RydWN0IElkZW50aWZpZXJDU3Ry
aW5nVHJhbnNsYXRvcjsKLXN0cnVjdCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Ci1z
dHJ1Y3QgSWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwogfQogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTYzLDggKzYyLDggQEAgdHlwZWRlZiBib29sICgqSXNXaGl0ZVNwYWNlRnVu
Y3Rpb25QdHIpKAogY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U3RyaW5nSW1wbCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIGZyaWVuZCBzdHJ1Y3Qg
SlNDOjpJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I7Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6
OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsKLSAgICBmcmllbmQgc3RydWN0IEpTQzo6
SWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKKyAgICBmcmllbmQgc3RydWN0IEpTQzo6
SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPExDaGFyPjsKKyAgICBmcmllbmQgc3RydWN0
IEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPFVDaGFyPjsKICAgICBmcmllbmQg
c3RydWN0IFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhh
c2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFu
ZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MjMy
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTEtMTEtMDMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisK
KyAgICAgICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6TGV4ZXIgY2xh
c3MgYnkgY2hhcmFjdGVyIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxMzMxCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorICAgICAgICBDaGFuZ2UgSWRlbnRpZmllcigpIGNvbnN0cnVj
dG9yIHRvIHVzZSBKU0dsb2JhbERhdGEqLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIHJlZmFjdG9yZWQgU291cmNlUHJvdmlk
ZXIgY2xhc3MgYW5kIHN1Yi1jbGFzc2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvQ2FjaGVk
U2NyaXB0U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdFNv
dXJjZVByb3ZpZGVyOjpzdHJpbmdEYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TdHJpbmdT
b3VyY2VQcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nU291cmNlUHJvdmlkZXI6
OnN0cmluZ0RhdGEpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFyaWFudFRvVmFsdWUpOgorCiAyMDExLTExLTAz
ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERC
IHJlc3VsdCBvZiBkZWxldGluZyBhIHJlY29yZCBzaG91bGQgYmUgdHJ1ZSBvciBmYWxzZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRT
b3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEpTQzo6VVN0cmluZyBn
ZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0IHsgcmV0dXJuIEpTQzo6VVN0cmluZyht
X2NhY2hlZFNjcmlwdC0+c2NyaXB0KCkuY2hhcmFjdGVycygpICsgc3RhcnQsIGVuZCAtIHN0YXJ0
KTsgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVk
U2NyaXB0LT5zY3JpcHQoKS5jaGFyYWN0ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nSW1w
bCogc3RyaW5nRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5p
bXBsKCk7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2Ny
aXB0LT5zY3JpcHQoKS5sZW5ndGgoKTsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKTsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHJl
dmlzaW9uIDk5MjA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNl
UHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgSlNDOjpVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVu
ZCkgY29uc3QgeyByZXR1cm4gSlNDOjpVU3RyaW5nKG1fc291cmNlLmNoYXJhY3RlcnMoKSArIHN0
YXJ0LCBlbmQgLSBzdGFydCk7IH0KICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nSW1w
bCogc3RyaW5nRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmltcGwoKTsgfQogICAgICAg
ICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UubGVuZ3RoKCk7IH0KICAgICAg
ICAgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogCkBA
IC02MSw2ICs2Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB7CiAgICAgICAgIHJldHVy
biBKU0M6OlNvdXJjZUNvZGUoU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShzb3VyY2UsIHVy
bCwgc3RhcnRQb3NpdGlvbiksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpOwog
ICAgIH0KKyAgICAKKyAgICAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTYwLDcgKzk2MCw3IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUK
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVjLCBy
b290LmdldCgpLCBpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgICAgIHJldC0+bWV0aG9k
VGFibGUoKS0+cHV0KHJldCwgZXhlYywgSWRlbnRpZmllcihleGVjLCByZWludGVycHJldF9jYXN0
X3B0cjxjb25zdCBVQ2hhciAqPihzLmNvbnN0RGF0YSgpKSwgcy5sZW5ndGgoKSksIHZhbCwgc2xv
dCk7CisgICAgICAgICAgICAgICAgcmV0LT5tZXRob2RUYWJsZSgpLT5wdXQocmV0LCBleGVjLCBJ
ZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0
IFVDaGFyICo+KHMuY29uc3REYXRhKCkpLCBzLmxlbmd0aCgpKSwgdmFsLCBzbG90KTsKICAgICAg
ICAgICAgICAgICAvLyAjIyMgZXJyb3IgY2FzZT8KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICsraTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDk5MjA1KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpJbmplY3RlZEJ1bmRsZVBhZ2UoVwogICAgICAgICB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0
Rm9yRnJhbWUsCiAgICAgICAgIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lLAogICAgICAg
ICAwLCAvLyBkaWRMYXlvdXRGb3JGcmFtZQotICAgICAgICBkaWREZXRlY3RYU1NGb3JGcmFtZSwK
KyAgICAgICAgLy8gZGlkRGV0ZWN0WFNTRm9yRnJhbWUsCiAgICAgfTsKICAgICBXS0J1bmRsZVBh
Z2VTZXRQYWdlTG9hZGVyQ2xpZW50KG1fcGFnZSwgJmxvYWRlckNsaWVudCk7CiAK
</data>
<flag name="commit-queue"
          id="111962"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113574</attachid>
            <date>2011-11-03 16:33:53 -0700</date>
            <delta_ts>2011-11-04 16:47:01 -0700</delta_ts>
            <desc>Fixed qt build (again)</desc>
            <filename>71331-6.patch</filename>
            <type>text/plain</type>
            <size>70905</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA3IEBA
CisyMDExLTExLTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5
IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZSB0aGUgTGV4ZXIgY2xhc3MgdG8gYmUgYSB0
ZW1wbGF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgIHR5cGUgb2YgdGhl
IHNvdXJjZS4gIEluIHRoZSBwcm9jZXNzIHVwZGF0ZWQgdGhlIHBhcnNlSWRlbnRpZmllcigpCisg
ICAgICAgIGFuZCBwYXJzZVN0cmluZygpIG1ldGhvZHMgdG8gY3JlYXRlIDggYml0IHN0cmluZ3Mg
d2hlcmUgcG9zc2libGUuCisgICAgICAgIEFsc28gYWRkZWQgc29tZSBoZWxwZXIgbWV0aG9kcyBm
b3IgYWNjdW11bGF0aW5nIHRlbXBvcmFyeSBzdHJpbmcKKyAgICAgICAgZGF0YSBpbiB0aGUgOCBh
bmQgMTYgYml0IHZlY3RvcnMuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFVwZGF0ZWQgdGhlIEtleXdvcmRMb29rdXAg
Z2VuZXJhdG9yIHRvIGNyZWF0ZSBjb2RlIHRvIG1hdGNoIGtleXdvcmRzCisgICAgICAgIGZvciBi
b3RoIDggYW5kIDE2IGJpdCBzb3VyY2Ugc3RyaW5ncy4KKworICAgICAgICBEdWUgdG8gYSBjb21w
aWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIG1vdmVkIGVudW0KKyAgICAgICAg
ZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBMZXhlciBjbGFzcyBkZWNsYXJhdGlvbi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHBhcnNlci9MZXhl
ci5jcHA6CisgICAgICAgIChKU0M6Ojo6TGV4ZXIpOgorICAgICAgICAoSlNDOjo6On5MZXhlcik6
CisgICAgICAgIChKU0M6Ojo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6
OjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6OjpzZXRDb2RlKToKKyAgICAgICAg
KEpTQzo6OjppbnRlcm5hbFNoaWZ0KToKKyAgICAgICAgKEpTQzo6OjpzaGlmdCk6CisgICAgICAg
IChKU0M6Ojo6cGVlayk6CisgICAgICAgIChKU0M6Ojo6Z2V0VW5pY29kZUNoYXJhY3Rlcik6Cisg
ICAgICAgIChKU0M6Ojo6c2hpZnRMaW5lVGVybWluYXRvcik6CisgICAgICAgIChKU0M6Ojo6bGFz
dFRva2VuV2FzUmVzdHJLZXl3b3JkKToKKyAgICAgICAgKEpTQzo6OjpyZWNvcmQ4KToKKyAgICAg
ICAgKEpTQzo6OjphcHBlbmQ4KToKKyAgICAgICAgKEpTQzo6OjphcHBlbmQxNik6CisgICAgICAg
IChKU0M6Ojo6cmVjb3JkMTYpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRpZmllcik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VJZGVudGlmaWVyU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUhleCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VPY3RhbCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VEZWNpbWFsKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJl
ckFmdGVyRGVjaW1hbFBvaW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJlckFmdGVyRXhw
b25lbnRJbmRpY2F0b3IpOgorICAgICAgICAoSlNDOjo6OnBhcnNlTXVsdGlsaW5lQ29tbWVudCk6
CisgICAgICAgIChKU0M6Ojo6bmV4dFRva2VuSXNDb2xvbik6CisgICAgICAgIChKU0M6Ojo6bGV4
KToKKyAgICAgICAgKEpTQzo6OjpzY2FuUmVnRXhwKToKKyAgICAgICAgKEpTQzo6Ojpza2lwUmVn
RXhwKToKKyAgICAgICAgKEpTQzo6OjpjbGVhcik6CisgICAgICAgIChKU0M6Ojo6c291cmNlQ29k
ZSk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjphcHBl
bmQxNik6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OnNldE9mZnNldEZyb21DaGFyT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Ojppc1do
aXRlU3BhY2UpOgorICAgICAgICAoSlNDOjo6OmlzTGluZVRlcm1pbmF0b3IpOgorICAgICAgICAo
SlNDOjo6OmNvbnZlcnRIZXgpOgorICAgICAgICAoSlNDOjo6OmNvbnZlcnRVbmljb2RlKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bGV4RXhwZWN0
SWRlbnRpZmllcik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAgICAgICAq
IHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgICogcGFy
c2VyL1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZTo6c3ViRXhwcmVzc2lv
bik6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcjo6c3RyaW5nRGF0YSk6CisgICAgICAgICogcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyQ2FjaGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppbnNl
cnRTZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllclRhYmxlOjphZGQpOgorICAgICAgICAqIHJ1bnRpbWUv
SWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAg
IChKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZXF1
YWwpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyVGFibGU6OmFkZCk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmRlY29kZSk6
CisgICAgICAgIChKU0M6OnBhcnNlSW50T3ZlcmZsb3cpOgorICAgICAgICAoSlNDOjpnbG9iYWxG
dW5jVW5lc2NhcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6cGFyc2VJbnRPdmVyZmxvdyk6CisgICAgICAgICogcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQ
YXJzZSk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXhTdHJpbmcpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKwogMjAxMS0xMS0wMyAgTWFyayBIYWhu
ZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERlLXZpcnR1YWxpemUg
SlNPYmplY3Q6OmNsYXNzTmFtZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdvcmRM
b29rdXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0tl
eXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCBjbGFzcyBUcmllOgogICAgICAgICBzZWxmLmtleXMgPSBbKHRyaWUucHJl
Zml4LCB0cmllKSBmb3IgdHJpZSBpbiBzb3J0ZWQoc2VsZi5rZXlzLnZhbHVlcygpLCBrZXk9b3Bl
cmF0b3IuYXR0cmdldHRlcignd2VpZ2h0JyksIHJldmVyc2U9VHJ1ZSldCiAgICAgICAgIHNlbGYu
d2VpZ2h0ID0gd2VpZ2h0CiAKLSAgICBkZWYgcHJpbnRTdWJUcmVlQXNDKHNlbGYsIGluZGVudCk6
CisgICAgZGVmIHByaW50U3ViVHJlZUFzQyhzZWxmLCB0eXBlTmFtZSwgaW5kZW50KToKICAgICAg
ICAgc3RyID0gbWFrZVBhZGRpbmcoaW5kZW50KQogCiAgICAgICAgIGlmIHNlbGYudmFsdWUgIT0g
Tm9uZToKQEAgLTE0NiwxMyArMTQ2LDEzIEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICAgICAgICAg
YmFzZSA9ICJjb2RlIgogICAgICAgICAgICAgICAgIGlmIGJhc2VJbmRleCA+IDA6CiAgICAgICAg
ICAgICAgICAgICAgIGJhc2UgPSAiY29kZSArICVkIiAlIGJhc2VJbmRleAotICAgICAgICAgICAg
ICAgIGNvbXBhcmlzb24gPSAoIkNPTVBBUkVfQ0hBUkFDVEVSUyVkKCVzLCAiICUgKGxlbih0ZXN0
KSwgYmFzZSkpICsgIiwgIi5qb2luKHRlc3QpICsgIikiCisgICAgICAgICAgICAgICAgY29tcGFy
aXNvbiA9ICgiQ09NUEFSRV8lZCVzUyglcywgIiAlIChsZW4odGVzdCksIHR5cGVOYW1lLCBiYXNl
KSkgKyAiLCAiLmpvaW4odGVzdCkgKyAiKSIKICAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9PSAw
OgogICAgICAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7
IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0gZWxz
ZSBpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7IikKIAotICAgICAgICAgICAgdHJpZS5wcmludFN1
YlRyZWVBc0MoaW5kZW50ICsgNCkKKyAgICAgICAgICAgIHRyaWUucHJpbnRTdWJUcmVlQXNDKHR5
cGVOYW1lLCBpbmRlbnQgKyA0KQogICAgICAgICAgICAgaXRlbUNvdW50ID0gaXRlbUNvdW50ICsg
MQogCiAgICAgICAgICAgICBpZiBpdGVtQ291bnQgPT0gbGVuKHNlbGYua2V5cyk6CkBAIC0xNzMs
MTIgKzE3MywyMyBAQCBjbGFzcyBUcmllOgogICAgICAgICAjIG1heCBsZW5ndGggKyAxIHNvIHdl
IGRvbid0IG5lZWQgdG8gZG8gYW55IGJvdW5kcyBjaGVja2luZyBhdCBhbGwKICAgICAgICAgcHJp
bnQoInN0YXRpYyBjb25zdCBpbnQgbWF4VG9rZW5MZW5ndGggPSAlZDsiICUgKHNlbGYubWF4TGVu
Z3RoKCkgKyAxKSkKICAgICAgICAgcHJpbnQoIiIpCi0gICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8
Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExl
eGVyOjpwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKKyAgICAgICAgcHJpbnQoInRl
bXBsYXRlIDw+IikKKyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlk
ZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8VUNoYXI+OjpwYXJzZUtl
eXdvcmQoSlNUb2tlbkRhdGEqIGRhdGEpIikKICAgICAgICAgcHJpbnQoInsiKQogICAgICAgICBw
cmludCgiICAgIEFTU0VSVChtX2NvZGVFbmQgLSBtX2NvZGUgPj0gbWF4VG9rZW5MZW5ndGgpOyIp
CiAgICAgICAgIHByaW50KCIiKQogICAgICAgICBwcmludCgiICAgIGNvbnN0IFVDaGFyKiBjb2Rl
ID0gbV9jb2RlOyIpCi0gICAgICAgIHNlbGYucHJpbnRTdWJUcmVlQXNDKDQpCisgICAgICAgIHNl
bGYucHJpbnRTdWJUcmVlQXNDKCJVQ0hBUiIsIDQpCisgICAgICAgIHByaW50KCIgICAgcmV0dXJu
IElERU5UOyIpCisgICAgICAgIHByaW50KCJ9IikKKyAgICAgICAgcHJpbnQoIiIpCisgICAgICAg
IHByaW50KCJ0ZW1wbGF0ZSA8PiIpCisgICAgICAgIHByaW50KCJ0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExDaGFy
Pjo6cGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKiBkYXRhKSIpCisgICAgICAgIHByaW50KCJ7IikK
KyAgICAgICAgcHJpbnQoIiAgICBBU1NFUlQobV9jb2RlRW5kIC0gbV9jb2RlID49IG1heFRva2Vu
TGVuZ3RoKTsiKQorICAgICAgICBwcmludCgiIikKKyAgICAgICAgcHJpbnQoIiAgICBjb25zdCBM
Q2hhciogY29kZSA9IG1fY29kZTsiKQorICAgICAgICBzZWxmLnByaW50U3ViVHJlZUFzQygiQ0hB
UiIsIDQpCiAgICAgICAgIHByaW50KCIgICAgcmV0dXJuIElERU5UOyIpCiAgICAgICAgIHByaW50
KCJ9IikKICAgICAgICAgcHJpbnQoIiIpCkBAIC0xOTQsNTcgKzIwNSw4NSBAQCBwcmludCgiLy8g
VGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgS2V5CiBwcmludCgiIiIKICNpZiBDUFUoTkVFRFNf
QUxJR05FRF9BQ0NFU1MpCiAKLSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBj
aGFyMSwgY2hhcjIpIFxcCisjZGVmaW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBj
aGFyMikgXFwKKyAgICAoKChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsxXSA9
PSBjaGFyMikpCisjZGVmaW5lIENPTVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0KSBcXAorICAgIChDT01QQVJFXzJDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIpICYmIENPTVBBUkVfMkNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisjZGVm
aW5lIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFxcCiAgICAgKCgoYWRk
cmVzcylbMF0gPT0gY2hhcjEpICYmICgoYWRkcmVzcylbMV0gPT0gY2hhcjIpKQotI2RlZmluZSBD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBc
XAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09N
UEFSRV9DSEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBD
T01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisg
ICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVD
SEFSUygoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQogCiAjZWxzZSAvLyBDUFUoTkVFRFNf
QUxJR05FRF9BQ0NFU1MpCiAKICNpZiBDUFUoQklHX0VORElBTikKIAotI2RlZmluZSBDSEFSUEFJ
Ul9UT1VJTlQzMihhLCBiKSBcXAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQxNihhLCBiKSBcXAor
ICAgICgoKCh1aW50MTZfdCkoYSkpIDw8IDgpICsgKHVpbnQxNl90KShiKSkKKyNkZWZpbmUgQ0hB
UlFVQURfVE9VSU5UMzIoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDMyX3QpKENIQVJQQUlS
X1RPVUlOVDE2KGEsIGIpKSkgPDwgMTYpICsgQ0hBUlBBSVJfVE9VSU5UMTYoYywgZCkpCisjZGVm
aW5lIFVDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSBcXAogICAgICgoKCh1aW50MzJfdCkoYSkpIDw8
IDE2KSArICh1aW50MzJfdCkoYikpCi0jZGVmaW5lIENIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMs
IGQpIFxcCi0gICAgKCgoKHVpbnQ2NF90KShDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkpIDw8IDMy
KSArIENIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKQorI2RlZmluZSBVQ0hBUlFVQURfVE9VSU5UNjQo
YSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDY0X3QpKFVDSEFSUVVBRF9UT1VJTlQ2NChhLCBi
KSkpIDw8IDMyKSArIFVDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkKIAogI2Vsc2UgLy8gQ1BVKEJJ
R19FTkRJQU4pCiAKLSNkZWZpbmUgQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikgXFwKKyNkZWZpbmUg
Q0hBUlBBSVJfVE9VSU5UMTYoYSwgYikgXFwKKyAgICAoKCgodWludDE2X3QpKGIpKSA8PCA4KSAr
ICh1aW50MTZfdCkoYSkpCisjZGVmaW5lIENIQVJRVUFEX1RPVUlOVDMyKGEsIGIsIGMsIGQpIFxc
CisgICAgKCgoKHVpbnQzMl90KShDSEFSUEFJUl9UT1VJTlQxNihjLCBkKSkpIDw8IDE2KSArIENI
QVJQQUlSX1RPVUlOVDE2KGEsIGIpKQorI2RlZmluZSBVQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikg
XFwKICAgICAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWludDMyX3QpKGEpKQotI2RlZmlu
ZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSBcXAotICAgICgoKCh1aW50NjRfdCkoQ0hB
UlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkK
KyNkZWZpbmUgVUNIQVJRVUFEX1RPVUlOVDY0KGEsIGIsIGMsIGQpIFxcCisgICAgKCgoKHVpbnQ2
NF90KShVQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpKSA8PCAzMikgKyBVQ0hBUlBBSVJfVE9VSU5U
MzIoYSwgYikpCiAKICNlbmRpZiAvLyBDUFUoQklHX0VORElBTikKIAogCi0jZGVmaW5lIENPTVBB
UkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAotICAgICgoKHVpbnQzMl90
KikoYWRkcmVzcykpWzBdID09IENIQVJQQUlSX1RPVUlOVDMyKGNoYXIxLCBjaGFyMikpCisjZGVm
aW5lIENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKKyAgICAoKCh1aW50
MTZfdCopKGFkZHJlc3MpKVswXSA9PSBDSEFSUEFJUl9UT1VJTlQxNihjaGFyMSwgY2hhcjIpKQor
I2RlZmluZSBDT01QQVJFXzJVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAgICgo
KHVpbnQzMl90KikoYWRkcmVzcykpWzBdID09IFVDSEFSUEFJUl9UT1VJTlQzMihjaGFyMSwgY2hh
cjIpKQogCiAjaWYgQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM0KGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAgICgoKHVpbnQ2NF90Kiko
YWRkcmVzcykpWzBdID09IENIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNo
YXI0KSkKKyNkZWZpbmUgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFy
MywgY2hhcjQpIFxcCisgICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFVQURf
VE9VSU5UMzIoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRV
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKCgodWlu
dDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gVUNIQVJRVUFEX1RPVUlOVDY0KGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0KSkKIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKIAotI2RlZmluZSBDT01QQVJF
X0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAotICAg
IChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV9D
SEFSQUNURVJTMigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJF
XzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoQ09N
UEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiBDT01QQVJFXzJDSEFSUygoYWRk
cmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJFXzRVQ0hBUlMoYWRkcmVz
cywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMlVDSEFSUygoYWRkcmVzcykgKyAyLCBj
aGFyMywgY2hhcjQpKQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKIAogI2VuZGlmIC8vIENQVShO
RUVEU19BTElHTkVEX0FDQ0VTUykKIAotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMzKGFkZHJl
c3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRk
cmVzcywgY2hhcjEsIGNoYXIyKSAmJiAoKGFkZHJlc3MpWzJdID09IChjaGFyMykpKQotI2RlZmlu
ZSBDT01QQVJFX0NIQVJBQ1RFUlM1KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0
LCBjaGFyNSkgXFwKLSAgICAoQ09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9PSAoY2hhcjUpKSkKLSNkZWZpbmUg
Q09NUEFSRV9DSEFSQUNURVJTNihhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwg
Y2hhcjUsIGNoYXI2KSBcXAotICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MgKyA0
LCBjaGFyNSwgY2hhcjYpKQotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM3KGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAotICAgIChD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAm
JiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyAzLCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBj
aGFyNykpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzgoYWRkcmVzcywgY2hhcjEsIGNoYXIy
LCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcsIGNoYXI4KSBcXAotICAgIChDT01Q
QVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFy
OCkpCisjZGVmaW5lIENPTVBBUkVfM0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMp
IFxcCisgICAgKENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChhZGRy
ZXNzKVsyXSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV8zVUNIQVJTKGFkZHJlc3MsIGNo
YXIxLCBjaGFyMiwgY2hhcjMpIFxcCisgICAgKENPTVBBUkVfMlVDSEFSUyhhZGRyZXNzLCBjaGFy
MSwgY2hhcjIpICYmICgoYWRkcmVzcylbMl0gPT0gKGNoYXIzKSkpCisjZGVmaW5lIENPTVBBUkVf
NUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSkgXFwKKyAg
ICAoQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYm
ICgoYWRkcmVzcylbNF0gPT0gKGNoYXI1KSkpCisjZGVmaW5lIENPTVBBUkVfNVVDSEFSUyhhZGRy
ZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUpIFxcCisgICAgKENPTVBBUkVf
NFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNz
KVs0XSA9PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFSRV82Q0hBUlMoYWRkcmVzcywgY2hhcjEs
IGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAoQ09NUEFSRV80Q0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfMkNIQVJT
KGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYpKQorI2RlZmluZSBDT01QQVJFXzZVQ0hBUlMoYWRk
cmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNikgXFwKKyAgICAo
Q09NUEFSRV80VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBD
T01QQVJFXzJVQ0hBUlMoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENPTVBB
UkVfN0NIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hh
cjYsIGNoYXI3KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIs
IGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV80Q0hBUlMoYWRkcmVzcyArIDMsIGNoYXI0LCBjaGFy
NSwgY2hhcjYsIGNoYXI3KSkKKyNkZWZpbmUgQ09NUEFSRV83VUNIQVJTKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSBcXAorICAgIChDT01Q
QVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBB
UkVfNFVDSEFSUyhhZGRyZXNzICsgMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQorI2Rl
ZmluZSBDT01QQVJFXzhDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwg
Y2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCisgICAgKENPTVBBUkVfNENIQVJTKGFkZHJl
c3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFXzRDSEFSUyhhZGRyZXNz
ICsgNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpKQorI2RlZmluZSBDT01QQVJFXzhVQ0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hh
cjcsIGNoYXI4KSBcXAorICAgIChDT01QQVJFXzRVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIy
LCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzICsgNCwgY2hhcjUsIGNo
YXI2LCBjaGFyNywgY2hhcjgpKQogIiIiKQogCiB0cmllLnByaW50QXNDKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVw
YXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdlIGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAg
ICAgICAgICAvLyB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFy
c2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCksIHBy
b2dyYW1Tb3VyY2UubGVuZ3RoKCksIExpdGVyYWxQYXJzZXI6Ok5vblN0cmljdEpTT04pOworICAg
ICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291cmNl
LmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9u
U3RyaWN0SlNPTik7CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVw
YXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9i
amVjdDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5j
cHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwxNyArMjI2LDIwIEBAIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCB0eXBlc09mQVNDSUkKIC8qIDEyNyAtIERlbGV0ZSAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJbnZhbGlkLAogfTsKIAotTGV4ZXI6OkxleGVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorTGV4ZXI8VD46OkxleGVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKICAgICA6IG1faXNSZXBhcnNpbmcoZmFsc2UpCiAgICAgLCBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKIH0KIAotTGV4ZXI6On5MZXhlcigpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0xleGVyPFQ+Ojp+TGV4ZXIoKQogewogfQotICAgIAotVVN0cmluZyBMZXhl
cjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitVU3Ry
aW5nIExleGVyPFQ+OjpnZXRJbnZhbGlkQ2hhck1lc3NhZ2UoKQogewogICAgIHN3aXRjaCAobV9j
dXJyZW50KSB7CiAgICAgY2FzZSAwOgpAQCAtMjU4LDI2ICsyNjEsMzUgQEAgVVN0cmluZyBMZXhl
cjo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKCkKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgY29u
c3QgVUNoYXIqIExleGVyOjpjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQUxXQVlTX0lOTElORSBjb25zdCBUKiBMZXhlcjxUPjo6Y3VycmVudENoYXJhY3Rl
cigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY29kZSA8PSBtX2NvZGVFbmQpOwogICAgIHJldHVy
biBtX2NvZGU7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IExleGVyOjpjdXJyZW50T2Zmc2V0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcigpIC0gbV9jb2RlU3RhcnQ7Ci19
Ci0KLXZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJB
cmVuYSogYXJlbmEpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnNldENv
ZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJBcmVuYSogYXJlbmEpCiB7CiAgICAg
bV9hcmVuYSA9ICZhcmVuYS0+aWRlbnRpZmllckFyZW5hKCk7Ci0KKyAgICAKICAgICBtX2xpbmVO
dW1iZXIgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CiAgICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAg
ICBtX2xhc3RUb2tlbiA9IC0xOworICAgIAorICAgIGNvbnN0IFQqIGRhdGE7CisgICAgY29uc3Qg
U3RyaW5nSW1wbCogc291cmNlU3RyaW5nID0gc291cmNlLnByb3ZpZGVyKCktPnN0cmluZ0RhdGEo
KTsKIAotICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKTsK
KyAgICBpZiAoc291cmNlU3RyaW5nKSB7CisgICAgICAgIGlmIChzb3VyY2VTdHJpbmctPmlzOEJp
dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IHNpemVvZihMQ2hhcikpOwor
ICAgICAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHNvdXJjZVN0cmlu
Zy0+Y2hhcmFjdGVyczgoKSk7CisgICAgICAgIH0gZWxzZSAgeworICAgICAgICAgICAgQVNTRVJU
KHNpemVvZihUKSA9PSBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIGRhdGEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFQqPihzb3VyY2VTdHJpbmctPmNoYXJhY3RlcnMxNigpKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZQorICAgICAgICBkYXRhID0gMDsKIAogICAgIG1fc291cmNlID0gJnNv
dXJjZTsKICAgICBtX2NvZGVTdGFydCA9IGRhdGE7CkBAIC0yODYsMTAgKzI5OCwxMCBAQCB2b2lk
IExleGVyOjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHNvCiAgICAgbV9lcnJvciA9IGZhbHNl
OwogICAgIG1fYXRMaW5lU3RhcnQgPSB0cnVlOwogICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gVVN0
cmluZygpOwotCisgICAgCiAgICAgbV9idWZmZXI4LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5p
dGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CiAgICAgbV9idWZmZXIxNi5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KChtX2NvZGVFbmQgLSBtX2NvZGUpIC8gMik7Ci0KKyAgICAKICAgICBpZiAoTElLRUxZ
KG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7CiAgICAg
ZWxzZQpAQCAtMjk3LDcgKzMwOSw4IEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNl
Q29kZSYgc28KICAgICBBU1NFUlQoY3VycmVudE9mZnNldCgpID09IHNvdXJjZS5zdGFydE9mZnNl
dCgpKTsKIH0KIAotdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgTGV4ZXI6OlNoaWZ0VHlwZSBz
aG91bGRCb3VuZHNDaGVjaz4gQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjppbnRlcm5hbFNoaWZ0
KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwgU2hp
ZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46Omlu
dGVybmFsU2hpZnQoKQogewogICAgIGlmIChzaG91bGRCb3VuZHNDaGVjayA9PSBEb0JvdW5kc0No
ZWNrKSB7CiAgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVuY2UKQEAgLTMx
MiwyMCArMzI1LDI4IEBAIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQsIExleGVyOjpTaGlmdFQK
ICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6c2hpZnQoKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnNoaWZ0KCkKIHsKLSAg
ICBpbnRlcm5hbFNoaWZ0PDEsIERvQm91bmRzQ2hlY2s+KCk7CisgICAgLy8gRmFzdGVyIHRoYW4g
YW4gaWYtZWxzZSBzZXF1ZW5jZQorICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gLTEpOworICAgIG1f
Y3VycmVudCA9IC0xOworICAgIG1fY29kZSsrOworICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9j
b2RlRW5kKSkKKyAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsKIH0KIAotQUxXQVlTX0lOTElO
RSBpbnQgTGV4ZXI6OnBlZWsoaW50IG9mZnNldCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxX
QVlTX0lOTElORSBpbnQgTGV4ZXI8VD46OnBlZWsoaW50IG9mZnNldCkKIHsKICAgICAvLyBPbmx5
IHVzZSBpZiBuZWNlc3NhcnkKICAgICBBU1NFUlQob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPCA1KTsK
LSAgICBjb25zdCBVQ2hhciogY29kZSA9IG1fY29kZSArIG9mZnNldDsKKyAgICBjb25zdCBUKiBj
b2RlID0gbV9jb2RlICsgb2Zmc2V0OwogICAgIHJldHVybiAoY29kZSA8IG1fY29kZUVuZCkgPyAq
Y29kZSA6IC0xOwogfQogCi1pbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbnQgTGV4ZXI8VD46OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQogewog
ICAgIGludCBjaGFyMSA9IHBlZWsoMSk7CiAgICAgaW50IGNoYXIyID0gcGVlaygyKTsKQEAgLTM0
Miw3ICszNjMsOCBAQCBpbnQgTGV4ZXI6OmdldFVuaWNvZGVDaGFyYWN0ZXIoKQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdExpbmVUZXJtaW5hdG9yKCkKIHsK
ICAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKTsKIApAQCAtMzU2LDcgKzM3
OCw4IEBAIHZvaWQgTGV4ZXI6OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQogICAgICsrbV9saW5lTnVt
YmVyOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omxhc3RUb2tlbldhc1Jlc3RyS2V5
d29yZCgpIGNvbnN0Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBM
ZXhlcjxUPjo6bGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9sYXN0VG9rZW4gPT0gQ09OVElOVUUgfHwgbV9sYXN0VG9rZW4gPT0gQlJFQUsgfHwgbV9sYXN0
VG9rZW4gPT0gUkVUVVJOIHx8IG1fbGFzdFRva2VuID09IFRIUk9XOwogfQpAQCAtNDExLDM2ICs0
MzQsMTI4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbmdsZUVzY2FwZShpbnQgYykKICAgICB9CiB9
CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQ4KGludCBjKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkOChpbnQgYykKIHsKICAgICBBU1NFUlQo
YyA+PSAwKTsKICAgICBBU1NFUlQoYyA8PSAweEZGKTsKLSAgICBtX2J1ZmZlcjguYXBwZW5kKHN0
YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICBtX2J1ZmZlcjguYXBwZW5kKHN0YXRpY19jYXN0PExD
aGFyPihjKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgTGV4ZXI8
VD46OmFwcGVuZDgoY29uc3QgVCogcCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTog
Q2hhbmdlIHRocmVlIG9jY3VycmFuY2VzIG9mIG1fYnVmZmVyMTYgdG8gbV9idWZmZXI4IGFuZAor
ICAgIC8vIFVDaGFyIHRvIExDaGFyIHdoZW4gOCBiaXQgc3RyaW5ncyBhcmUgdHVybmVkIG9uLgor
ICAgIHNpemVfdCBjdXJyZW50U2l6ZSA9IG1fYnVmZmVyMTYuc2l6ZSgpOworICAgIG1fYnVmZmVy
MTYuZ3JvdyhjdXJyZW50U2l6ZSArIGxlbmd0aCk7CisgICAgVUNoYXIqIHJhd0J1ZmZlciA9IG1f
YnVmZmVyMTYuZGF0YSgpICsgY3VycmVudFNpemU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFQgYyA9IHBbaV07CisgICAgICAgIEFTU0VSVChj
ID49IDApOworICAgICAgICBBU1NFUlQoYyA8PSAweEZGKTsKKyAgICAgICAgcmF3QnVmZmVyW2ld
ID0gYzsKKyAgICB9CiB9CiAKLWlubGluZSB2b2lkIExleGVyOjpyZWNvcmQxNihVQ2hhciBjKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6YXBwZW5kMTYoY29u
c3QgTENoYXIqIHAsIHNpemVfdCBsZW5ndGgpCit7CisgICAgc2l6ZV90IGN1cnJlbnRTaXplID0g
bV9idWZmZXIxNi5zaXplKCk7CisgICAgbV9idWZmZXIxNi5ncm93KGN1cnJlbnRTaXplICsgbGVu
Z3RoKTsKKyAgICBVQ2hhciogcmF3QnVmZmVyID0gbV9idWZmZXIxNi5kYXRhKCkgKyBjdXJyZW50
U2l6ZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAg
IHJhd0J1ZmZlcltpXSA9IHBbaV07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5l
IHZvaWQgTGV4ZXI8VD46OnJlY29yZDE2KFQgYykKIHsKICAgICBtX2J1ZmZlcjE2LmFwcGVuZChj
KTsKIH0KIAotaW5saW5lIHZvaWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3JkMTYoaW50IGMpCiB7CiAgICAg
QVNTRVJUKGMgPj0gMCk7CiAgICAgQVNTRVJUKGMgPD0gVVNIUlRfTUFYKTsKLSAgICByZWNvcmQx
NihVQ2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYykpKTsKKyAgICBtX2J1ZmZlcjE2
LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOwogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpwYXJz
ZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwgYm9v
bCBzdHJpY3RNb2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9vbCBzaG91
bGRDcmVhdGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+Ojpw
YXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgdW5zaWduZWQgbGV4VHlwZSwg
Ym9vbCBzdHJpY3RNb2RlKQogeworICAgIC8vIEZJWE1FOiBDaGFuZ2UgcmVjb3JkMTYgYW5kIG1f
YnVmZmVyMTYgdG8gcmVjb3JkOCBhbmQgbV9idWZmZXI4LCBhbmQgc2l6ZW9mKFVDaGFyKSB0bwor
ICAgIC8vIHNpemVvZihMQ2hhcikgYmVsb3cgd2hlbiA4IGJpdCBzdHJpbmdzIGFyZSB0dXJuZWQg
b24uCisKICAgICBjb25zdCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2Rl
OwotICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleFR5cGUgJiBJ
Z25vcmVSZXNlcnZlZFdvcmRzKSkgeworICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVu
Z3RoKSAmJiAhKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdvcmRzKSkgewogICAgICAgICBK
U1Rva2VuVHlwZSBrZXl3b3JkID0gcGFyc2VLZXl3b3JkPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+
KHRva2VuRGF0YSk7CiAgICAgICAgIGlmIChrZXl3b3JkICE9IElERU5UKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoKCFzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB8fCB0b2tlbkRhdGEtPmlkZW50KTsK
ICAgICAgICAgICAgIHJldHVybiBrZXl3b3JkID09IFJFU0VSVkVEX0lGX1NUUklDVCAmJiAhc3Ry
aWN0TW9kZSA/IElERU5UIDoga2V5d29yZDsKICAgICAgICAgfQogICAgIH0KLSAgICBjb25zdCBV
Q2hhciogaWRlbnRpZmllclN0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNpemVvZihUKSAhPSBzaXplb2YoVUNoYXIp
KSAvLyBGSVhNRTogQ2hhbmdlIHRvIHNpemVvZihMQ2hhcikKKyAgICAgICAgYnVmZmVyUmVxdWly
ZWQgPSB0cnVlOworCisgICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpCisgICAgICAg
IHNoaWZ0KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAnXFwnKSkgewor
ICAgICAgICBzZXRPZmZzZXRGcm9tQ2hhck9mZnNldChpZGVudGlmaWVyU3RhcnQpOworICAgICAg
ICBpZiAoYnVmZmVyUmVxdWlyZWQpCisgICAgICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsg
Ly8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgcmV0dXJuIHBhcnNlSWRlbnRp
ZmllclNsb3dDYXNlPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+KHRva2VuRGF0YSwgbGV4VHlwZSwg
c3RyaWN0TW9kZSk7CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwor
ICAgIAorICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB7CisgICAgICAgIGlmICghYnVm
ZmVyUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIGludCBpZGVudGlmaWVyTGVuZ3RoID0gY3VycmVu
dENoYXJhY3RlcigpIC0gaWRlbnRpZmllclN0YXJ0OworICAgICAgICAgICAgaWRlbnQgPSBtYWtl
SWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBjdXJyZW50Q2hhcmFj
dGVyKCkpCisgICAgICAgICAgICAgICAgYXBwZW5kMTYoaWRlbnRpZmllclN0YXJ0LCBjdXJyZW50
Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIGFwcGVu
ZDgKKyAgICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCks
IG1fYnVmZmVyMTYuc2l6ZSgpKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAg
ICAgfQorCisgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVudDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CisKKyAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwor
CisgICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3Jl
UmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7CisgICAgICAgICAg
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0S2V5
d29yZCgqaWRlbnQpOworICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tlbkxl
bmd0aCkgfHwgIWVudHJ5KTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIElERU5UOworICAgICAgICAgICAgSlNUb2tlblR5cGUgdG9rZW4gPSBzdGF0aWNf
Y2FzdDxKU1Rva2VuVHlwZT4oZW50cnktPmxleGVyVmFsdWUoKSk7CisgICAgICAgICAgICByZXR1
cm4gKHRva2VuICE9IFJFU0VSVkVEX0lGX1NUUklDVCkgfHwgc3RyaWN0TW9kZSA/IHRva2VuIDog
SURFTlQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElERU5UOworICAgIH0KKworICAgIGlm
IChidWZmZXJSZXF1aXJlZCkKKyAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7IC8vIEZJWE1F
OiBDaGFuZ2UgdG8gbV9idWZmZXI4CisKKyAgICByZXR1cm4gSURFTlQ7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gSlNU
b2tlblR5cGUgTGV4ZXI8VD46OnBhcnNlSWRlbnRpZmllclNsb3dDYXNlKEpTVG9rZW5EYXRhKiB0
b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBjb25z
dCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2RlOworICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDY0LDMxICs1NzksMzAg
QEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgICAgICAgICAg
cmV0dXJuIEVSUk9SVE9LOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9idWZmZXIxNi5zaXplKCkg
PyAhaXNJZGVudFBhcnQoY2hhcmFjdGVyKSA6ICFpc0lkZW50U3RhcnQoY2hhcmFjdGVyKSkpCiAg
ICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7Ci0gICAgICAgIGlmICAoc2hvdWxkQ3JlYXRlSWRl
bnRpZmllcikKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpCiAgICAgICAgICAg
ICByZWNvcmQxNihjaGFyYWN0ZXIpOwogICAgICAgICBpZGVudGlmaWVyU3RhcnQgPSBjdXJyZW50
Q2hhcmFjdGVyKCk7CiAgICAgfQotICAgIAorCiAgICAgaW50IGlkZW50aWZpZXJMZW5ndGg7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwogICAgIGlmIChzaG91bGRDcmVhdGVJZGVu
dGlmaWVyKSB7Ci0gICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQpCisgICAgICAgIGlmICghYnVm
ZmVyUmVxdWlyZWQpIHsKICAgICAgICAgICAgIGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50Q2hh
cmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7Ci0gICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgp
OworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBj
dXJyZW50Q2hhcmFjdGVyKCkpCiAgICAgICAgICAgICAgICAgbV9idWZmZXIxNi5hcHBlbmQoaWRl
bnRpZmllclN0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOwotICAg
ICAgICAgICAgaWRlbnRpZmllclN0YXJ0ID0gbV9idWZmZXIxNi5kYXRhKCk7Ci0gICAgICAgICAg
ICBpZGVudGlmaWVyTGVuZ3RoID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgICAgICAgICBpZGVu
dCA9IG1ha2VJZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJT
dGFydCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVu
dDsKICAgICB9IGVsc2UKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CiAKICAgICBtX2Rl
bGltaXRlZCA9IGZhbHNlOwogCi0gICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShs
ZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgaWYgKExJS0VMWSghYnVmZmVy
UmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAgICAg
ICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVyKTsKICAgICAgICAgLy8gS2V5d29yZHMg
bXVzdCBub3QgYmUgcmVjb2duaXplZCBpZiB0aGVyZSB3YXMgYW4gXHVYWFhYIGluIHRoZSBpZGVu
dGlmaWVyLgogICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHsKQEAgLTUw
NiwxMiArNjIwLDgzIEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEK
ICAgICByZXR1cm4gSURFTlQ7CiB9CiAKLXRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5n
cz4gQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9r
ZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRl
IDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojpw
YXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCiB7Cisg
ICAgLy8gRklYTUU6IENoYW5nZSByZWNvcmQxNiBhbmQgbV9idWZmZXIxNiB0byByZWNvcmQ4IGFu
ZCBtX2J1ZmZlcjggYmVsb3cgd2hlbgorICAgIC8vIDggYml0IHN0cmluZ3MgYXJlIHR1cm5lZCBv
bi4KKyAgICBpbnQgc3RhcnRpbmdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgaW50IHN0
YXJ0aW5nTGluZU51bWJlciA9IGxpbmVOdW1iZXIoKTsKICAgICBpbnQgc3RyaW5nUXVvdGVDaGFy
YWN0ZXIgPSBtX2N1cnJlbnQ7CiAgICAgc2hpZnQoKTsKIAotICAgIGNvbnN0IFVDaGFyKiBzdHJp
bmdTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBjb25zdCBUKiBzdHJpbmdTdGFydCA9
IGN1cnJlbnRDaGFyYWN0ZXIoKTsKKworICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gc3RyaW5nUXVv
dGVDaGFyYWN0ZXIpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKChtX2N1cnJlbnQgPT0gJ1xcJykp
KSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nU3RhcnQgIT0gY3VycmVudENoYXJhY3RlcigpICYm
IHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0
LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7CisgICAgICAgICAgICBzaGlmdCgp
OworCisgICAgICAgICAgICBpbnQgZXNjYXBlID0gc2luZ2xlRXNjYXBlKG1fY3VycmVudCk7CisK
KyAgICAgICAgICAgIC8vIE1vc3QgY29tbW9uIGVzY2FwZSBzZXF1ZW5jZXMgZmlyc3QKKyAgICAg
ICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRTdHJp
bmdzKQorICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOyAvLyBGSVhNRTogQ2hh
bmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChVTkxJS0VMWShpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkpKQorICAgICAgICAg
ICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fY3Vy
cmVudCA9PSAneCcpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAg
IGlmIChpc0FTQ0lJSGV4RGlnaXQobV9jdXJyZW50KSAmJiBpc0FTQ0lJSGV4RGlnaXQocGVlaygx
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHByZXYgPSBtX2N1cnJlbnQ7CisgICAgICAg
ICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWls
ZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0SGV4KHBy
ZXYsIG1fY3VycmVudCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAg
ICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEJ1aWxk
U3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoJ3gnKTsgLy8gRklYTUU6IENo
YW5nZSB0byByZWNvcmQ4CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNl
dE9mZnNldChzdGFydGluZ09mZnNldCk7CisgICAgICAgICAgICAgICAgc2V0TGluZU51bWJlcihz
dGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDAp
OyAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZVN0cmluZ1Nsb3dDYXNlPHNob3VsZEJ1aWxkU3RyaW5ncz4odG9rZW5EYXRhLCBzdHJpY3RN
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZ1N0YXJ0ID0gY3VycmVudENo
YXJhY3RlcigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoVU5MSUtFTFkoKChtX2N1cnJlbnQgPiAweGZmKSB8fCAobV9jdXJyZW50IDwgMHhlKSkpKSB7
CisgICAgICAgICAgICBzZXRPZmZzZXQoc3RhcnRpbmdPZmZzZXQpOworICAgICAgICAgICAgc2V0
TGluZU51bWJlcihzdGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAgICAgbV9idWZmZXIxNi5y
ZXNpemUoMCk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgICAgICByZXR1
cm4gcGFyc2VTdHJpbmdTbG93Q2FzZTxzaG91bGRCdWlsZFN0cmluZ3M+KHRva2VuRGF0YSwgc3Ry
aWN0TW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBzaGlmdCgpOworICAgIH0KKworICAgIGlm
IChjdXJyZW50Q2hhcmFjdGVyKCkgIT0gc3RyaW5nU3RhcnQgJiYgc2hvdWxkQnVpbGRTdHJpbmdz
KQorICAgICAgICBhcHBlbmQ4KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJp
bmdTdGFydCk7CisgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgLy8gRklYTUU6
IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJZGVu
dGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7CisgICAgZWxzZQor
ICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKKworICAgIC8vIEZJWE1FOiBDaGFuZ2UgdG8g
bV9idWZmZXI4CisgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJp
bmdzPiBib29sIExleGVyPFQ+OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKEpTVG9rZW5EYXRhKiB0b2tl
bkRhdGEsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBpbnQgc3RyaW5nUXVvdGVDaGFyYWN0ZXIg
PSBtX2N1cnJlbnQ7CisgICAgc2hpZnQoKTsKKworICAgIGNvbnN0IFQqIHN0cmluZ1N0YXJ0ID0g
Y3VycmVudENoYXJhY3RlcigpOwogCiAgICAgd2hpbGUgKG1fY3VycmVudCAhPSBzdHJpbmdRdW90
ZUNoYXJhY3RlcikgewogICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50ID09ICdcXCcpKSB7
CkBAIC01MjMsOCArNzA4LDggQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBB
TFdBWQogCiAgICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiBlc2NhcGUgc2VxdWVuY2VzIGZpcnN0
CiAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgIGlmIChzaG91bGRC
dWlsZFN0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihlc2NhcGUpOworICAg
ICAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAg
IHJlY29yZDE2KGVzY2FwZSk7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAgICAg
IH0gZWxzZSBpZiAoVU5MSUtFTFkoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpKSkKICAgICAg
ICAgICAgICAgICBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CkBAIC02MTgsNyArODAzLDggQEAgdGVt
cGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWQogICAgIHJldHVybiB0cnVlOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6OnBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFs
dWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxUPjo6
cGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IG1v
c3QgaGV4YWRlY2ltYWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3QgaGV4
VmFsdWUgPSAwOwpAQCAtNjU3LDE0ICs4NDMsMTUgQEAgQUxXQVlTX0lOTElORSB2b2lkIExleGVy
OjpwYXJzZUhleChkb3VibAogICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnRPdmVyZmxvdyhtX2J1
ZmZlcjguZGF0YSgpLCBtX2J1ZmZlcjguc2l6ZSgpLCAxNik7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjo6cGFyc2VPY3RhbChkb3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46OnBhcnNlT2N0YWwoZG91Ymxl
JiByZXR1cm5WYWx1ZSkKIHsKICAgICAvLyBPcHRpbWl6YXRpb246IG1vc3Qgb2N0YWwgdmFsdWVz
IGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3Qgb2N0YWxWYWx1ZSA9IDA7CiAgICAgaW50
IG1heGltdW1EaWdpdHMgPSA5OwogICAgIC8vIFRlbXBvcmFyeSBidWZmZXIgZm9yIHRoZSBkaWdp
dHMuIE1ha2VzIGVhc2llcgogICAgIC8vIHRvIHJlY29uc3RydWN0IHRoZSBpbnB1dCBjaGFyYWN0
ZXJzIHdoZW4gbmVlZGVkLgotICAgIGNoYXIgZGlnaXRzWzEwXTsKKyAgICBMQ2hhciBkaWdpdHNb
MTBdOwogCiAgICAgZG8gewogICAgICAgICBvY3RhbFZhbHVlID0gb2N0YWxWYWx1ZSAqIDggKyAo
bV9jdXJyZW50IC0gJzAnKTsKQEAgLTY5Myw3ICs4ODAsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
TGV4ZXI6OnBhcnNlT2N0YWwoZG91CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBMZXhlcjo6cGFyc2VEZWNpbWFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VEZWNpbWFs
KGRvdWJsZSYgcmV0dXJuVmFsdWUpCiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBtb3N0IGRlY2lt
YWwgdmFsdWVzIGZpdCBpbnRvIDQgYnl0ZXMuCiAgICAgdWludDMyX3QgZGVjaW1hbFZhbHVlID0g
MDsKQEAgLTcwNCw3ICs4OTIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlRGVj
aW1hbChkCiAgICAgICAgIGludCBtYXhpbXVtRGlnaXRzID0gOTsKICAgICAgICAgLy8gVGVtcG9y
YXJ5IGJ1ZmZlciBmb3IgdGhlIGRpZ2l0cy4gTWFrZXMgZWFzaWVyCiAgICAgICAgIC8vIHRvIHJl
Y29uc3RydWN0IHRoZSBpbnB1dCBjaGFyYWN0ZXJzIHdoZW4gbmVlZGVkLgotICAgICAgICBjaGFy
IGRpZ2l0c1sxMF07CisgICAgICAgIExDaGFyIGRpZ2l0c1sxMF07CiAKICAgICAgICAgZG8gewog
ICAgICAgICAgICAgZGVjaW1hbFZhbHVlID0gZGVjaW1hbFZhbHVlICogMTAgKyAobV9jdXJyZW50
IC0gJzAnKTsKQEAgLTczMCw3ICs5MTgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBh
cnNlRGVjaW1hbChkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
TGV4ZXI6OnBhcnNlTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQoKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnBhcnNlTnVtYmVyQWZ0ZXJEZWNpbWFs
UG9pbnQoKQogewogICAgIHJlY29yZDgoJy4nKTsKICAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KG1f
Y3VycmVudCkpIHsKQEAgLTczOSw3ICs5MjgsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6
OnBhcnNlTnVtYmVyQWZ0CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBh
cnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VOdW1iZXJBZnRlckV4cG9uZW50SW5k
aWNhdG9yKCkKIHsKICAgICByZWNvcmQ4KCdlJyk7CiAgICAgc2hpZnQoKTsKQEAgLTc1OCw3ICs5
NDgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlTnVtYmVyQWZ0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjo6cGFyc2VNdWx0aWxpbmVD
b21tZW50KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVy
PFQ+OjpwYXJzZU11bHRpbGluZUNvbW1lbnQoKQogewogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIHdoaWxlIChVTkxJS0VMWShtX2N1cnJlbnQgPT0gJyonKSkgewpAQCAtNzgwLDE2ICs5NzEs
MTggQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU11bHRpbGluZQogICAgIH0KIH0K
IAotYm9vbCBMZXhlcjo6bmV4dFRva2VuSXNDb2xvbigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2Jvb2wgTGV4ZXI8VD46Om5leHRUb2tlbklzQ29sb24oKQogewotICAgIGNvbnN0IFVDaGFyKiBj
b2RlID0gbV9jb2RlOworICAgIGNvbnN0IFQqIGNvZGUgPSBtX2NvZGU7CiAgICAgd2hpbGUgKGNv
ZGUgPCBtX2NvZGVFbmQgJiYgKGlzV2hpdGVTcGFjZSgqY29kZSkgfHwgaXNMaW5lVGVybWluYXRv
cigqY29kZSkpKQogICAgICAgICBjb2RlKys7Ci0gICAgICAgIAorICAgIAogICAgIHJldHVybiBj
b2RlIDwgbV9jb2RlRW5kICYmICpjb2RlID09ICc6JzsKIH0KIAotSlNUb2tlblR5cGUgTGV4ZXI6
OmxleChKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZvLCB1bnNp
Z25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0pT
VG9rZW5UeXBlIExleGVyPFQ+OjpsZXgoSlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgSlNUb2tlbklu
Zm8qIHRva2VuSW5mbywgdW5zaWduZWQgbGV4VHlwZSwgYm9vbCBzdHJpY3RNb2RlKQogewogICAg
IEFTU0VSVCghbV9lcnJvcik7CiAgICAgQVNTRVJUKG1fYnVmZmVyOC5pc0VtcHR5KCkpOwpAQCAt
MTA5NSw3ICsxMjg4LDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHN0cmluZyBmb3Ig
c3RydG9kLgogICAgICAgICAgICAgICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7Ci0gICAgICAg
ICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kKG1fYnVmZmVyOC5k
YXRhKCksIDApOworICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6
OnN0cnRvZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2J1ZmZlcjguZGF0YSgpKSwg
MCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0b2tlbiA9IE5VTUJFUjsKICAgICAgICAg
fQpAQCAtMTEwOSw3ICsxMzAyLDcgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAg
ICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGFyYWN0
ZXJRdW90ZToKLSAgICAgICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRTdHJpbmdzKSB7CisgICAg
ICAgIGlmIChsZXhUeXBlICYgTGV4RG9udEJ1aWxkU3RyaW5ncykgewogICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFwYXJzZVN0cmluZzxmYWxzZT4odG9rZW5EYXRhLCBzdHJpY3RNb2RlKSkpCiAg
ICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEx
MjQsNyArMTMxNyw3IEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgIEFTU0VS
VChpc0lkZW50U3RhcnQobV9jdXJyZW50KSk7CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBpbnRv
IENoYXJhY3RlckJhY2tTbGFzaC4KICAgICBjYXNlIENoYXJhY3RlckJhY2tTbGFzaDoKLSAgICAg
ICAgaWYgKGxleFR5cGUgJiBEb250QnVpbGRLZXl3b3JkcykKKyAgICAgICAgaWYgKGxleFR5cGUg
JiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgICAgIHRva2VuID0gcGFyc2VJZGVudGlm
aWVyPGZhbHNlPih0b2tlbkRhdGEsIGxleFR5cGUsIHN0cmljdE1vZGUpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlSWRlbnRpZmllcjx0cnVlPih0b2tlbkRhdGEsIGxl
eFR5cGUsIHN0cmljdE1vZGUpOwpAQCAtMTE3OCw3ICsxMzcxLDggQEAgcmV0dXJuRXJyb3I6CiAg
ICAgcmV0dXJuIEVSUk9SVE9LOwogfQogCi1ib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0IElk
ZW50aWZpZXIqJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyKiYgZmxhZ3MsIFVDaGFyIHBhdHRl
cm5QcmVmaXgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgTGV4ZXI8VD46OnNjYW5SZWdF
eHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIqJiBmbGFncywg
VUNoYXIgcGF0dGVyblByZWZpeCkKIHsKICAgICBBU1NFUlQobV9idWZmZXIxNi5pc0VtcHR5KCkp
OwogCkBAIC0xMjM5LDcgKzE0MzMsOCBAQCBib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0IElk
ZW50aWZpZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGV4ZXI6OnNraXBSZWdFeHAo
KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+Ojpza2lwUmVnRXhwKCkKIHsK
ICAgICBib29sIGxhc3RXYXNFc2NhcGUgPSBmYWxzZTsKICAgICBib29sIGluQnJhY2tldHMgPSBm
YWxzZTsKQEAgLTEyNzksMTEgKzE0NzQsMTIgQEAgYm9vbCBMZXhlcjo6c2tpcFJlZ0V4cCgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGV4ZXI6OmNsZWFyKCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgordm9pZCBMZXhlcjxUPjo6Y2xlYXIoKQogewogICAgIG1fYXJlbmEgPSAwOwogCi0g
ICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7CisgICAgVmVjdG9yPExDaGFyPiBuZXdCdWZmZXI4
OwogICAgIG1fYnVmZmVyOC5zd2FwKG5ld0J1ZmZlcjgpOwogCiAgICAgVmVjdG9yPFVDaGFyPiBu
ZXdCdWZmZXIxNjsKQEAgLTEyOTIsMTEgKzE0ODgsMTYgQEAgdm9pZCBMZXhlcjo6Y2xlYXIoKQog
ICAgIG1faXNSZXBhcnNpbmcgPSBmYWxzZTsKIH0KIAotU291cmNlQ29kZSBMZXhlcjo6c291cmNl
Q29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorU291cmNlQ29kZSBMZXhlcjxUPjo6c291cmNlQ29kZShpbnQgb3Bl
bkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKIHsKICAgICBBU1NFUlQobV9z
b3VyY2UtPnByb3ZpZGVyKCktPmRhdGEoKVtvcGVuQnJhY2VdID09ICd7Jyk7CiAgICAgQVNTRVJU
KG1fc291cmNlLT5wcm92aWRlcigpLT5kYXRhKClbY2xvc2VCcmFjZV0gPT0gJ30nKTsKICAgICBy
ZXR1cm4gU291cmNlQ29kZShtX3NvdXJjZS0+cHJvdmlkZXIoKSwgb3BlbkJyYWNlLCBjbG9zZUJy
YWNlICsgMSwgZmlyc3RMaW5lKTsKIH0KIAorLy8gSW5zdGFudGlhdGUgdGhlIHR3byBmbGF2b3Jz
IG9mIExleGVyIHdlIG5lZWQgaW5zdGVhZCBvZiBwdXR0aW5nIG1vc3Qgb2YgdGhpcyBmaWxlIGlu
IExleGVyLmgKK3RlbXBsYXRlIGNsYXNzIExleGVyPExDaGFyPjsKK3RlbXBsYXRlIGNsYXNzIExl
eGVyPFVDaGFyPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsMTcgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBIYXNoVGFibGUgbV9rZXl3b3JkVGFibGU7CiB9OwogCitlbnVtIExleFR5
cGUgeworICAgIExleElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAKKyAgICBMZXhEb250QnVpbGRT
dHJpbmdzID0gMiwKKyAgICBMZXhEb250QnVpbGRLZXl3b3JkcyA9IDQKK307CisKK2VudW0gU2hp
ZnRUeXBlIHsgRG9Cb3VuZHNDaGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9OworCiBjbGFzcyBSZWdF
eHA7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgTGV4ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKExleGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTgy
LDEyICs5MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUmVwYXJzaW5nKCkgeyBtX2lzUmVw
YXJzaW5nID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNSZXBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBt
X2lzUmVwYXJzaW5nOyB9CiAKLSAgICAvLyBGdW5jdGlvbnMgZm9yIHRoZSBwYXJzZXIgaXRzZWxm
LgotICAgIGVudW0gTGV4VHlwZSB7Ci0gICAgICAgIElnbm9yZVJlc2VydmVkV29yZHMgPSAxLCAK
LSAgICAgICAgRG9udEJ1aWxkU3RyaW5ncyA9IDIsCi0gICAgICAgIERvbnRCdWlsZEtleXdvcmRz
ID0gNAotICAgIH07CiAgICAgSlNUb2tlblR5cGUgbGV4KEpTVG9rZW5EYXRhKiwgSlNUb2tlbklu
Zm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICBib29sIG5leHRUb2tlbklzQ29s
b24oKTsKICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsg
fQpAQCAtMTAyLDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNhd0Vycm9yKCkgY29uc3Qg
eyByZXR1cm4gbV9lcnJvcjsgfQogICAgIFVTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9sZXhFcnJvck1lc3NhZ2U7IH0KICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgaW50
IGN1cnJlbnRPZmZzZXQoKSB7IHJldHVybiBtX2NvZGUgLSBtX2NvZGVTdGFydDsgfQogICAgIHZv
aWQgc2V0T2Zmc2V0KGludCBvZmZzZXQpCiAgICAgewogICAgICAgICBtX2Vycm9yID0gMDsKQEAg
LTEyNSwxMyArMTI3LDEyIEBAIHB1YmxpYzoKICAgICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVu
dGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkluZm8qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RN
b2RlKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwotCiAgICAg
dm9pZCByZWNvcmQ4KGludCk7CisgICAgdm9pZCBhcHBlbmQ4KGNvbnN0IFQqLCBzaXplX3QpOwog
ICAgIHZvaWQgcmVjb3JkMTYoaW50KTsKLSAgICB2b2lkIHJlY29yZDE2KFVDaGFyKTsKLQotICAg
IHZvaWQgY29weUNvZGVXaXRob3V0Qk9NcygpOworICAgIHZvaWQgcmVjb3JkMTYoVCk7CisgICAg
dm9pZCBhcHBlbmQxNihjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmQxNihj
b25zdCBVQ2hhciogcCwgc2l6ZV90IGxlbmd0aCkgeyBtX2J1ZmZlcjE2LmFwcGVuZChwLCBsZW5n
dGgpOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2hpZnQoKTsKICAgICBBTFdBWVNfSU5M
SU5FIGludCBwZWVrKGludCBvZmZzZXQpOwpAQCAtMTM5LDE4ICsxNDAsMjEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKIAogICAgIFVTdHJpbmcgZ2V0SW52YWxp
ZENoYXJNZXNzYWdlKCk7Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlcigpIGNvbnN0OwotICAgIEFMV0FZU19JTkxJTkUgaW50IGN1cnJlbnRPZmZzZXQoKSBj
b25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQqIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25z
dDsKKyAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T2Zmc2V0
RnJvbUNoYXJPZmZzZXQoY29uc3QgVCogY2hhck9mZnNldCkgeyBzZXRPZmZzZXQoY2hhck9mZnNl
dCAtIG1fY29kZVN0YXJ0KTsgfQogCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVy
KiBtYWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7
CiAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBtYWtlSWRlbnRpZmllcihjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAKICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgbGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3Q7CiAKLSAgICBlbnVtIFNoaWZ0
VHlwZSB7IERvQm91bmRzQ2hlY2ssIERvTm90Qm91bmRzQ2hlY2sgfTsKICAgICB0ZW1wbGF0ZSA8
aW50IHNoaWZ0QW1vdW50LCBTaGlmdFR5cGUgc2hvdWxkQm91bmRzQ2hlY2s+IHZvaWQgaW50ZXJu
YWxTaGlmdCgpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFM
V0FZU19JTkxJTkUgSlNUb2tlblR5cGUgcGFyc2VLZXl3b3JkKEpTVG9rZW5EYXRhKik7CiAgICAg
dGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRJZGVudGlmaWVycz4gQUxXQVlTX0lOTElORSBKU1Rv
a2VuVHlwZSBwYXJzZUlkZW50aWZpZXIoSlNUb2tlbkRhdGEqLCB1bnNpZ25lZCwgYm9vbCBzdHJp
Y3RNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBKU1Rv
a2VuVHlwZSBwYXJzZUlkZW50aWZpZXJTbG93Q2FzZShKU1Rva2VuRGF0YSosIHVuc2lnbmVkLCBi
b29sIHN0cmljdE1vZGUpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4g
QUxXQVlTX0lOTElORSBib29sIHBhcnNlU3RyaW5nKEpTVG9rZW5EYXRhKiwgYm9vbCBzdHJpY3RN
b2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IGJvb2wgcGFyc2VT
dHJpbmdTbG93Q2FzZShKU1Rva2VuRGF0YSosIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBwYXJzZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpOwogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBwYXJzZURlY2ltYWwoZG91YmxlJiByZXR1cm5WYWx1ZSk7CkBAIC0xNjMsMTYg
KzE2NywxNiBAQCBwcml2YXRlOgogICAgIGludCBtX2xpbmVOdW1iZXI7CiAgICAgaW50IG1fbGFz
dExpbmVOdW1iZXI7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI4OworICAgIFZlY3RvcjxM
Q2hhcj4gbV9idWZmZXI4OwogICAgIFZlY3RvcjxVQ2hhcj4gbV9idWZmZXIxNjsKICAgICBib29s
IG1fdGVybWluYXRvcjsKICAgICBib29sIG1fZGVsaW1pdGVkOyAvLyBlbmNvdW50ZXJlZCBkZWxp
bWl0ZXIgbGlrZSAiJyIgYW5kICJ9IiBvbiBsYXN0IHJ1bgogICAgIGludCBtX2xhc3RUb2tlbjsK
IAogICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwotICAgIGNvbnN0IFVDaGFyKiBtX2Nv
ZGU7Ci0gICAgY29uc3QgVUNoYXIqIG1fY29kZVN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBtX2Nv
ZGVFbmQ7CisgICAgY29uc3QgVCogbV9jb2RlOworICAgIGNvbnN0IFQqIG1fY29kZVN0YXJ0Owor
ICAgIGNvbnN0IFQqIG1fY29kZUVuZDsKICAgICBib29sIG1faXNSZXBhcnNpbmc7CiAgICAgYm9v
bCBtX2F0TGluZVN0YXJ0OwogICAgIGJvb2wgbV9lcnJvcjsKQEAgLTE4NiwzNyArMTkwLDQ5IEBA
IHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiB9OwogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgTGV4ZXI6OmlzV2hpdGVTcGFjZShpbnQgY2gpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNXaGl0ZVNwYWNlKGludCBjaCkK
IHsKICAgICByZXR1cm4gaXNBU0NJSShjaCkgPyAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwg
Y2ggPT0gMHhCIHx8IGNoID09IDB4QykgOiAoV1RGOjpVbmljb2RlOjppc1NlcGFyYXRvclNwYWNl
KGNoKSB8fCBjaCA9PSAweEZFRkYpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6Omlz
TGluZVRlcm1pbmF0b3IoaW50IGNoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5M
SU5FIGJvb2wgTGV4ZXI8VD46OmlzTGluZVRlcm1pbmF0b3IoaW50IGNoKQogewogICAgIHJldHVy
biBjaCA9PSAnXHInIHx8IGNoID09ICdcbicgfHwgKGNoICYgfjEpID09IDB4MjAyODsKIH0KIAot
aW5saW5lIHVuc2lnbmVkIGNoYXIgTGV4ZXI6OmNvbnZlcnRIZXgoaW50IGMxLCBpbnQgYzIpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB1bnNpZ25lZCBjaGFyIExleGVyPFQ+Ojpjb252
ZXJ0SGV4KGludCBjMSwgaW50IGMyKQogewogICAgIHJldHVybiAodG9BU0NJSUhleFZhbHVlKGMx
KSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShjMik7CiB9CiAKLWlubGluZSBVQ2hhciBMZXhlcjo6
Y29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitpbmxpbmUgVUNoYXIgTGV4ZXI8VD46OmNvbnZlcnRVbmljb2RlKGludCBj
MSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKIHsKICAgICByZXR1cm4gKGNvbnZlcnRIZXgoYzEs
IGMyKSA8PCA4KSB8IGNvbnZlcnRIZXgoYzMsIGM0KTsKIH0KIAotQUxXQVlTX0lOTElORSBjb25z
dCBJZGVudGlmaWVyKiBMZXhlcjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlk
ZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46
Om1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQog
ewogICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjps
ZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5JbmZvKiB0
b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhwZWN0
SWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZv
LCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCiB7Ci0gICAgQVNTRVJUKChsZXhU
eXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpOwotICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1f
Y29kZTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gc3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIGVu
ZCA9IG1fY29kZUVuZDsKKyAgICBBU1NFUlQoKGxleFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdv
cmRzKSk7CisgICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CisgICAgY29uc3QgVCogcHRyID0g
c3RhcnQ7CisgICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOwogICAgIGlmIChwdHIgPj0gZW5k
KSB7CiAgICAgICAgIEFTU0VSVChwdHIgPT0gZW5kKTsKICAgICAgICAgZ290byBzbG93Q2FzZTsK
QEAgLTI0MSw3ICsyNTcsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpsZXhF
eHBlCiAgICAgbV9jb2RlID0gcHRyOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBpZGVudGlmaWVyIGlm
IG5lZWRlZAotICAgIGlmIChsZXhUeXBlICYgRG9udEJ1aWxkS2V5d29yZHMpCisgICAgaWYgKGxl
eFR5cGUgJiBMZXhEb250QnVpbGRLZXl3b3JkcykKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9
IDA7CiAgICAgZWxzZQogICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gbWFrZUlkZW50aWZpZXIo
c3RhcnQsIHB0ciAtIHN0YXJ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFBhcnNlcjo6UGFy
c2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwKICAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkK
ICAgICAsIG1fc291cmNlRWxlbWVudHMoMCkKIHsKLSAgICBtX2xleGVyID0gbmV3IExleGVyKGds
b2JhbERhdGEpOworICAgIG1fbGV4ZXIgPSBuZXcgTGV4ZXI8VUNoYXI+KGdsb2JhbERhdGEpOwog
ICAgIG1fYXJlbmEgPSBtX2dsb2JhbERhdGEtPnBhcnNlckFyZW5hOwogICAgIG1fbGV4ZXItPnNl
dENvZGUoc291cmNlLCBtX2FyZW5hKTsKIApAQCAtMTE1OCw5ICsxMTU4LDkgQEAgdGVtcGxhdGUg
PGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZAogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAg
ICAgIGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5zZXQpKSkKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25v
cmVSZXNlcnZlZFdvcmRzKTsKKyAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleEln
bm9yZVJlc2VydmVkV29yZHMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlcjo6SWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250
QnVpbGRLZXl3b3Jkcyk7CisgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhJZ25v
cmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChtYXRjaChDT0xPTikpIHsKICAgICAgICAgICAgIG5leHQoKTsKQEAg
LTE0ODksNyArMTQ4OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICAgICAgY2FzZSBET1Q6IHsKICAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Np
b25Db3VudCsrOwogICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQo
KTsKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNlcnZl
ZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAgIG5l
eHRFeHBlY3RJZGVudGlmaWVyKExleElnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6
RG9udEJ1aWxkS2V5d29yZHMpOwogICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwogICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKG1fbGV4ZXItPmxhc3RMaW5l
TnVtYmVyKCksIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4
cHJlc3Npb25FbmQsIHRva2VuRW5kKCkpOwogICAgICAgICAgICAgbmV4dCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyMCw3
ICs5MjAsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgY29uc3QgSlNHbG9iYWxEYXRhKiBtX2ds
b2JhbERhdGE7CiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJl
bmEqIG1fYXJlbmE7Ci0gICAgTGV4ZXIqIG1fbGV4ZXI7CisgICAgTGV4ZXI8VUNoYXI+KiBtX2xl
eGVyOwogICAgIAogICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CiAgICAgYm9vbCBtX2Vycm9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkocmV2aXNp
b24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBjbGVhcigpOwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSosIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwg
ZG91YmxlIG51bWJlcik7CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9pZGVudGlmaWVycy5pc0VtcHR5KCk7IH0KQEAgLTY1LDcgKzY2LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEZpeGVkQXJyYXk8SWRlbnRpZmllciosIE1heGltdW1DYWNoYWJsZUNoYXJh
Y3Rlcj4gbV9yZWNlbnRJZGVudGlmaWVyczsKICAgICB9OwogCi0gICAgQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVu
dGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKICAgICB7CiAgICAg
ICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikgewogICAg
ICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dmlkZXItPmRhdGEoKSArIG1fc3RhcnRDaGFyOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2VuZENoYXIgLSBtX3N0YXJ0Q2hhcjsgfQogICAgICAgICAKLSAgICAgICAg
U291cmNlQ29kZSBzdWJFeHByZXNzaW9uKGludCwgaW50LCBpbnQpOworICAgICAgICBTb3VyY2VD
b2RlIHN1YkV4cHJlc3Npb24odW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwpAQCAtODgsOCAr
ODgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVybiBTb3VyY2VDb2Rl
KFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9u
KSwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSk7CiAgICAgfQotICAgIAotICAg
IGlubGluZSBTb3VyY2VDb2RlIFNvdXJjZUNvZGU6OnN1YkV4cHJlc3Npb24oaW50IG9wZW5CcmFj
ZSwgaW50IGNsb3NlQnJhY2UsIGludCBmaXJzdExpbmUpCisKKyAgICBpbmxpbmUgU291cmNlQ29k
ZSBTb3VyY2VDb2RlOjpzdWJFeHByZXNzaW9uKHVuc2lnbmVkIG9wZW5CcmFjZSwgdW5zaWduZWQg
Y2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChwcm92aWRl
cigpLT5kYXRhKClbb3BlbkJyYWNlXSA9PSAneycpOwogICAgICAgICBBU1NFUlQocHJvdmlkZXIo
KS0+ZGF0YSgpW2Nsb3NlQnJhY2VdID09ICd9Jyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJp
bmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nSW1wbCogc3RyaW5nRGF0YSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBpbnQg
bGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJs
KCkgeyByZXR1cm4gbV91cmw7IH0KQEAgLTkxLDYgKzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gbV9zb3VyY2Uuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhcnQsIGVu
ZCAtIHN0YXJ0KTsKICAgICAgICAgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5sZW5ndGgoKTsgfQogCiAgICAgcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJD
YWNoZS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U291cmNlUHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBTb3VyY2VQ
cm92aWRlckNhY2hlX2gKKyNkZWZpbmUgU291cmNlUHJvdmlkZXJDYWNoZV9oCisKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTQ2LDMg
KzQ5LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0KKworI2VuZGlmIC8vIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2Vy
LmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw4ICsxMTUsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25z
dCBib29sIE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBi
b29sIENhblVzZUZ1bmN0aW9uQ2FjaGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBEb250QnVpbGRLZXl3b3JkcyA9IExleGVyOjpEb250QnVpbGRLZXl3b3JkczsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgRG9udEJ1aWxkU3RyaW5ncyA9IExleGVyOjpEb250QnVpbGRTdHJp
bmdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRLZXl3b3JkcyA9IExleERv
bnRCdWlsZEtleXdvcmRzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJp
bmdzID0gTGV4RG9udEJ1aWxkU3RyaW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50
cygpIHsgcmV0dXJuIDE7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9k
ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
c3RhdGljIGlubGluZSB2b2lkIGluc2VydFNlbWljb2xvbklmTmVlZAogCiAgICAgZm9yIChzaXpl
X3QgaSA9IGZ1bmN0aW9uQm9keS5sZW5ndGgoKSAtIDI7IGkgPiAwOyAtLWkpIHsKICAgICAgICAg
VUNoYXIgY2ggPSBmdW5jdGlvbkJvZHlbaV07Ci0gICAgICAgIGlmICghTGV4ZXI6OmlzV2hpdGVT
cGFjZShjaCkgJiYgIUxleGVyOjppc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICBpZiAo
IUxleGVyPFVDaGFyPjo6aXNXaGl0ZVNwYWNlKGNoKSAmJiAhTGV4ZXI8VUNoYXI+Ojppc0xpbmVU
ZXJtaW5hdG9yKGNoKSkgewogICAgICAgICAgICAgaWYgKGNoICE9ICc7JyAmJiBjaCAhPSAnfScp
CiAgICAgICAgICAgICAgICAgZnVuY3Rpb25Cb2R5ID0gbWFrZVVTdHJpbmcoZnVuY3Rpb25Cb2R5
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKDAsIGkgKyAxKSwgIjsiLCBmdW5jdGlvbkJvZHkuc3Vic3Ry
aW5nU2hhcmluZ0ltcGwoaSArIDEsIGZ1bmN0aW9uQm9keS5sZW5ndGgoKSAtIChpICsgMSkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERh
dGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIHVzaW5nIFdURjo6VGhy
ZWFkU3BlY2lmaWM7CkBAIC00MywxOSArNDIsMTMgQEAgSWRlbnRpZmllclRhYmxlOjp+SWRlbnRp
ZmllclRhYmxlKCkKICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVy
ID0gbV90YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAoKml0ZXIp
LT5zZXRJc0lkZW50aWZpZXIoZmFsc2UpOwogfQorCiBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yLCBib29sPiBJZGVudGlmaWVyVGFibGU6OmFkZChTdHJpbmdJbXBsKiB2
YWx1ZSkKIHsKICAgICBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX3RhYmxlLmFkZCh2YWx1ZSk7CiAgICAgKCpyZXN1bHQuZmlyc3QpLT5z
ZXRJc0lkZW50aWZpZXIodHJ1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLXRlbXBsYXRlPHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1zdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yLCBib29sPiBJZGVudGlmaWVyVGFibGU6OmFkZChVIHZhbHVlKQotewotICAgIHN0ZDo6
cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFi
bGUuYWRkPFUsIFY+KHZhbHVlKTsKLSAgICAoKnJlc3VsdC5maXJzdCktPnNldElzSWRlbnRpZmll
cih0cnVlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBJZGVudGlmaWVyVGFibGUqIGNyZWF0
ZUlkZW50aWZpZXJUYWJsZSgpCiB7CkBAIC0xMjIsMzMgKzExNSw2IEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEUKICAgICByZXR1cm4gYWRkKCZleGVjLT5nbG9iYWxE
YXRhKCksIGMpOwogfQogCi1zdHJ1Y3QgVUNoYXJCdWZmZXIgewotICAgIGNvbnN0IFVDaGFyKiBz
OwotICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci19OwotCi1zdHJ1Y3QgSWRlbnRpZmllclVDaGFy
QnVmZmVyVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVUNoYXJC
dWZmZXImIGJ1ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVI
YXNoPFVDaGFyPihidWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
ZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24s
IGNvbnN0IFVDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICBV
Q2hhciogZDsKLSAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1JlZigpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpICE9IGJ1Zi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGRbaV0gPSBidWYuc1tp
XTsKLSAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24gPSByOyAKLSAg
ICB9Ci19OwotCiB1aW50MzJfdCBJZGVudGlmaWVyOjp0b1VJbnQzMihjb25zdCBVU3RyaW5nJiBz
dHJpbmcsIGJvb2wmIG9rKQogewogICAgIG9rID0gZmFsc2U7CkBAIC0xOTMsMjggKzE1OSw2IEBA
IHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNvbnN0IFVTdHIKICAgICByZXR1cm4gdmFs
dWU7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYg
KGxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzWzBdOwotICAgICAgICBpZiAoYyA8
PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gYWRkKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAo
YykpOwotICAgIH0KLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmVtcHR5KCk7Ci0gICAgVUNoYXJCdWZmZXIgYnVmID0ge3MsIGxlbmd0aH07IAotICAgIHBhaXI8
SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxE
YXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZDxVQ2hhckJ1ZmZlciwgSWRlbnRpZmllclVDaGFyQnVm
ZmVyVHJhbnNsYXRvcj4oYnVmKTsKLQotICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJh
bnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAgIC8vIFRoZSBib29sZWFuIGlu
IHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAgcmV0dXJuIGFkZFJlc3VsdC5z
ZWNvbmQgPyBhZG9wdFJlZigqYWRkUmVzdWx0LmZpcnN0KSA6ICphZGRSZXN1bHQuZmlyc3Q7Ci19
Ci0KLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGFkZCgmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzLCBsZW5ndGgpOwotfQotCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1w
bCogcikKIHsKICAgICBBU1NFUlQoIXItPmlzSWRlbnRpZmllcigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDk5MjA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAi
VGhyZWFkU3BlY2lmaWMuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1dU
RlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMzYsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJZGVu
dGlmaWVyKCkgeyB9CiAKICAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IGNoYXIqIHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMpKSB7IH0gLy8gT25seSB0byBiZSB1c2Vk
IHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMsIGxl
bmd0aCkpIHsgfQogICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1w
bCogcmVwKSA6IG1fc3RyaW5nKGFkZChleGVjLCByZXApKSB7IH0gCiAgICAgICAgIElkZW50aWZp
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChleGVj
LCBzLmltcGwoKSkpIHsgfQogCiAgICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzKSkgeyB9
IC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KKyAgICAgICAgSWRlbnRp
ZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3Ro
KSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRl
bnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVu
Z3RoKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAg
SWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cmluZ0ltcGwqIHJlcCkgOiBt
X3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcmVwKSkgeyB9IAogICAgICAgICBJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQo
Z2xvYmFsRGF0YSwgcy5pbXBsKCkpKSB7IH0KQEAgLTc3LDYgKzc4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBj
b25zdCBMQ2hhciopOwogICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nSW1wbCphLCBjb25zdCBjaGFyKmIpIHsgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH07CisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7
IH0KIApAQCAtODksOCArOTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikgeyByZXR1
cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBsKCk7IH0KICAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0
dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBVQ2hhciosIGludCBsZW5n
dGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoSlNHbG9iYWxE
YXRhKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKKy8vICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSosIGNv
bnN0IFQqLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBUKiwgaW50
IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsKIAogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBs
KiByKQogICAgICAgICB7CkBAIC0xMTcsNyArMTIwLDc0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShKU0dsb2Jh
bERhdGEqKTsKICAgICB9OworCisgICAgdGVtcGxhdGUgPD4gQUxXQVlTX0lOTElORSBib29sIElk
ZW50aWZpZXI6OmNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhMQ2hhcikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcgPT0gMHhmZik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDw+IEFMV0FZU19JTkxJTkUgYm9vbCBJ
ZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNoYXIgYykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBDaGFyQnVmZmVyIHsKKyAgICAg
ICAgY29uc3QgVCogczsKKyAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgICB9OwogICAg
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ2hhckJ1
ZmZlclRyYW5zbGF0b3IgeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFy
QnVmZmVyPFQ+JiBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVIYXNoPFQ+KGJ1Zi5zLCBidWYubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBDaGFy
QnVmZmVyPFQ+JiBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBJZGVudGlmaWVy
OjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IENoYXJCdWZm
ZXI8VD4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAgVCogZDsK
KyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKGJ1Zi5sZW5ndGgsIGQpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRbaV0gPSBidWYu
c1tpXTsKKyAgICAgICAgICAgIHItPnNldEhhc2goaGFzaCk7CisgICAgICAgICAgICBsb2NhdGlv
biA9IHI7IAorICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChs
ZW5ndGggPT0gMSkgeworICAgICAgICAgICAgVCBjID0gc1swXTsKKyAgICAgICAgICAgIGlmIChj
YW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFk
ZChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nUmVwKGMpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgQ2hhckJ1ZmZl
cjxUPiBidWYgPSB7cywgbGVuZ3RofTsgCisgICAgICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBs
Kj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFi
bGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4g
PihidWYpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFu
c2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCisgICAgICAgIC8vIFRoZSBib29sZWFu
IGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCisgICAgICAgIHJldHVybiBhZGRS
ZXN1bHQuc2Vjb25kID8gYWRvcHRSZWYoKmFkZFJlc3VsdC5maXJzdCkgOiAqYWRkUmVzdWx0LmZp
cnN0OworICAgIH0KKworI2lmIDAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBORVZF
Ul9JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
ZCgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzLCBsZW5ndGgpOworICAgIH0KKyNlbmRpZgorCiAgICAg
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlm
aWVyJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIGIpOwpA
QCAtMTUyLDcgKzIyMiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVy
biBXVEY6OmVxdWFsKHIsIHMpOwogICAgIH0KLSAgICAKKworICAgIGlubGluZSBib29sIElkZW50
aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgp
OworICAgIH0KKwogICAgIGlubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwqIHIsIGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAg
ICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgpOwpAQCAtMTc3LDYgKzI1MiwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4s
IGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+ID4s
IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CiAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHN0ZDo6cGFpcjxIYXNoU2V0PFN0cmlu
Z0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IElkZW50aWZpZXJUYWJsZTo6YWRkKFUgdmFsdWUpCisg
ICAgeworICAgICAgICBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX3RhYmxlLmFkZDxVLCBWPih2YWx1ZSk7CisgICAgICAgICgqcmVzdWx0
LmZpcnN0KS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBJZGVudGlmaWVyX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMs
IGMKICAgICAgICAgaWYgKGMgPT0gJyUnKSB7CiAgICAgICAgICAgICBpbnQgY2hhckxlbiA9IDA7
CiAgICAgICAgICAgICBpZiAoayA8PSBsZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChwWzFdKSAm
JiBpc0FTQ0lJSGV4RGlnaXQocFsyXSkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyIGIw
ID0gTGV4ZXI6OmNvbnZlcnRIZXgocFsxXSwgcFsyXSk7CisgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciBiMCA9IExleGVyPFVDaGFyPjo6Y29udmVydEhleChwWzFdLCBwWzJdKTsKICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgc2VxdWVuY2VMZW4gPSBVVEY4U2VxdWVuY2VMZW5ndGgoYjApOwog
ICAgICAgICAgICAgICAgIGlmIChzZXF1ZW5jZUxlbiAhPSAwICYmIGsgPD0gbGVuIC0gc2VxdWVu
Y2VMZW4gKiAzKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSBzZXF1ZW5jZUxlbiAq
IDM7CkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGMKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzZXF1ZW5jZUxl
bjsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcSA9IHAgKyBp
ICogMzsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxWzBdID09ICclJyAmJiBpc0FTQ0lJ
SGV4RGlnaXQocVsxXSkgJiYgaXNBU0NJSUhleERpZ2l0KHFbMl0pKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcXVlbmNlW2ldID0gTGV4ZXI6OmNvbnZlcnRIZXgocVsxXSwgcVsyXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBMZXhlcjxVQ2hhcj46
OmNvbnZlcnRIZXgocVsxXSwgcVsyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyTGVuID0gMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgSlNWYWx1ZSBk
ZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc0FT
Q0lJSGV4RGlnaXQocFsyXSkgJiYgaXNBU0NJSUhleERpZ2l0KHBbM10pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQocFs0XSkgJiYgaXNBU0NJSUhleERpZ2l0KHBb
NV0pKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYXJMZW4gPSA2OwotICAgICAgICAgICAgICAg
ICAgICB1ID0gTGV4ZXI6OmNvbnZlcnRVbmljb2RlKHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOwor
ICAgICAgICAgICAgICAgICAgICB1ID0gTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0VW5pY29kZShwWzJd
LCBwWzNdLCBwWzRdLCBwWzVdKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoY2hhckxlbiAmJiAodSA9PSAwIHx8IHUgPj0gMTI4IHx8ICFzdHJjaHIo
ZG9Ob3RVbmVzY2FwZSwgdSkpKSB7CkBAIC0xNzMsMTIgKzE3MywxMiBAQCBzdGF0aWMgaW50IHBh
cnNlRGlnaXQodW5zaWduZWQgc2hvcnQgYywgCiAgICAgcmV0dXJuIGRpZ2l0OwogfQogCi1kb3Vi
bGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBjaGFyKiBzLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgp
Citkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCwgaW50
IHJhZGl4KQogewogICAgIGRvdWJsZSBudW1iZXIgPSAwLjA7CiAgICAgZG91YmxlIHJhZGl4TXVs
dGlwbGllciA9IDEuMDsKIAotICAgIGZvciAoY29uc3QgY2hhciogcCA9IHMgKyBsZW5ndGggLSAx
OyBwID49IHM7IHAtLSkgeworICAgIGZvciAoY29uc3QgTENoYXIqIHAgPSBzICsgbGVuZ3RoIC0g
MTsgcCA+PSBzOyBwLS0pIHsKICAgICAgICAgaWYgKHJhZGl4TXVsdGlwbGllciA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpIHsKICAgICAgICAgICAgIGlmICgqcCAh
PSAnMCcpIHsKICAgICAgICAgICAgICAgICBudW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmluZmluaXR5KCk7CkBAIC01NzgsMTIgKzU3OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVCiAgICAgICAgIFVDaGFyIHU7CiAgICAgICAgIGlmIChj
WzBdID09ICclJyAmJiBrIDw9IGxlbiAtIDYgJiYgY1sxXSA9PSAndScpIHsKICAgICAgICAgICAg
IGlmIChpc0FTQ0lJSGV4RGlnaXQoY1syXSkgJiYgaXNBU0NJSUhleERpZ2l0KGNbM10pICYmIGlz
QVNDSUlIZXhEaWdpdChjWzRdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY1s1XSkpIHsKLSAgICAgICAg
ICAgICAgICB1ID0gTGV4ZXI6OmNvbnZlcnRVbmljb2RlKGNbMl0sIGNbM10sIGNbNF0sIGNbNV0p
OworICAgICAgICAgICAgICAgIHUgPSBMZXhlcjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKGNbMl0s
IGNbM10sIGNbNF0sIGNbNV0pOwogICAgICAgICAgICAgICAgIGMgPSAmdTsKICAgICAgICAgICAg
ICAgICBrICs9IDU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY1swXSA9PSAn
JScgJiYgayA8PSBsZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChjWzFdKSAmJiBpc0FTQ0lJSGV4
RGlnaXQoY1syXSkpIHsKLSAgICAgICAgICAgIHUgPSBVQ2hhcihMZXhlcjo6Y29udmVydEhleChj
WzFdLCBjWzJdKSk7CisgICAgICAgICAgICB1ID0gVUNoYXIoTGV4ZXI8VUNoYXI+Ojpjb252ZXJ0
SGV4KGNbMV0sIGNbMl0pKTsKICAgICAgICAgICAgIGMgPSAmdTsKICAgICAgICAgICAgIGsgKz0g
MjsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
Kik7CiAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5k
ID0gOTAwNzE5OTI1NDc0MDk5Mi4wOwotICAgIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0
IGNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOworICAgIGRvdWJsZSBwYXJzZUludE92ZXJm
bG93KGNvbnN0IExDaGFyKiwgaW50IGxlbmd0aCwgaW50IHJhZGl4KTsKKyAgICBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGlu
dCByYWRpeCkgeyByZXR1cm4gcGFyc2VJbnRPdmVyZmxvdyhyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4ocyksIGxlbmd0aCwgcmFkaXgpOyB9CiAgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZs
b3coY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOwogICAgIGJvb2wgaXNTdHJX
aGl0ZVNwYWNlKFVDaGFyKTsKICAgICBkb3VibGUganNUb051bWJlcihjb25zdCBVU3RyaW5nJiBz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJz
ZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAsMTcgQEAgYm9v
bCBMaXRlcmFsUGFyc2VyOjp0cnlKU09OUFBhcnNlKFZlY3RvcgogICAgIGRvIHsKICAgICAgICAg
VmVjdG9yPEpTT05QUGF0aEVudHJ5PiBwYXRoOwogICAgICAgICAvLyBVbmd1YXJkZWQgbmV4dCB0
byBzdGFydCBvZmYgdGhlIGxleGVyCi0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZp
ZXIobV9leGVjLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOworICAgICAgICBJZGVu
dGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAgICAgSlNPTlBQYXRoRW50cnkgZW50cnk7CiAg
ICAgICAgIGlmIChuYW1lID09IG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnZh
cktleXdvcmQpIHsKICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tJZGVudGlm
aWVyKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGVudHJ5Lm1f
dHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURlY2xhcmU7Ci0gICAgICAgICAgICBlbnRyeS5tX3Bh
dGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKG1fZXhlYywgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5z
dGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnN0YXJ0KTsKKyAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXIo
Jm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwog
ICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlUeXBlRG90OwotICAgICAgICAgICAg
ZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJ
ZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5z
dGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnN0YXJ0KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAgICAgICAgfQogICAg
ICAgICBpZiAobV9leGVjLT5nbG9iYWxEYXRhKCkua2V5d29yZHMtPmlzS2V5d29yZChlbnRyeS5t
X3BhdGhFbnRyeU5hbWUpKQpAQCAtODUsNyArODUsNyBAQCBib29sIExpdGVyYWxQYXJzZXI6OnRy
eUpTT05QUGFyc2UoVmVjdG9yCiAgICAgICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQ
YXRoRW50cnlUeXBlRG90OwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBU
b2tJZGVudGlmaWVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIG1fbGV4
ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICAgICAgZW50cnkubV9wYXRo
RW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIFRva0xQYXJlbjogewpAQCAtMzQwLDcgKzM0MCw3IEBAIHRl
bXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJzZXJNb2RlIG1vZGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVG9rRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
SlNDOjpMZXhlcjo6Y29udmVydFVuaWNvZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clszXSwg
bV9wdHJbNF0pKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoSlNDOjpMZXhl
cjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKG1fcHRyWzFdLCBtX3B0clsyXSwgbV9wdHJbM10sIG1f
cHRyWzRdKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fcHRyICs9IDU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdJbXBsLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsNyBAQCB0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpCiAvLyBMYW5kaW5nIHRoZSBmaWxl
IG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBmb2xsb3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5n
ZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBKU0Mgewogc3RydWN0IElkZW50aWZpZXJDU3Ry
aW5nVHJhbnNsYXRvcjsKLXN0cnVjdCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Ci1z
dHJ1Y3QgSWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwogfQogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTYzLDggKzYyLDggQEAgdHlwZWRlZiBib29sICgqSXNXaGl0ZVNwYWNlRnVu
Y3Rpb25QdHIpKAogY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U3RyaW5nSW1wbCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIGZyaWVuZCBzdHJ1Y3Qg
SlNDOjpJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I7Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6
OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsKLSAgICBmcmllbmQgc3RydWN0IEpTQzo6
SWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKKyAgICBmcmllbmQgc3RydWN0IEpTQzo6
SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPExDaGFyPjsKKyAgICBmcmllbmQgc3RydWN0
IEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPFVDaGFyPjsKICAgICBmcmllbmQg
c3RydWN0IFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhh
c2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFu
ZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MjMy
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTEtMTEtMDMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisK
KyAgICAgICAgVG93YXJkcyA4IEJpdCBTdHJpbmdzOiBUZW1wbGF0aXplIEpTQzo6TGV4ZXIgY2xh
c3MgYnkgY2hhcmFjdGVyIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxMzMxCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorICAgICAgICBDaGFuZ2VkIElkZW50aWZpZXIoKSBjb25zdHJ1
Y3RvciB0byB1c2UgSlNHbG9iYWxEYXRhKi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSByZWZhY3RvcmVkIFNvdXJjZVByb3Zp
ZGVyIGNsYXNzIGFuZCBzdWItY2xhc3Nlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0NhY2hl
ZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHRT
b3VyY2VQcm92aWRlcjo6c3RyaW5nRGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RyaW5n
U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpzdHJpbmdEYXRhKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHA6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKToKKwogMjAxMS0xMS0w
MyAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWRE
QiByZXN1bHQgb2YgZGVsZXRpbmcgYSByZWNvcmQgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0
U291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBKU0M6OlVTdHJpbmcg
Z2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCB7IHJldHVybiBKU0M6OlVTdHJpbmco
bV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBlbmQgLSBzdGFy
dCk7IH0KICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
ZFNjcmlwdC0+c2NyaXB0KCkuY2hhcmFjdGVycygpOyB9CisgICAgICAgIGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0KCku
aW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNj
cmlwdC0+c2NyaXB0KCkubGVuZ3RoKCk7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0KCk7IH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCShy
ZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJj
ZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIEpTQzo6VVN0cmluZyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0IHsgcmV0dXJuIEpTQzo6VVN0cmluZyhtX3NvdXJjZS5jaGFyYWN0ZXJzKCkgKyBz
dGFydCwgZW5kIC0gc3RhcnQpOyB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2UuY2hhcmFjdGVycygpOyB9CisgICAgICAgIGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5pbXBsKCk7IH0KICAgICAg
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9CiAgICAg
ICAgIGNvbnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KIApA
QCAtNjEsNiArNjIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgewogICAgICAgICByZXR1
cm4gSlNDOjpTb3VyY2VDb2RlKFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1
cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpKTsK
ICAgICB9CisgICAgCisgICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gOTkyMDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2MCw3ICs5NjAsNyBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRl
CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhlYywg
cm9vdC5nZXQoKSwgaS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAg
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgICAgICByZXQtPm1ldGhv
ZFRhYmxlKCktPnB1dChyZXQsIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgcmVpbnRlcnByZXRfY2Fz
dF9wdHI8Y29uc3QgVUNoYXIgKj4ocy5jb25zdERhdGEoKSksIHMubGVuZ3RoKCkpLCB2YWwsIHNs
b3QpOworICAgICAgICAgICAgICAgIHJldC0+bWV0aG9kVGFibGUoKS0+cHV0KHJldCwgZXhlYywg
SWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25z
dCBVQ2hhciAqPihzLmNvbnN0RGF0YSgpKSwgcy5sZW5ndGgoKSksIHZhbCwgc2xvdCk7CiAgICAg
ICAgICAgICAgICAgLy8gIyMjIGVycm9yIGNhc2U/CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICArK2k7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNDQpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTEx
LTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFRvd2Fy
ZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5IGNoYXJhY3Rl
ciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MTMzMQorCisgICAgICAgIENoYW5nZWQgSWRlbnRpZmllcigpIGNvbnN0cnVjdG9yIHRvIHVzZSBK
U0dsb2JhbERhdGEqLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6OmFkZFRvSmF2
YVNjcmlwdFdpbmRvd09iamVjdCk6CisKIDIwMTEtMTEtMDMgIFJhZmFlbCBCcmFuZGFvICA8cmFm
YWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBGaXggdHN0X1FEZWNsYXJhdGl2ZVdl
YlZpZXc6OmJhc2ljUHJvcGVydGllcygpIGFuZCBoaXN0b3J5TmF2KCkgYXV0b3Rlc3RzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg4LDcgKzY4
OCw3IEBAIHZvaWQgUVdlYkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmoKICAgICAgICAg
ICAgIEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2Uob2JqZWN0LCByb290
LCBvd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogCiAgICAgSlNDOjpQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICB3aW5kb3ctPm1ldGhvZFRhYmxlKCktPnB1dCh3aW5kb3cs
IGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBV
Q2hhcio+KG5hbWUuY29uc3REYXRhKCkpLCBuYW1lLmxlbmd0aCgpKSwgcnVudGltZU9iamVjdCwg
c2xvdCk7CisgICAgd2luZG93LT5tZXRob2RUYWJsZSgpLT5wdXQod2luZG93LCBleGVjLCBKU0M6
OklkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29u
c3QgVUNoYXIqPihuYW1lLmNvbnN0RGF0YSgpKSwgbmFtZS5sZW5ndGgoKSksIHJ1bnRpbWVPYmpl
Y3QsIHNsb3QpOwogI2VsaWYgVVNFKFY4KQogICAgIFFTY3JpcHRFbmdpbmUqIGVuZ2luZSA9IGQt
PmZyYW1lLT5zY3JpcHQoKS0+cXRTY3JpcHRFbmdpbmUoKTsKICAgICBpZiAoIWVuZ2luZSkK
</data>
<flag name="review"
          id="111987"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113734</attachid>
            <date>2011-11-04 16:47:01 -0700</date>
            <delta_ts>2011-11-07 08:43:09 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>71331-9.patch</filename>
            <type>text/plain</type>
            <size>77274</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkzMzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE0IEBA
CisyMDExLTExLTA0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5
IGNoYXJhY3RlciB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMzMQorCisgICAgICAgIENoYW5nZSB0aGUgTGV4ZXIgY2xhc3MgdG8gYmUgYSB0
ZW1wbGF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgIHR5cGUgb2YgdGhl
IHNvdXJjZS4gIEluIHRoZSBwcm9jZXNzIHVwZGF0ZWQgdGhlIHBhcnNlSWRlbnRpZmllcigpCisg
ICAgICAgIGFuZCBwYXJzZVN0cmluZygpIG1ldGhvZHMgdG8gY3JlYXRlIDggYml0IHN0cmluZ3Mg
d2hlcmUgcG9zc2libGUuCisgICAgICAgIEFsc28gYWRkZWQgc29tZSBoZWxwZXIgbWV0aG9kcyBm
b3IgYWNjdW11bGF0aW5nIHRlbXBvcmFyeSBzdHJpbmcKKyAgICAgICAgZGF0YSBpbiB0aGUgOCBh
bmQgMTYgYml0IHZlY3RvcnMuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgU291cmNlUHJvdmlkZXI6
OmRhdGEoKSB2aXJ0dWFsIG1ldGhvZCB0byByZXR1cm4gYQorICAgICAgICBTdHJpbmdJbXBsKiBp
bnN0ZWFkIG9mIGEgVUNoYXIqLgorCisgICAgICAgIFVwZGF0ZWQgdGhlIEtleXdvcmRMb29rdXAg
Z2VuZXJhdG9yIHRvIGNyZWF0ZSBjb2RlIHRvIG1hdGNoIGtleXdvcmRzCisgICAgICAgIGZvciBi
b3RoIDggYW5kIDE2IGJpdCBzb3VyY2Ugc3RyaW5ncy4KKworICAgICAgICBEdWUgdG8gYSBjb21w
aWxlciBidWcgKDxyZGFyOi8vcHJvYmxlbS8xMDE5NDI5NT4pIG1vdmVkIGVudW0KKyAgICAgICAg
ZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBMZXhlciBjbGFzcyBkZWNsYXJhdGlvbi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHBhcnNlci9MZXhl
ci5jcHA6CisgICAgICAgIChKU0M6Ojo6TGV4ZXIpOgorICAgICAgICAoSlNDOjo6On5MZXhlcik6
CisgICAgICAgIChKU0M6Ojo6Z2V0SW52YWxpZENoYXJNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6
OjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6OjpzZXRDb2RlKToKKyAgICAgICAg
KEpTQzo6OjppbnRlcm5hbFNoaWZ0KToKKyAgICAgICAgKEpTQzo6OjpzaGlmdCk6CisgICAgICAg
IChKU0M6Ojo6cGVlayk6CisgICAgICAgIChKU0M6Ojo6Z2V0VW5pY29kZUNoYXJhY3Rlcik6Cisg
ICAgICAgIChKU0M6Ojo6c2hpZnRMaW5lVGVybWluYXRvcik6CisgICAgICAgIChKU0M6Ojo6bGFz
dFRva2VuV2FzUmVzdHJLZXl3b3JkKToKKyAgICAgICAgKEpTQzo6OjpyZWNvcmQ4KToKKyAgICAg
ICAgKEpTQzo6OjphcHBlbmQ4KToKKyAgICAgICAgKEpTQzo6OjphcHBlbmQxNik6CisgICAgICAg
IChKU0M6Ojo6cmVjb3JkMTYpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRpZmllcik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VJZGVudGlmaWVyU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmluZ1Nsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZUhleCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VPY3RhbCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VEZWNpbWFsKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJl
ckFmdGVyRGVjaW1hbFBvaW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU51bWJlckFmdGVyRXhw
b25lbnRJbmRpY2F0b3IpOgorICAgICAgICAoSlNDOjo6OnBhcnNlTXVsdGlsaW5lQ29tbWVudCk6
CisgICAgICAgIChKU0M6Ojo6bmV4dFRva2VuSXNDb2xvbik6CisgICAgICAgIChKU0M6Ojo6bGV4
KToKKyAgICAgICAgKEpTQzo6OjpzY2FuUmVnRXhwKToKKyAgICAgICAgKEpTQzo6Ojpza2lwUmVn
RXhwKToKKyAgICAgICAgKEpTQzo6OjpjbGVhcik6CisgICAgICAgIChKU0M6Ojo6c291cmNlQ29k
ZSk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjphcHBl
bmQxNik6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OnNldE9mZnNldEZyb21DaGFyT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Ojppc1do
aXRlU3BhY2UpOgorICAgICAgICAoSlNDOjo6OmlzTGluZVRlcm1pbmF0b3IpOgorICAgICAgICAo
SlNDOjo6OmNvbnZlcnRIZXgpOgorICAgICAgICAoSlNDOjo6OmNvbnZlcnRVbmljb2RlKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bWFrZUlkZW50
aWZpZXJMQ2hhckZyb21VQ2hhcik6CisgICAgICAgIChKU0M6Ojo6bGV4RXhwZWN0SWRlbnRpZmll
cik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjo6
UGFyc2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZVByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6UGFyc2VyOjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAgICAgICAgKEpTQzo6
SWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZp
ZXJBcmVuYTo6bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcik6CisgICAgICAgICogcGFyc2Vy
L1NvdXJjZUNvZGUuaDoKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZTo6c3ViRXhwcmVzc2lvbik6
CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlVTdHJp
bmdTb3VyY2VQcm92aWRlcjo6c3RyaW5nRGF0YSk6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVBy
b3ZpZGVyQ2FjaGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppbnNlcnRT
ZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllclRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6SWRlbnRp
ZmllckxDaGFyRnJvbVVDaGFyVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpJZGVu
dGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoSlND
OjpJZGVudGlmaWVyOjphZGQ4KToKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIuaDoKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllcjo6SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50
aWZpZXI6OmNyZWF0ZUxDaGFyRnJvbVVDaGFyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6
Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckNo
YXJCdWZmZXJUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckNoYXJC
dWZmZXJUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJDaGFyQnVm
ZmVyVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRk
KToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpJZGVu
dGlmaWVyVGFibGU6OmFkZCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmRlY29kZSk6CisgICAgICAgIChKU0M6OnBhcnNlSW50
T3ZlcmZsb3cpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jVW5lc2NhcGUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6cGFyc2VJ
bnRPdmVyZmxvdyk6CisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQYXJzZSk6CisgICAgICAgIChKU0M6Okxp
dGVyYWxQYXJzZXI6OkxleGVyOjpsZXhTdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0ltcGwuaDoKKwogMjAxMS0xMS0wNCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIERlLXZpcnR1YWxpemUgSlNPYmplY3Q6Omhhc0luc3RhbmNlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5w
eQkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1
cEdlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIFRy
aWU6CiAgICAgICAgIHNlbGYua2V5cyA9IFsodHJpZS5wcmVmaXgsIHRyaWUpIGZvciB0cmllIGlu
IHNvcnRlZChzZWxmLmtleXMudmFsdWVzKCksIGtleT1vcGVyYXRvci5hdHRyZ2V0dGVyKCd3ZWln
aHQnKSwgcmV2ZXJzZT1UcnVlKV0KICAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHQKIAotICAg
IGRlZiBwcmludFN1YlRyZWVBc0Moc2VsZiwgaW5kZW50KToKKyAgICBkZWYgcHJpbnRTdWJUcmVl
QXNDKHNlbGYsIHR5cGVOYW1lLCBpbmRlbnQpOgogICAgICAgICBzdHIgPSBtYWtlUGFkZGluZyhp
bmRlbnQpCiAKICAgICAgICAgaWYgc2VsZi52YWx1ZSAhPSBOb25lOgpAQCAtMTQ2LDEzICsxNDYs
MTMgQEAgY2xhc3MgVHJpZToKICAgICAgICAgICAgICAgICBiYXNlID0gImNvZGUiCiAgICAgICAg
ICAgICAgICAgaWYgYmFzZUluZGV4ID4gMDoKICAgICAgICAgICAgICAgICAgICAgYmFzZSA9ICJj
b2RlICsgJWQiICUgYmFzZUluZGV4Ci0gICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9ICgiQ09N
UEFSRV9DSEFSQUNURVJTJWQoJXMsICIgJSAobGVuKHRlc3QpLCBiYXNlKSkgKyAiLCAiLmpvaW4o
dGVzdCkgKyAiKSIKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uID0gKCJDT01QQVJFXyVkJXNT
KCVzLCAiICUgKGxlbih0ZXN0KSwgdHlwZU5hbWUsIGJhc2UpKSArICIsICIuam9pbih0ZXN0KSAr
ICIpIgogICAgICAgICAgICAgaWYgaXRlbUNvdW50ID09IDA6CiAgICAgICAgICAgICAgICAgcHJp
bnQoc3RyICsgImlmICgiICsgY29tcGFyaXNvbiArICIpIHsiKQogICAgICAgICAgICAgZWxzZToK
ICAgICAgICAgICAgICAgICBwcmludChzdHIgKyAifSBlbHNlIGlmICgiICsgY29tcGFyaXNvbiAr
ICIpIHsiKQogCi0gICAgICAgICAgICB0cmllLnByaW50U3ViVHJlZUFzQyhpbmRlbnQgKyA0KQor
ICAgICAgICAgICAgdHJpZS5wcmludFN1YlRyZWVBc0ModHlwZU5hbWUsIGluZGVudCArIDQpCiAg
ICAgICAgICAgICBpdGVtQ291bnQgPSBpdGVtQ291bnQgKyAxCiAKICAgICAgICAgICAgIGlmIGl0
ZW1Db3VudCA9PSBsZW4oc2VsZi5rZXlzKToKQEAgLTE3MywxMiArMTczLDIzIEBAIGNsYXNzIFRy
aWU6CiAgICAgICAgICMgbWF4IGxlbmd0aCArIDEgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkg
Ym91bmRzIGNoZWNraW5nIGF0IGFsbAogICAgICAgICBwcmludCgic3RhdGljIGNvbnN0IGludCBt
YXhUb2tlbkxlbmd0aCA9ICVkOyIgJSAoc2VsZi5tYXhMZW5ndGgoKSArIDEpKQogICAgICAgICBw
cmludCgiIikKLSAgICAgICAgcHJpbnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50
aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6OnBhcnNlS2V5d29yZChKU1Rv
a2VuRGF0YSogZGF0YSkiKQorICAgICAgICBwcmludCgidGVtcGxhdGUgPD4iKQorICAgICAgICBw
cmludCgidGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElO
RSBKU1Rva2VuVHlwZSBMZXhlcjxVQ2hhcj46OnBhcnNlS2V5d29yZChKU1Rva2VuRGF0YSogZGF0
YSkiKQogICAgICAgICBwcmludCgieyIpCiAgICAgICAgIHByaW50KCIgICAgQVNTRVJUKG1fY29k
ZUVuZCAtIG1fY29kZSA+PSBtYXhUb2tlbkxlbmd0aCk7IikKICAgICAgICAgcHJpbnQoIiIpCiAg
ICAgICAgIHByaW50KCIgICAgY29uc3QgVUNoYXIqIGNvZGUgPSBtX2NvZGU7IikKLSAgICAgICAg
c2VsZi5wcmludFN1YlRyZWVBc0MoNCkKKyAgICAgICAgc2VsZi5wcmludFN1YlRyZWVBc0MoIlVD
SEFSIiwgNCkKKyAgICAgICAgcHJpbnQoIiAgICByZXR1cm4gSURFTlQ7IikKKyAgICAgICAgcHJp
bnQoIn0iKQorICAgICAgICBwcmludCgiIikKKyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDw+IikK
KyAgICAgICAgcHJpbnQoInRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFM
V0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8TENoYXI+OjpwYXJzZUtleXdvcmQoSlNUb2tl
bkRhdGEqIGRhdGEpIikKKyAgICAgICAgcHJpbnQoInsiKQorICAgICAgICBwcmludCgiICAgIEFT
U0VSVChtX2NvZGVFbmQgLSBtX2NvZGUgPj0gbWF4VG9rZW5MZW5ndGgpOyIpCisgICAgICAgIHBy
aW50KCIiKQorICAgICAgICBwcmludCgiICAgIGNvbnN0IExDaGFyKiBjb2RlID0gbV9jb2RlOyIp
CisgICAgICAgIHNlbGYucHJpbnRTdWJUcmVlQXNDKCJDSEFSIiwgNCkKICAgICAgICAgcHJpbnQo
IiAgICByZXR1cm4gSURFTlQ7IikKICAgICAgICAgcHJpbnQoIn0iKQogICAgICAgICBwcmludCgi
IikKQEAgLTE5NCw1NyArMjA1LDg1IEBAIHByaW50KCIvLyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRl
ZCBieSBLZXkKIHByaW50KCIiIgogI2lmIENQVShORUVEU19BTElHTkVEX0FDQ0VTUykKIAotI2Rl
ZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKKyNkZWZp
bmUgQ09NUEFSRV8yQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAgICgoKGFkZHJl
c3MpWzBdID09IGNoYXIxKSAmJiAoKGFkZHJlc3MpWzFdID09IGNoYXIyKSkKKyNkZWZpbmUgQ09N
UEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCisgICAg
KENPTVBBUkVfMkNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV8yQ0hBUlMo
KGFkZHJlc3MpICsgMiwgY2hhcjMsIGNoYXI0KSkKKyNkZWZpbmUgQ09NUEFSRV8yVUNIQVJTKGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMikgXFwKICAgICAoKChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYg
KChhZGRyZXNzKVsxXSA9PSBjaGFyMikpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRk
cmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFD
VEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKChhZGRy
ZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCisjZGVmaW5lIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNz
LCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoQ09NUEFSRV8yVUNIQVJTKGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV8yVUNIQVJTKChhZGRyZXNzKSArIDIsIGNo
YXIzLCBjaGFyNCkpCiAKICNlbHNlIC8vIENQVShORUVEU19BTElHTkVEX0FDQ0VTUykKIAogI2lm
IENQVShCSUdfRU5ESUFOKQogCi0jZGVmaW5lIENIQVJQQUlSX1RPVUlOVDMyKGEsIGIpIFxcCisj
ZGVmaW5lIENIQVJQQUlSX1RPVUlOVDE2KGEsIGIpIFxcCisgICAgKCgoKHVpbnQxNl90KShhKSkg
PDwgOCkgKyAodWludDE2X3QpKGIpKQorI2RlZmluZSBDSEFSUVVBRF9UT1VJTlQzMihhLCBiLCBj
LCBkKSBcXAorICAgICgoKCh1aW50MzJfdCkoQ0hBUlBBSVJfVE9VSU5UMTYoYSwgYikpKSA8PCAx
NikgKyBDSEFSUEFJUl9UT1VJTlQxNihjLCBkKSkKKyNkZWZpbmUgVUNIQVJQQUlSX1RPVUlOVDMy
KGEsIGIpIFxcCiAgICAgKCgoKHVpbnQzMl90KShhKSkgPDwgMTYpICsgKHVpbnQzMl90KShiKSkK
LSNkZWZpbmUgQ0hBUlFVQURfVE9VSU5UNjQoYSwgYiwgYywgZCkgXFwKLSAgICAoKCgodWludDY0
X3QpKENIQVJQQUlSX1RPVUlOVDMyKGEsIGIpKSkgPDwgMzIpICsgQ0hBUlBBSVJfVE9VSU5UMzIo
YywgZCkpCisjZGVmaW5lIFVDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSBcXAorICAgICgo
KCh1aW50NjRfdCkoVUNIQVJRVUFEX1RPVUlOVDY0KGEsIGIpKSkgPDwgMzIpICsgVUNIQVJQQUlS
X1RPVUlOVDMyKGMsIGQpKQogCiAjZWxzZSAvLyBDUFUoQklHX0VORElBTikKIAotI2RlZmluZSBD
SEFSUEFJUl9UT1VJTlQzMihhLCBiKSBcXAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQxNihhLCBi
KSBcXAorICAgICgoKCh1aW50MTZfdCkoYikpIDw8IDgpICsgKHVpbnQxNl90KShhKSkKKyNkZWZp
bmUgQ0hBUlFVQURfVE9VSU5UMzIoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDMyX3QpKENI
QVJQQUlSX1RPVUlOVDE2KGMsIGQpKSkgPDwgMTYpICsgQ0hBUlBBSVJfVE9VSU5UMTYoYSwgYikp
CisjZGVmaW5lIFVDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSBcXAogICAgICgoKCh1aW50MzJfdCko
YikpIDw8IDE2KSArICh1aW50MzJfdCkoYSkpCi0jZGVmaW5lIENIQVJRVUFEX1RPVUlOVDY0KGEs
IGIsIGMsIGQpIFxcCi0gICAgKCgoKHVpbnQ2NF90KShDSEFSUEFJUl9UT1VJTlQzMihjLCBkKSkp
IDw8IDMyKSArIENIQVJQQUlSX1RPVUlOVDMyKGEsIGIpKQorI2RlZmluZSBVQ0hBUlFVQURfVE9V
SU5UNjQoYSwgYiwgYywgZCkgXFwKKyAgICAoKCgodWludDY0X3QpKFVDSEFSUEFJUl9UT1VJTlQz
MihjLCBkKSkpIDw8IDMyKSArIFVDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSkKIAogI2VuZGlmIC8v
IENQVShCSUdfRU5ESUFOKQogCiAKLSNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNz
LCBjaGFyMSwgY2hhcjIpIFxcCi0gICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hB
UlBBSVJfVE9VSU5UMzIoY2hhcjEsIGNoYXIyKSkKKyNkZWZpbmUgQ09NUEFSRV8yQ0hBUlMoYWRk
cmVzcywgY2hhcjEsIGNoYXIyKSBcXAorICAgICgoKHVpbnQxNl90KikoYWRkcmVzcykpWzBdID09
IENIQVJQQUlSX1RPVUlOVDE2KGNoYXIxLCBjaGFyMikpCisjZGVmaW5lIENPTVBBUkVfMlVDSEFS
UyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFxcCisgICAgKCgodWludDMyX3QqKShhZGRyZXNzKSlb
MF0gPT0gVUNIQVJQQUlSX1RPVUlOVDMyKGNoYXIxLCBjaGFyMikpCiAKICNpZiBDUFUoWDg2XzY0
KQogCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBj
aGFyMywgY2hhcjQpIFxcCi0gICAgKCgodWludDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFV
QURfVE9VSU5UNjQoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQorI2RlZmluZSBDT01QQVJF
XzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoKCh1
aW50MzJfdCopKGFkZHJlc3MpKVswXSA9PSBDSEFSUVVBRF9UT1VJTlQzMihjaGFyMSwgY2hhcjIs
IGNoYXIzLCBjaGFyNCkpCisjZGVmaW5lIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwg
Y2hhcjIsIGNoYXIzLCBjaGFyNCkgXFwKKyAgICAoKCh1aW50NjRfdCopKGFkZHJlc3MpKVswXSA9
PSBVQ0hBUlFVQURfVE9VSU5UNjQoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQogCiAjZWxz
ZSAvLyBDUFUoWDg2XzY0KQogCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywg
Y2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIo
YWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMyKChhZGRyZXNzKSAr
IDIsIGNoYXIzLCBjaGFyNCkpCisjZGVmaW5lIENPTVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcXAorICAgIChDT01QQVJFXzJDSEFSUyhhZGRyZXNzLCBj
aGFyMSwgY2hhcjIpICYmIENPTVBBUkVfMkNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFy
NCkpCisjZGVmaW5lIENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIz
LCBjaGFyNCkgXFwKKyAgICAoQ09NUEFSRV8yVUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikg
JiYgQ09NUEFSRV8yVUNIQVJTKChhZGRyZXNzKSArIDIsIGNoYXIzLCBjaGFyNCkpCiAKICNlbmRp
ZiAvLyBDUFUoWDg2XzY0KQogCiAjZW5kaWYgLy8gQ1BVKE5FRURTX0FMSUdORURfQUNDRVNTKQog
Ci0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFy
MykgXFwKLSAgICAoQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYm
ICgoYWRkcmVzcylbMl0gPT0gKGNoYXIzKSkpCi0jZGVmaW5lIENPTVBBUkVfQ0hBUkFDVEVSUzUo
YWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1KSBcXAotICAgIChDT01Q
QVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiAo
KGFkZHJlc3MpWzRdID09IChjaGFyNSkpKQotI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM2KGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYpIFxcCi0gICAg
KENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQp
ICYmIENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCi0jZGVm
aW5lIENPTVBBUkVfQ0hBUkFDVEVSUzcoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hh
cjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRk
cmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfQ0hBUkFDVEVSUzQo
YWRkcmVzcyArIDMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3KSkKLSNkZWZpbmUgQ09NUEFS
RV9DSEFSQUNURVJTOChhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUs
IGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCi0gICAgKENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVz
cywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRk
cmVzcyArIDQsIGNoYXI1LCBjaGFyNiwgY2hhcjcsIGNoYXI4KSkKKyNkZWZpbmUgQ09NUEFSRV8z
Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMykgXFwKKyAgICAoQ09NUEFSRV8yQ0hB
UlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiAoKGFkZHJlc3MpWzJdID09IChjaGFyMykpKQor
I2RlZmluZSBDT01QQVJFXzNVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMykgXFwK
KyAgICAoQ09NUEFSRV8yVUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChhZGRyZXNz
KVsyXSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV81Q0hBUlMoYWRkcmVzcywgY2hhcjEs
IGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRy
ZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9PSAoY2hh
cjUpKSkKKyNkZWZpbmUgQ09NUEFSRV81VUNIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hh
cjMsIGNoYXI0LCBjaGFyNSkgXFwKKyAgICAoQ09NUEFSRV80VUNIQVJTKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiAoKGFkZHJlc3MpWzRdID09IChjaGFyNSkpKQorI2Rl
ZmluZSBDT01QQVJFXzZDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwg
Y2hhcjUsIGNoYXI2KSBcXAorICAgIChDT01QQVJFXzRDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV8yQ0hBUlMoYWRkcmVzcyArIDQsIGNoYXI1LCBj
aGFyNikpCisjZGVmaW5lIENPTVBBUkVfNlVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNo
YXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2KSBcXAorICAgIChDT01QQVJFXzRVQ0hBUlMoYWRkcmVz
cywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfMlVDSEFSUyhhZGRyZXNz
ICsgNCwgY2hhcjUsIGNoYXI2KSkKKyNkZWZpbmUgQ09NUEFSRV83Q0hBUlMoYWRkcmVzcywgY2hh
cjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpIFxcCisgICAgKENP
TVBBUkVfNENIQVJTKGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01Q
QVJFXzRDSEFSUyhhZGRyZXNzICsgMywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQorI2Rl
ZmluZSBDT01QQVJFXzdVQ0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQs
IGNoYXI1LCBjaGFyNiwgY2hhcjcpIFxcCisgICAgKENPTVBBUkVfNFVDSEFSUyhhZGRyZXNzLCBj
aGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV80VUNIQVJTKGFkZHJlc3MgKyAz
LCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBjaGFyNykpCisjZGVmaW5lIENPTVBBUkVfOENIQVJTKGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBj
aGFyOCkgXFwKKyAgICAoQ09NUEFSRV80Q0hBUlMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFy
MywgY2hhcjQpICYmIENPTVBBUkVfNENIQVJTKGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNo
YXI3LCBjaGFyOCkpCisjZGVmaW5lIENPTVBBUkVfOFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFxcCisgICAgKENP
TVBBUkVfNFVDSEFSUyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09N
UEFSRV80VUNIQVJTKGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFyOCkpCiAi
IiIpCiAKIHRyaWUucHJpbnRBc0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
Y2FsbEV2CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIGNhbiB1c2UgdGhlIHByZXBhcnNlciBpbiBzdHJpY3QgbW9kZSwg
d2UganVzdCBuZWVkIGFkZGl0aW9uYWwgbG9naWMKICAgICAgICAgICAgIC8vIHRvIHByZXZlbnQg
ZHVwbGljYXRlcy4KLSAgICAgICAgICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFt
ZSwgcHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzMTYoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwg
TGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNPTik7CisgICAgICAgICAgICBMaXRlcmFsUGFyc2Vy
IHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVycygpLCBwcm9ncmFt
U291cmNlLmxlbmd0aCgpLCBMaXRlcmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKICAgICAgICAg
ICAgIGlmIChKU1ZhbHVlIHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2Uo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkT2JqZWN0OwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gOTkyMDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI2LDE3ICsyMjYsMjAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHR5cGVzT2ZB
U0NJSQogLyogMTI3IC0gRGVsZXRlICAgICAgICAgICAgICovIENoYXJhY3RlckludmFsaWQsCiB9
OwogCi1MZXhlcjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitMZXhlcjxUPjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAg
IDogbV9pc1JlcGFyc2luZyhmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQog
ewogfQogCi1MZXhlcjo6fkxleGVyKCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorTGV4ZXI8VD46
On5MZXhlcigpCiB7CiB9Ci0gICAgCi1VU3RyaW5nIExleGVyOjpnZXRJbnZhbGlkQ2hhck1lc3Nh
Z2UoKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1VTdHJpbmcgTGV4ZXI8VD46OmdldEludmFs
aWRDaGFyTWVzc2FnZSgpCiB7CiAgICAgc3dpdGNoIChtX2N1cnJlbnQpIHsKICAgICBjYXNlIDA6
CkBAIC0yNTgsMjYgKzI2MSwzNSBAQCBVU3RyaW5nIExleGVyOjpnZXRJbnZhbGlkQ2hhck1lc3Nh
Z2UoKQogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciogTGV4ZXI6OmN1cnJl
bnRDaGFyYWN0ZXIoKSBjb25zdAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IGNvbnN0IFQqIExleGVyPFQ+OjpjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QKIHsKICAgICBBU1NF
UlQobV9jb2RlIDw9IG1fY29kZUVuZCk7CiAgICAgcmV0dXJuIG1fY29kZTsKIH0KIAotQUxXQVlT
X0lOTElORSBpbnQgTGV4ZXI6OmN1cnJlbnRPZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiBj
dXJyZW50Q2hhcmFjdGVyKCkgLSBtX2NvZGVTdGFydDsKLX0KLQotdm9pZCBMZXhlcjo6c2V0Q29k
ZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckFyZW5hKiBhcmVuYSkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordm9pZCBMZXhlcjxUPjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFBhcnNlckFyZW5hKiBhcmVuYSkKIHsKICAgICBtX2FyZW5hID0gJmFyZW5hLT5pZGVu
dGlmaWVyQXJlbmEoKTsKLQorICAgIAogICAgIG1fbGluZU51bWJlciA9IHNvdXJjZS5maXJzdExp
bmUoKTsKICAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwogICAgIG1fbGFzdFRva2VuID0gLTE7Cisg
ICAgCisgICAgY29uc3QgVCogZGF0YTsKKyAgICBjb25zdCBTdHJpbmdJbXBsKiBzb3VyY2VTdHJp
bmcgPSBzb3VyY2UucHJvdmlkZXIoKS0+c3RyaW5nRGF0YSgpOwogCi0gICAgY29uc3QgVUNoYXIq
IGRhdGEgPSBzb3VyY2UucHJvdmlkZXIoKS0+ZGF0YSgpOworICAgIGlmIChzb3VyY2VTdHJpbmcp
IHsKKyAgICAgICAgaWYgKHNvdXJjZVN0cmluZy0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVChzaXplb2YoVCkgPT0gc2l6ZW9mKExDaGFyKSk7CisgICAgICAgICAgICBkYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBUKj4oc291cmNlU3RyaW5nLT5jaGFyYWN0ZXJzOCgpKTsKKyAg
ICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IHNpemVvZihV
Q2hhcikpOworICAgICAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHNv
dXJjZVN0cmluZy0+Y2hhcmFjdGVyczE2KCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAg
ICAgIGRhdGEgPSAwOwogCiAgICAgbV9zb3VyY2UgPSAmc291cmNlOwogICAgIG1fY29kZVN0YXJ0
ID0gZGF0YTsKQEAgLTI4NiwxMCArMjk4LDEwIEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3Qg
U291cmNlQ29kZSYgc28KICAgICBtX2Vycm9yID0gZmFsc2U7CiAgICAgbV9hdExpbmVTdGFydCA9
IHRydWU7CiAgICAgbV9sZXhFcnJvck1lc3NhZ2UgPSBVU3RyaW5nKCk7Ci0KKyAgICAKICAgICBt
X2J1ZmZlcjgucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5
KTsKICAgICBtX2J1ZmZlcjE2LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoKG1fY29kZUVuZCAtIG1f
Y29kZSkgLyAyKTsKLQorICAgIAogICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9jb2RlRW5kKSkK
ICAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsKICAgICBlbHNlCkBAIC0yOTcsNyArMzA5LDgg
QEAgdm9pZCBMZXhlcjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzbwogICAgIEFTU0VSVChj
dXJyZW50T2Zmc2V0KCkgPT0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpOwogfQogCi10ZW1wbGF0ZSA8
aW50IHNoaWZ0QW1vdW50LCBMZXhlcjo6U2hpZnRUeXBlIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdB
WVNfSU5MSU5FIHZvaWQgTGV4ZXI6OmludGVybmFsU2hpZnQoKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Cit0ZW1wbGF0ZSA8aW50IHNoaWZ0QW1vdW50LCBTaGlmdFR5cGUgc2hvdWxkQm91bmRzQ2hl
Y2s+IEFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxUPjo6aW50ZXJuYWxTaGlmdCgpCiB7CiAgICAg
aWYgKHNob3VsZEJvdW5kc0NoZWNrID09IERvQm91bmRzQ2hlY2spIHsKICAgICAgICAgLy8gRmFz
dGVyIHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5jZQpAQCAtMzEyLDIwICszMjUsMjggQEAgdGVtcGxh
dGUgPGludCBzaGlmdEFtb3VudCwgTGV4ZXI6OlNoaWZ0VAogICAgIH0KIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIExleGVyOjpzaGlmdCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19J
TkxJTkUgdm9pZCBMZXhlcjxUPjo6c2hpZnQoKQogewotICAgIGludGVybmFsU2hpZnQ8MSwgRG9C
b3VuZHNDaGVjaz4oKTsKKyAgICAvLyBGYXN0ZXIgdGhhbiBhbiBpZi1lbHNlIHNlcXVlbmNlCisg
ICAgQVNTRVJUKG1fY3VycmVudCAhPSAtMSk7CisgICAgbV9jdXJyZW50ID0gLTE7CisgICAgbV9j
b2RlKys7CisgICAgaWYgKExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQorICAgICAgICBtX2N1
cnJlbnQgPSAqbV9jb2RlOwogfQogCi1BTFdBWVNfSU5MSU5FIGludCBMZXhlcjo6cGVlayhpbnQg
b2Zmc2V0KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGludCBMZXhlcjxU
Pjo6cGVlayhpbnQgb2Zmc2V0KQogewogICAgIC8vIE9ubHkgdXNlIGlmIG5lY2Vzc2FyeQogICAg
IEFTU0VSVChvZmZzZXQgPiAwICYmIG9mZnNldCA8IDUpOwotICAgIGNvbnN0IFVDaGFyKiBjb2Rl
ID0gbV9jb2RlICsgb2Zmc2V0OworICAgIGNvbnN0IFQqIGNvZGUgPSBtX2NvZGUgKyBvZmZzZXQ7
CiAgICAgcmV0dXJuIChjb2RlIDwgbV9jb2RlRW5kKSA/ICpjb2RlIDogLTE7CiB9CiAKLWludCBM
ZXhlcjo6Z2V0VW5pY29kZUNoYXJhY3RlcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2ludCBM
ZXhlcjxUPjo6Z2V0VW5pY29kZUNoYXJhY3RlcigpCiB7CiAgICAgaW50IGNoYXIxID0gcGVlaygx
KTsKICAgICBpbnQgY2hhcjIgPSBwZWVrKDIpOwpAQCAtMzQyLDcgKzM2Myw4IEBAIGludCBMZXhl
cjo6Z2V0VW5pY29kZUNoYXJhY3RlcigpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBM
ZXhlcjo6c2hpZnRMaW5lVGVybWluYXRvcigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQg
TGV4ZXI8VD46OnNoaWZ0TGluZVRlcm1pbmF0b3IoKQogewogICAgIEFTU0VSVChpc0xpbmVUZXJt
aW5hdG9yKG1fY3VycmVudCkpOwogCkBAIC0zNTYsNyArMzc4LDggQEAgdm9pZCBMZXhlcjo6c2hp
ZnRMaW5lVGVybWluYXRvcigpCiAgICAgKyttX2xpbmVOdW1iZXI7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBMZXhlcjo6bGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3QKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+OjpsYXN0VG9rZW5XYXNS
ZXN0cktleXdvcmQoKSBjb25zdAogewogICAgIHJldHVybiBtX2xhc3RUb2tlbiA9PSBDT05USU5V
RSB8fCBtX2xhc3RUb2tlbiA9PSBCUkVBSyB8fCBtX2xhc3RUb2tlbiA9PSBSRVRVUk4gfHwgbV9s
YXN0VG9rZW4gPT0gVEhST1c7CiB9CkBAIC00MTEsMjkgKzQzNCwxMTEgQEAgc3RhdGljIGlubGlu
ZSBpbnQgc2luZ2xlRXNjYXBlKGludCBjKQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgTGV4ZXI6
OnJlY29yZDgoaW50IGMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIExleGVy
PFQ+OjpyZWNvcmQ4KGludCBjKQogewogICAgIEFTU0VSVChjID49IDApOwogICAgIEFTU0VSVChj
IDw9IDB4RkYpOwotICAgIG1fYnVmZmVyOC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oYykpOwor
ICAgIG1fYnVmZmVyOC5hcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGMpKTsKIH0KIAotaW5saW5l
IHZvaWQgTGV4ZXI6OnJlY29yZDE2KFVDaGFyIGMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lu
bGluZSB2b2lkIExleGVyPFQ+OjphcHBlbmQ4KGNvbnN0IFQqIHAsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgLy8gRklYTUU6IENoYW5nZSB0aHJlZSBvY2N1cnJhbmNlcyBvZiBtX2J1ZmZlcjE2IHRv
IG1fYnVmZmVyOCBhbmQKKyAgICAvLyBVQ2hhciB0byBMQ2hhciB3aGVuIDggYml0IHN0cmluZ3Mg
YXJlIHR1cm5lZCBvbi4KKyAgICBzaXplX3QgY3VycmVudFNpemUgPSBtX2J1ZmZlcjE2LnNpemUo
KTsKKyAgICBtX2J1ZmZlcjE2Lmdyb3coY3VycmVudFNpemUgKyBsZW5ndGgpOworICAgIFVDaGFy
KiByYXdCdWZmZXIgPSBtX2J1ZmZlcjE2LmRhdGEoKSArIGN1cnJlbnRTaXplOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBUIGMgPSBwW2ldOwor
ICAgICAgICBBU1NFUlQoYyA+PSAwKTsKKyAgICAgICAgQVNTRVJUKGMgPD0gMHhGRik7CisgICAg
ICAgIHJhd0J1ZmZlcltpXSA9IGM7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2lubGluZSB2b2lkIExleGVyPFQ+OjphcHBlbmQxNihjb25zdCBMQ2hhciogcCwgc2l6ZV90IGxl
bmd0aCkKK3sKKyAgICBzaXplX3QgY3VycmVudFNpemUgPSBtX2J1ZmZlcjE2LnNpemUoKTsKKyAg
ICBtX2J1ZmZlcjE2Lmdyb3coY3VycmVudFNpemUgKyBsZW5ndGgpOworICAgIFVDaGFyKiByYXdC
dWZmZXIgPSBtX2J1ZmZlcjE2LmRhdGEoKSArIGN1cnJlbnRTaXplOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgcmF3QnVmZmVyW2ldID0gcFtpXTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBMZXhlcjxUPjo6cmVjb3Jk
MTYoVCBjKQogewogICAgIG1fYnVmZmVyMTYuYXBwZW5kKGMpOwogfQogCi1pbmxpbmUgdm9pZCBM
ZXhlcjo6cmVjb3JkMTYoaW50IGMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lk
IExleGVyPFQ+OjpyZWNvcmQxNihpbnQgYykKIHsKICAgICBBU1NFUlQoYyA+PSAwKTsKICAgICBB
U1NFUlQoYyA8PSBVU0hSVF9NQVgpOwotICAgIHJlY29yZDE2KFVDaGFyKHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PihjKSkpOworICAgIG1fYnVmZmVyMTYuYXBwZW5kKHN0YXRpY19jYXN0PFVD
aGFyPihjKSk7Cit9CisKK3RlbXBsYXRlIDw+Cit0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJ
ZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPExDaGFyPjo6cGFyc2VJ
ZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wg
c3RyaWN0TW9kZSkKK3sKKyAgICBjb25zdCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5k
IC0gbV9jb2RlOworICAgIGlmICgocmVtYWluaW5nID49IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxl
eFR5cGUgJiBMZXhJZ25vcmVSZXNlcnZlZFdvcmRzKSkgeworICAgICAgICBKU1Rva2VuVHlwZSBr
ZXl3b3JkID0gcGFyc2VLZXl3b3JkPHNob3VsZENyZWF0ZUlkZW50aWZpZXI+KHRva2VuRGF0YSk7
CisgICAgICAgIGlmIChrZXl3b3JkICE9IElERU5UKSB7CisgICAgICAgICAgICBBU1NFUlQoKCFz
aG91bGRDcmVhdGVJZGVudGlmaWVyKSB8fCB0b2tlbkRhdGEtPmlkZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBrZXl3b3JkID09IFJFU0VSVkVEX0lGX1NUUklDVCAmJiAhc3RyaWN0TW9kZSA/IElE
RU5UIDoga2V5d29yZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IExDaGFyKiBpZGVu
dGlmaWVyU3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgCisgICAgd2hpbGUgKGlzSWRl
bnRQYXJ0KG1fY3VycmVudCkpCisgICAgICAgIHNoaWZ0KCk7CisgICAgCisgICAgaWYgKFVOTElL
RUxZKG1fY3VycmVudCA9PSAnXFwnKSkgeworICAgICAgICBzZXRPZmZzZXRGcm9tQ2hhck9mZnNl
dChpZGVudGlmaWVyU3RhcnQpOworICAgICAgICByZXR1cm4gcGFyc2VJZGVudGlmaWVyU2xvd0Nh
c2U8c2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4odG9rZW5EYXRhLCBsZXhUeXBlLCBzdHJpY3RNb2Rl
KTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IDA7CisgICAgCisgICAg
aWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpIHsKKyAgICAgICAgaW50IGlkZW50aWZpZXJMZW5n
dGggPSBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7CisgICAgICAgIGlkZW50
ID0gbWFrZUlkZW50aWZpZXIoaWRlbnRpZmllclN0YXJ0LCBpZGVudGlmaWVyTGVuZ3RoKTsKKwor
ICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gaWRlbnQ7CisgICAgfSBlbHNlCisgICAgICAgIHRv
a2VuRGF0YS0+aWRlbnQgPSAwOworCisgICAgbV9kZWxpbWl0ZWQgPSBmYWxzZTsKKworICAgIGlm
IChVTkxJS0VMWSgocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpICYmICEobGV4VHlwZSAmIExl
eElnbm9yZVJlc2VydmVkV29yZHMpKSkgeworICAgICAgICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRl
bnRpZmllcik7CisgICAgICAgIGlmIChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgeworICAg
ICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fZ2xvYmFsRGF0YS0+a2V5d29yZHMt
PmdldEtleXdvcmQoKmlkZW50KTsKKyAgICAgICAgICAgIEFTU0VSVCgocmVtYWluaW5nIDwgbWF4
VG9rZW5MZW5ndGgpIHx8ICFlbnRyeSk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAg
ICAgICAgICAgIHJldHVybiBJREVOVDsKKyAgICAgICAgICAgIEpTVG9rZW5UeXBlIHRva2VuID0g
c3RhdGljX2Nhc3Q8SlNUb2tlblR5cGU+KGVudHJ5LT5sZXhlclZhbHVlKCkpOworICAgICAgICAg
ICAgcmV0dXJuICh0b2tlbiAhPSBSRVNFUlZFRF9JRl9TVFJJQ1QpIHx8IHN0cmljdE1vZGUgPyB0
b2tlbiA6IElERU5UOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJREVOVDsKKyAgICB9CisK
KyAgICByZXR1cm4gSURFTlQ7CiB9CiAKLXRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50
aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6OnBhcnNlSWRlbnRpZmllcihK
U1Rva2VuRGF0YSogdG9rZW5EYXRhLCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUp
Cit0ZW1wbGF0ZSA8PgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxX
QVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxVQ2hhcj46OnBhcnNlSWRlbnRpZmllcihKU1Rv
a2VuRGF0YSogdG9rZW5EYXRhLCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCiB7
CiAgICAgY29uc3QgcHRyZGlmZl90IHJlbWFpbmluZyA9IG1fY29kZUVuZCAtIG1fY29kZTsKLSAg
ICBpZiAoKHJlbWFpbmluZyA+PSBtYXhUb2tlbkxlbmd0aCkgJiYgIShsZXhUeXBlICYgSWdub3Jl
UmVzZXJ2ZWRXb3JkcykpIHsKKyAgICBpZiAoKHJlbWFpbmluZyA+PSBtYXhUb2tlbkxlbmd0aCkg
JiYgIShsZXhUeXBlICYgTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcykpIHsKICAgICAgICAgSlNUb2tl
blR5cGUga2V5d29yZCA9IHBhcnNlS2V5d29yZDxzaG91bGRDcmVhdGVJZGVudGlmaWVyPih0b2tl
bkRhdGEpOwogICAgICAgICBpZiAoa2V5d29yZCAhPSBJREVOVCkgewogICAgICAgICAgICAgQVNT
RVJUKCghc2hvdWxkQ3JlYXRlSWRlbnRpZmllcikgfHwgdG9rZW5EYXRhLT5pZGVudCk7CkBAIC00
NDEsNiArNTQ2LDYyIEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEK
ICAgICAgICAgfQogICAgIH0KICAgICBjb25zdCBVQ2hhciogaWRlbnRpZmllclN0YXJ0ID0gY3Vy
cmVudENoYXJhY3RlcigpOworCisgICAgVUNoYXIgb3JBbGxDaGFycyA9IDA7CisgICAgCisgICAg
d2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpIHsKKyAgICAgICAgb3JBbGxDaGFycyB8PSBt
X2N1cnJlbnQ7CisgICAgICAgIHNoaWZ0KCk7CisgICAgfQorICAgIAorICAgIGlmIChVTkxJS0VM
WShtX2N1cnJlbnQgPT0gJ1xcJykpIHsKKyAgICAgICAgc2V0T2Zmc2V0RnJvbUNoYXJPZmZzZXQo
aWRlbnRpZmllclN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSWRlbnRpZmllclNsb3dDYXNl
PHNob3VsZENyZWF0ZUlkZW50aWZpZXI+KHRva2VuRGF0YSwgbGV4VHlwZSwgc3RyaWN0TW9kZSk7
CisgICAgfQorCisgICAgYm9vbCBpc0FsbDhCaXQgPSBmYWxzZTsKKworI2lmIDAgLy8gRklYTUU6
IFJlbW92ZSB0aGlzICNpZiB3aGVuIDggYml0IHN0cmluZ3MgYXJlIHR1cm5lZCBvbi4KKyAgICBp
ZiAoIShvckFsbENoYXJzICYgfjB4ZmYpKQorICAgICAgICBpc0FsbDhCaXQgPSB0cnVlOworI2Vu
ZGlmCisKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IDA7CisgICAgCisgICAgaWYgKHNo
b3VsZENyZWF0ZUlkZW50aWZpZXIpIHsKKyAgICAgICAgaW50IGlkZW50aWZpZXJMZW5ndGggPSBj
dXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7CisgICAgICAgIGlmIChpc0FsbDhC
aXQpCisgICAgICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoaWRl
bnRpZmllclN0YXJ0LCBpZGVudGlmaWVyTGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5n
dGgpOworICAgICAgICAKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IGlkZW50OworICAgIH0g
ZWxzZQorICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKKyAgICAKKyAgICBtX2RlbGltaXRl
ZCA9IGZhbHNlOworICAgIAorICAgIGlmIChVTkxJS0VMWSgocmVtYWluaW5nIDwgbWF4VG9rZW5M
ZW5ndGgpICYmICEobGV4VHlwZSAmIExleElnbm9yZVJlc2VydmVkV29yZHMpKSkgeworICAgICAg
ICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcik7CisgICAgICAgIGlmIChyZW1haW5pbmcg
PCBtYXhUb2tlbkxlbmd0aCkgeworICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IG1fZ2xvYmFsRGF0YS0+a2V5d29yZHMtPmdldEtleXdvcmQoKmlkZW50KTsKKyAgICAgICAgICAg
IEFTU0VSVCgocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHx8ICFlbnRyeSk7CisgICAgICAg
ICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBJREVOVDsKKyAgICAgICAg
ICAgIEpTVG9rZW5UeXBlIHRva2VuID0gc3RhdGljX2Nhc3Q8SlNUb2tlblR5cGU+KGVudHJ5LT5s
ZXhlclZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuICh0b2tlbiAhPSBSRVNFUlZFRF9JRl9T
VFJJQ1QpIHx8IHN0cmljdE1vZGUgPyB0b2tlbiA6IElERU5UOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBJREVOVDsKKyAgICB9CisKKyAgICByZXR1cm4gSURFTlQ7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gSlNU
b2tlblR5cGUgTGV4ZXI8VD46OnBhcnNlSWRlbnRpZmllclNsb3dDYXNlKEpTVG9rZW5EYXRhKiB0
b2tlbkRhdGEsIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9kZSkKK3sKKyAgICBjb25z
dCBwdHJkaWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2RlOworICAgIGNvbnN0IFQq
IGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICBib29sIGJ1ZmZlclJl
cXVpcmVkID0gZmFsc2U7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDY0LDMxICs2MjUsMzAg
QEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAgICAgICAgICAg
cmV0dXJuIEVSUk9SVE9LOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9idWZmZXIxNi5zaXplKCkg
PyAhaXNJZGVudFBhcnQoY2hhcmFjdGVyKSA6ICFpc0lkZW50U3RhcnQoY2hhcmFjdGVyKSkpCiAg
ICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7Ci0gICAgICAgIGlmICAoc2hvdWxkQ3JlYXRlSWRl
bnRpZmllcikKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpCiAgICAgICAgICAg
ICByZWNvcmQxNihjaGFyYWN0ZXIpOwogICAgICAgICBpZGVudGlmaWVyU3RhcnQgPSBjdXJyZW50
Q2hhcmFjdGVyKCk7CiAgICAgfQotICAgIAorCiAgICAgaW50IGlkZW50aWZpZXJMZW5ndGg7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwogICAgIGlmIChzaG91bGRDcmVhdGVJZGVu
dGlmaWVyKSB7Ci0gICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQpCisgICAgICAgIGlmICghYnVm
ZmVyUmVxdWlyZWQpIHsKICAgICAgICAgICAgIGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50Q2hh
cmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQ7Ci0gICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgp
OworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJTdGFydCAhPSBj
dXJyZW50Q2hhcmFjdGVyKCkpCiAgICAgICAgICAgICAgICAgbV9idWZmZXIxNi5hcHBlbmQoaWRl
bnRpZmllclN0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBpZGVudGlmaWVyU3RhcnQpOwotICAg
ICAgICAgICAgaWRlbnRpZmllclN0YXJ0ID0gbV9idWZmZXIxNi5kYXRhKCk7Ci0gICAgICAgICAg
ICBpZGVudGlmaWVyTGVuZ3RoID0gbV9idWZmZXIxNi5zaXplKCk7CisgICAgICAgICAgICBpZGVu
dCA9IG1ha2VJZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJT
dGFydCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBpZGVu
dDsKICAgICB9IGVsc2UKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CiAKICAgICBtX2Rl
bGltaXRlZCA9IGZhbHNlOwogCi0gICAgaWYgKExJS0VMWSghYnVmZmVyUmVxdWlyZWQgJiYgIShs
ZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CisgICAgaWYgKExJS0VMWSghYnVmZmVy
UmVxdWlyZWQgJiYgIShsZXhUeXBlICYgTGV4SWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAgICAg
ICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVyKTsKICAgICAgICAgLy8gS2V5d29yZHMg
bXVzdCBub3QgYmUgcmVjb2duaXplZCBpZiB0aGVyZSB3YXMgYW4gXHVYWFhYIGluIHRoZSBpZGVu
dGlmaWVyLgogICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHsKQEAgLTUw
NiwyNSArNjY2LDk2IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEK
ICAgICByZXR1cm4gSURFTlQ7CiB9CiAKLXRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5n
cz4gQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9r
ZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRl
IDxib29sIHNob3VsZEJ1aWxkU3RyaW5ncz4gQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojpw
YXJzZVN0cmluZyhKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBib29sIHN0cmljdE1vZGUpCit7Cisg
ICAgLy8gRklYTUU6IENoYW5nZSByZWNvcmQxNiBhbmQgbV9idWZmZXIxNiB0byByZWNvcmQ4IGFu
ZCBtX2J1ZmZlcjggYmVsb3cgd2hlbgorICAgIC8vIDggYml0IHN0cmluZ3MgYXJlIHR1cm5lZCBv
bi4KKyAgICBpbnQgc3RhcnRpbmdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgaW50IHN0
YXJ0aW5nTGluZU51bWJlciA9IGxpbmVOdW1iZXIoKTsKKyAgICBpbnQgc3RyaW5nUXVvdGVDaGFy
YWN0ZXIgPSBtX2N1cnJlbnQ7CisgICAgc2hpZnQoKTsKKworICAgIGNvbnN0IFQqIHN0cmluZ1N0
YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworCisgICAgd2hpbGUgKG1fY3VycmVudCAhPSBzdHJp
bmdRdW90ZUNoYXJhY3RlcikgeworICAgICAgICBpZiAoVU5MSUtFTFkoKG1fY3VycmVudCA9PSAn
XFwnKSkpIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdTdGFydCAhPSBjdXJyZW50Q2hhcmFjdGVy
KCkgJiYgc2hvdWxkQnVpbGRTdHJpbmdzKQorICAgICAgICAgICAgICAgIGFwcGVuZDgoc3RyaW5n
U3RhcnQsIGN1cnJlbnRDaGFyYWN0ZXIoKSAtIHN0cmluZ1N0YXJ0KTsKKyAgICAgICAgICAgIHNo
aWZ0KCk7CisKKyAgICAgICAgICAgIGludCBlc2NhcGUgPSBzaW5nbGVFc2NhcGUobV9jdXJyZW50
KTsKKworICAgICAgICAgICAgLy8gTW9zdCBjb21tb24gZXNjYXBlIHNlcXVlbmNlcyBmaXJzdAor
ICAgICAgICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRCdWls
ZFN0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KGVzY2FwZSk7IC8vIEZJWE1F
OiBDaGFuZ2UgdG8gcmVjb3JkOAorICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKFVOTElLRUxZKGlzTGluZVRlcm1pbmF0b3IobV9jdXJyZW50KSkpCisgICAg
ICAgICAgICAgICAgc2hpZnRMaW5lVGVybWluYXRvcigpOworICAgICAgICAgICAgZWxzZSBpZiAo
bV9jdXJyZW50ID09ICd4JykgeworICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdChtX2N1cnJlbnQpICYmIGlzQVNDSUlIZXhEaWdpdChw
ZWVrKDEpKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgcHJldiA9IG1fY3VycmVudDsKKyAg
ICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3Vs
ZEJ1aWxkU3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KGNvbnZlcnRI
ZXgocHJldiwgbV9jdXJyZW50KSk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gcmVjb3JkOAorICAgICAg
ICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
QnVpbGRTdHJpbmdzKQorICAgICAgICAgICAgICAgICAgICByZWNvcmQxNigneCcpOyAvLyBGSVhN
RTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2V0T2Zmc2V0KHN0YXJ0aW5nT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZXRMaW5lTnVt
YmVyKHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgbV9idWZmZXIxNi5yZXNp
emUoMCk7IC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlU3RyaW5nU2xvd0Nhc2U8c2hvdWxkQnVpbGRTdHJpbmdzPih0b2tlbkRhdGEsIHN0
cmljdE1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RyaW5nU3RhcnQgPSBjdXJy
ZW50Q2hhcmFjdGVyKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChVTkxJS0VMWSgoKG1fY3VycmVudCA+IDB4ZmYpIHx8IChtX2N1cnJlbnQgPCAweGUp
KSkpIHsKKyAgICAgICAgICAgIHNldE9mZnNldChzdGFydGluZ09mZnNldCk7CisgICAgICAgICAg
ICBzZXRMaW5lTnVtYmVyKHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgICAgICAgICBtX2J1ZmZl
cjE2LnJlc2l6ZSgwKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgICAg
IHJldHVybiBwYXJzZVN0cmluZ1Nsb3dDYXNlPHNob3VsZEJ1aWxkU3RyaW5ncz4odG9rZW5EYXRh
LCBzdHJpY3RNb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHNoaWZ0KCk7CisgICAgfQorCisg
ICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoKSAhPSBzdHJpbmdTdGFydCAmJiBzaG91bGRCdWlsZFN0
cmluZ3MpCisgICAgICAgIGFwcGVuZDgoc3RyaW5nU3RhcnQsIGN1cnJlbnRDaGFyYWN0ZXIoKSAt
IHN0cmluZ1N0YXJ0KTsKKyAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKSB7CisgICAgICAgIC8v
IEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSBt
YWtlSWRlbnRpZmllcihtX2J1ZmZlcjE2LmRhdGEoKSwgbV9idWZmZXIxNi5zaXplKCkpOworICAg
ICAgICAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAorICAgICAgICBtX2J1ZmZlcjE2LnJl
c2l6ZSgwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IDA7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8Ym9v
bCBzaG91bGRCdWlsZFN0cmluZ3M+IGJvb2wgTGV4ZXI8VD46OnBhcnNlU3RyaW5nU2xvd0Nhc2Uo
SlNUb2tlbkRhdGEqIHRva2VuRGF0YSwgYm9vbCBzdHJpY3RNb2RlKQogewogICAgIGludCBzdHJp
bmdRdW90ZUNoYXJhY3RlciA9IG1fY3VycmVudDsKICAgICBzaGlmdCgpOwogCi0gICAgY29uc3Qg
VUNoYXIqIHN0cmluZ1N0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOworICAgIGNvbnN0IFQqIHN0
cmluZ1N0YXJ0ID0gY3VycmVudENoYXJhY3RlcigpOwogCiAgICAgd2hpbGUgKG1fY3VycmVudCAh
PSBzdHJpbmdRdW90ZUNoYXJhY3RlcikgewogICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50
ID09ICdcXCcpKSB7CiAgICAgICAgICAgICBpZiAoc3RyaW5nU3RhcnQgIT0gY3VycmVudENoYXJh
Y3RlcigpICYmIHNob3VsZEJ1aWxkU3RyaW5ncykKLSAgICAgICAgICAgICAgICBtX2J1ZmZlcjE2
LmFwcGVuZChzdHJpbmdTdGFydCwgY3VycmVudENoYXJhY3RlcigpIC0gc3RyaW5nU3RhcnQpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZDE2KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkg
LSBzdHJpbmdTdGFydCk7CiAgICAgICAgICAgICBzaGlmdCgpOwogCiAgICAgICAgICAgICBpbnQg
ZXNjYXBlID0gc2luZ2xlRXNjYXBlKG1fY3VycmVudCk7CiAKICAgICAgICAgICAgIC8vIE1vc3Qg
Y29tbW9uIGVzY2FwZSBzZXF1ZW5jZXMgZmlyc3QKICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsK
LSAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKLSAgICAgICAgICAgICAg
ICAgICAgIHJlY29yZDE2KGVzY2FwZSk7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxk
U3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoZXNjYXBlKTsKICAgICAgICAg
ICAgICAgICBzaGlmdCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShpc0xpbmVU
ZXJtaW5hdG9yKG1fY3VycmVudCkpKQogICAgICAgICAgICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0
b3IoKTsKQEAgLTYwOCw3ICs4MzksNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmlu
Z3M+IEFMV0FZCiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoKSAhPSBzdHJpbmdT
dGFydCAmJiBzaG91bGRCdWlsZFN0cmluZ3MpCi0gICAgICAgIG1fYnVmZmVyMTYuYXBwZW5kKHN0
cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7CisgICAgICAgIGFw
cGVuZDE2KHN0cmluZ1N0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyKCkgLSBzdHJpbmdTdGFydCk7CiAg
ICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykKICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1h
a2VJZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBtX2J1ZmZlcjE2LnNpemUoKSk7CiAgICAg
ZWxzZQpAQCAtNjE4LDcgKzg0OSw4IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3RyaW5n
cz4gQUxXQVkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIExleGVy
OjpwYXJzZUhleChkb3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnBhcnNlSGV4KGRvdWJsZSYgcmV0dXJuVmFsdWUp
CiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBtb3N0IGhleGFkZWNpbWFsIHZhbHVlcyBmaXQgaW50
byA0IGJ5dGVzLgogICAgIHVpbnQzMl90IGhleFZhbHVlID0gMDsKQEAgLTY1NywxNCArODg5LDE1
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6cGFyc2VIZXgoZG91YmwKICAgICByZXR1cm5W
YWx1ZSA9IHBhcnNlSW50T3ZlcmZsb3cobV9idWZmZXI4LmRhdGEoKSwgbV9idWZmZXI4LnNpemUo
KSwgMTYpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlT2N0YWwoZG91Ymxl
JiByZXR1cm5WYWx1ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29s
IExleGVyPFQ+OjpwYXJzZU9jdGFsKGRvdWJsZSYgcmV0dXJuVmFsdWUpCiB7CiAgICAgLy8gT3B0
aW1pemF0aW9uOiBtb3N0IG9jdGFsIHZhbHVlcyBmaXQgaW50byA0IGJ5dGVzLgogICAgIHVpbnQz
Ml90IG9jdGFsVmFsdWUgPSAwOwogICAgIGludCBtYXhpbXVtRGlnaXRzID0gOTsKICAgICAvLyBU
ZW1wb3JhcnkgYnVmZmVyIGZvciB0aGUgZGlnaXRzLiBNYWtlcyBlYXNpZXIKICAgICAvLyB0byBy
ZWNvbnN0cnVjdCB0aGUgaW5wdXQgY2hhcmFjdGVycyB3aGVuIG5lZWRlZC4KLSAgICBjaGFyIGRp
Z2l0c1sxMF07CisgICAgTENoYXIgZGlnaXRzWzEwXTsKIAogICAgIGRvIHsKICAgICAgICAgb2N0
YWxWYWx1ZSA9IG9jdGFsVmFsdWUgKiA4ICsgKG1fY3VycmVudCAtICcwJyk7CkBAIC02OTMsNyAr
OTI2LDggQEAgQUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU9jdGFsKGRvdQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI6OnBhcnNlRGVjaW1hbChk
b3VibGUmIHJldHVyblZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IGJvb2wgTGV4ZXI8VD46OnBhcnNlRGVjaW1hbChkb3VibGUmIHJldHVyblZhbHVlKQogewogICAg
IC8vIE9wdGltaXphdGlvbjogbW9zdCBkZWNpbWFsIHZhbHVlcyBmaXQgaW50byA0IGJ5dGVzLgog
ICAgIHVpbnQzMl90IGRlY2ltYWxWYWx1ZSA9IDA7CkBAIC03MDQsNyArOTM4LDcgQEAgQUxXQVlT
X0lOTElORSBib29sIExleGVyOjpwYXJzZURlY2ltYWwoZAogICAgICAgICBpbnQgbWF4aW11bURp
Z2l0cyA9IDk7CiAgICAgICAgIC8vIFRlbXBvcmFyeSBidWZmZXIgZm9yIHRoZSBkaWdpdHMuIE1h
a2VzIGVhc2llcgogICAgICAgICAvLyB0byByZWNvbnN0cnVjdCB0aGUgaW5wdXQgY2hhcmFjdGVy
cyB3aGVuIG5lZWRlZC4KLSAgICAgICAgY2hhciBkaWdpdHNbMTBdOworICAgICAgICBMQ2hhciBk
aWdpdHNbMTBdOwogCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGRlY2ltYWxWYWx1ZSA9IGRl
Y2ltYWxWYWx1ZSAqIDEwICsgKG1fY3VycmVudCAtICcwJyk7CkBAIC03MzAsNyArOTY0LDggQEAg
QUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZURlY2ltYWwoZAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpwYXJzZU51bWJlckFmdGVyRGVjaW1h
bFBvaW50KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIExleGVy
PFQ+OjpwYXJzZU51bWJlckFmdGVyRGVjaW1hbFBvaW50KCkKIHsKICAgICByZWNvcmQ4KCcuJyk7
CiAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChtX2N1cnJlbnQpKSB7CkBAIC03MzksNyArOTc0LDgg
QEAgQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpwYXJzZU51bWJlckFmdAogICAgIH0KIH0KIAot
QUxXQVlTX0lOTElORSBib29sIExleGVyOjpwYXJzZU51bWJlckFmdGVyRXhwb25lbnRJbmRpY2F0
b3IoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46
OnBhcnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRvcigpCiB7CiAgICAgcmVjb3JkOCgnZScp
OwogICAgIHNoaWZ0KCk7CkBAIC03NTgsNyArOTk0LDggQEAgQUxXQVlTX0lOTElORSBib29sIExl
eGVyOjpwYXJzZU51bWJlckFmdAogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5F
IGJvb2wgTGV4ZXI6OnBhcnNlTXVsdGlsaW5lQ29tbWVudCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6cGFyc2VNdWx0aWxpbmVDb21tZW50KCkK
IHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB3aGlsZSAoVU5MSUtFTFkobV9jdXJyZW50
ID09ICcqJykpIHsKQEAgLTc4MCwxNiArMTAxNywxOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTGV4
ZXI6OnBhcnNlTXVsdGlsaW5lCiAgICAgfQogfQogCi1ib29sIExleGVyOjpuZXh0VG9rZW5Jc0Nv
bG9uKCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYm9vbCBMZXhlcjxUPjo6bmV4dFRva2VuSXND
b2xvbigpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNvZGUgPSBtX2NvZGU7CisgICAgY29uc3QgVCog
Y29kZSA9IG1fY29kZTsKICAgICB3aGlsZSAoY29kZSA8IG1fY29kZUVuZCAmJiAoaXNXaGl0ZVNw
YWNlKCpjb2RlKSB8fCBpc0xpbmVUZXJtaW5hdG9yKCpjb2RlKSkpCiAgICAgICAgIGNvZGUrKzsK
LSAgICAgICAgCisgICAgCiAgICAgcmV0dXJuIGNvZGUgPCBtX2NvZGVFbmQgJiYgKmNvZGUgPT0g
JzonOwogfQogCi1KU1Rva2VuVHlwZSBMZXhlcjo6bGV4KEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEs
IEpTVG9rZW5JbmZvKiB0b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3RyaWN0TW9k
ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleChKU1Rv
a2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9rZW5JbmZvLCB1bnNpZ25lZCBsZXhU
eXBlLCBib29sIHN0cmljdE1vZGUpCiB7CiAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICBBU1NF
UlQobV9idWZmZXI4LmlzRW1wdHkoKSk7CkBAIC0xMDk1LDcgKzEzMzQsNyBAQCBpbk51bWJlckFm
dGVyRGVjaW1hbFBvaW50OgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ly8gTnVsbC10ZXJtaW5hdGUgc3RyaW5nIGZvciBzdHJ0b2QuCiAgICAgICAgICAgICAgICAgbV9i
dWZmZXI4LmFwcGVuZCgnXDAnKTsKLSAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZh
bHVlID0gV1RGOjpzdHJ0b2QobV9idWZmZXI4LmRhdGEoKSwgMCk7CisgICAgICAgICAgICAgICAg
dG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KG1fYnVmZmVyOC5kYXRhKCkpLCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHRva2VuID0gTlVNQkVSOwogICAgICAgICB9CkBAIC0xMTA5LDcgKzEzNDgsNyBAQCBpbk51
bWJlckFmdGVyRGVjaW1hbFBvaW50OgogICAgICAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENoYXJhY3RlclF1b3RlOgotICAgICAgICBpZiAobGV4VHlw
ZSAmIERvbnRCdWlsZFN0cmluZ3MpIHsKKyAgICAgICAgaWYgKGxleFR5cGUgJiBMZXhEb250QnVp
bGRTdHJpbmdzKSB7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlU3RyaW5nPGZhbHNl
Pih0b2tlbkRhdGEsIHN0cmljdE1vZGUpKSkKICAgICAgICAgICAgICAgICBnb3RvIHJldHVybkVy
cm9yOwogICAgICAgICB9IGVsc2UgewpAQCAtMTEyNCw3ICsxMzYzLDcgQEAgaW5OdW1iZXJBZnRl
ckRlY2ltYWxQb2ludDoKICAgICAgICAgQVNTRVJUKGlzSWRlbnRTdGFydChtX2N1cnJlbnQpKTsK
ICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGludG8gQ2hhcmFjdGVyQmFja1NsYXNoLgogICAgIGNh
c2UgQ2hhcmFjdGVyQmFja1NsYXNoOgotICAgICAgICBpZiAobGV4VHlwZSAmIERvbnRCdWlsZEtl
eXdvcmRzKQorICAgICAgICBpZiAobGV4VHlwZSAmIExleERvbnRCdWlsZEtleXdvcmRzKQogICAg
ICAgICAgICAgdG9rZW4gPSBwYXJzZUlkZW50aWZpZXI8ZmFsc2U+KHRva2VuRGF0YSwgbGV4VHlw
ZSwgc3RyaWN0TW9kZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRva2VuID0gcGFyc2VJ
ZGVudGlmaWVyPHRydWU+KHRva2VuRGF0YSwgbGV4VHlwZSwgc3RyaWN0TW9kZSk7CkBAIC0xMTc4
LDcgKzE0MTcsOCBAQCByZXR1cm5FcnJvcjoKICAgICByZXR1cm4gRVJST1JUT0s7CiB9CiAKLWJv
b2wgTGV4ZXI6OnNjYW5SZWdFeHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElk
ZW50aWZpZXIqJiBmbGFncywgVUNoYXIgcGF0dGVyblByZWZpeCkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorYm9vbCBMZXhlcjxUPjo6c2NhblJlZ0V4cChjb25zdCBJZGVudGlmaWVyKiYgcGF0dGVy
biwgY29uc3QgSWRlbnRpZmllciomIGZsYWdzLCBVQ2hhciBwYXR0ZXJuUHJlZml4KQogewogICAg
IEFTU0VSVChtX2J1ZmZlcjE2LmlzRW1wdHkoKSk7CiAKQEAgLTEyMzksNyArMTQ3OSw4IEBAIGJv
b2wgTGV4ZXI6OnNjYW5SZWdFeHAoY29uc3QgSWRlbnRpZmllcioKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBMZXhlcjo6c2tpcFJlZ0V4cCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jv
b2wgTGV4ZXI8VD46OnNraXBSZWdFeHAoKQogewogICAgIGJvb2wgbGFzdFdhc0VzY2FwZSA9IGZh
bHNlOwogICAgIGJvb2wgaW5CcmFja2V0cyA9IGZhbHNlOwpAQCAtMTI3OSwxMSArMTUyMCwxMiBA
QCBib29sIExleGVyOjpza2lwUmVnRXhwKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBM
ZXhlcjo6Y2xlYXIoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpjbGVh
cigpCiB7CiAgICAgbV9hcmVuYSA9IDA7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbmV3QnVmZmVyODsK
KyAgICBWZWN0b3I8TENoYXI+IG5ld0J1ZmZlcjg7CiAgICAgbV9idWZmZXI4LnN3YXAobmV3QnVm
ZmVyOCk7CiAKICAgICBWZWN0b3I8VUNoYXI+IG5ld0J1ZmZlcjE2OwpAQCAtMTI5MiwxMSArMTUz
NCwxNiBAQCB2b2lkIExleGVyOjpjbGVhcigpCiAgICAgbV9pc1JlcGFyc2luZyA9IGZhbHNlOwog
fQogCi1Tb3VyY2VDb2RlIExleGVyOjpzb3VyY2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9z
ZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitTb3VyY2VDb2Rl
IExleGVyPFQ+Ojpzb3VyY2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQg
Zmlyc3RMaW5lKQogewogICAgIEFTU0VSVChtX3NvdXJjZS0+cHJvdmlkZXIoKS0+ZGF0YSgpW29w
ZW5CcmFjZV0gPT0gJ3snKTsKICAgICBBU1NFUlQobV9zb3VyY2UtPnByb3ZpZGVyKCktPmRhdGEo
KVtjbG9zZUJyYWNlXSA9PSAnfScpOwogICAgIHJldHVybiBTb3VyY2VDb2RlKG1fc291cmNlLT5w
cm92aWRlcigpLCBvcGVuQnJhY2UsIGNsb3NlQnJhY2UgKyAxLCBmaXJzdExpbmUpOwogfQogCisv
LyBJbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgTGV4ZXIgd2UgbmVlZCBpbnN0ZWFkIG9m
IHB1dHRpbmcgbW9zdCBvZiB0aGlzIGZpbGUgaW4gTGV4ZXIuaAordGVtcGxhdGUgY2xhc3MgTGV4
ZXI8TENoYXI+OwordGVtcGxhdGUgY2xhc3MgTGV4ZXI8VUNoYXI+OworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHJldmlzaW9uIDk5
MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw4ICs2MSwxNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEhhc2hUYWJsZSBtX2tl
eXdvcmRUYWJsZTsKIH07CiAKK2VudW0gTGV4VHlwZSB7CisgICAgTGV4SWdub3JlUmVzZXJ2ZWRX
b3JkcyA9IDEsIAorICAgIExleERvbnRCdWlsZFN0cmluZ3MgPSAyLAorICAgIExleERvbnRCdWls
ZEtleXdvcmRzID0gNAorfTsKKworZW51bSBTaGlmdFR5cGUgeyBEb0JvdW5kc0NoZWNrLCBEb05v
dEJvdW5kc0NoZWNrIH07CisKIGNsYXNzIFJlZ0V4cDsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CiBjbGFzcyBMZXhlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGV4ZXIpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtODIsMTIgKzkxLDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0SXNSZXBhcnNpbmcoKSB7IG1faXNSZXBhcnNpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBp
c1JlcGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBhcnNpbmc7IH0KIAotICAgIC8vIEZ1
bmN0aW9ucyBmb3IgdGhlIHBhcnNlciBpdHNlbGYuCi0gICAgZW51bSBMZXhUeXBlIHsKLSAgICAg
ICAgSWdub3JlUmVzZXJ2ZWRXb3JkcyA9IDEsIAotICAgICAgICBEb250QnVpbGRTdHJpbmdzID0g
MiwKLSAgICAgICAgRG9udEJ1aWxkS2V5d29yZHMgPSA0Ci0gICAgfTsKICAgICBKU1Rva2VuVHlw
ZSBsZXgoSlNUb2tlbkRhdGEqLCBKU1Rva2VuSW5mbyosIHVuc2lnbmVkLCBib29sIHN0cmljdE1v
ZGUpOwogICAgIGJvb2wgbmV4dFRva2VuSXNDb2xvbigpOwogICAgIGludCBsaW5lTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CkBAIC0xMDIsNyArMTA1LDYgQEAgcHVibGlj
OgogICAgIGJvb2wgc2F3RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CiAgICAgVVN0
cmluZyBnZXRFcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xleEVycm9yTWVzc2FnZTsg
fQogICAgIHZvaWQgY2xlYXIoKTsKLSAgICBpbnQgY3VycmVudE9mZnNldCgpIHsgcmV0dXJuIG1f
Y29kZSAtIG1fY29kZVN0YXJ0OyB9CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCkKICAg
ICB7CiAgICAgICAgIG1fZXJyb3IgPSAwOwpAQCAtMTIxLDE3ICsxMjMsMTYgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9Ci0gICAgCisKICAgICBKU1Rva2VuVHlwZSBsZXhF
eHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkluZm8qLCB1bnNpZ25lZCwgYm9v
bCBzdHJpY3RNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRh
OwotCiAgICAgdm9pZCByZWNvcmQ4KGludCk7CisgICAgdm9pZCBhcHBlbmQ4KGNvbnN0IFQqLCBz
aXplX3QpOwogICAgIHZvaWQgcmVjb3JkMTYoaW50KTsKLSAgICB2b2lkIHJlY29yZDE2KFVDaGFy
KTsKLQotICAgIHZvaWQgY29weUNvZGVXaXRob3V0Qk9NcygpOworICAgIHZvaWQgcmVjb3JkMTYo
VCk7CisgICAgdm9pZCBhcHBlbmQxNihjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgdm9pZCBh
cHBlbmQxNihjb25zdCBVQ2hhciogcCwgc2l6ZV90IGxlbmd0aCkgeyBtX2J1ZmZlcjE2LmFwcGVu
ZChwLCBsZW5ndGgpOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2hpZnQoKTsKICAgICBB
TFdBWVNfSU5MSU5FIGludCBwZWVrKGludCBvZmZzZXQpOwpAQCAtMTM5LDE4ICsxNDAsMjIgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKIAogICAgIFVTdHJpbmcg
Z2V0SW52YWxpZENoYXJNZXNzYWdlKCk7Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcigpIGNvbnN0OwotICAgIEFMV0FZU19JTkxJTkUgaW50IGN1cnJlbnRP
ZmZzZXQoKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQqIGN1cnJlbnRDaGFyYWN0
ZXIoKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlIC0gbV9jb2RlU3RhcnQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0T2Zmc2V0RnJvbUNoYXJPZmZzZXQoY29uc3QgVCogY2hhck9mZnNldCkgeyBzZXRPZmZzZXQo
Y2hhck9mZnNldCAtIG1fY29kZVN0YXJ0KTsgfQogCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyKiBtYWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCk7CiAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBtYWtlSWRlbnRp
Zmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgQUxXQVlT
X0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBtYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKIAogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBsYXN0VG9rZW5XYXNSZXN0cktleXdvcmQoKSBjb25zdDsKIAotICAgIGVudW0gU2hp
ZnRUeXBlIHsgRG9Cb3VuZHNDaGVjaywgRG9Ob3RCb3VuZHNDaGVjayB9OwogICAgIHRlbXBsYXRl
IDxpbnQgc2hpZnRBbW91bnQsIFNoaWZ0VHlwZSBzaG91bGRCb3VuZHNDaGVjaz4gdm9pZCBpbnRl
cm5hbFNoaWZ0KCk7CiAgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4g
QUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBwYXJzZUtleXdvcmQoSlNUb2tlbkRhdGEqKTsKICAg
ICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBBTFdBWVNfSU5MSU5FIEpT
VG9rZW5UeXBlIHBhcnNlSWRlbnRpZmllcihKU1Rva2VuRGF0YSosIHVuc2lnbmVkLCBib29sIHN0
cmljdE1vZGUpOworICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkSWRlbnRpZmllcnM+IE5F
VkVSX0lOTElORSBKU1Rva2VuVHlwZSBwYXJzZUlkZW50aWZpZXJTbG93Q2FzZShKU1Rva2VuRGF0
YSosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOwogICAgIHRlbXBsYXRlIDxib29sIHNob3Vs
ZEJ1aWxkU3RyaW5ncz4gQUxXQVlTX0lOTElORSBib29sIHBhcnNlU3RyaW5nKEpTVG9rZW5EYXRh
KiwgYm9vbCBzdHJpY3RNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmlu
Z3M+IE5FVkVSX0lOTElORSBib29sIHBhcnNlU3RyaW5nU2xvd0Nhc2UoSlNUb2tlbkRhdGEqLCBi
b29sIHN0cmljdE1vZGUpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwYXJzZUhleChkb3VibGUm
IHJldHVyblZhbHVlKTsKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VPY3RhbChkb3VibGUm
IHJldHVyblZhbHVlKTsKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VEZWNpbWFsKGRvdWJs
ZSYgcmV0dXJuVmFsdWUpOwpAQCAtMTYzLDE2ICsxNjgsMTYgQEAgcHJpdmF0ZToKICAgICBpbnQg
bV9saW5lTnVtYmVyOwogICAgIGludCBtX2xhc3RMaW5lTnVtYmVyOwogCi0gICAgVmVjdG9yPGNo
YXI+IG1fYnVmZmVyODsKKyAgICBWZWN0b3I8TENoYXI+IG1fYnVmZmVyODsKICAgICBWZWN0b3I8
VUNoYXI+IG1fYnVmZmVyMTY7CiAgICAgYm9vbCBtX3Rlcm1pbmF0b3I7CiAgICAgYm9vbCBtX2Rl
bGltaXRlZDsgLy8gZW5jb3VudGVyZWQgZGVsaW1pdGVyIGxpa2UgIiciIGFuZCAifSIgb24gbGFz
dCBydW4KICAgICBpbnQgbV9sYXN0VG9rZW47CiAKICAgICBjb25zdCBTb3VyY2VDb2RlKiBtX3Nv
dXJjZTsKLSAgICBjb25zdCBVQ2hhciogbV9jb2RlOwotICAgIGNvbnN0IFVDaGFyKiBtX2NvZGVT
dGFydDsKLSAgICBjb25zdCBVQ2hhciogbV9jb2RlRW5kOworICAgIGNvbnN0IFQqIG1fY29kZTsK
KyAgICBjb25zdCBUKiBtX2NvZGVTdGFydDsKKyAgICBjb25zdCBUKiBtX2NvZGVFbmQ7CiAgICAg
Ym9vbCBtX2lzUmVwYXJzaW5nOwogICAgIGJvb2wgbV9hdExpbmVTdGFydDsKICAgICBib29sIG1f
ZXJyb3I7CkBAIC0xODYsMzcgKzE5MSw1NSBAQCBwcml2YXRlOgogICAgIEpTR2xvYmFsRGF0YSog
bV9nbG9iYWxEYXRhOwogfTsKIAotQUxXQVlTX0lOTElORSBib29sIExleGVyOjppc1doaXRlU3Bh
Y2UoaW50IGNoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4
ZXI8VD46OmlzV2hpdGVTcGFjZShpbnQgY2gpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUkoY2gpID8g
KGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09IDB4QiB8fCBjaCA9PSAweEMpIDogKFdU
Rjo6VW5pY29kZTo6aXNTZXBhcmF0b3JTcGFjZShjaCkgfHwgY2ggPT0gMHhGRUZGKTsKIH0KIAot
QUxXQVlTX0lOTElORSBib29sIExleGVyOjppc0xpbmVUZXJtaW5hdG9yKGludCBjaCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojppc0xpbmVUZXJt
aW5hdG9yKGludCBjaCkKIHsKICAgICByZXR1cm4gY2ggPT0gJ1xyJyB8fCBjaCA9PSAnXG4nIHx8
IChjaCAmIH4xKSA9PSAweDIwMjg7CiB9CiAKLWlubGluZSB1bnNpZ25lZCBjaGFyIExleGVyOjpj
b252ZXJ0SGV4KGludCBjMSwgaW50IGMyKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUg
dW5zaWduZWQgY2hhciBMZXhlcjxUPjo6Y29udmVydEhleChpbnQgYzEsIGludCBjMikKIHsKICAg
ICByZXR1cm4gKHRvQVNDSUlIZXhWYWx1ZShjMSkgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoYzIp
OwogfQogCi1pbmxpbmUgVUNoYXIgTGV4ZXI6OmNvbnZlcnRVbmljb2RlKGludCBjMSwgaW50IGMy
LCBpbnQgYzMsIGludCBjNCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIFVDaGFyIExl
eGVyPFQ+Ojpjb252ZXJ0VW5pY29kZShpbnQgYzEsIGludCBjMiwgaW50IGMzLCBpbnQgYzQpCiB7
CiAgICAgcmV0dXJuIChjb252ZXJ0SGV4KGMxLCBjMikgPDwgOCkgfCBjb252ZXJ0SGV4KGMzLCBj
NCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI6Om1ha2VJZGVu
dGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+Ojpt
YWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsK
ICAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjo6bGV4
RXhwZWN0SWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuSW5mbyogdG9r
ZW5JbmZvLCB1bnNpZ25lZCBsZXhUeXBlLCBib29sIHN0cmljdE1vZGUpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJ
ZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAg
IHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgY29u
c3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuICZtX2Fy
ZW5hLT5tYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIEpT
VG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiB0b2tl
bkRhdGEsIEpTVG9rZW5JbmZvKiB0b2tlbkluZm8sIHVuc2lnbmVkIGxleFR5cGUsIGJvb2wgc3Ry
aWN0TW9kZSkKIHsKLSAgICBBU1NFUlQoKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSk7
Ci0gICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gbV9jb2RlOwotICAgIGNvbnN0IFVDaGFyKiBwdHIg
PSBzdGFydDsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gbV9jb2RlRW5kOworICAgIEFTU0VSVCgo
bGV4VHlwZSAmIExleElnbm9yZVJlc2VydmVkV29yZHMpKTsKKyAgICBjb25zdCBUKiBzdGFydCA9
IG1fY29kZTsKKyAgICBjb25zdCBUKiBwdHIgPSBzdGFydDsKKyAgICBjb25zdCBUKiBlbmQgPSBt
X2NvZGVFbmQ7CiAgICAgaWYgKHB0ciA+PSBlbmQpIHsKICAgICAgICAgQVNTRVJUKHB0ciA9PSBl
bmQpOwogICAgICAgICBnb3RvIHNsb3dDYXNlOwpAQCAtMjQxLDcgKzI2NCw3IEBAIEFMV0FZU19J
TkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6OmxleEV4cGUKICAgICBtX2NvZGUgPSBwdHI7CiAKICAg
ICAvLyBDcmVhdGUgdGhlIGlkZW50aWZpZXIgaWYgbmVlZGVkCi0gICAgaWYgKGxleFR5cGUgJiBE
b250QnVpbGRLZXl3b3JkcykKKyAgICBpZiAobGV4VHlwZSAmIExleERvbnRCdWlsZEtleXdvcmRz
KQogICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKICAgICBlbHNlCiAgICAgICAgIHRva2Vu
RGF0YS0+aWRlbnQgPSBtYWtlSWRlbnRpZmllcihzdGFydCwgcHRyIC0gc3RhcnQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gOTkyMDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDcgQEAgUGFyc2VyOjpQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LAogICAgICwgbV9sYXN0SWRlbnRpZmllcigwKQogICAgICwgbV9zb3VyY2VFbGVtZW50cygwKQog
ewotICAgIG1fbGV4ZXIgPSBuZXcgTGV4ZXIoZ2xvYmFsRGF0YSk7CisgICAgbV9sZXhlciA9IG5l
dyBMZXhlcjxVQ2hhcj4oZ2xvYmFsRGF0YSk7CiAgICAgbV9hcmVuYSA9IG1fZ2xvYmFsRGF0YS0+
cGFyc2VyQXJlbmE7CiAgICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsIG1fYXJlbmEpOwogCkBA
IC0xMTU4LDkgKzExNTgsOSBAQCB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1
aWxkCiAgICAgY2FzZSBTVFJJTkc6IHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAgaWYgKGNvbXBsZXRlIHx8ICh3YXNJZGVu
dCAmJiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+Z2V0IHx8ICppZGVu
dCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnNldCkpKQotICAgICAgICAgICAgbmV4
dEV4cGVjdElkZW50aWZpZXIoTGV4ZXI6Oklnbm9yZVJlc2VydmVkV29yZHMpOworICAgICAgICAg
ICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4SWdub3JlUmVzZXJ2ZWRXb3Jkcyk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyOjpJZ25vcmVSZXNl
cnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKKyAgICAgICAgICAg
IG5leHRFeHBlY3RJZGVudGlmaWVyKExleElnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRl
cjo6RG9udEJ1aWxkS2V5d29yZHMpOwogICAgICAgICAKICAgICAgICAgaWYgKG1hdGNoKENPTE9O
KSkgewogICAgICAgICAgICAgbmV4dCgpOwpAQCAtMTQ4OSw3ICsxNDg5LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBjYXNlIERPVDogewogICAg
ICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgICAgICBpbnQg
ZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgbmV4dEV4cGVjdElk
ZW50aWZpZXIoTGV4ZXI6Oklnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1
aWxkS2V5d29yZHMpOworICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4SWdub3Jl
UmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CiAgICAgICAg
ICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVEb3RBY2Nlc3MobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgYmFzZSwgbV90b2tlbi5tX2Rh
dGEuaWRlbnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmQoKSk7CiAg
ICAgICAgICAgICBuZXh0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHByaXZhdGU6CiAgICAgbXV0
YWJsZSBjb25zdCBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBjb25zdCBTb3VyY2VD
b2RlKiBtX3NvdXJjZTsKICAgICBQYXJzZXJBcmVuYSogbV9hcmVuYTsKLSAgICBMZXhlciogbV9s
ZXhlcjsKKyAgICBMZXhlcjxVQ2hhcj4qIG1fbGV4ZXI7CiAgICAgCiAgICAgU3RhY2tCb3VuZHMg
bV9zdGFjazsKICAgICBib29sIG1fZXJyb3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlckFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXJBcmVuYS5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBjbGVhcigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihK
U0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFQqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50
aWZpZXImIG1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoSlNHbG9iYWxEYXRhKiwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOworCiAgICAgICAgIGNvbnN0IElkZW50
aWZpZXImIG1ha2VOdW1lcmljSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBkb3VibGUgbnVtYmVy
KTsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJz
LmlzRW1wdHkoKTsgfQpAQCAtNjUsNyArNjgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Rml4ZWRBcnJheTxJZGVudGlmaWVyKiwgTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyPiBtX3JlY2Vu
dElkZW50aWZpZXJzOwogICAgIH07CiAKLSAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZp
ZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50
aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25z
dCBUKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKGNoYXJh
Y3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyKSB7CiAgICAgICAgICAgICBtX2lk
ZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwpAQCAtODYsNiArOTAsMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBt
X2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElk
ZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hh
YmxlQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlm
aWVyOjpjcmVhdGVMQ2hhckZyb21VQ2hhcihnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIGlmIChJZGVudGlmaWVyKiBp
ZGVudCA9IG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKmlkZW50OworICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRp
ZmllcihnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIG1fc2hv
cnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9ICZtX2lkZW50aWZpZXJzLmxhc3QoKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKKyAgICAgICAgfQorICAgICAg
ICBJZGVudGlmaWVyKiBpZGVudCA9IG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07
CisgICAgICAgIGlmIChpZGVudCAmJiBJZGVudGlmaWVyOjplcXVhbChpZGVudC0+aW1wbCgpLCBj
aGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuICppZGVudDsKKyAgICAgICAg
bV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIoZ2xv
YmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAgICAgIG1fcmVjZW50SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVycy5sYXN0KCk7CisgICAgICAgIHJldHVy
biBtX2lkZW50aWZpZXJzLmxhc3QoKTsKKyAgICB9CisgICAgCiAgICAgaW5saW5lIGNvbnN0IElk
ZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIG51bWJlcikKICAgICB7CiAgICAgICAgIG1faWRlbnRp
ZmllcnMuYXBwZW5kKElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgVVN0cmluZzo6bnVtYmVyKG51bWJl
cikpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oCShy
ZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXItPmRhdGEo
KSArIG1fc3RhcnRDaGFyOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2VuZENoYXIgLSBtX3N0YXJ0Q2hhcjsgfQogICAgICAgICAKLSAgICAgICAgU291cmNlQ29kZSBz
dWJFeHByZXNzaW9uKGludCwgaW50LCBpbnQpOworICAgICAgICBTb3VyY2VDb2RlIHN1YkV4cHJl
c3Npb24odW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3Byb3ZpZGVyOwpAQCAtODgsOCArODgsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVybiBTb3VyY2VDb2RlKFVTdHJpbmdTb3Vy
Y2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3RhcnRQb3Np
dGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSk7CiAgICAgfQotICAgIAotICAgIGlubGluZSBTb3Vy
Y2VDb2RlIFNvdXJjZUNvZGU6OnN1YkV4cHJlc3Npb24oaW50IG9wZW5CcmFjZSwgaW50IGNsb3Nl
QnJhY2UsIGludCBmaXJzdExpbmUpCisKKyAgICBpbmxpbmUgU291cmNlQ29kZSBTb3VyY2VDb2Rl
OjpzdWJFeHByZXNzaW9uKHVuc2lnbmVkIG9wZW5CcmFjZSwgdW5zaWduZWQgY2xvc2VCcmFjZSwg
aW50IGZpcnN0TGluZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChwcm92aWRlcigpLT5kYXRhKClb
b3BlbkJyYWNlXSA9PSAneycpOwogICAgICAgICBBU1NFUlQocHJvdmlkZXIoKS0+ZGF0YSgpW2Ns
b3NlQnJhY2VdID09ICd9Jyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Nv
dXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgZ2V0UmFuZ2Uo
aW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgVUNo
YXIqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nSW1wbCog
c3RyaW5nRGF0YSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBpbnQgbGVuZ3RoKCkgY29u
c3QgPSAwOwogICAgICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJsKCkgeyByZXR1cm4g
bV91cmw7IH0KQEAgLTkxLDYgKzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gbV9zb3VyY2Uuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhcnQsIGVuZCAtIHN0YXJ0KTsK
ICAgICAgICAgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS5sZW5ndGgoKTsgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCShyZXZp
c2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlk
ZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBTb3VyY2VQcm92aWRlckNhY2hl
X2gKKyNkZWZpbmUgU291cmNlUHJvdmlkZXJDYWNoZV9oCisKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTQ2LDMgKzQ5LDUgQEAgcHJp
dmF0ZToKIH07CiAKIH0KKworI2VuZGlmIC8vIFNvdXJjZVByb3ZpZGVyQ2FjaGVfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9u
IDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNSw4ICsxMTUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgQ3JlYXRlc0FTVCA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBib29sIE5lZWRz
RnJlZVZhcmlhYmxlSW5mbyA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBib29sIENhblVzZUZ1
bmN0aW9uQ2FjaGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRL
ZXl3b3JkcyA9IExleGVyOjpEb250QnVpbGRLZXl3b3JkczsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgRG9udEJ1aWxkU3RyaW5ncyA9IExleGVyOjpEb250QnVpbGRTdHJpbmdzOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRLZXl3b3JkcyA9IExleERvbnRCdWlsZEtleXdv
cmRzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJpbmdzID0gTGV4RG9u
dEJ1aWxkU3RyaW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJu
IDE7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGluc2VydFNlbWljb2xvbklmTmVlZAogCiAgICAgZm9yIChzaXplX3QgaSA9IGZ1bmN0
aW9uQm9keS5sZW5ndGgoKSAtIDI7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgVUNoYXIgY2ggPSBm
dW5jdGlvbkJvZHlbaV07Ci0gICAgICAgIGlmICghTGV4ZXI6OmlzV2hpdGVTcGFjZShjaCkgJiYg
IUxleGVyOjppc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICBpZiAoIUxleGVyPFVDaGFy
Pjo6aXNXaGl0ZVNwYWNlKGNoKSAmJiAhTGV4ZXI8VUNoYXI+Ojppc0xpbmVUZXJtaW5hdG9yKGNo
KSkgewogICAgICAgICAgICAgaWYgKGNoICE9ICc7JyAmJiBjaCAhPSAnfScpCiAgICAgICAgICAg
ICAgICAgZnVuY3Rpb25Cb2R5ID0gbWFrZVVTdHJpbmcoZnVuY3Rpb25Cb2R5LnN1YnN0cmluZ1No
YXJpbmdJbXBsKDAsIGkgKyAxKSwgIjsiLCBmdW5jdGlvbkJvZHkuc3Vic3RyaW5nU2hhcmluZ0lt
cGwoaSArIDEsIGZ1bmN0aW9uQm9keS5sZW5ndGgoKSAtIChpICsgMSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiA5OTIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIHVzaW5nIFdURjo6VGhyZWFkU3BlY2lmaWM7
CkBAIC00MywxOSArNDIsMTMgQEAgSWRlbnRpZmllclRhYmxlOjp+SWRlbnRpZmllclRhYmxlKCkK
ICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAoKml0ZXIpLT5zZXRJc0lkZW50
aWZpZXIoZmFsc2UpOwogfQorCiBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJh
dG9yLCBib29sPiBJZGVudGlmaWVyVGFibGU6OmFkZChTdHJpbmdJbXBsKiB2YWx1ZSkKIHsKICAg
ICBzdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PSBtX3RhYmxlLmFkZCh2YWx1ZSk7CiAgICAgKCpyZXN1bHQuZmlyc3QpLT5zZXRJc0lkZW50aWZp
ZXIodHJ1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLXRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1zdGQ6OnBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29s
PiBJZGVudGlmaWVyVGFibGU6OmFkZChVIHZhbHVlKQotewotICAgIHN0ZDo6cGFpcjxIYXNoU2V0
PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFibGUuYWRkPFUsIFY+
KHZhbHVlKTsKLSAgICAoKnJlc3VsdC5maXJzdCktPnNldElzSWRlbnRpZmllcih0cnVlKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQogCiBJZGVudGlmaWVyVGFibGUqIGNyZWF0ZUlkZW50aWZpZXJU
YWJsZSgpCiB7CkBAIC05MCw2ICs4MywzMSBAQCBzdHJ1Y3QgSWRlbnRpZmllckNTdHJpbmdUcmFu
c2xhdG9yIHsKICAgICB9CiB9OwogCitzdHJ1Y3QgSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyVHJh
bnNsYXRvciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hhckJ1ZmZlcjxVQ2hh
cj4mIGJ1ZikKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNo
PFVDaGFyPihidWYucywgYnVmLmxlbmd0aCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29s
IGVxdWFsKFN0cmluZ0ltcGwqIHN0ciwgY29uc3QgQ2hhckJ1ZmZlcjxVQ2hhcj4mIGJ1ZikKKyAg
ICB7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVu
Z3RoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwq
JiBsb2NhdGlvbiwgY29uc3QgQ2hhckJ1ZmZlcjxVQ2hhcj4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkK
KyAgICB7CisgICAgICAgIExDaGFyKiBkOworICAgICAgICBTdHJpbmdJbXBsKiByID0gU3RyaW5n
SW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYubGVuZ3RoLCBkKS5sZWFrUmVmKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBVQ2hhciBjID0gYnVmLnNbaV07CisgICAgICAgICAgICBBU1NFUlQoYyA8PSAweGZmKTsK
KyAgICAgICAgICAgIGRbaV0gPSBjOworICAgICAgICB9CisgICAgICAgIHItPnNldEhhc2goaGFz
aCk7CisgICAgICAgIGxvY2F0aW9uID0gcjsgCisgICAgfQorfTsKKwogUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBJZGVudGlmaWVyOjphZGQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBj
aGFyKiBjKQogewogICAgIGlmICghYykKQEAgLTEyMiwzMiArMTQwLDI0IEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEUKICAgICByZXR1cm4gYWRkKCZleGVjLT5nbG9i
YWxEYXRhKCksIGMpOwogfQogCi1zdHJ1Y3QgVUNoYXJCdWZmZXIgewotICAgIGNvbnN0IFVDaGFy
KiBzOwotICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci19OwotCi1zdHJ1Y3QgSWRlbnRpZmllclVD
aGFyQnVmZmVyVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVUNo
YXJCdWZmZXImIGJ1ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1
dGVIYXNoPFVDaGFyPihidWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJv
b2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgp
OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRp
b24sIGNvbnN0IFVDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAg
ICBVQ2hhciogZDsKLSAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1JlZigpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGJ1Zi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGRbaV0gPSBidWYu
c1tpXTsKLSAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24gPSByOyAK
K1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkOChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGgg
PT0gMSkgeworICAgICAgICBVQ2hhciBjID0gc1swXTsKKyAgICAgICAgQVNTRVJUKGMgPD0gMHhm
Zik7CisgICAgICAgIGlmIChjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCisgICAgICAg
ICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOwogICAgIH0KLX07CisgICAgCisgICAgaWYgKCFsZW5n
dGgpCisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOworICAgIENoYXJCdWZmZXI8
VUNoYXI+IGJ1ZiA9IHtzLCBsZW5ndGh9OyAKKyAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+
OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxl
LT5hZGQ8Q2hhckJ1ZmZlcjxVQ2hhcj4sIElkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0
b3IgPihidWYpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRl
ZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgorICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBw
YWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCisgICAgcmV0dXJuIGFkZFJlc3VsdC5zZWNvbmQg
PyBhZG9wdFJlZigqYWRkUmVzdWx0LmZpcnN0KSA6ICphZGRSZXN1bHQuZmlyc3Q7Cit9CiAKIHVp
bnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNvbnN0IFVTdHJpbmcmIHN0cmluZywgYm9vbCYg
b2spCiB7CkBAIC0xOTMsMjggKzIwMyw2IEBAIHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMy
KGNvbnN0IFVTdHIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIq
IHMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKGxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIFVDaGFy
IGMgPSBzWzBdOwotICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0g
ICAgICAgICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOwotICAgIH0KLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgVUNoYXJCdWZmZXIgYnVm
ID0ge3MsIGxlbmd0aH07IAotICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9y
LCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZDxVQ2hh
ckJ1ZmZlciwgSWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmKTsKLQotICAgIC8v
IElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0
IGl0LgotICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMg
c28uCi0gICAgcmV0dXJuIGFkZFJlc3VsdC5zZWNvbmQgPyBhZG9wdFJlZigqYWRkUmVzdWx0LmZp
cnN0KSA6ICphZGRSZXN1bHQuZmlyc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIGFkZCgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzLCBsZW5ndGgpOwotfQot
CiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbCogcikKIHsKICAgICBBU1NFUlQoIXItPmlzSWRl
bnRpZmllcigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAi
SlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKICNpbmNsdWRlICJV
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsMTEgKzM3LDExIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBJZGVudGlmaWVyKCkgeyB9CiAKICAgICAgICAgSWRlbnRp
ZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMs
IHMpKSB7IH0gLy8gT25seSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgICAg
ICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgp
IDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMsIGxlbmd0aCkpIHsgfQogICAgICAgICBJZGVudGlmaWVy
KEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcmVwKSA6IG1fc3RyaW5nKGFkZChleGVjLCBy
ZXApKSB7IH0gCiAgICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3Ry
aW5nJiBzKSA6IG1fc3RyaW5nKGFkZChleGVjLCBzLmltcGwoKSkpIHsgfQogCiAgICAgICAgIElk
ZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBzKSA6IG1fc3Ry
aW5nKGFkZChnbG9iYWxEYXRhLCBzKSkgeyB9IC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmlu
ZyBsaXRlcmFscy4KKyAgICAgICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBz
LCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRh
LCBzLCBsZW5ndGgpKSB7IH0KICAgICAgICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcmVwKSkg
eyB9IAogICAgICAgICBJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
VVN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcy5pbXBsKCkpKSB7IH0KQEAg
LTUyLDcgKzUzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKTsgfQogICAgICAgICAKICAgICAgICAgQ1N0cmlu
ZyBhc2NpaSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmFzY2lpKCk7IH0KLSAgICAgICAgCisK
KyAgICAgICAgc3RhdGljIElkZW50aWZpZXIgY3JlYXRlTENoYXJGcm9tVUNoYXIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgeyByZXR1cm4gSWRl
bnRpZmllcihnbG9iYWxEYXRhLCBhZGQ4KGdsb2JhbERhdGEsIHMsIGxlbmd0aCkpOyB9CisKICAg
ICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHkp
OwogICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSogZXhlYywgaW50IHkp
OwogICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSogZXhlYywgZG91Ymxl
IHkpOwpAQCAtNzcsNiArODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKik7CiAgICAgICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKmEsIGNvbnN0IGNoYXIq
YikgeyByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KGIpKTsgfTsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1w
bCosIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3Ry
aW5nSW1wbCogYikgeyByZXR1cm4gOjplcXVhbChhLCBiKTsgfQogCkBAIC04OSw4ICs5Myw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlm
aWVyJiBhLCBjb25zdCBJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhLm1fc3RyaW5nLmltcGwoKSA9
PSBiLm1fc3RyaW5nLmltcGwoKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJ
ZGVudGlmaWVyJiBhLCBjb25zdCBMQ2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5tX3N0cmluZy5p
bXBsKCksIGIpOyB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRk
KEV4ZWNTdGF0ZSosIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYWRkKEpTR2xvYmFsRGF0YSosIGNvbnN0IFQqLCBpbnQgbGVuZ3RoKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkOChKU0dsb2JhbERhdGEq
LCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmco
VCk7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0
ZSogZXhlYywgU3RyaW5nSW1wbCogcikKICAgICAgICAgewpAQCAtMTE3LDcgKzEyMiw2NiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRpZmll
clRhYmxlKEV4ZWNTdGF0ZSopOwogICAgICAgICBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVu
dGlmaWVyVGFibGUoSlNHbG9iYWxEYXRhKik7CiAgICAgfTsKKworICAgIHRlbXBsYXRlIDw+IEFM
V0FZU19JTkxJTkUgYm9vbCBJZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmco
TENoYXIpCisgICAgeworICAgICAgICBBU1NFUlQobWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nID09
IDB4ZmYpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8PiBB
TFdBWVNfSU5MSU5FIGJvb2wgSWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KFVDaGFyIGMpCisgICAgeworICAgICAgICByZXR1cm4gKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3Qg
Q2hhckJ1ZmZlciB7CisgICAgICAgIGNvbnN0IFQqIHM7CisgICAgICAgIHVuc2lnbmVkIGludCBs
ZW5ndGg7CisgICAgfTsKICAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1
Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yIHsKKyAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaDxUPihidWYucywgYnVmLmxlbmd0aCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0lt
cGwqIHN0ciwgY29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoc3RyLCBidWYucywgYnVmLmxlbmd0aCk7CisgICAg
ICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0
aW9uLCBjb25zdCBDaGFyQnVmZmVyPFQ+JiBidWYsIHVuc2lnbmVkIGhhc2gpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFQqIGQ7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiByID0gU3RyaW5nSW1w
bDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYubGVuZ3RoLCBkKS5sZWFrUmVmKCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGJ1Zi5sZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgICAgICBkW2ldID0gYnVmLnNbaV07CisgICAgICAgICAgICByLT5zZXRIYXNoKGhhc2gpOwor
ICAgICAgICAgICAgbG9jYXRpb24gPSByOyAKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6
OmFkZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFQqIHMsIGludCBsZW5ndGgpCisg
ICAgeworICAgICAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIFQgYyA9IHNbMF07
CisgICAgICAgICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7
CisgICAgICAgIENoYXJCdWZmZXI8VD4gYnVmID0ge3MsIGxlbmd0aH07IAorICAgICAgICBwYWly
PEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gZ2xvYmFs
RGF0YS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxUPiwgSWRlbnRpZmllckNoYXJC
dWZmZXJUcmFuc2xhdG9yPFQ+ID4oYnVmKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSBz
dHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgorICAg
ICAgICAvLyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBpZiB0aGF0IGlzIHNvLgor
ICAgICAgICByZXR1cm4gYWRkUmVzdWx0LnNlY29uZCA/IGFkb3B0UmVmKCphZGRSZXN1bHQuZmly
c3QpIDogKmFkZFJlc3VsdC5maXJzdDsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50aWZpZXImIGIpCiAgICAgewogICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgYik7CkBAIC0xNTIsNyArMjE2LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwociwgcyk7
CiAgICAgfQotICAgIAorCisgICAgaW5saW5lIGJvb2wgSWRlbnRpZmllcjo6ZXF1YWwoY29uc3Qg
U3RyaW5nSW1wbCogciwgY29uc3QgTENoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHIsIHMsIGxlbmd0aCk7CisgICAgfQorCiAgICAgaW5s
aW5lIGJvb2wgSWRlbnRpZmllcjo6ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogciwgY29uc3QgVUNo
YXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAgICAgIHJldHVybiBXVEY6OmVxdWFs
KHIsIHMsIGxlbmd0aCk7CkBAIC0xNzcsNiArMjQ2LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgaW50LCBJZGVudGlmaWVyUmVw
SGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1wbD4gPiwgSWRlbnRpZmllck1hcEluZGV4
SGFzaFRyYWl0cz4gSWRlbnRpZmllck1hcDsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+CisgICAgc3RkOjpwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwg
Ym9vbD4gSWRlbnRpZmllclRhYmxlOjphZGQoVSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0ZDo6
cGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fdGFi
bGUuYWRkPFUsIFY+KHZhbHVlKTsKKyAgICAgICAgKCpyZXN1bHQuZmlyc3QpLT5zZXRJc0lkZW50
aWZpZXIodHJ1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIElkZW50aWZpZXJfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAg
c3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogICAgICAgICBpZiAoYyA9
PSAnJScpIHsKICAgICAgICAgICAgIGludCBjaGFyTGVuID0gMDsKICAgICAgICAgICAgIGlmIChr
IDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0KHBbMV0pICYmIGlzQVNDSUlIZXhEaWdpdChw
WzJdKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgYjAgPSBMZXhlcjo6Y29udmVydEhl
eChwWzFdLCBwWzJdKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyIGIwID0gTGV4ZXI8VUNo
YXI+Ojpjb252ZXJ0SGV4KHBbMV0sIHBbMl0pOwogICAgICAgICAgICAgICAgIGNvbnN0IGludCBz
ZXF1ZW5jZUxlbiA9IFVURjhTZXF1ZW5jZUxlbmd0aChiMCk7CiAgICAgICAgICAgICAgICAgaWYg
KHNlcXVlbmNlTGVuICE9IDAgJiYgayA8PSBsZW4gLSBzZXF1ZW5jZUxlbiAqIDMpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2hhckxlbiA9IHNlcXVlbmNlTGVuICogMzsKQEAgLTk0LDcgKzk0LDcg
QEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNlcXVlbmNlTGVuOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBxID0gcCArIGkgKiAzOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHFbMF0gPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChxWzFdKSAmJiBp
c0FTQ0lJSGV4RGlnaXQocVsyXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVu
Y2VbaV0gPSBMZXhlcjo6Y29udmVydEhleChxWzFdLCBxWzJdKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXF1ZW5jZVtpXSA9IExleGVyPFVDaGFyPjo6Y29udmVydEhleChxWzFdLCBx
WzJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXJMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGMKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChwWzJdKSAm
JiBpc0FTQ0lJSGV4RGlnaXQocFszXSkKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQVND
SUlIZXhEaWdpdChwWzRdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocFs1XSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgY2hhckxlbiA9IDY7Ci0gICAgICAgICAgICAgICAgICAgIHUgPSBMZXhlcjo6Y29u
dmVydFVuaWNvZGUocFsyXSwgcFszXSwgcFs0XSwgcFs1XSk7CisgICAgICAgICAgICAgICAgICAg
IHUgPSBMZXhlcjxVQ2hhcj46OmNvbnZlcnRVbmljb2RlKHBbMl0sIHBbM10sIHBbNF0sIHBbNV0p
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaGFy
TGVuICYmICh1ID09IDAgfHwgdSA+PSAxMjggfHwgIXN0cmNocihkb05vdFVuZXNjYXBlLCB1KSkp
IHsKQEAgLTE3MywxMiArMTczLDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VEaWdpdCh1bnNpZ25lZCBz
aG9ydCBjLCAKICAgICByZXR1cm4gZGlnaXQ7CiB9CiAKLWRvdWJsZSBwYXJzZUludE92ZXJmbG93
KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGludCByYWRpeCkKK2RvdWJsZSBwYXJzZUludE92
ZXJmbG93KGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpCiB7CiAgICAgZG91
YmxlIG51bWJlciA9IDAuMDsKICAgICBkb3VibGUgcmFkaXhNdWx0aXBsaWVyID0gMS4wOwogCi0g
ICAgZm9yIChjb25zdCBjaGFyKiBwID0gcyArIGxlbmd0aCAtIDE7IHAgPj0gczsgcC0tKSB7Cisg
ICAgZm9yIChjb25zdCBMQ2hhciogcCA9IHMgKyBsZW5ndGggLSAxOyBwID49IHM7IHAtLSkgewog
ICAgICAgICBpZiAocmFkaXhNdWx0aXBsaWVyID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKSkgewogICAgICAgICAgICAgaWYgKCpwICE9ICcwJykgewogICAgICAgICAg
ICAgICAgIG51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsK
QEAgLTU3OCwxMiArNTc4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY1UKICAgICAgICAgVUNoYXIgdTsKICAgICAgICAgaWYgKGNbMF0gPT0gJyUnICYmIGsgPD0g
bGVuIC0gNiAmJiBjWzFdID09ICd1JykgewogICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdp
dChjWzJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY1szXSkgJiYgaXNBU0NJSUhleERpZ2l0KGNbNF0p
ICYmIGlzQVNDSUlIZXhEaWdpdChjWzVdKSkgewotICAgICAgICAgICAgICAgIHUgPSBMZXhlcjo6
Y29udmVydFVuaWNvZGUoY1syXSwgY1szXSwgY1s0XSwgY1s1XSk7CisgICAgICAgICAgICAgICAg
dSA9IExleGVyPFVDaGFyPjo6Y29udmVydFVuaWNvZGUoY1syXSwgY1szXSwgY1s0XSwgY1s1XSk7
CiAgICAgICAgICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgICAgICAgIGsgKz0gNTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjWzBdID09ICclJyAmJiBrIDw9IGxlbiAtIDMg
JiYgaXNBU0NJSUhleERpZ2l0KGNbMV0pICYmIGlzQVNDSUlIZXhEaWdpdChjWzJdKSkgewotICAg
ICAgICAgICAgdSA9IFVDaGFyKExleGVyOjpjb252ZXJ0SGV4KGNbMV0sIGNbMl0pKTsKKyAgICAg
ICAgICAgIHUgPSBVQ2hhcihMZXhlcjxVQ2hhcj46OmNvbnZlcnRIZXgoY1sxXSwgY1syXSkpOwog
ICAgICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgICAgayArPSAyOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqKTsKIAogICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQgPSA5MDA3MTk5MjU0NzQwOTky
LjA7Ci0gICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hhciosIGludCBsZW5ndGgs
IGludCByYWRpeCk7CisgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3QgTENoYXIqLCBp
bnQgbGVuZ3RoLCBpbnQgcmFkaXgpOworICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIHBhcnNlSW50
T3ZlcmZsb3coY29uc3QgY2hhciogcywgaW50IGxlbmd0aCwgaW50IHJhZGl4KSB7IHJldHVybiBw
YXJzZUludE92ZXJmbG93KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3Ro
LCByYWRpeCk7IH0KICAgICBkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgsIGludCByYWRpeCk7CiAgICAgYm9vbCBpc1N0cldoaXRlU3BhY2UoVUNoYXIpOwog
ICAgIGRvdWJsZSBqc1RvTnVtYmVyKGNvbnN0IFVTdHJpbmcmIHMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDk5
MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDE3ICs1MCwxNyBAQCBib29sIExpdGVyYWxQYXJzZXI6OnRy
eUpTT05QUGFyc2UoVmVjdG9yCiAgICAgZG8gewogICAgICAgICBWZWN0b3I8SlNPTlBQYXRoRW50
cnk+IHBhdGg7CiAgICAgICAgIC8vIFVuZ3VhcmRlZCBuZXh0IHRvIHN0YXJ0IG9mZiB0aGUgbGV4
ZXIKLSAgICAgICAgSWRlbnRpZmllciBuYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIG1fbGV4ZXIu
Y3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50
aWZpZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0
LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3Rh
cnQpOwogICAgICAgICBKU09OUFBhdGhFbnRyeSBlbnRyeTsKICAgICAgICAgaWYgKG5hbWUgPT0g
bV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dmFyS2V5d29yZCkgewogICAgICAg
ICAgICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZpZXIpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50
cnlUeXBlRGVjbGFyZTsKLSAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50
aWZpZXIobV9leGVjLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJl
bnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOworICAgICAgICAg
ICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRh
KCksIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCku
ZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICBwYXRoLmFw
cGVuZChlbnRyeSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlbnRyeS5tX3R5cGUg
PSBKU09OUFBhdGhFbnRyeVR5cGVEb3Q7Ci0gICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5h
bWUgPSBJZGVudGlmaWVyKG1fZXhlYywgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsK
KyAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXIoJm1fZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJl
bnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwogICAgICAgICAg
ICAgcGF0aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2V4ZWMtPmds
b2JhbERhdGEoKS5rZXl3b3Jkcy0+aXNLZXl3b3JkKGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSkpCkBA
IC04NSw3ICs4NSw3IEBAIGJvb2wgTGl0ZXJhbFBhcnNlcjo6dHJ5SlNPTlBQYXJzZShWZWN0b3IK
ICAgICAgICAgICAgICAgICBlbnRyeS5tX3R5cGUgPSBKU09OUFBhdGhFbnRyeVR5cGVEb3Q7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZpZXIpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBlbnRyeS5tX3Bh
dGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKG1fZXhlYywgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5z
dGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJZGVudGlm
aWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwg
bV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgVG9rTFBhcmVuOiB7CkBAIC0zNDAsNyArMzQwLDcgQEAgdGVtcGxhdGUgPExpdGVyYWxQYXJz
ZXI6OlBhcnNlck1vZGUgbW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBU
b2tFcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChKU0M6OkxleGVyOjpjb252ZXJ0
VW5pY29kZShtX3B0clsxXSwgbV9wdHJbMl0sIG1fcHRyWzNdLCBtX3B0cls0XSkpOworICAgICAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChKU0M6OkxleGVyPFVDaGFyPjo6Y29udmVydFVu
aWNvZGUobV9wdHJbMV0sIG1fcHRyWzJdLCBtX3B0clszXSwgbV9wdHJbNF0pKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9wdHIgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNp
b24gOTkyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9f
Q0ZTdHJpbmcgKiBDRlN0cmkKIC8vIExhbmRpbmcgdGhlIGZpbGUgbW92ZXMgaW4gb25lIHBhdGNo
LCB3aWxsIGZvbGxvdyBvbiB3aXRoIHBhdGNoZXMgdG8gY2hhbmdlIHRoZSBuYW1lc3BhY2VzLgog
bmFtZXNwYWNlIEpTQyB7CiBzdHJ1Y3QgSWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOwotc3Ry
dWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsKLXN0cnVjdCBJZGVudGlmaWVyVUNo
YXJCdWZmZXJUcmFuc2xhdG9yOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBJZGVudGlm
aWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CitzdHJ1Y3QgSWRlbnRpZmllckxDaGFyRnJvbVVDaGFy
VHJhbnNsYXRvcjsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02Myw4ICs2Myw5IEBAIHR5cGVk
ZWYgYm9vbCAoKklzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyKSgKIGNsYXNzIFN0cmluZ0ltcGwgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cmluZ0ltcGwpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9y
OwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7
Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7
CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxM
Q2hhcj47CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNs
YXRvcjxVQ2hhcj47CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJMQ2hhckZyb21V
Q2hhclRyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9y
OwogICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CiAg
ICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3I7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5OTMzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTExLTA0ICBNaWNoYWVsIFNh
Ym9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFRvd2FyZHMgOCBCaXQgU3RyaW5n
czogVGVtcGxhdGl6ZSBKU0M6OkxleGVyIGNsYXNzIGJ5IGNoYXJhY3RlciB0eXBlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMzMQorCisgICAgICAg
IENoYW5nZWQgdGhlIFNvdXJjZVByb3ZpZGVyOjpkYXRhKCkgdmlydHVhbCBtZXRob2QgdG8gcmV0
dXJuIGEKKyAgICAgICAgU3RyaW5nSW1wbCogaW5zdGVhZCBvZiBhIFVDaGFyKi4KKyAgICAgICAg
Q2hhbmdlZCBJZGVudGlmaWVyKCkgY29uc3RydWN0b3IgdG8gdXNlIEpTR2xvYmFsRGF0YSouCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIC0gcmVmYWN0b3JlZCBTb3VyY2VQcm92aWRlciBjbGFzcyBhbmQgc3ViLWNsYXNzZXMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXI6OnN0cmluZ0RhdGEpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6c3RyaW5nRGF0YSk6CisgICAgICAgICogYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFFW
YXJpYW50VG9WYWx1ZSk6CisKIDIwMTEtMTEtMDQgIEZhZHkgU2FtdWVsICA8ZnNhbXVlbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgQ1NTIEFzcGVjdCBSYXRpbyBQcm9wZXJ0eSBQYXJzaW5nIFN0
YWdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hl
ZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgSlNDOjpV
U3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyByZXR1cm4gSlNDOjpV
U3RyaW5nKG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgZW5k
IC0gc3RhcnQpOyB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmNoYXJhY3RlcnMoKTsgfQorICAgICAgICBjb25zdCBT
dHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNj
cmlwdCgpLmltcGwoKTsgfQogICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRTY3JpcHQtPnNjcmlwdCgpLmxlbmd0aCgpOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYg
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlk
ZXIuaAkocmV2aXNpb24gOTkyMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJp
bmdTb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBKU0M6OlVTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0YXJ0
LCBpbnQgZW5kKSBjb25zdCB7IHJldHVybiBKU0M6OlVTdHJpbmcobV9zb3VyY2UuY2hhcmFjdGVy
cygpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmNoYXJhY3RlcnMoKTsgfQorICAgICAgICBjb25zdCBT
dHJpbmdJbXBsKiBzdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuaW1wbCgpOyB9
CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5sZW5ndGgoKTsg
fQogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
OyB9CiAKQEAgLTYxLDYgKzYyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAg
ICAgcmV0dXJuIEpTQzo6U291cmNlQ29kZShTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNv
dXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJ
bnQoKSk7CiAgICAgfQorICAgIAorICAgIAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHJldmlzaW9uIDk5MjA0
KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NjAsNyArOTYwLDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4
ZWNTdGF0ZQogICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVl
KGV4ZWMsIHJvb3QuZ2V0KCksIGkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAodmFsKSB7CiAg
ICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICAgICAgcmV0
LT5tZXRob2RUYWJsZSgpLT5wdXQocmV0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IFVDaGFyICo+KHMuY29uc3REYXRhKCkpLCBzLmxlbmd0aCgpKSwg
dmFsLCBzbG90KTsKKyAgICAgICAgICAgICAgICByZXQtPm1ldGhvZFRhYmxlKCktPnB1dChyZXQs
IGV4ZWMsIElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVpbnRlcnByZXRfY2FzdF9w
dHI8Y29uc3QgVUNoYXIgKj4ocy5jb25zdERhdGEoKSksIHMubGVuZ3RoKCkpLCB2YWwsIHNsb3Qp
OwogICAgICAgICAgICAgICAgIC8vICMjIyBlcnJvciBjYXNlPwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgKytpOwpJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MzMyKQorKysgU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMS0xMS0wNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAg
ICBUb3dhcmRzIDggQml0IFN0cmluZ3M6IFRlbXBsYXRpemUgSlNDOjpMZXhlciBjbGFzcyBieSBj
aGFyYWN0ZXIgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzEzMzEKKworICAgICAgICBDaGFuZ2VkIElkZW50aWZpZXIoKSBjb25zdHJ1Y3RvciB0
byB1c2UgSlNHbG9iYWxEYXRhKi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lOjph
ZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QpOgorCiAyMDExLTExLTA0ICBUb3IgQXJuZSBWZXN0
YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlZmFjdG9y
IGFuZCBjbGVhbiB1cCB0aGUgcW1ha2UgYnVpbGQgc3lzdGVtCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDk5MjA0KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgUVdl
YkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmoKICAgICAgICAgICAgIEpTQzo6QmluZGlu
Z3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2Uob2JqZWN0LCByb290LCBvd25lcnNoaXApLT5j
cmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogCiAgICAgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICB3aW5kb3ctPm1ldGhvZFRhYmxlKCktPnB1dCh3aW5kb3csIGV4ZWMsIEpTQzo6SWRl
bnRpZmllcihleGVjLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBVQ2hhcio+KG5hbWUuY29u
c3REYXRhKCkpLCBuYW1lLmxlbmd0aCgpKSwgcnVudGltZU9iamVjdCwgc2xvdCk7CisgICAgd2lu
ZG93LT5tZXRob2RUYWJsZSgpLT5wdXQod2luZG93LCBleGVjLCBKU0M6OklkZW50aWZpZXIoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVUNoYXIqPihuYW1l
LmNvbnN0RGF0YSgpKSwgbmFtZS5sZW5ndGgoKSksIHJ1bnRpbWVPYmplY3QsIHNsb3QpOwogI2Vs
aWYgVVNFKFY4KQogICAgIFFTY3JpcHRFbmdpbmUqIGVuZ2luZSA9IGQtPmZyYW1lLT5zY3JpcHQo
KS0+cXRTY3JpcHRFbmdpbmUoKTsKICAgICBpZiAoIWVuZ2luZSkK
</data>
<flag name="review"
          id="112209"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>