<?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>171787</bug_id>
          
          <creation_ts>2017-05-06 21:35:00 -0700</creation_ts>
          <short_desc>Drop remaining uses of PassRefPtr in editing code</short_desc>
          <delta_ts>2017-05-07 13:02:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1305687</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-06 21:35:00 -0700</bug_when>
    <thetext>Drop remaining uses of PassRefPtr in editing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305688</commentid>
    <comment_count>1</comment_count>
      <attachid>309318</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-06 22:02:14 -0700</bug_when>
    <thetext>Created attachment 309318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305689</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-06 22:03:03 -0700</bug_when>
    <thetext>Attachment 309318 did not pass style-queue:


ERROR: Source/WebCore/editing/ReplaceSelectionCommand.cpp:1462:  &apos;listElement&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPassedListElement&apos;.  [readability/naming/protected] [4]
Total errors found: 1 in 30 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>1305723</commentid>
    <comment_count>3</comment_count>
      <attachid>309318</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-07 11:22:29 -0700</bug_when>
    <thetext>Comment on attachment 309318
Patch

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

Generally the way Range is used in editing code is wrong and a bit dangerous. A Range is a mutable object, so it’s not OK to just take a reference to one unless the caller promises to never change the range after passing it. Code that wants to store a Range without a guaranteed about what the caller will do with it needs to call cloneRange instead. We should replace the use of Range with something with more appropriate semantics for what we want to do with it in editing code. Could make things faster by not having to register/unregister each Range as we create it, too, if we can do without the automatic Range adjustment that happens when mutating documents.

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:60
&gt; -static int toIdentifier(PassRefPtr&lt;CSSValue&gt; value)
&gt; +static int toIdentifier(RefPtr&lt;CSSValue&gt;&amp;&amp; value)

Why a RefPtr? Should just be a raw pointer.

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:62
&gt; -    return (value &amp;&amp; value-&gt;isPrimitiveValue()) ? static_pointer_cast&lt;CSSPrimitiveValue&gt;(value)-&gt;valueID() : 0;
&gt; +    return (value &amp;&amp; value-&gt;isPrimitiveValue()) ? downcast&lt;CSSPrimitiveValue&gt;(*value).valueID() : 0;

Moving to use downcast&lt;&gt;, would be natural to also use is&lt;&gt;.

    return is&lt;CSSPrimitiveValue&gt;(value) ? downcast&lt;CSSPrimitiveValue&gt;(*value).valueID() : 0;

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:1721
&gt; -RefPtr&lt;Node&gt; CompositeEditCommand::splitTreeToNode(Node* start, Node* end, bool shouldSplitAncestor)
&gt; +RefPtr&lt;Node&gt; CompositeEditCommand::splitTreeToNode(Node&amp; start, Node&amp; end, bool shouldSplitAncestor)
&gt;  {
&gt; -    ASSERT(start);
&gt; -    ASSERT(end);
&gt; -    ASSERT(start != end);
&gt; +    ASSERT(&amp;start != &amp;end);
&gt;  
&gt; -    RefPtr&lt;Node&gt; node;
&gt; -    if (shouldSplitAncestor &amp;&amp; end-&gt;parentNode())
&gt; -        end = end-&gt;parentNode();
&gt; +    Node* adjustedEnd = &amp;end;
&gt; +    if (shouldSplitAncestor &amp;&amp; adjustedEnd-&gt;parentNode())
&gt; +        adjustedEnd = adjustedEnd-&gt;parentNode();
&gt;  
&gt; -    RefPtr&lt;Node&gt; endNode = end;
&gt; -    for (node = start; node &amp;&amp; node-&gt;parentNode() != endNode; node = node-&gt;parentNode()) {
&gt; +    ASSERT(adjustedEnd);
&gt; +    RefPtr&lt;Node&gt; node;
&gt; +    for (node = &amp;start; node &amp;&amp; node-&gt;parentNode() != adjustedEnd; node = node-&gt;parentNode()) {

If &quot;node&quot; needs to be a RefPtr, I would think that &quot;adjustedEnd&quot; also needs to be a RefPtr for the same reason.

&gt; Source/WebCore/editing/Editor.cpp:529
&gt; +    auto request = SpellCheckRequest::create(resolveTextCheckingTypeMask(*nodeToCheck, TextCheckingTypeSpelling | TextCheckingTypeGrammar), TextCheckingProcessBatch, rangeToCheck.copyRef(), rangeToCheck.copyRef());
&gt; +    if (request)

Better style to define the request variable inside the if statement.

&gt; Source/WebCore/editing/Editor.cpp:959
&gt; +    EditCommandComposition* composition = command.composition();
&gt;      ASSERT(composition);

If this can’t be null seems like the local variable should be a reference.

    ASSERT(command.composition());
    auto&amp; composition = *command.composition();

&gt; Source/WebCore/editing/Editor.cpp:2054
&gt; +        RefPtr&lt;Range&gt; misspellingRange = TextIterator::subrange(spellingSearchRange.ptr(), misspellingOffset, misspelledWord.length());

Result of subrange is Ref, not RefPtr.

&gt; Source/WebCore/editing/Editor.h:274
&gt; -    void markAndReplaceFor(PassRefPtr&lt;SpellCheckRequest&gt;, const Vector&lt;TextCheckingResult&gt;&amp;);
&gt; +    void markAndReplaceFor(SpellCheckRequest&amp;, const Vector&lt;TextCheckingResult&gt;&amp;);

Maybe const&amp; for request? The function does not modify the request.

&gt; Source/WebCore/editing/Editor.h:302
&gt; +    void willWriteSelectionToPasteboard(Range*);

Can this really be null? Seems unlikely to me, although not critical to tackle this at this time.

&gt; Source/WebCore/editing/InsertListCommand.cpp:64
&gt;      m_listElement = listElement.copyRef();
&gt; -    return listElement.ptr();
&gt; +    return listElement.get();

Another way to write this that does less reference count churn:

    m_listElement = WTFMove(listElement);
    return m_listElement.get();

Which also suggests that perhaps this function doesn’t need a return value.

&gt; Source/WebCore/editing/InsertListCommand.cpp:211
&gt; +            listNode = &amp;fixOrphanedListChild(*listChildNode);
&gt; +            listNode = mergeWithNeighboringLists(*listNode);

Maybe this should be a one-liner instead?

    listNode = mergeWithNeighboringLists(fixOrphanedListChild(*listChildNode));

Won’t work, though if we get rid of the return value as I suggested above.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:1466
&gt; +    RefPtr&lt;HTMLElement&gt; listElement = &amp;passedListElement;
&gt;  
&gt;      while (listElement-&gt;hasOneChild() &amp;&amp; isListHTMLElement(listElement-&gt;firstChild()))
&gt;          listElement = downcast&lt;HTMLElement&gt;(listElement-&gt;firstChild());
&gt; +    ASSERT(listElement);

Seems unnecessary to assert this. Code above clearly can’t set listElement to null. If you wanted to be even clearer about it you could rewrite the line above to this:

    listElement = &amp;downcast&lt;HTMLElement&gt;(*listElement-&gt;firstChild());

Another way to do this is to factor out this bit of logic into a deepestSingleChildList function that takes a HTMLElement&amp; and returns a HTMLElement&amp; and then use it like this:

    static HTMLElement* singleChildList(HTMLElement&amp; parent)
    {
        if (!parent-&gt;hasOneChild())
            return nullptr;
        auto&amp; child = *list-&gt;firstChild();
        if (!isListHTMLElement(&amp;child))
            return nullptr;
        return &amp;child;
    }

    static HTMLElement&amp; deepestSingleChildList(HTMLElement&amp; topLevelList)
    {
        auto* list = &amp;topLevelList;
        while (auto* childList = singleChildList(*list))
            list = childList;
        return *list;
    }

    ...

    Ref&lt;HTMLElement&gt; listElement = deepestSingleChildList(passedListElement);

    ...

While that is a lot longer, I like it better.

&gt; Source/WebCore/editing/TextCheckingHelper.h:40
&gt; +    TextCheckingParagraph(TextCheckingParagraph&amp;&amp;) = default;
&gt; +    TextCheckingParagraph&amp; operator=(TextCheckingParagraph&amp;&amp;) = default;

Surprised we need to declare these explicitly. I’d expect the compiler to do the write thing without us specifying this. What happens if we leave these out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305730</commentid>
    <comment_count>4</comment_count>
      <attachid>309318</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-07 12:16:59 -0700</bug_when>
    <thetext>Comment on attachment 309318
Patch

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

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:60
&gt;&gt; +static int toIdentifier(RefPtr&lt;CSSValue&gt;&amp;&amp; value)
&gt; 
&gt; Why a RefPtr? Should just be a raw pointer.

There are only 2 call sites for this utility function and they both pass a Ref&lt;&gt;&amp;&amp;, using anything else as parameter would make the call sites very slightly more complicated (adding .get()).

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:62
&gt;&gt; +    return (value &amp;&amp; value-&gt;isPrimitiveValue()) ? downcast&lt;CSSPrimitiveValue&gt;(*value).valueID() : 0;
&gt; 
&gt; Moving to use downcast&lt;&gt;, would be natural to also use is&lt;&gt;.
&gt; 
&gt;     return is&lt;CSSPrimitiveValue&gt;(value) ? downcast&lt;CSSPrimitiveValue&gt;(*value).valueID() : 0;

Yes, indeed.

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:1721
&gt;&gt; +    for (node = &amp;start; node &amp;&amp; node-&gt;parentNode() != adjustedEnd; node = node-&gt;parentNode()) {
&gt; 
&gt; If &quot;node&quot; needs to be a RefPtr, I would think that &quot;adjustedEnd&quot; also needs to be a RefPtr for the same reason.

Ok.

&gt;&gt; Source/WebCore/editing/Editor.cpp:529
&gt;&gt; +    if (request)
&gt; 
&gt; Better style to define the request variable inside the if statement.

The line is a bit long but OK.

&gt;&gt; Source/WebCore/editing/Editor.cpp:959
&gt;&gt;      ASSERT(composition);
&gt; 
&gt; If this can’t be null seems like the local variable should be a reference.
&gt; 
&gt;     ASSERT(command.composition());
&gt;     auto&amp; composition = *command.composition();

Ok

&gt;&gt; Source/WebCore/editing/Editor.cpp:2054
&gt;&gt; +        RefPtr&lt;Range&gt; misspellingRange = TextIterator::subrange(spellingSearchRange.ptr(), misspellingOffset, misspelledWord.length());
&gt; 
&gt; Result of subrange is Ref, not RefPtr.

Indeed, will fix.

&gt;&gt; Source/WebCore/editing/Editor.h:274
&gt;&gt; +    void markAndReplaceFor(SpellCheckRequest&amp;, const Vector&lt;TextCheckingResult&gt;&amp;);
&gt; 
&gt; Maybe const&amp; for request? The function does not modify the request.

Ok.

&gt;&gt; Source/WebCore/editing/Editor.h:302
&gt;&gt; +    void willWriteSelectionToPasteboard(Range*);
&gt; 
&gt; Can this really be null? Seems unlikely to me, although not critical to tackle this at this time.

Some of the call sites looks like they may pass null.

&gt;&gt; Source/WebCore/editing/InsertListCommand.cpp:64
&gt;&gt; +    return listElement.get();
&gt; 
&gt; Another way to write this that does less reference count churn:
&gt; 
&gt;     m_listElement = WTFMove(listElement);
&gt;     return m_listElement.get();
&gt; 
&gt; Which also suggests that perhaps this function doesn’t need a return value.

Ok.

&gt;&gt; Source/WebCore/editing/InsertListCommand.cpp:211
&gt;&gt; +            listNode = mergeWithNeighboringLists(*listNode);
&gt; 
&gt; Maybe this should be a one-liner instead?
&gt; 
&gt;     listNode = mergeWithNeighboringLists(fixOrphanedListChild(*listChildNode));
&gt; 
&gt; Won’t work, though if we get rid of the return value as I suggested above.

Ok.

&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:1466
&gt;&gt; +    ASSERT(listElement);
&gt; 
&gt; Seems unnecessary to assert this. Code above clearly can’t set listElement to null. If you wanted to be even clearer about it you could rewrite the line above to this:
&gt; 
&gt;     listElement = &amp;downcast&lt;HTMLElement&gt;(*listElement-&gt;firstChild());
&gt; 
&gt; Another way to do this is to factor out this bit of logic into a deepestSingleChildList function that takes a HTMLElement&amp; and returns a HTMLElement&amp; and then use it like this:
&gt; 
&gt;     static HTMLElement* singleChildList(HTMLElement&amp; parent)
&gt;     {
&gt;         if (!parent-&gt;hasOneChild())
&gt;             return nullptr;
&gt;         auto&amp; child = *list-&gt;firstChild();
&gt;         if (!isListHTMLElement(&amp;child))
&gt;             return nullptr;
&gt;         return &amp;child;
&gt;     }
&gt; 
&gt;     static HTMLElement&amp; deepestSingleChildList(HTMLElement&amp; topLevelList)
&gt;     {
&gt;         auto* list = &amp;topLevelList;
&gt;         while (auto* childList = singleChildList(*list))
&gt;             list = childList;
&gt;         return *list;
&gt;     }
&gt; 
&gt;     ...
&gt; 
&gt;     Ref&lt;HTMLElement&gt; listElement = deepestSingleChildList(passedListElement);
&gt; 
&gt;     ...
&gt; 
&gt; While that is a lot longer, I like it better.

Used the longer version, I like it better too.

&gt;&gt; Source/WebCore/editing/TextCheckingHelper.h:40
&gt;&gt; +    TextCheckingParagraph&amp; operator=(TextCheckingParagraph&amp;&amp;) = default;
&gt; 
&gt; Surprised we need to declare these explicitly. I’d expect the compiler to do the write thing without us specifying this. What happens if we leave these out?

They do not get implicitly generated because we have a user-declared destructor (http://en.cppreference.com/w/cpp/language/move_constructor#Implicitly-declared_move_constructor).
It fails to build without it because some call sites rely on moving now (they used to copy but we can no longer copy due to having a Ref&lt;&gt; member).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305731</commentid>
    <comment_count>5</comment_count>
      <attachid>309318</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-07 12:20:22 -0700</bug_when>
    <thetext>Comment on attachment 309318
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/TextCheckingHelper.h:40
&gt;&gt;&gt; +    TextCheckingParagraph&amp; operator=(TextCheckingParagraph&amp;&amp;) = default;
&gt;&gt; 
&gt;&gt; Surprised we need to declare these explicitly. I’d expect the compiler to do the write thing without us specifying this. What happens if we leave these out?
&gt; 
&gt; They do not get implicitly generated because we have a user-declared destructor (http://en.cppreference.com/w/cpp/language/move_constructor#Implicitly-declared_move_constructor).
&gt; It fails to build without it because some call sites rely on moving now (they used to copy but we can no longer copy due to having a Ref&lt;&gt; member).

Well, our destructor does nothing. I&apos;ll just drop it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305732</commentid>
    <comment_count>6</comment_count>
      <attachid>309326</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-07 12:22:01 -0700</bug_when>
    <thetext>Created attachment 309326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305733</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-07 12:24:42 -0700</bug_when>
    <thetext>Attachment 309326 did not pass style-queue:


ERROR: Source/WebCore/editing/CompositeEditCommand.cpp:1715:  &apos;adjustedEnd&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedEnd&apos;.  [readability/naming/protected] [4]
Total errors found: 1 in 35 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>1305742</commentid>
    <comment_count>8</comment_count>
      <attachid>309326</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-07 13:02:35 -0700</bug_when>
    <thetext>Comment on attachment 309326
Patch

Clearing flags on attachment: 309326

Committed r216351: &lt;http://trac.webkit.org/changeset/216351&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305743</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-07 13:02:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309318</attachid>
            <date>2017-05-06 22:02:14 -0700</date>
            <delta_ts>2017-05-07 12:21:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171787-20170506220213.patch</filename>
            <type>text/plain</type>
            <size>94104</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTUwYTI3YmI3MDVjZDE2
YjA2ZTljNTlmZjJkYTZjZjQ2NWJiNDliZi4uMmMxZTM2ZGQ0ZGEzMjIwNDc2MTE0OTNkNDk4Yzhi
YzM4Mjc0NWI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyOCBAQAogMjAxNy0wNS0wNiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgcmVtYWluaW5nIHVz
ZXMgb2YgUGFzc1JlZlB0ciBpbiBlZGl0aW5nIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIERyb3AgcmVtYWluaW5nIHVzZXMgb2YgUGFzc1JlZlB0
ciBpbiBlZGl0aW5nIGNvZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6dGltZXJGaXJlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0lkZW50aWZpZXIpOgorICAgICAgICAqIGVkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENv
bW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGVyZm9y
bUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndpbGxXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05leHRN
aXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFt
bWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAgICogZWRpdGluZy9F
ZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZXhlY3V0ZUluc2VydEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6Y29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQp
OgorICAgICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRp
bmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0
ZGVudENvbW1hbmQ6OmluZGVudEludG9CbG9ja3F1b3RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
ZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21t
YW5kOjpmaXhPcnBoYW5lZExpc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0
Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYXBoKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKToKKyAgICAgICAg
KiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6
Okluc2VydFRleHRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlV2l0aE1hcmtl
clN1cHBsaWVyKToKKyAgICAgICAgKiBlZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29t
bWFuZCk6CisgICAgICAgICogZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlbWVudEZyYWdtZW50OjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6aW5zZXJ0Tm9kZUJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpyZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmlu
Z05vZGVzVG9GcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZyYWdtZW50
OjpyZW1vdmVVbnJlbmRlcmVkTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRG
cmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZUluc2VydGVkQ29udGVudFJvdW5kVHJpcHBhYmxlV2l0
aEhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6bW92ZU5vZGVPdXRPZkFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUhl
YWRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5z
ZXJ0QXNMaXN0SXRlbXMpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrUmVxdWVzdDo6U3BlbGxDaGVja1JlcXVlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxDaGVja2VyOjppc0NoZWNrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OnJlcXVlc3RDaGVja2luZ0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6Omlu
dm9rZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjplbnF1ZXVlUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRpZENoZWNrKToKKyAgICAg
ICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVj
a1JlcXVlc3Q6OmNoZWNraW5nUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja1Jl
cXVlc3Q6OnBhcmFncmFwaFJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRUb1BhcmFncmFwaEJvdW5kYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6VGV4dENoZWNraW5nUGFy
YWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6ZXhwYW5k
UmFuZ2VUb05leHRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBo
OjpyYW5nZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6
OnBhcmFncmFwaFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpv
ZmZzZXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNl
dEFzUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdTdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdI
ZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RN
aXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVj
a2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNh
bFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
aDoKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKToKKyAgICAgICAgKiBl
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcv
Z3RrL0VkaXRvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZCk6CisgICAgICAgICogZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFz
dGVib2FyZCk6CisgICAgICAgICogZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRl
RWRpdERyYWcpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6
CisKKzIwMTctMDUtMDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAg
ICBVbnJldmlld2VkIGJ1aWxkIGZpeCBhZnRlciByMjE2MzM5LgogCiAgICAgICAgICogZG9tL0Rv
Y3VtZW50Lmg6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcAppbmRleCAwMzRmM2NmYzBkYTJiYzg1ZDRmMmE5YWZiZjEwMmU4MTRk
ZGRkMGZlLi43YWU0MDYyMzQwYmY2YWZkMTgyODk5ZjhiMWNmZmFjZTFlNjQ3MmFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAKQEAgLTM1Miw3ICszNTIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRp
bWVyRmlyZWQoKQogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlv
bnM6IHsKICAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgfHwgcGxhaW5UZXh0KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5h
dGl2ZS5nZXQoKSkgIT0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dCgm
VGV4dENoZWNraW5nUGFyYWdyYXBoKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRl
cm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0
ID0gcGxhaW5UZXh0KCZUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKm1fYWx0ZXJuYXRpdmVUZXh0SW5m
by5yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwogICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2Vz
Rm9yV29yZChtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0
LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAg
IGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNjAzNzQwMjA0NmI3ZGZjZmFiYTdlMzJmYzA4ZTM3
ZTdkOGI0NjJkOS4uNmU1NWEyZmVjMWNjYWU4ZjlmOGMyYTRhYTI5YjJjOWYxYzNmM2IwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTU3LDkg
KzU3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1zdGF0aWMgaW50IHRvSWRlbnRpZmllcihQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSkK
K3N0YXRpYyBpbnQgdG9JZGVudGlmaWVyKFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gKHZhbHVlICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpID8gc3RhdGljX3Bv
aW50ZXJfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLT52YWx1ZUlEKCkgOiAwOworICAg
IHJldHVybiAodmFsdWUgJiYgdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgPyBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS52YWx1ZUlEKCkgOiAwOwogfQogCiBzdGF0aWMgU3Ry
aW5nJiBzdHlsZVNwYW5DbGFzc1N0cmluZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDc4MGNhNmZmZDZkMGVjZDQ4ZjUzNDlkNmFi
YjM3ZDVmZmU2ZmEwODYuLjJjNjBiNDIxOTdkMDlhOTQ4ZGViMjVhYTdlNzI0ZjFlNTZkOTc1MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHkoKQog
CiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQoKQogewotICAgIGZy
YW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcodGhpcyk7CisgICAgZnJhbWUoKS5lZGl0b3Io
KS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+
PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKQEAgLTE3MDgsMTgg
KzE3MDgsMTcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uQXZvaWRp
bmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGNvbnN0IFBvc2kKIAogLy8gU3BsaXRzIHRoZSB0cmVl
IHBhcmVudCBieSBwYXJlbnQgdW50aWwgd2UgcmVhY2ggdGhlIHNwZWNpZmllZCBhbmNlc3Rvci4g
V2UgdXNlIFZpc2libGVQb3NpdGlvbnMKIC8vIHRvIGRldGVybWluZSBpZiB0aGUgc3BsaXQgaXMg
bmVjZXNzYXJ5LiBSZXR1cm5zIHRoZSBsYXN0IHNwbGl0IG5vZGUuCi1SZWZQdHI8Tm9kZT4gQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VHJlZVRvTm9kZShOb2RlKiBzdGFydCwgTm9kZSogZW5k
LCBib29sIHNob3VsZFNwbGl0QW5jZXN0b3IpCitSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnNwbGl0VHJlZVRvTm9kZShOb2RlJiBzdGFydCwgTm9kZSYgZW5kLCBib29sIHNob3Vs
ZFNwbGl0QW5jZXN0b3IpCiB7Ci0gICAgQVNTRVJUKHN0YXJ0KTsKLSAgICBBU1NFUlQoZW5kKTsK
LSAgICBBU1NFUlQoc3RhcnQgIT0gZW5kKTsKKyAgICBBU1NFUlQoJnN0YXJ0ICE9ICZlbmQpOwog
Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGU7Ci0gICAgaWYgKHNob3VsZFNwbGl0QW5jZXN0b3IgJiYg
ZW5kLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGVuZCA9IGVuZC0+cGFyZW50Tm9kZSgpOworICAg
IE5vZGUqIGFkanVzdGVkRW5kID0gJmVuZDsKKyAgICBpZiAoc2hvdWxkU3BsaXRBbmNlc3RvciAm
JiBhZGp1c3RlZEVuZC0+cGFyZW50Tm9kZSgpKQorICAgICAgICBhZGp1c3RlZEVuZCA9IGFkanVz
dGVkRW5kLT5wYXJlbnROb2RlKCk7CiAKLSAgICBSZWZQdHI8Tm9kZT4gZW5kTm9kZSA9IGVuZDsK
LSAgICBmb3IgKG5vZGUgPSBzdGFydDsgbm9kZSAmJiBub2RlLT5wYXJlbnROb2RlKCkgIT0gZW5k
Tm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgIEFTU0VSVChhZGp1c3RlZEVu
ZCk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGU7CisgICAgZm9yIChub2RlID0gJnN0YXJ0OyBub2Rl
ICYmIG5vZGUtPnBhcmVudE5vZGUoKSAhPSBhZGp1c3RlZEVuZDsgbm9kZSA9IG5vZGUtPnBhcmVu
dE5vZGUoKSkgewogICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlLT5wYXJlbnROb2RlKCkp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8vIERvIG5vdCBzcGxpdCBhIG5vZGUgd2hl
biBkb2luZyBzbyBpbnRyb2R1Y2VzIGFuIGVtcHR5IG5vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKaW5kZXggNjg4YTIzYjY1MDY5MDkxNDBjMTM3
ZWQ2NWViNjk0ZDIxNjNlN2I4OS4uZDQ2N2JmMTU4OTczYjgxMTY4YmJkZmM5OTM0MTQzOGYzZWUw
NGIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aApAQCAtMjA1LDcgKzIwNSw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBQb3NpdGlvbiBwb3Np
dGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3VuZGFyeShjb25zdCBQb3NpdGlvbiYpOwogICAg
IAotICAgIFJlZlB0cjxOb2RlPiBzcGxpdFRyZWVUb05vZGUoTm9kZSosIE5vZGUqLCBib29sIHNw
bGl0QW5jZXN0b3IgPSBmYWxzZSk7CisgICAgUmVmUHRyPE5vZGU+IHNwbGl0VHJlZVRvTm9kZShO
b2RlJiwgTm9kZSYsIGJvb2wgc3BsaXRBbmNlc3RvciA9IGZhbHNlKTsKIAogICAgIFZlY3RvcjxS
ZWZQdHI8RWRpdENvbW1hbmQ+PiBtX2NvbW1hbmRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggZTM0YjQxMTBkN2U0Y2EzMTgzYjEyZjFjNzA1M2NlMzVlYTFmODNkYS4uZmUzMmNm
ZjZjYzI0ZThhNzJlYTBhZWQwYjUzNjdkNmRjODkwNjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtNDcxLDE4ICs0NzEsMTYgQEAgYm9vbCBFZGl0b3I6OmNhblNtYXJ0UmVwbGFj
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgcmV0dXJuIGNsaWVu
dCgpICYmIGNsaWVudCgpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBwYXN0ZWJvYXJk
LmNhblNtYXJ0UmVwbGFjZSgpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21l
bnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgUGFzc1JlZlB0cjxSYW5n
ZT4gcmVwbGFjaW5nRE9NUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jv
b2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVu
dCwgUmFuZ2UqIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rp
b24pCiB7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIGlmIChmcmFnbWVudCkgewotICAgICAgICBOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJz
dENoaWxkKCk7Ci0gICAgICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPihjaGlsZCkgJiYgZnJhZ21l
bnQtPmxhc3RDaGlsZCgpID09IGNoaWxkKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5z
aG91bGRJbnNlcnRUZXh0KGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0YSgpLCBy
ZXBsYWNpbmdET01SYW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24pOwotICAgIH0KKyAgICBhdXRvKiBj
aGlsZCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4o
Y2hpbGQpICYmIGZyYWdtZW50Lmxhc3RDaGlsZCgpID09IGNoaWxkKQorICAgICAgICByZXR1cm4g
Y2xpZW50KCktPnNob3VsZEluc2VydFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxk
KS5kYXRhKCksIHJlcGxhY2luZ0RPTVJhbmdlLCBnaXZlbkFjdGlvbik7CiAKLSAgICByZXR1cm4g
Y2xpZW50KCktPnNob3VsZEluc2VydE5vZGUoZnJhZ21lbnQuZ2V0KCksIHJlcGxhY2luZ0RPTVJh
bmdlLmdldCgpLCBnaXZlbkFjdGlvbik7CisgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNl
cnROb2RlKCZmcmFnbWVudCwgcmVwbGFjaW5nRE9NUmFuZ2UsIGdpdmVuQWN0aW9uKTsKIH0KIAog
dm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVu
dCYgZnJhZ21lbnQsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBi
b29sIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVI
YW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQpAQCAtNTI2LDggKzUyNCwxMCBAQCB2b2lk
IEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBm
cmFnbWVudCwgYm9vbCBzZWxlYwogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0NoZWNrID0gUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGVUb0NoZWNrKSwgbGFzdFBvc2l0aW9uSW5O
b2RlKG5vZGVUb0NoZWNrKSk7Ci0gICAgbV9zcGVsbENoZWNrZXItPnJlcXVlc3RDaGVja2luZ0Zv
cihTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzaygq
bm9kZVRvQ2hlY2ssIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyKSwgVGV4dENoZWNraW5nUHJvY2Vzc0JhdGNoLCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9D
aGVjaykpOworICAgIGF1dG8gcmFuZ2VUb0NoZWNrID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgp
LCBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGVUb0NoZWNrKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG5v
ZGVUb0NoZWNrKSk7CisgICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0
ZShyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soKm5vZGVUb0NoZWNrLCBUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciksIFRleHRDaGVja2luZ1Byb2Nl
c3NCYXRjaCwgcmFuZ2VUb0NoZWNrLmNvcHlSZWYoKSwgcmFuZ2VUb0NoZWNrLmNvcHlSZWYoKSk7
CisgICAgaWYgKHJlcXVlc3QpCisgICAgICAgIG1fc3BlbGxDaGVja2VyLT5yZXF1ZXN0Q2hlY2tp
bmdGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0UmVwbGFj
ZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05
NDksNDMgKzk0OSw0MyBAQCBib29sIEVkaXRvcjo6d2lsbEFwcGx5RWRpdGluZyhDb21wb3NpdGVF
ZGl0Q29tbWFuZCYgY29tbWFuZCwgVmVjdG9yPFJlZlB0cjxTdGF0aQogICAgIHJldHVybiBkaXNw
YXRjaEJlZm9yZUlucHV0RXZlbnRzKGNvbXBvc2l0aW9uLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVs
ZW1lbnQoKSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tbWFu
ZC5pbnB1dEV2ZW50VHlwZU5hbWUoKSwgY29tbWFuZC5pbnB1dEV2ZW50RGF0YSgpLCBjb21tYW5k
LmlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSwgdGFyZ2V0UmFuZ2VzLCBjb21tYW5kLmlzQmVmb3Jl
SW5wdXRFdmVudENhbmNlbGFibGUoKSk7CiB9CiAKLXZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBjbWQpCit2b2lkIEVkaXRvcjo6YXBw
bGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQmIGNvbW1hbmQpCiB7CiAgICAgTE9HKEVk
aXRpbmcsICJFZGl0b3IgJXAgYXBwbGllZEVkaXRpbmciLCB0aGlzKTsKIAogICAgIGRvY3VtZW50
KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21wb3Np
dGlvbiA9IGNtZC0+Y29tcG9zaXRpb24oKTsKKyAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBj
b21wb3NpdGlvbiA9IGNvbW1hbmQuY29tcG9zaXRpb24oKTsKICAgICBBU1NFUlQoY29tcG9zaXRp
b24pOwotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0
aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNvbW1hbmQuZW5kaW5n
U2VsZWN0aW9uKCkpOwogCiAgICAgbm90aWZ5VGV4dEZyb21Db250cm9scyhjb21wb3NpdGlvbi0+
c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNvbXBvc2l0aW9uLT5lbmRpbmdSb290RWRp
dGFibGVFbGVtZW50KCkpOwogCi0gICAgaWYgKGNtZC0+aXNUb3BMZXZlbENvbW1hbmQoKSkgewor
ICAgIGlmIChjb21tYW5kLmlzVG9wTGV2ZWxDb21tYW5kKCkpIHsKICAgICAgICAgLy8gRG9uJ3Qg
Y2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gV2UgZG8g
dGhvc2UgdGhpbmdzIGVsc2V3aGVyZSBpZiBuZWNlc3NhcnkuCi0gICAgICAgIEZyYW1lU2VsZWN0
aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBjbWQtPmlzRGljdGF0aW9uQ29tbWFu
ZCgpID8gRnJhbWVTZWxlY3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCA6IDA7CisgICAgICAgIEZy
YW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBjb21tYW5kLmlzRGlj
dGF0aW9uQ29tbWFuZCgpID8gRnJhbWVTZWxlY3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCA6IDA7
CiAKICAgICAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgb3B0
aW9ucyk7CiAgICAgfQogCi0gICAgaWYgKGNtZC0+c2hvdWxkRGlzcGF0Y2hJbnB1dEV2ZW50cygp
KQotICAgICAgICBkaXNwYXRjaElucHV0RXZlbnRzKGNvbXBvc2l0aW9uLT5zdGFydGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQo
KSwgY21kLT5pbnB1dEV2ZW50VHlwZU5hbWUoKSwgY21kLT5pbnB1dEV2ZW50RGF0YSgpLCBjbWQt
PmlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSk7CisgICAgaWYgKGNvbW1hbmQuc2hvdWxkRGlzcGF0
Y2hJbnB1dEV2ZW50cygpKQorICAgICAgICBkaXNwYXRjaElucHV0RXZlbnRzKGNvbXBvc2l0aW9u
LT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQoKSwgY29tbWFuZC5pbnB1dEV2ZW50VHlwZU5hbWUoKSwgY29tbWFuZC5p
bnB1dEV2ZW50RGF0YSgpLCBjb21tYW5kLmlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSk7CiAKLSAg
ICBpZiAoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpKSB7CisgICAgaWYgKGNvbW1hbmQuaXNUb3BM
ZXZlbENvbW1hbmQoKSkgewogICAgICAgICB1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7
CiAKLSAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBsaWVk
RWRpdGluZyhjbWQuZ2V0KCkpOworICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
PnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZjb21tYW5kKTsKIAotICAgICAgICBpZiAoIWNtZC0+
cHJlc2VydmVzVHlwaW5nU3R5bGUoKSkKKyAgICAgICAgaWYgKCFjb21tYW5kLnByZXNlcnZlc1R5
cGluZ1N0eWxlKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5n
U3R5bGUoKTsKIAogICAgICAgICAvLyBDb21tYW5kIHdpbGwgYmUgZXF1YWwgdG8gbGFzdCBlZGl0
IGNvbW1hbmQgb25seSBpbiB0aGUgY2FzZSBvZiB0eXBpbmcKLSAgICAgICAgaWYgKG1fbGFzdEVk
aXRDb21tYW5kLmdldCgpID09IGNtZCkKLSAgICAgICAgICAgIEFTU0VSVChjbWQtPmlzVHlwaW5n
Q29tbWFuZCgpKTsKKyAgICAgICAgaWYgKG1fbGFzdEVkaXRDb21tYW5kLmdldCgpID09ICZjb21t
YW5kKQorICAgICAgICAgICAgQVNTRVJUKGNvbW1hbmQuaXNUeXBpbmdDb21tYW5kKCkpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgYSBuZXcgdW5kbyBjb21t
YW5kIGlmIHRoZSBjb21tYW5kIHBhc3NlZCBpbiBpcwogICAgICAgICAgICAgLy8gZGlmZmVyZW50
IGZyb20gdGhlIGxhc3QgY29tbWFuZAotICAgICAgICAgICAgbV9sYXN0RWRpdENvbW1hbmQgPSBj
bWQ7CisgICAgICAgICAgICBtX2xhc3RFZGl0Q29tbWFuZCA9ICZjb21tYW5kOwogICAgICAgICAg
ICAgaWYgKGNsaWVudCgpKQogICAgICAgICAgICAgICAgIGNsaWVudCgpLT5yZWdpc3RlclVuZG9T
dGVwKG1fbGFzdEVkaXRDb21tYW5kLT5lbnN1cmVDb21wb3NpdGlvbigpKTsKICAgICAgICAgfQpA
QCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9pZCBFZGl0b3I6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb25Gb3JDdXQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMKIHZvaWQgRWRpdG9y
OjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiB7CiAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgd2lsbFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbik7CisgICAgd2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKHNlbGVjdGlvbi5nZXQoKSk7CiAgICAgaWYgKGFjdGlvbiA9PSBDdXRBY3Rp
b24pIHsKICAgICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU3MSwxMCArMTU3MSwxMCBAQCB2b2lkIEVkaXRvcjo6
ZGlkRW5kRWRpdGluZygpCiAgICAgICAgIGNsaWVudCgpLT5kaWRFbmRFZGl0aW5nKCk7CiB9CiAK
LXZvaWQgRWRpdG9yOjp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzc1JlZlB0cjxS
YW5nZT4gcmFuZ2UpCit2b2lkIEVkaXRvcjo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT53
aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQocmFuZ2UuZ2V0KCkpOworICAgICAgICBjbGll
bnQoKS0+d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHJhbmdlKTsKIH0KIAogdm9pZCBF
ZGl0b3I6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKQEAgLTE4OTIsNyArMTg5Miw3
IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9y
ZVNlbGVjdGlvbikKICAgICAvLyBTdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHNl
YXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcgYXQgdGhlIHNlbGVjdGlvbiBlbmQg
bWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsuCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdlKHJhbmdlT2ZDb250
ZW50cyhkb2N1bWVudCgpKSk7CisgICAgUmVmPFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdlID0g
cmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVj
dGlvbiA9IGZhbHNlOwogICAgIGlmIChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgp
KSB7CkBAIC0xOTAxLDkgKzE5MDEsOSBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnQoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKTsKICAgICAgICAgICAgIC8vIFdl
IG1hdGNoIEFwcEtpdCdzIHJ1bGU6IFN0YXJ0IDEgY2hhcmFjdGVyIGJlZm9yZSB0aGUgc2VsZWN0
aW9uLgogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9uZUJlZm9yZVN0YXJ0ID0gc3RhcnQu
cHJldmlvdXMoKTsKLSAgICAgICAgICAgIHNldFN0YXJ0KHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0
KCksIG9uZUJlZm9yZVN0YXJ0LmlzTm90TnVsbCgpID8gb25lQmVmb3JlU3RhcnQgOiBzdGFydCk7
CisgICAgICAgICAgICBzZXRTdGFydChzcGVsbGluZ1NlYXJjaFJhbmdlLnB0cigpLCBvbmVCZWZv
cmVTdGFydC5pc05vdE51bGwoKSA/IG9uZUJlZm9yZVN0YXJ0IDogc3RhcnQpOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHNldFN0YXJ0KHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIHNl
bGVjdGlvbi52aXNpYmxlRW5kKCkpOworICAgICAgICAgICAgc2V0U3RhcnQoc3BlbGxpbmdTZWFy
Y2hSYW5nZS5wdHIoKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgfQogCiAgICAgUG9z
aXRpb24gcG9zaXRpb24gPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CkBA
IC0xOTMzLDkgKzE5MzMsOSBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5n
KGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gSWYgc3BlbGxpbmdTZWFyY2hSYW5n
ZSBzdGFydHMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFkdmFuY2UgdG8gdGhlIG5leHQgd29y
ZCBzbyB3ZSBzdGFydCBjaGVja2luZwogICAgIC8vIGF0IGEgd29yZCBib3VuZGFyeS4gR29pbmcg
YmFjayBieSBvbmUgY2hhciBhbmQgdGhlbiBmb3J3YXJkIGJ5IGEgd29yZCBkb2VzIHRoZSB0cmlj
ay4KICAgICBpZiAoc3RhcnRlZFdpdGhTZWxlY3Rpb24pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG9uZUJlZm9yZVN0YXJ0ID0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc3BlbGxpbmdTZWFyY2hS
YW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkucHJldmlvdXMoKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG9uZUJlZm9yZVN0YXJ0ID0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc3BlbGxpbmdTZWFyY2hS
YW5nZS5wdHIoKSwgRE9XTlNUUkVBTSkucHJldmlvdXMoKTsKICAgICAgICAgaWYgKG9uZUJlZm9y
ZVN0YXJ0LmlzTm90TnVsbCgpKQotICAgICAgICAgICAgc2V0U3RhcnQoc3BlbGxpbmdTZWFyY2hS
YW5nZS5nZXQoKSwgZW5kT2ZXb3JkKG9uZUJlZm9yZVN0YXJ0KSk7CisgICAgICAgICAgICBzZXRT
dGFydChzcGVsbGluZ1NlYXJjaFJhbmdlLnB0cigpLCBlbmRPZldvcmQob25lQmVmb3JlU3RhcnQp
KTsKICAgICAgICAgLy8gZWxzZSB3ZSB3ZXJlIGFscmVhZHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBl
ZGl0YWJsZSBub2RlCiAgICAgfQogCkBAIC0xOTY1LDcgKzE5NjUsNyBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAg
UmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgaWYgKHVuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGlu
Z1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVj
a2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcs
IGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKKyAgICAgICAgZm91bmRJdGVtID0gVGV4dENo
ZWNraW5nSGVscGVyKCpjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlz
c3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxp
bmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcp
IHsKICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZm91bmRJdGVtOwogICAgICAgICAgICAg
bWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKQEAgLTE5NzQsNyArMTk3NCw3IEBAIHZv
aWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVj
dGlvbikKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNr
aW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVs
bGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Cisg
ICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgc3Bl
bGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQs
IGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogCiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJ
TkcpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNs
b25lUmFuZ2UoKTsKQEAgLTE5ODYsNyArMTk4Niw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9O
ZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgfQogICAg
IAogICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBi
YWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2Vh
cmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFz
ZU9mZnNldCwgZmFsc2UpOworICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IFRleHRDaGVj
a2luZ0hlbHBlcigqY2xpZW50KCksICpncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdy
YW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwogI2VuZGlm
CiAgICAgfQogICAgIApAQCAtMjAwMCw3ICsyMDAwLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICAg
ICAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICAgICAgZ3Jh
bW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAg
ICAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGlu
Z1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwp
OworICAgICAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwg
c3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFy
RGV0YWlsKTsKICAgICAgICAgICAgIGlmIChpc1NwZWxsaW5nKSB7CiAgICAgICAgICAgICAgICAg
bWlzc3BlbGxlZFdvcmQgPSBmb3VuZEl0ZW07CiAgICAgICAgICAgICAgICAgbWlzc3BlbGxpbmdP
ZmZzZXQgPSBmb3VuZE9mZnNldDsKQEAgLTIwMDksNyArMjAwOSw3IEBAIHZvaWQgRWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAg
ICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRD
aGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlz
c3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2Up
OworICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVu
dCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGlu
Z09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAKICNpZiBVU0UoR1JBTU1B
Ul9DSEVDS0lORykKICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2Vh
cmNoUmFuZ2UtPmNsb25lUmFuZ2UoKTsKQEAgLTIwMjEsNyArMjAyMSw3IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgp
KQotICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIo
Y2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFy
RGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYmFk
R3JhbW1hclBocmFzZSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpncmFtbWFyU2Vh
cmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFz
ZU9mZnNldCwgZmFsc2UpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CkBAIC0yMDUxLDcgKzIw
NTEsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRC
ZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgbWlzc3BlbGxpbmcsIGJ1dCBu
b3QgYW55IGVhcmxpZXIgYmFkIGdyYW1tYXIuIFNlbGVjdCB0aGUgbWlzc3BlbGxpbmcsIHVwZGF0
ZSB0aGUgc3BlbGxpbmcgcGFuZWwsIGFuZCBzdG9yZQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3
ZSBkcmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAotICAgICAgICBSZWZQdHI8
UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNwZWxsaW5n
U2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBtaXNzcGVsbGVkV29yZC5sZW5n
dGgoKSk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVy
YXRvcjo6c3VicmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZS5wdHIoKSwgbWlzc3BlbGxpbmdPZmZz
ZXQsIG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpKTsKICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNU
UkVBTSkpOwogICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwog
ICAgICAgICAKQEAgLTIxMjAsOSArMjEyMCw5IEBAIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVu
Z3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgaWYgKCFyYW5nZSkKKyAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdl
KS5pc1VuZ3JhbW1hdGljYWwoKTsKKyAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKCpjbGll
bnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0yMTQ5LDkgKzIxNDksOSBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvbwog
ICAgICAgICAgICAgcmFuZ2UgPSB3b3JkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgaWYgKCFyYW5nZSB8fCAhY2xp
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLSAgICAgICAgcmV0
dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVs
bGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3Nw
ZWxsZWQsIHVuZ3JhbW1hdGljYWwpOworICAgICAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVy
KCpjbGllbnQoKSwgKnJhbmdlKS5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJh
bmdlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1tYXRpY2Fs
KTsKICAgICB9CiAKICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBiZWhhdmlvcigpLnNob3Vs
ZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSA/IG1pc3NwZWxsZWRX
b3JkQXRDYXJldE9yUmFuZ2UoZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpKSA6IG1pc3NwZWxs
ZWRTZWxlY3Rpb25TdHJpbmcoKTsKQEAgLTIzMjMsNyArMjMyMyw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgYm9vCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IFRleHRDaGVja2luZ0hlbHBlciBjaGVja2VyKGNsaWVudCgpLCBzZWFyY2hSYW5nZSk7CisgICAg
VGV4dENoZWNraW5nSGVscGVyIGNoZWNrZXIoKmNsaWVudCgpLCAqc2VhcmNoUmFuZ2UpOwogICAg
IGlmIChjaGVja1NwZWxsaW5nKQogICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGluZ3Mo
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBlbHNlIHsKQEAgLTIzOTcsNyArMjM5Nyw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRl
eHRDaGVja2luZ1R5cGVNYXNrIHRleHRDCiAgICAgaWYgKCFpc1NwZWxsQ2hlY2tpbmdFbmFibGVk
Rm9yKCZlZGl0YWJsZU5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSYW5nZSogcmFuZ2VU
b0NoZWNrID0gc2hvdWxkTWFya0dyYW1tYXIgPyBncmFtbWFyUmFuZ2UgOiBzcGVsbGluZ1Jhbmdl
OworICAgIFJhbmdlJiByYW5nZVRvQ2hlY2sgPSBzaG91bGRNYXJrR3JhbW1hciA/ICpncmFtbWFy
UmFuZ2UgOiAqc3BlbGxpbmdSYW5nZTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdy
YXBoVG9DaGVjayhyYW5nZVRvQ2hlY2spOwogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQwNywxNiArMjQwNywxOCBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdU
eXBlTWFzayB0ZXh0QwogCiAgICAgLy8gSW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlv
bmFsbHkgY2hlY2sgcGFyYWdyYXBoLXdpZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNv
bHZlZE9wdGlvbnMgPSByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0
ZXh0Q2hlY2tpbmdPcHRpb25zKTsKLSAgICBhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVz
dDo6Y3JlYXRlKHJlc29sdmVkT3B0aW9ucywgVGV4dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFs
LCBhc3luY2hyb25vdXMgPyBwYXJhZ3JhcGhSYW5nZS5wdHIoKSA6IHJhbmdlVG9DaGVjaywgcGFy
YWdyYXBoUmFuZ2UucHRyKCkpOworICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0
OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWws
IGFzeW5jaHJvbm91cyA/IHBhcmFncmFwaFJhbmdlLmdldCgpIDogcmFuZ2VUb0NoZWNrLCBwYXJh
Z3JhcGhSYW5nZS5jb3B5UmVmKCkpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGFzeW5jaHJvbm91cykgewotICAgICAgICBtX3NwZWxsQ2hlY2tlci0+cmVx
dWVzdENoZWNraW5nRm9yKFdURk1vdmUocmVxdWVzdCkpOworICAgICAgICBtX3NwZWxsQ2hlY2tl
ci0+cmVxdWVzdENoZWNraW5nRm9yKHJlcXVlc3QucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRz
OwogICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0No
ZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKLSAgICBtYXJrQW5kUmVwbGFjZUZvcihXVEZNb3ZlKHJlcXVlc3QpLCBy
ZXN1bHRzKTsKKyAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCks
IHJlc3VsdHMpOwogfQogCiBzdGF0aWMgYm9vbCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5
cGUoVGV4dENoZWNraW5nVHlwZSB0eXBlKQpAQCAtMjQ1MywxNiArMjQ1NSwxNSBAQCBzdGF0aWMg
dm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
VGV4dENoZWNraW5nUGFyYQogCiAgICAgUmVmUHRyPFJhbmdlPiBuZXdQYXJhZ3JhcGhSYW5nZSA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnNjb3BlLCBwYXJhZ3Jh
cGhMb2NhdGlvbiwgcGFyYWdyYXBoTGVuZ3RoICsgcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1
bHRMZW5ndGgpOwogCi0gICAgcGFyYWdyYXBoID0gVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRJ
dGVyYXRvcjo6c3VicmFuZ2UobmV3UGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHJlc3VsdExvY2F0aW9u
LCByZXBsYWNlbWVudC5sZW5ndGgoKSksIG5ld1BhcmFncmFwaFJhbmdlKTsKKyAgICBwYXJhZ3Jh
cGggPSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShuZXdQYXJh
Z3JhcGhSYW5nZS5nZXQoKSwgcmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50Lmxlbmd0aCgpKSwg
bmV3UGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwogfQogCi12b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxh
Y2VGb3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCit2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxh
Y2VGb3IoU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+JiByZXN1bHRzKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1l
KTsKLSAgICBBU1NFUlQocmVxdWVzdCk7CiAKLSAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0
Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC0+ZGF0YSgpLm1hc2soKTsKLSAgICBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGggcGFyYWdyYXBoKHJlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgcmVxdWVzdC0+
cGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNraW5n
T3B0aW9ucyA9IHJlcXVlc3QuZGF0YSgpLm1hc2soKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGggcGFyYWdyYXBoKHJlcXVlc3QuY2hlY2tpbmdSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhS
YW5nZSgpKTsKIAogICAgIGNvbnN0IGJvb2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNr
aW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKICAgICBjb25zdCBib29sIHNo
b3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyOwpAQCAtMjYwNSw3ICsyNjA2LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNl
Rm9yKFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZlY3QKICAg
ICB9CiAKICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgewotICAgICAgICBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGggZXh0ZW5kZWRQYXJhZ3JhcGgocGFyYWdyYXBoKTsKKyAgICAgICAgVGV4dENoZWNr
aW5nUGFyYWdyYXBoIGV4dGVuZGVkUGFyYWdyYXBoKFdURk1vdmUocGFyYWdyYXBoKSk7CiAgICAg
ICAgIC8vIFJlc3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlmIHdlIGhhdmUgbWFkZSBhbnkgcmVw
bGFjZW1lbnRzCiAgICAgICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJhbmdlVG9OZXh0RW5k
KCk7CiAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgJiYgc2VsZWN0aW9u
T2Zmc2V0ID49IDAgJiYgc2VsZWN0aW9uT2Zmc2V0IDw9IGV4dGVuZGVkUGFyYWdyYXBoLnJhbmdl
TGVuZ3RoKCkpIHsKQEAgLTI2MzQsNyArMjYzNSw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNr
VG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpKTsKLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
cGFyYWdyYXBoKHNlbGVjdGlvbik7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFw
aCgqc2VsZWN0aW9uKTsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJp
bmcsIGZhbHNlLCBmYWxzZSwgRWRpdEFjdGlvbkluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFu
Z2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFj
ZWRTdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLnB0cigpLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmlu
ZGV4IGY2OTA0NTY0YzI4OWQ2NDA0OGZlM2ExNDFkZjg1MTRhNzdkYzE1MmIuLjcwMWY1ODk5Yzhm
ZmRjMTc0Y2M0YzQzNmZmNDhlMGExYzYxN2EwOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApA
QCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG91dGRl
bnQoKTsKICAgICB2b2lkIHRyYW5zcG9zZSgpOwogCi0gICAgYm9vbCBzaG91bGRJbnNlcnRGcmFn
bWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBQYXNzUmVmUHRyPFJhbmdlPiwgRWRp
dG9ySW5zZXJ0QWN0aW9uKTsKKyAgICBib29sIHNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50
RnJhZ21lbnQmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbik7CiAgICAgYm9vbCBzaG91bGRJ
bnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgY29u
c3Q7CiAgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIFJhbmdlKik7
CkBAIC0yMTAsNyArMjEwLDcgQEAgcHVibGljOgogICAgIGJvb2wgd2lsbFVuYXBwbHlFZGl0aW5n
KGNvbnN0IEVkaXRDb21tYW5kQ29tcG9zaXRpb24mKSBjb25zdDsKICAgICBib29sIHdpbGxSZWFw
cGx5RWRpdGluZyhjb25zdCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uJikgY29uc3Q7CiAKLSAgICB2
b2lkIGFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsKKyAg
ICB2b2lkIGFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJik7CiAgICAgdm9pZCB1
bmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24mKTsKICAgICB2b2lkIHJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYpOwogICAgIHZvaWQgdW5hcHBsaWVk
U3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVj
dGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsK
QEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVi
bGljOgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQo
Y29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgUGFzc1Jl
ZlB0cjxGcmFtZT4pOworICAgICAgICBDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFu
ZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIEZyYW1lJik7CiAKICAgICAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyID0gU3RyaW5nKCksIEV2ZW50
KiB0cmlnZ2VyaW5nRXZlbnQgPSBudWxscHRyKSBjb25zdDsKICAgICAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBleGVjdXRlKEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNvbnN0OwpAQCAtMjcxLDcg
KzI3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAg
dm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBt
YXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVs
bGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
Z3JhbW1hclNlbGVjdGlvbik7Ci0gICAgdm9pZCBtYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHRy
PFNwZWxsQ2hlY2tSZXF1ZXN0PiwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsK
KyAgICB2b2lkIG1hcmtBbmRSZXBsYWNlRm9yKFNwZWxsQ2hlY2tSZXF1ZXN0JiwgY29uc3QgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKIAogICAgIGJvb2wgaXNPdmVyd3JpdGVNb2RlRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQ7IH0KICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCk7CkBAIC0yOTksNyAr
Mjk5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKTsKICAgICB2b2lk
IGRpZEVuZEVkaXRpbmcoKTsKLSAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChQYXNzUmVmUHRyPFJhbmdlPik7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoUmFuZ2UqKTsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7
CiAKICAgICB2b2lkIHNob3dGb250UGFuZWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCmluZGV4IDdiMmRjNmVlMjdiMjIyOTA3MGMxOTIzYmNiYzBmYjMwZmRkMjk0
NTAuLjZjZjIzNTJkZGEwOWY5ZTYwNTZhNmUzYjhjMWZkYzNiOGYwMzc0MDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTU1LDEwICsxNTUsMTAgQEAgc3Rh
dGljIGJvb2wgZXhlY3V0ZUFwcGx5UGFyYWdyYXBoU3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29s
IGV4ZWN1dGVJbnNlcnRGcmFnbWVudChGcmFtZSYgZnJhbWUsIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQpCitzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0RnJhZ21lbnQoRnJh
bWUmIGZyYW1lLCBSZWY8RG9jdW1lbnRGcmFnbWVudD4mJiBmcmFnbWVudCkKIHsKICAgICBBU1NF
UlQoZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZnJhZ21lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQ
cmV2ZW50TmVzdGluZywgRWRpdEFjdGlvbkluc2VydCktPmFwcGx5KCk7CisgICAgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGTW92ZShmcmFnbWVu
dCksIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZywgRWRpdEFjdGlvbklu
c2VydCktPmFwcGx5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3MzYsMTIgKzE3MzYs
MTIgQEAgc3RhdGljIGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogaW50ZXJuYWxDb21tYW5k
KGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiAKIEVkaXRvcjo6Q29tbWFuZCBFZGl0b3I6OmNv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIHsKLSAgICByZXR1cm4gQ29tbWFuZChp
bnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcs
ICZtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5h
bWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZnJhbWUpOwogfQogCiBFZGl0b3I6
OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIEVkaXRv
ckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewotICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29t
bWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgJm1fZnJhbWUpOworICAgIHJldHVybiBDb21tYW5k
KGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9mcmFtZSk7CiB9CiAKIGJv
b2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZyhjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTc1MywxNiArMTc1MywxMiBAQCBFZGl0b3I6OkNvbW1h
bmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3QgRWRp
dG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwg
UGFzc1JlZlB0cjxGcmFtZT4gZnJhbWUpCitFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3Qg
RWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJj
ZSwgRnJhbWUmIGZyYW1lKQogICAgIDogbV9jb21tYW5kKGNvbW1hbmQpCiAgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBmcmFtZSA6IDApCisgICAgLCBtX2Zy
YW1lKGNvbW1hbmQgPyAmZnJhbWUgOiBudWxscHRyKQogewotICAgIC8vIFVzZSBzZXBhcmF0ZSBh
c3NlcnRpb25zIHNvIHdlIGNhbiB0ZWxsIHdoaWNoIGJhZCB0aGluZyBoYXBwZW5lZC4KLSAgICBp
ZiAoIWNvbW1hbmQpCi0gICAgICAgIEFTU0VSVCghbV9mcmFtZSk7Ci0gICAgZWxzZQotICAgICAg
ICBBU1NFUlQobV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1fZnJhbWUpOwogfQog
CiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciwg
RXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Rm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCAxOTc0YTNlMGFmNDRiNmJjODExMzY4NWZkMWQ0
Yzc3ZWYwYWM2MjM1Li5jZTUxODlkYTc4MmRiZDBlNzUzOWM2MzU5OTY1N2ZmY2ZiZjExMDc1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC02
NCw3ICs2NCw4IEBAIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mU2VsZWN0aW9uCiB2b2lkIEZvcm1hdEJsb2NrQ29t
bWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24sIFJlZlB0cjxFbGVtZW50PiYgYmxv
Y2tOb2RlKQogewogICAgIE5vZGUqIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9ja1RvU3Bs
aXRUcmVlVG8oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgUmVmUHRyPE5vZGU+IG91dGVy
QmxvY2sgPSAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSwgbm9kZVRvU3BsaXRUbyk7CisgICAgQVNTRVJUKG5vZGVUb1NwbGl0VG8pOworICAgIFJlZlB0
cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPT0gbm9kZVRvU3Bs
aXRUbykgPyBzdGFydC5kZXByZWNhdGVkTm9kZSgpIDogc3BsaXRUcmVlVG9Ob2RlKCpzdGFydC5k
ZXByZWNhdGVkTm9kZSgpLCAqbm9kZVRvU3BsaXRUbyk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGVB
ZnRlckluc2VydGlvblBvc2l0aW9uID0gb3V0ZXJCbG9jazsKIAogICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0LCBlbmRPZlNlbGVjdGlvbik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCmlu
ZGV4IDdmOGRhMTc1OTUyZTA5NjY1NjRhYmU4ODE0YzBkMTlkODIxMDNiZjQuLmE0NWQ5NmEzZmRh
NTM0OTM0YWVhMDlmNzE2NWNlMzlkYWYzYzM0ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBJ
bmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50SW50b0Jsb2NrcXVvdGUoY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3MKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPE5vZGU+IG5v
ZGVBZnRlclN0YXJ0ID0gc3RhcnQuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCk7Ci0gICAgUmVm
UHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuY29udGFpbmVyTm9kZSgpID09IG5vZGVUb1Nw
bGl0VG8pID8gc3RhcnQuY29udGFpbmVyTm9kZSgpIDogc3BsaXRUcmVlVG9Ob2RlKHN0YXJ0LmNv
bnRhaW5lck5vZGUoKSwgbm9kZVRvU3BsaXRUbyk7CisgICAgUmVmUHRyPE5vZGU+IG91dGVyQmxv
Y2sgPSAoc3RhcnQuY29udGFpbmVyTm9kZSgpID09IG5vZGVUb1NwbGl0VG8pID8gc3RhcnQuY29u
dGFpbmVyTm9kZSgpIDogc3BsaXRUcmVlVG9Ob2RlKCpzdGFydC5jb250YWluZXJOb2RlKCksICpu
b2RlVG9TcGxpdFRvKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ29udGVudHMgPSBz
dGFydDsKICAgICBpZiAoIXRhcmdldEJsb2NrcXVvdGUpIHsKQEAgLTE3OSw3ICsxNzksNyBAQCB2
b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKCkKICAgICBhdXRvKiBl
bmNsb3NpbmdCbG9ja0Zsb3cgPSBlbmNsb3NpbmdCbG9jayhzdGFydE9mUGFyYWdyYXBoTm9kZSk7
CiAgICAgUmVmUHRyPE5vZGU+IHNwbGl0QmxvY2txdW90ZU5vZGUgPSBlbmNsb3NpbmdOb2RlOwog
ICAgIGlmIChlbmNsb3NpbmdCbG9ja0Zsb3cgIT0gZW5jbG9zaW5nTm9kZSkKLSAgICAgICAgc3Bs
aXRCbG9ja3F1b3RlTm9kZSA9IHNwbGl0VHJlZVRvTm9kZShzdGFydE9mUGFyYWdyYXBoTm9kZSwg
ZW5jbG9zaW5nTm9kZSwgdHJ1ZSk7CisgICAgICAgIHNwbGl0QmxvY2txdW90ZU5vZGUgPSBzcGxp
dFRyZWVUb05vZGUoKnN0YXJ0T2ZQYXJhZ3JhcGhOb2RlLCAqZW5jbG9zaW5nTm9kZSwgdHJ1ZSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIHNwbGl0IHRoZSBibG9ja3F1b3RlIGF0IHdoZXJl
IHdlIHN0YXJ0IG91dGRlbnRpbmcuCiAgICAgICAgIGF1dG8qIGhpZ2hlc3RJbmxpbmVOb2RlID0g
aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVx
dWl2YWxlbnQoKSwgaXNJbmxpbmUsIENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5LCBlbmNsb3Np
bmdCbG9ja0Zsb3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5k
LmNwcAppbmRleCBiNjI3Njc2MjA5MGJjNzhiMTg1YTM5NDJlOGI2NTM2OTQzM2JiYjM3Li5lNmUz
NDkyZTIwODI3OGQwNGUzY2VhNWRjNDU1NzA2MjVhMzg1ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApAQCAtNTQsMzUgKzU0LDMzIEBAIFJlZlB0
cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENvbW1hbmQ6Omluc2VydExpc3QoRG9jdW1lbnQmIGRv
Y3VtZW50LCBUeXBlIHR5cGUpCiAgICAgcmV0dXJuIGluc2VydENvbW1hbmQtPm1fbGlzdEVsZW1l
bnQ7CiB9CiAKLUhUTUxFbGVtZW50KiBJbnNlcnRMaXN0Q29tbWFuZDo6Zml4T3JwaGFuZWRMaXN0
Q2hpbGQoTm9kZSYgbm9kZSkKK0hUTUxFbGVtZW50JiBJbnNlcnRMaXN0Q29tbWFuZDo6Zml4T3Jw
aGFuZWRMaXN0Q2hpbGQoTm9kZSYgbm9kZSkKIHsKICAgICBhdXRvIGxpc3RFbGVtZW50ID0gSFRN
TFVMaXN0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGluc2VydE5vZGVCZWZvcmUo
bGlzdEVsZW1lbnQuY29weVJlZigpLCBub2RlKTsKICAgICByZW1vdmVOb2RlKG5vZGUpOwogICAg
IGFwcGVuZE5vZGUobm9kZSwgbGlzdEVsZW1lbnQuY29weVJlZigpKTsKICAgICBtX2xpc3RFbGVt
ZW50ID0gbGlzdEVsZW1lbnQuY29weVJlZigpOwotICAgIHJldHVybiBsaXN0RWxlbWVudC5wdHIo
KTsKKyAgICByZXR1cm4gbGlzdEVsZW1lbnQuZ2V0KCk7CiB9CiAKLVJlZlB0cjxIVE1MRWxlbWVu
dD4gSW5zZXJ0TGlzdENvbW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gcGFzc2VkTGlzdCkKK1JlZjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENv
bW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoSFRNTEVsZW1lbnQmIGxpc3QpCiB7Ci0g
ICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0ID0gcGFzc2VkTGlzdDsKLSAgICBFbGVtZW50KiBw
cmV2aW91c0xpc3QgPSBsaXN0LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7Ci0gICAgaWYgKGNh
bk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0LmdldCgpKSkKLSAgICAgICAgbWVyZ2VJZGVu
dGljYWxFbGVtZW50cygqcHJldmlvdXNMaXN0LCAqbGlzdCk7Ci0KLSAgICBpZiAoIWxpc3QpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJh
dmVyc2FsOjpuZXh0U2libGluZygqbGlzdCk7CisgICAgUmVmPEhUTUxFbGVtZW50PiBwcm90ZWN0
ZWRMaXN0ID0gbGlzdDsKKyAgICBFbGVtZW50KiBwcmV2aW91c0xpc3QgPSBsaXN0LnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsKKyAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91c0xpc3QsICZs
aXN0KSkKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygqcHJldmlvdXNMaXN0LCBsaXN0
KTsKKworICAgIEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGlu
ZyhsaXN0KTsKICAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihzaWJsaW5nKSkKLSAgICAgICAgcmV0
dXJuIGxpc3Q7CisgICAgICAgIHJldHVybiBwcm90ZWN0ZWRMaXN0OwogCi0gICAgUmVmUHRyPEhU
TUxFbGVtZW50PiBuZXh0TGlzdCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzaWJsaW5nKTsKLSAg
ICBpZiAoY2FuTWVyZ2VMaXN0cyhsaXN0LmdldCgpLCBuZXh0TGlzdC5nZXQoKSkpIHsKLSAgICAg
ICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygqbGlzdCwgKm5leHRMaXN0KTsKKyAgICBSZWY8SFRN
TEVsZW1lbnQ+IG5leHRMaXN0ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpzaWJsaW5nKTsKKyAg
ICBpZiAoY2FuTWVyZ2VMaXN0cygmbGlzdCwgbmV4dExpc3QucHRyKCkpKSB7CisgICAgICAgIG1l
cmdlSWRlbnRpY2FsRWxlbWVudHMobGlzdCwgbmV4dExpc3QpOwogICAgICAgICByZXR1cm4gbmV4
dExpc3Q7CiAgICAgfQotICAgIHJldHVybiBsaXN0OworICAgIHJldHVybiBwcm90ZWN0ZWRMaXN0
OwogfQogCiBib29sIEluc2VydExpc3RDb21tYW5kOjpzZWxlY3Rpb25IYXNMaXN0T2ZUeXBlKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlz
dFRhZykKQEAgLTIwOSw4ICsyMDcsOCBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5
Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBIVAogICAgICAg
ICAvLyBSZW1vdmUgdGhlIGxpc3QgY2hsaWxkLgogICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+
IGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdChsaXN0Q2hpbGROb2RlKTsKICAgICAgICAgaWYgKCFs
aXN0Tm9kZSkgewotICAgICAgICAgICAgbGlzdE5vZGUgPSBmaXhPcnBoYW5lZExpc3RDaGlsZCgq
bGlzdENoaWxkTm9kZSk7Ci0gICAgICAgICAgICBsaXN0Tm9kZSA9IG1lcmdlV2l0aE5laWdoYm9y
aW5nTGlzdHMobGlzdE5vZGUpOworICAgICAgICAgICAgbGlzdE5vZGUgPSAmZml4T3JwaGFuZWRM
aXN0Q2hpbGQoKmxpc3RDaGlsZE5vZGUpOworICAgICAgICAgICAgbGlzdE5vZGUgPSBtZXJnZVdp
dGhOZWlnaGJvcmluZ0xpc3RzKCpsaXN0Tm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFs
aXN0Tm9kZS0+aGFzVGFnTmFtZShsaXN0VGFnKSkgewogICAgICAgICAgICAgLy8gbGlzdENoaWxk
Tm9kZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQgYSBsaXN0IG9mIHR5cGUgbV90
eXBlIHdpbGwgYmUgY3JlYXRlZC4KQEAgLTI0MCw3ICsyMzgsNyBAQCB2b2lkIEluc2VydExpc3RD
b21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBj
b25zdCBIVAogICAgICAgICAgICAgaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pc0Nvbm5lY3Rl
ZCgpKQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKmxpc3ROb2RlKTsKIAotICAgICAgICAg
ICAgbmV3TGlzdCA9IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMobmV3TGlzdCk7CisgICAgICAg
ICAgICBuZXdMaXN0ID0gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cygqbmV3TGlzdCk7CiAKICAg
ICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIGN1cnJlbnQgc2Vs
ZWN0aW9uIGlmIHRoZXkgc3RhcnRlZCBpbnNpZGUgbGlzdE5vZGUKICAgICAgICAgICAgIC8vIGJl
Y2F1c2UgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMgY291bGQgaGF2ZSByZW1vdmVkIHRoZW0uCkBA
IC0zMDAsNyArMjk4LDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdy
YXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwKICAgICAgICAgLy8gRklY
TUU6IFdlIGFwcGVhciB0byBzcGxpdCBhdCBuZXh0TGlzdENoaWxkIGFzIG9wcG9zZWQgdG8gbGlz
dENoaWxkTm9kZSBzbyB0aGF0IHdoZW4gd2UgcmVtb3ZlCiAgICAgICAgIC8vIGxpc3RDaGlsZE5v
ZGUgYmVsb3cgaW4gbW92ZVBhcmFncmFwaHMsIHByZXZpb3VzTGlzdENoaWxkIHdpbGwgYmUgcmVt
b3ZlZCBhbG9uZyB3aXRoIGl0IGlmIGl0IGlzIAogICAgICAgICAvLyB1bnJlbmRlcmVkLiBCdXQg
d2Ugb3VnaHQgdG8gcmVtb3ZlIG5leHRMaXN0Q2hpbGQgdG9vLCBpZiBpdCBpcyB1bnJlbmRlcmVk
LgotICAgICAgICBzcGxpdEVsZW1lbnQoKmxpc3ROb2RlLCAqc3BsaXRUcmVlVG9Ob2RlKG5leHRM
aXN0Q2hpbGQsIGxpc3ROb2RlKSk7CisgICAgICAgIHNwbGl0RWxlbWVudCgqbGlzdE5vZGUsICpz
cGxpdFRyZWVUb05vZGUoKm5leHRMaXN0Q2hpbGQsICpsaXN0Tm9kZSkpOwogICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKG5vZGVUb0luc2VydC5yZWxlYXNlTm9uTnVsbCgpLCAqbGlzdE5vZGUpOwog
ICAgIH0gZWxzZSBpZiAobmV4dExpc3RDaGlsZCB8fCBsaXN0Q2hpbGROb2RlLT5wYXJlbnROb2Rl
KCkgIT0gbGlzdE5vZGUpIHsKICAgICAgICAgLy8gSnVzdCBiZWNhdXNlIGxpc3RDaGlsZE5vZGUg
aGFzIG5vIHByZXZpb3VzTGlzdENoaWxkIGRvZXNuJ3QgbWVhbiB0aGVyZSBpc24ndCBhbnkgY29u
dGVudApAQCAtMzA4LDcgKzMwNiw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlm
eVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsCiAgICAgICAg
IC8vIGJldHdlZW4gaXQgYW5kIGxpc3ROb2RlLiBTbywgd2Ugc3BsaXQgdXAgdG8gbGlzdE5vZGUg
YmVmb3JlIGluc2VydGluZyB0aGUgcGxhY2Vob2xkZXIKICAgICAgICAgLy8gd2hlcmUgd2UncmUg
YWJvdXQgdG8gbW92ZSBsaXN0Q2hpbGROb2RlIHRvLgogICAgICAgICBpZiAobGlzdENoaWxkTm9k
ZS0+cGFyZW50Tm9kZSgpICE9IGxpc3ROb2RlKQotICAgICAgICAgICAgc3BsaXRFbGVtZW50KCps
aXN0Tm9kZSwgKnNwbGl0VHJlZVRvTm9kZShsaXN0Q2hpbGROb2RlLCBsaXN0Tm9kZSkuZ2V0KCkp
OworICAgICAgICAgICAgc3BsaXRFbGVtZW50KCpsaXN0Tm9kZSwgKnNwbGl0VHJlZVRvTm9kZSgq
bGlzdENoaWxkTm9kZSwgKmxpc3ROb2RlKS5nZXQoKSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZv
cmUobm9kZVRvSW5zZXJ0LnJlbGVhc2VOb25OdWxsKCksICpsaXN0Tm9kZSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlVG9JbnNlcnQucmVsZWFzZU5vbk51bGwoKSwg
Kmxpc3ROb2RlKTsKQEAgLTM5OCw3ICszOTYsNyBAQCBSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2Vy
dExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgbwog
ICAgIG1vdmVQYXJhZ3JhcGgoc3RhcnQsIGVuZCwgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9s
ZGVyLnB0cigpKSwgdHJ1ZSk7CiAKICAgICBpZiAobGlzdEVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKGxpc3RFbGVtZW50KTsKKyAgICAgICAgcmV0dXJu
IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoKmxpc3RFbGVtZW50KTsKIAogICAgIGlmIChjYW5N
ZXJnZUxpc3RzKHByZXZpb3VzTGlzdCwgbmV4dExpc3QpKQogICAgICAgICBtZXJnZUlkZW50aWNh
bEVsZW1lbnRzKCpwcmV2aW91c0xpc3QsICpuZXh0TGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydExpc3RDb21tYW5kLmgKaW5kZXggZDZiYWIxZjc5YTZiZjE5ODc0M2QzZGY5ZjNm
ZmVlMjBjYTFlZmQ2MC4uZWRlMDgyZTY4NzFiNTk2ZWEyMTM1Y2Y2NTNiZjQ0MDc0MDVhNzAzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuaApAQCAtNTEsOSAr
NTEsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IGZpbmFsOwogCi0gICAgSFRNTEVsZW1lbnQqIGZpeE9y
cGhhbmVkTGlzdENoaWxkKE5vZGUmKTsKKyAgICBIVE1MRWxlbWVudCYgZml4T3JwaGFuZWRMaXN0
Q2hpbGQoTm9kZSYpOwogICAgIGJvb2wgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZShjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICBSZWZQ
dHI8SFRNTEVsZW1lbnQ+IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4pOworICAgIFJlZjxIVE1MRWxlbWVudD4gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0
cyhIVE1MRWxlbWVudCYpOwogICAgIHZvaWQgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29s
IGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUmLCBSYW5nZSogY3VycmVu
dFNlbGVjdGlvbik7CiAgICAgdm9pZCB1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBvcmlnaW5hbFN0YXJ0LCBIVE1MRWxlbWVudCogbGlzdE5vZGUsIE5vZGUqIGxpc3RD
aGlsZE5vZGUpOwogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdGlmeVBhcmFncmFwaChjb25z
dCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxp
c3RUYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKaW5kZXggODVkZTEyYzg3YjhmMzgxZjFhOWFjZmQ4
YmY2NjA3YmRiYzJjOWI1Yi4uNmY4ZTQ5YzNkOTNhNGUzYzQxMGNmNjUxM2JlNTVmNWM3ZDQ3NDNi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCkBAIC0zODIsNyArMzgyLDcgQEAgdm9pZCBJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGlmIChpczxU
ZXh0Pigqc3BsaXRUbykgJiYgaW5zZXJ0aW9uUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkgPj0gY2FyZXRNYXhPZmZzZXQoKnNwbGl0VG8pKQogICAgICAgICAgICAgICAgIHNwbGl0VG8g
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzcGxpdFRvLCBzdGFydEJsb2NrLmdldCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVChzcGxpdFRvKTsKLSAgICAgICAgICAgIHNwbGl0VHJlZVRvTm9kZShzcGxp
dFRvLCBzdGFydEJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgIHNwbGl0VHJlZVRvTm9kZSgqc3Bs
aXRUbywgKnN0YXJ0QmxvY2spOwogCiAgICAgICAgICAgICBmb3IgKG4gPSBzdGFydEJsb2NrLT5m
aXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIGJlZm9yZU5vZGVQb3NpdGlvbiA9IHBvc2l0aW9uQmVmb3JlTm9kZShu
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXgg
MTc1NWVmMGQ4ZDU1Y2U4ZWE2YTFhYWE2YzY4YWZjY2IyNGY1OWZjMi4uZWZkODY1MDlhMTVlNmM1
OGRiYzlhNzBmMTk5MGJmNmY1OTAyZmRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTQ1LDEyICs0NSwxMiBAQCBJbnNlcnRUZXh0Q29tbWFu
ZDo6SW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRl
eHQsIGJvbwogewogfQogCi1JbnNlcnRUZXh0Q29tbWFuZDo6SW5zZXJ0VGV4dENvbW1hbmQoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIFBhc3NSZWZQdHI8VGV4dEluc2Vy
dGlvbk1hcmtlclN1cHBsaWVyPiBtYXJrZXJTdXBwbGllciwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQorSW5zZXJ0VGV4dENvbW1hbmQ6Okluc2VydFRleHRDb21tYW5kKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWY8VGV4dEluc2VydGlvbk1hcmtlclN1cHBsaWVy
PiYmIG1hcmtlclN1cHBsaWVyLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBDb21w
b3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCwgZWRpdGluZ0FjdGlvbikKICAgICAsIG1fdGV4dCh0
ZXh0KQogICAgICwgbV9zZWxlY3RJbnNlcnRlZFRleHQoZmFsc2UpCiAgICAgLCBtX3JlYmFsYW5j
ZVR5cGUoUmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMpCi0gICAgLCBtX21h
cmtlclN1cHBsaWVyKG1hcmtlclN1cHBsaWVyKQorICAgICwgbV9tYXJrZXJTdXBwbGllcihXVEZN
b3ZlKG1hcmtlclN1cHBsaWVyKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5oCmluZGV4IGJmNzkxN2JmYjg0OTc1ODczZTJiY2YyNjdkNjZmY2YxZTE2
MmVjZTcuLjliYzhiMzk5NTY3ZWQ3NTJhYWQxOTRiNDZkODYxMzIyZDI2ZDc2MTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKQEAgLTUzLDEzICs1MywxMyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc2VydFRleHRDb21tYW5k
KGRvY3VtZW50LCB0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQsIHJlYmFsYW5jZVR5cGUsIGVkaXRp
bmdBY3Rpb24pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPEluc2VydFRleHRDb21tYW5kPiBj
cmVhdGVXaXRoTWFya2VyU3VwcGxpZXIoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcm
IHRleHQsIFBhc3NSZWZQdHI8VGV4dEluc2VydGlvbk1hcmtlclN1cHBsaWVyPiBtYXJrZXJTdXBw
bGllciwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uID0gRWRpdEFjdGlvbkluc2VydCkKKyAgICBz
dGF0aWMgUmVmPEluc2VydFRleHRDb21tYW5kPiBjcmVhdGVXaXRoTWFya2VyU3VwcGxpZXIoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZjxUZXh0SW5zZXJ0aW9uTWFy
a2VyU3VwcGxpZXI+JiYgbWFya2VyU3VwcGxpZXIsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiA9
IEVkaXRBY3Rpb25JbnNlcnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCwgdGV4dCwgbWFya2VyU3VwcGxpZXIsIGVkaXRpbmdB
Y3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zZXJ0VGV4dENvbW1hbmQo
ZG9jdW1lbnQsIHRleHQsIFdURk1vdmUobWFya2VyU3VwcGxpZXIpLCBlZGl0aW5nQWN0aW9uKSk7
CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQmLCBj
b25zdCBTdHJpbmcmIHRleHQsIFBhc3NSZWZQdHI8VGV4dEluc2VydGlvbk1hcmtlclN1cHBsaWVy
PiwgRWRpdEFjdGlvbik7CisgICAgSW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQmLCBjb25zdCBT
dHJpbmcmIHRleHQsIFJlZjxUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXI+JiYsIEVkaXRBY3Rp
b24pOwogICAgIEluc2VydFRleHRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgUmViYWxhbmNlVHlwZSwgRWRpdEFjdGlvbik7CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rp
b25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCmluZGV4IGRiOTEwY2FmMWYwYWQyNDkxMzY2MTFiMDAwMTk5YzI4ZjFkYzkxMWQuLjlm
MWVlZTY1MDY4NjU4NWY3MjM1M2I2ZDljMjIzZjgwZjkxZDNjZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0zMiwxNCArMzIsMTMg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Nb3ZlU2VsZWN0aW9uQ29tbWFuZDo6TW92ZVNl
bGVjdGlvbkNvbW1hbmQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uLCBib29sIHNtYXJ0SW5zZXJ0LCBib29sIHNtYXJ0RGVsZXRl
KSAKK01vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZChSZWY8RG9jdW1l
bnRGcmFnbWVudD4mJiBmcmFnbWVudCwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBib29sIHNt
YXJ0SW5zZXJ0LCBib29sIHNtYXJ0RGVsZXRlKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQo
cG9zaXRpb24uYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpKQotICAgICwgbV9mcmFnbWVudChmcmFn
bWVudCkKKyAgICAsIG1fZnJhZ21lbnQoV1RGTW92ZShmcmFnbWVudCkpCiAgICAgLCBtX3Bvc2l0
aW9uKHBvc2l0aW9uKQogICAgICwgbV9zbWFydEluc2VydChzbWFydEluc2VydCkKICAgICAsIG1f
c21hcnREZWxldGUoc21hcnREZWxldGUpCiB7Ci0gICAgQVNTRVJUKG1fZnJhZ21lbnQpOwogfQog
CiB2b2lkIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCA4YjNjMzM4YjE2MjIzYWQyZDM5
ZDZmNGZkNTdlYzMyMjg0NTM4MGM3Li5iYzRlZDgwMTc2MjkzOTI0N2ZmMzY3YTg5YzMwMjRkYTFh
Yzk1NWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25D
b21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFu
ZC5oCkBAIC0zMywxOSArMzMsMTkgQEAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIAogY2xhc3Mg
TW92ZVNlbGVjdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8TW92ZVNlbGVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24s
IGJvb2wgc21hcnRJbnNlcnQgPSBmYWxzZSwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlKQorICAg
IHN0YXRpYyBSZWY8TW92ZVNlbGVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShSZWY8RG9jdW1lbnRGcmFn
bWVudD4mJiBmcmFnbWVudCwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBib29sIHNtYXJ0SW5z
ZXJ0ID0gZmFsc2UsIGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE1vdmVTZWxlY3Rpb25Db21tYW5kKGZyYWdtZW50LCBwb3NpdGlv
biwgc21hcnRJbnNlcnQsIHNtYXJ0RGVsZXRlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vdmVTZWxlY3Rpb25Db21tYW5kKFdURk1vdmUoZnJhZ21lbnQpLCBwb3NpdGlvbiwgc21h
cnRJbnNlcnQsIHNtYXJ0RGVsZXRlKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIE1vdmVTZWxl
Y3Rpb25Db21tYW5kKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGNvbnN0IFBvc2l0aW9u
JiwgYm9vbCBzbWFydEluc2VydCwgYm9vbCBzbWFydERlbGV0ZSk7CisgICAgTW92ZVNlbGVjdGlv
bkNvbW1hbmQoUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYsIGNvbnN0IFBvc2l0aW9uJiwgYm9vbCBz
bWFydEluc2VydCwgYm9vbCBzbWFydERlbGV0ZSk7CiAKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVy
cmlkZTsKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIHNob3VsZERpc3BhdGNoSW5wdXRFdmVudHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQogICAgIAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX2ZyYWdtZW50Owor
ICAgIFJlZjxEb2N1bWVudEZyYWdtZW50PiBtX2ZyYWdtZW50OwogICAgIFBvc2l0aW9uIG1fcG9z
aXRpb247CiAgICAgYm9vbCBtX3NtYXJ0SW5zZXJ0OwogICAgIGJvb2wgbV9zbWFydERlbGV0ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKaW5kZXggZTUwYzRlYmZlOWRkZjYyMWYyNWU5ZmUwM2Y0YjIzNTg5YTVjNmY1Ny4uMWViMTNl
NmQyMjVkMTMwZmIzZTMwMWY0NzljMzNkOTlkZTVmNjNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTg5LDcgKzg5LDcg
QEAgcHVibGljOgogICAgIGJvb2wgaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydDsgfQogICAgIGJvb2wgaGFz
SW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ludGVyY2hhbmdl
TmV3bGluZUF0RW5kOyB9CiAgICAgCi0gICAgdm9pZCByZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9k
ZT4pOworICAgIHZvaWQgcmVtb3ZlTm9kZShOb2RlJik7CiAgICAgdm9pZCByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKE5vZGUmKTsKIAogcHJpdmF0ZToKQEAgLTk4LDcgKzk4LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlc3RvcmVBbmRSZW1vdmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdt
ZW50KFN0eWxlZEVsZW1lbnQqKTsKICAgICB2b2lkIHJlbW92ZUludGVyY2hhbmdlTm9kZXMoTm9k
ZSopOwogICAgIAotICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5v
ZGUsIE5vZGUqIHJlZk5vZGUpOworICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShOb2RlJiwgTm9k
ZSYgcmVmTm9kZSk7CiAKICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiAqbV9kb2N1
bWVudDsgfQogCkBAIC0yMjgsMzQgKzIyOCwyOCBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6
OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSYgbm9kZSkKIHsKICAgICBSZWY8Tm9k
ZT4gcHJvdGVjdGVkTm9kZSA9IG5vZGU7CiAgICAgd2hpbGUgKFJlZlB0cjxOb2RlPiBuID0gbm9k
ZS5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgcmVtb3ZlTm9kZShuKTsKLSAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShXVEZNb3ZlKG4pLCAmbm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoKm4pOwor
ICAgICAgICBpbnNlcnROb2RlQmVmb3JlKCpuLCBub2RlKTsKICAgICB9Ci0gICAgcmVtb3ZlTm9k
ZSgmbm9kZSk7CisgICAgcmVtb3ZlTm9kZShub2RlKTsKIH0KIAotdm9pZCBSZXBsYWNlbWVudEZy
YWdtZW50OjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKK3ZvaWQgUmVwbGFjZW1l
bnRGcmFnbWVudDo6cmVtb3ZlTm9kZShOb2RlJiBub2RlKQogewotICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPm5v
blNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IG5vZGUubm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKCpub2RlKTsKKyAg
ICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUpOwogfQogCi12b2lkIFJlcGxhY2VtZW50RnJhZ21l
bnQ6Omluc2VydE5vZGVCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBOb2RlKiByZWZOb2Rl
KQordm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjppbnNlcnROb2RlQmVmb3JlKE5vZGUmIG5vZGUs
IE5vZGUmIHJlZk5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8ICFyZWZOb2RlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHJlZk5vZGUtPm5v
blNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IHJlZk5vZGUubm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoKm5v
ZGUsIHJlZk5vZGUpOworICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5vZGUsICZyZWZOb2RlKTsK
IH0KIAogUmVmPEhUTUxFbGVtZW50PiBSZXBsYWNlbWVudEZyYWdtZW50OjppbnNlcnRGcmFnbWVu
dEZvclRlc3RSZW5kZXJpbmcoTm9kZSogcm9vdEVkaXRhYmxlRWxlbWVudCkKQEAgLTI3OSwxNiAr
MjczLDE2IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVzdG9yZUFuZFJlbW92ZVRlc3RS
ZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoU3R5bGVkRWxlCiAgICAgICAgIG1fZnJhZ21lbnQtPmFw
cGVuZENoaWxkKCpub2RlKTsKICAgICB9CiAKLSAgICByZW1vdmVOb2RlKGhvbGRlcik7CisgICAg
cmVtb3ZlTm9kZSgqaG9sZGVyKTsKIH0KIAogdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1v
dmVVbnJlbmRlcmVkTm9kZXMoTm9kZSogaG9sZGVyKQogewotICAgIFZlY3RvcjxSZWZQdHI8Tm9k
ZT4+IHVucmVuZGVyZWQ7CisgICAgVmVjdG9yPFJlZjxOb2RlPj4gdW5yZW5kZXJlZDsKIAogICAg
IGZvciAoTm9kZSogbm9kZSA9IGhvbGRlci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgaG9sZGVyKSkgewogICAgICAgICBpZiAoIWlzTm9kZVJl
bmRlcmVkKCpub2RlKSAmJiAhaXNUYWJsZVN0cnVjdHVyZU5vZGUobm9kZSkpCi0gICAgICAgICAg
ICB1bnJlbmRlcmVkLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIHVucmVuZGVyZWQuYXBwZW5k
KCpub2RlKTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIG5vZGUgOiB1bnJlbmRlcmVkKQpAQCAt
MzA2LDcgKzMwMCw3IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFu
Z2VOb2RlcyhOb2RlKiBjb250YWluZXIpCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYg
KGlzSW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShub2RlKSkgewogICAgICAgICAgICAgbV9oYXNJbnRl
cmNoYW5nZU5ld2xpbmVBdFN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlbW92ZU5vZGUobm9k
ZSk7CisgICAgICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CkBAIC0zMTksNyAr
MzEzLDcgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVz
KE5vZGUqIGNvbnRhaW5lcikKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAoaXNJbnRl
cmNoYW5nZU5ld2xpbmVOb2RlKG5vZGUpKSB7CiAgICAgICAgICAgICBtX2hhc0ludGVyY2hhbmdl
TmV3bGluZUF0RW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAg
ICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIG5vZGUgPSBub2RlLT5sYXN0Q2hpbGQoKTsKQEAgLTY0MCwxNSArNjM0LDE0IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VJbnNlcnRlZENvbnRlbnRSb3VuZFRy
aXBwYWJsZVdpdGhIVE1MVHJlZUJ1aWxkCiAgICAgICAgICAgICBpZiAoYXV0byogcGFyYWdyYXBo
RWxlbWVudCA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVO
b2RlKG5vZGUuZ2V0KCkpLCBwVGFnKSkgewogICAgICAgICAgICAgICAgIGF1dG8qIHBhcmVudCA9
IHBhcmFncmFwaEVsZW1lbnQtPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50ICYmIHBhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQotICAgICAgICAgICAgICAgICAgICBt
b3ZlTm9kZU91dE9mQW5jZXN0b3Iobm9kZSwgcGFyYWdyYXBoRWxlbWVudCwgaW5zZXJ0ZWROb2Rl
cyk7CisgICAgICAgICAgICAgICAgICAgIG1vdmVOb2RlT3V0T2ZBbmNlc3Rvcigqbm9kZSwgKnBh
cmFncmFwaEVsZW1lbnQsIGluc2VydGVkTm9kZXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKICAgICAgICAgaWYgKGlzSGVhZGVyRWxlbWVudChub2RlLmdldCgpKSkgewotICAgICAgICAg
ICAgYXV0byogaGVhZGVyRWxlbWVudCA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKHBvc2l0
aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBpc0hlYWRlckVsZW1lbnQpOwotICAg
ICAgICAgICAgaWYgKGhlYWRlckVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBoZWFk
ZXJFbGVtZW50ID0gaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25JblBhcmVudEJl
Zm9yZU5vZGUobm9kZS5nZXQoKSksIGlzSGVhZGVyRWxlbWVudCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoaGVhZGVyRWxlbWVudC0+cGFyZW50Tm9kZSgpICYmIGhlYWRlckVsZW1lbnQtPnBhcmVu
dE5vZGUoKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAg
bW92ZU5vZGVPdXRPZkFuY2VzdG9yKG5vZGUsIGhlYWRlckVsZW1lbnQsIGluc2VydGVkTm9kZXMp
OworICAgICAgICAgICAgICAgICAgICBtb3ZlTm9kZU91dE9mQW5jZXN0b3IoKm5vZGUsICpoZWFk
ZXJFbGVtZW50LCBpbnNlcnRlZE5vZGVzKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgSFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50ID0gcmVwbGFjZUVsZW1l
bnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KCpub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkTm9kZXMuZGlkUmVw
bGFjZU5vZGUobm9kZS5nZXQoKSwgbmV3U3BhbkVsZW1lbnQpOwpAQCAtNjU4LDI3ICs2NTEsMjcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZUluc2VydGVkQ29udGVudFJvdW5k
VHJpcHBhYmxlV2l0aEhUTUxUcmVlQnVpbGQKICAgICB9CiB9CiAKLXZvaWQgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6Om1vdmVOb2RlT3V0T2ZBbmNlc3RvcihQYXNzUmVmUHRyPE5vZGU+IHBycE5v
ZGUsIFBhc3NSZWZQdHI8Tm9kZT4gcHJwQW5jZXN0b3IsIEluc2VydGVkTm9kZXMmIGluc2VydGVk
Tm9kZXMpCit2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptb3ZlTm9kZU91dE9mQW5jZXN0
b3IoTm9kZSYgbm9kZSwgTm9kZSYgYW5jZXN0b3IsIEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9k
ZXMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBwcnBOb2RlOwotICAgIFJlZlB0cjxOb2Rl
PiBhbmNlc3RvciA9IHBycEFuY2VzdG9yOworICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWROb2RlID0g
bm9kZTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkQW5jZXN0b3IgPSBhbmNlc3RvcjsKIAotICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkF0RW5kT2ZOb2RlID0gbGFzdFBvc2l0aW9uSW5PckFm
dGVyTm9kZShub2RlLmdldCgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5Q
YXJhZ3JhcGggPSBsYXN0UG9zaXRpb25Jbk5vZGUoYW5jZXN0b3IuZ2V0KCkpOworICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkF0RW5kT2ZOb2RlID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9k
ZSgmbm9kZSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RQb3NpdGlvbkluUGFyYWdyYXBoID0g
bGFzdFBvc2l0aW9uSW5Ob2RlKCZhbmNlc3Rvcik7CiAgICAgaWYgKHBvc2l0aW9uQXRFbmRPZk5v
ZGUgPT0gbGFzdFBvc2l0aW9uSW5QYXJhZ3JhcGgpIHsKLSAgICAgICAgcmVtb3ZlTm9kZSgqbm9k
ZSk7Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGlu
c2VydE5vZGVCZWZvcmUobm9kZS5yZWxlYXNlTm9uTnVsbCgpLCAqYW5jZXN0b3ItPm5leHRTaWJs
aW5nKCkpOworICAgICAgICByZW1vdmVOb2RlKG5vZGUpOworICAgICAgICBpZiAoYW5jZXN0b3Iu
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoV1RGTW92ZShwcm90
ZWN0ZWROb2RlKSwgKmFuY2VzdG9yLm5leHRTaWJsaW5nKCkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBhcHBlbmROb2RlKG5vZGUucmVsZWFzZU5vbk51bGwoKSwgKmFuY2VzdG9yLT5wYXJl
bnROb2RlKCkpOworICAgICAgICAgICAgYXBwZW5kTm9kZShXVEZNb3ZlKHByb3RlY3RlZE5vZGUp
LCAqYW5jZXN0b3IucGFyZW50Tm9kZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8
Tm9kZT4gbm9kZVRvU3BsaXRUbyA9IHNwbGl0VHJlZVRvTm9kZShub2RlLmdldCgpLCBhbmNlc3Rv
ci5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoKm5vZGUpOwotICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKG5vZGUucmVsZWFzZU5vbk51bGwoKSwgKm5vZGVUb1NwbGl0VG8pOworICAg
ICAgICBSZWZQdHI8Tm9kZT4gbm9kZVRvU3BsaXRUbyA9IHNwbGl0VHJlZVRvTm9kZShub2RlLCBh
bmNlc3RvciwgdHJ1ZSk7CisgICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUoV1RGTW92ZShwcm90ZWN0ZWROb2RlKSwgKm5vZGVUb1NwbGl0VG8pOwogICAg
IH0KLSAgICBpZiAoIWFuY2VzdG9yLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgaW5zZXJ0ZWRO
b2Rlcy53aWxsUmVtb3ZlTm9kZShhbmNlc3Rvci5nZXQoKSk7Ci0gICAgICAgIHJlbW92ZU5vZGUo
KmFuY2VzdG9yKTsKKyAgICBpZiAoIWFuY2VzdG9yLmZpcnN0Q2hpbGQoKSkgeworICAgICAgICBp
bnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlKCZhbmNlc3Rvcik7CisgICAgICAgIHJlbW92ZU5v
ZGUoYW5jZXN0b3IpOwogICAgIH0KIH0KIApAQCAtNzM5LDcgKzczMiw3IEBAIHN0YXRpYyB2b2lk
IHJlbW92ZUhlYWRDb250ZW50cyhSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVudCkKICAgICB9
CiAKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB0b1JlbW92ZSkKLSAgICAgICAgZnJhZ21lbnQu
cmVtb3ZlTm9kZShlbGVtZW50KTsKKyAgICAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZSgqZWxlbWVu
dCk7CiB9CiAKIC8vIFJlbW92ZSBzdHlsZSBzcGFucyBiZWZvcmUgaW5zZXJ0aW9uIGlmIHRoZXkg
YXJlIHVubmVjZXNzYXJ5LiAgSXQncyBmYXN0ZXIgYmVjYXVzZSB3ZSdsbCAKQEAgLTEwODUsNyAr
MTA3OCw4IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAg
ICAgICAgICAgIE5vZGUqIHNwbGl0U3RhcnQgPSBpbnNlcnRpb25Qb3MuY29tcHV0ZU5vZGVBZnRl
clBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzcGxpdFN0YXJ0KQogICAgICAgICAg
ICAgICAgICAgICBzcGxpdFN0YXJ0ID0gaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKTsKLSAg
ICAgICAgICAgICAgICBub2RlVG9TcGxpdFRvID0gc3BsaXRUcmVlVG9Ob2RlKHNwbGl0U3RhcnQs
IG5vZGVUb1NwbGl0VG8tPnBhcmVudE5vZGUoKSkuZ2V0KCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHNwbGl0U3RhcnQpOworICAgICAgICAgICAgICAgIG5vZGVUb1NwbGl0VG8gPSBzcGxpdFRy
ZWVUb05vZGUoKnNwbGl0U3RhcnQsICpub2RlVG9TcGxpdFRvLT5wYXJlbnROb2RlKCkpLmdldCgp
OwogICAgICAgICAgICAgICAgIGluc2VydGlvblBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVO
b2RlKG5vZGVUb1NwbGl0VG8uZ2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
MTA4LDEyICsxMTAyLDEzIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogICAgIFJlZlB0cjxOb2RlPiByZWZOb2RlID0gZnJhZ21lbnQuZmlyc3RDaGlsZCgpOwogICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gcmVmTm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAKLSAgICBm
cmFnbWVudC5yZW1vdmVOb2RlKHJlZk5vZGUpOworICAgIGlmIChyZWZOb2RlKQorICAgICAgICBm
cmFnbWVudC5yZW1vdmVOb2RlKCpyZWZOb2RlKTsKIAogICAgIE5vZGUqIGJsb2NrU3RhcnQgPSBl
bmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKChp
c0xpc3RIVE1MRWxlbWVudChyZWZOb2RlLmdldCgpKSB8fCAoaXNMZWdhY3lBcHBsZVN0eWxlU3Bh
bihyZWZOb2RlLmdldCgpKSAmJiBpc0xpc3RIVE1MRWxlbWVudChyZWZOb2RlLT5maXJzdENoaWxk
KCkpKSkKICAgICAgICAgJiYgYmxvY2tTdGFydCAmJiBibG9ja1N0YXJ0LT5yZW5kZXJlcigpLT5p
c0xpc3RJdGVtKCkpCi0gICAgICAgIHJlZk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhkb3duY2Fz
dDxIVE1MRWxlbWVudD4ocmVmTm9kZS5nZXQoKSksIGJsb2NrU3RhcnQsIGluc2VydGlvblBvcywg
aW5zZXJ0ZWROb2Rlcyk7CisgICAgICAgIHJlZk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhkb3du
Y2FzdDxIVE1MRWxlbWVudD4oKnJlZk5vZGUpLCBibG9ja1N0YXJ0LCBpbnNlcnRpb25Qb3MsIGlu
c2VydGVkTm9kZXMpOwogICAgIGVsc2UgewogICAgICAgICBpbnNlcnROb2RlQXQoKnJlZk5vZGUs
IGluc2VydGlvblBvcyk7CiAgICAgICAgIGluc2VydGVkTm9kZXMucmVzcG9uZFRvTm9kZUluc2Vy
dGlvbihyZWZOb2RlLmdldCgpKTsKQEAgLTExMjcsNyArMTEyMiw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAg
UmVmUHRyPE5vZGU+IG5leHQgPSBub2RlLT5uZXh0U2libGluZygpOwotICAgICAgICBmcmFnbWVu
dC5yZW1vdmVOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKCpu
b2RlKTsKICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKCpub2RlLCAqcmVmTm9kZSk7CiAgICAgICAg
IGluc2VydGVkTm9kZXMucmVzcG9uZFRvTm9kZUluc2VydGlvbihub2RlLmdldCgpKTsKIApAQCAt
MTQ2MiwxMiArMTQ1NywxMyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZVRl
eHROb2Rlc0Fyb3VuZFBvc2l0aW9uKFBvc2l0aW9uJiBwb3NpdGlvbiwgUAogCiAvLyBJZiB0aGUg
dXNlciBpcyBpbnNlcnRpbmcgYSBsaXN0IGludG8gYW4gZXhpc3RpbmcgbGlzdCwgaW5zdGVhZCBv
ZiBuZXN0aW5nIHRoZSBsaXN0LAogLy8gd2UgcHV0IHRoZSBsaXN0IGl0ZW1zIGludG8gdGhlIGV4
aXN0aW5nIGxpc3QuCi1Ob2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0
SXRlbXMoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gcHJwTGlzdEVsZW1lbnQsIE5vZGUqIGluc2Vy
dGlvbkJsb2NrLCBjb25zdCBQb3NpdGlvbiYgaW5zZXJ0UG9zLCBJbnNlcnRlZE5vZGVzJiBpbnNl
cnRlZE5vZGVzKQorTm9kZSogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydEFzTGlzdEl0
ZW1zKEhUTUxFbGVtZW50JiBwYXNzZWRMaXN0RWxlbWVudCwgTm9kZSogaW5zZXJ0aW9uQmxvY2ss
IGNvbnN0IFBvc2l0aW9uJiBpbnNlcnRQb3MsIEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMp
CiB7Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0RWxlbWVudCA9IHBycExpc3RFbGVtZW50
OworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdEVsZW1lbnQgPSAmcGFzc2VkTGlzdEVsZW1l
bnQ7CiAKICAgICB3aGlsZSAobGlzdEVsZW1lbnQtPmhhc09uZUNoaWxkKCkgJiYgaXNMaXN0SFRN
TEVsZW1lbnQobGlzdEVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkpCiAgICAgICAgIGxpc3RFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGxpc3RFbGVtZW50LT5maXJzdENoaWxkKCkpOworICAg
IEFTU0VSVChsaXN0RWxlbWVudCk7CiAKICAgICBib29sIGlzU3RhcnQgPSBpc1N0YXJ0T2ZQYXJh
Z3JhcGgoaW5zZXJ0UG9zKTsKICAgICBib29sIGlzRW5kID0gaXNFbmRPZlBhcmFncmFwaChpbnNl
cnRQb3MpOwpAQCAtMTQ4MCw3ICsxNDc2LDcgQEAgTm9kZSogUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6Omluc2VydEFzTGlzdEl0ZW1zKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHBycExpc3QKICAg
ICAgICAgaW50IHRleHROb2RlT2Zmc2V0ID0gaW5zZXJ0UG9zLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4oKmluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpKSAm
JiB0ZXh0Tm9kZU9mZnNldCA+IDApCiAgICAgICAgICAgICBzcGxpdFRleHROb2RlKGRvd25jYXN0
PFRleHQ+KCppbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSksIHRleHROb2RlT2Zmc2V0KTsKLSAg
ICAgICAgc3BsaXRUcmVlVG9Ob2RlKGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpLCBsYXN0Tm9k
ZSwgdHJ1ZSk7CisgICAgICAgIHNwbGl0VHJlZVRvTm9kZSgqaW5zZXJ0UG9zLmRlcHJlY2F0ZWRO
b2RlKCksICpsYXN0Tm9kZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgd2hpbGUgKFJlZlB0cjxOb2Rl
PiBsaXN0SXRlbSA9IGxpc3RFbGVtZW50LT5maXJzdENoaWxkKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCAzZDJmNDE5ZWM3
YTE2MmJkOGY5MjFmMGM3OTc2OGY5ZTUzZjEzMGY0Li42ZGZiOTFlMWEwZjBlY2FiYWYyYzJmODlh
NmFmZTgwZGY3NjUzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5oCkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFJl
ZlB0cjxOb2RlPiBtX2xhc3ROb2RlSW5zZXJ0ZWQ7CiAgICAgfTsKIAotICAgIE5vZGUqIGluc2Vy
dEFzTGlzdEl0ZW1zKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RFbGVtZW50LCBOb2RlKiBp
bnNlcnRpb25Ob2RlLCBjb25zdCBQb3NpdGlvbiYsIEluc2VydGVkTm9kZXMmKTsKKyAgICBOb2Rl
KiBpbnNlcnRBc0xpc3RJdGVtcyhIVE1MRWxlbWVudCYgbGlzdEVsZW1lbnQsIE5vZGUqIGluc2Vy
dGlvbk5vZGUsIGNvbnN0IFBvc2l0aW9uJiwgSW5zZXJ0ZWROb2RlcyYpOwogCiAgICAgdm9pZCB1
cGRhdGVOb2Rlc0luc2VydGVkKE5vZGUqKTsKICAgICBib29sIHNob3VsZFJlbW92ZUVuZEJSKE5v
ZGUqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3Bhbklu
bGluZShJbnNlcnRlZE5vZGVzJik7CiAgICAgdm9pZCBtYWtlSW5zZXJ0ZWRDb250ZW50Um91bmRU
cmlwcGFibGVXaXRoSFRNTFRyZWVCdWlsZGVyKEluc2VydGVkTm9kZXMmKTsKLSAgICB2b2lkIG1v
dmVOb2RlT3V0T2ZBbmNlc3RvcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IGFu
Y2VzdG9yLCBJbnNlcnRlZE5vZGVzJik7CisgICAgdm9pZCBtb3ZlTm9kZU91dE9mQW5jZXN0b3Io
Tm9kZSYsIE5vZGUmIGFuY2VzdG9yLCBJbnNlcnRlZE5vZGVzJik7CiAgICAgdm9pZCBoYW5kbGVT
dHlsZVNwYW5zKEluc2VydGVkTm9kZXMmKTsKICAgICB2b2lkIGhhbmRsZVBhc3RlQXNRdW90YXRp
b25Ob2RlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5k
ZXggMDEzZDEzMTA0MTUwZTdhMmM0MDM2ODhiZjNiMDVkOGY4OGFiYTFhNS4uOGYzZjVlYmI3M2I1
OWM4NjAxNWNlNjZmZWU3OTM4NGM0MjNlOTNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcApAQCAtNDAsOSArNDAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVNwZWxsQ2hlY2tSZXF1ZXN0OjpTcGVsbENoZWNrUmVxdWVzdChQYXNzUmVmUHRyPFJhbmdlPiBj
aGVja2luZ1JhbmdlLCBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBtYXNrLCBUZXh0Q2hlY2tpbmdQcm9jZXNz
VHlwZSBwcm9jZXNzVHlwZSkKLSAgICA6IG1fY2hlY2tpbmdSYW5nZShjaGVja2luZ1JhbmdlKQot
ICAgICwgbV9wYXJhZ3JhcGhSYW5nZShwYXJhZ3JhcGhSYW5nZSkKK1NwZWxsQ2hlY2tSZXF1ZXN0
OjpTcGVsbENoZWNrUmVxdWVzdChSZWY8UmFuZ2U+JiYgY2hlY2tpbmdSYW5nZSwgUmVmPFJhbmdl
PiYmIHBhcmFncmFwaFJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIFRleHRDaGVja2luZ1R5cGVN
YXNrIG1hc2ssIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHByb2Nlc3NUeXBlKQorICAgIDogbV9j
aGVja2luZ1JhbmdlKFdURk1vdmUoY2hlY2tpbmdSYW5nZSkpCisgICAgLCBtX3BhcmFncmFwaFJh
bmdlKFdURk1vdmUocGFyYWdyYXBoUmFuZ2UpKQogICAgICwgbV9yb290RWRpdGFibGVFbGVtZW50
KG1fY2hlY2tpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5yb290RWRpdGFibGVFbGVtZW50KCkp
CiAgICAgLCBtX3JlcXVlc3REYXRhKHVucmVxdWVzdGVkVGV4dENoZWNraW5nU2VxdWVuY2UsIHRl
eHQsIG1hc2ssIHByb2Nlc3NUeXBlKQogewpAQCAtNTIsMTcgKzUyLDEzIEBAIFNwZWxsQ2hlY2tS
ZXF1ZXN0Ojp+U3BlbGxDaGVja1JlcXVlc3QoKQogewogfQogCi0vLyBzdGF0aWMKLVJlZlB0cjxT
cGVsbENoZWNrUmVxdWVzdD4gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShUZXh0Q2hlY2tpbmdU
eXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSBwcm9j
ZXNzVHlwZSwgUGFzc1JlZlB0cjxSYW5nZT4gY2hlY2tpbmdSYW5nZSwgUGFzc1JlZlB0cjxSYW5n
ZT4gcGFyYWdyYXBoUmFuZ2UpCitSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IFNwZWxsQ2hlY2tS
ZXF1ZXN0OjpjcmVhdGUoVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucywg
VGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUsIFJlZjxSYW5nZT4mJiBjaGVja2lu
Z1JhbmdlLCBSZWY8UmFuZ2U+JiYgcGFyYWdyYXBoUmFuZ2UpCiB7Ci0gICAgQVNTRVJUKGNoZWNr
aW5nUmFuZ2UpOwotICAgIEFTU0VSVChwYXJhZ3JhcGhSYW5nZSk7Ci0KICAgICBTdHJpbmcgdGV4
dCA9IGNoZWNraW5nUmFuZ2UtPnRleHQoKTsKICAgICBpZiAoIXRleHQubGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3BlbGxDaGVj
a1JlcXVlc3QoY2hlY2tpbmdSYW5nZSwgcGFyYWdyYXBoUmFuZ2UsIHRleHQsIHRleHRDaGVja2lu
Z09wdGlvbnMsIHByb2Nlc3NUeXBlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3BlbGxD
aGVja1JlcXVlc3QoV1RGTW92ZShjaGVja2luZ1JhbmdlKSwgV1RGTW92ZShwYXJhZ3JhcGhSYW5n
ZSksIHRleHQsIHRleHRDaGVja2luZ09wdGlvbnMsIHByb2Nlc3NUeXBlKSk7CiB9CiAKIGNvbnN0
IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiBTcGVsbENoZWNrUmVxdWVzdDo6ZGF0YSgpIGNvbnN0
CkBAIC0xNDEsMjQgKzEzNywyNCBAQCBib29sIFNwZWxsQ2hlY2tlcjo6aXNBc3luY2hyb25vdXNF
bmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVj
a0FzeW5jaHJvbm91c2x5KFJhbmdlKiByYW5nZSkgY29uc3QKK2Jvb2wgU3BlbGxDaGVja2VyOjpj
YW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlJiByYW5nZSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2xpZW50KCkgJiYgaXNDaGVja2FibGUocmFuZ2UpICYmIGlzQXN5bmNocm9ub3VzRW5hYmxlZCgp
OwogfQogCi1ib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUoUmFuZ2UqIHJhbmdlKSBjb25z
dAorYm9vbCBTcGVsbENoZWNrZXI6OmlzQ2hlY2thYmxlKFJhbmdlJiByYW5nZSkgY29uc3QKIHsK
LSAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS0+Zmlyc3ROb2RlKCkgfHwgIXJhbmdlLT5maXJzdE5v
ZGUoKS0+cmVuZGVyZXIoKSkKKyAgICBpZiAoIXJhbmdlLmZpcnN0Tm9kZSgpIHx8ICFyYW5nZS5m
aXJzdE5vZGUoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0
IE5vZGUmIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKKyAgICBjb25zdCBOb2RlJiBu
b2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkg
JiYgIWRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNwZWxsQ2hl
Y2tlcjo6cmVxdWVzdENoZWNraW5nRm9yKFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJl
cXVlc3QpCit2b2lkIFNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNraW5nRm9yKFJlZjxTcGVsbENo
ZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogewotICAgIGlmICghcmVxdWVzdCB8fCAhY2FuQ2hlY2tB
c3luY2hyb25vdXNseShyZXF1ZXN0LT5wYXJhZ3JhcGhSYW5nZSgpKSkKKyAgICBpZiAoIWNhbkNo
ZWNrQXN5bmNocm9ub3VzbHkocmVxdWVzdC0+cGFyYWdyYXBoUmFuZ2UoKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEFTU0VSVChyZXF1ZXN0LT5kYXRhKCkuc2VxdWVuY2UoKSA9PSB1bnJlcXVl
c3RlZFRleHRDaGVja2luZ1NlcXVlbmNlKTsKQEAgLTE2OSwzNSArMTY1LDMzIEBAIHZvaWQgU3Bl
bGxDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdGb3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVz
dD4gcmVxdWVzdCkKICAgICByZXF1ZXN0LT5zZXRDaGVja2VyQW5kU2VxdWVuY2UodGhpcywgc2Vx
dWVuY2UpOwogCiAgICAgaWYgKG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0LmlzQWN0aXZl
KCkgfHwgbV9wcm9jZXNzaW5nUmVxdWVzdCkgewotICAgICAgICBlbnF1ZXVlUmVxdWVzdChyZXF1
ZXN0KTsKKyAgICAgICAgZW5xdWV1ZVJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpbnZva2VSZXF1ZXN0KHJlcXVlc3QpOworICAgIGludm9r
ZVJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKLXZvaWQgU3BlbGxDaGVja2VyOjppbnZv
a2VSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QpCit2b2lkIFNw
ZWxsQ2hlY2tlcjo6aW52b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVz
dCkKIHsKICAgICBBU1NFUlQoIW1fcHJvY2Vzc2luZ1JlcXVlc3QpOwogICAgIGlmICghY2xpZW50
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gcmVxdWVzdDsK
KyAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KTsKICAgICBjbGllbnQo
KS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1
ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKK3ZvaWQgU3Bl
bGxDaGVja2VyOjplbnF1ZXVlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVz
dCkKIHsKLSAgICBBU1NFUlQocmVxdWVzdCk7Ci0KICAgICBmb3IgKGF1dG8mIHF1ZXVlIDogbV9y
ZXF1ZXN0UXVldWUpIHsKICAgICAgICAgaWYgKHJlcXVlc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSAhPSBxdWV1ZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgcXVldWUgPSByZXF1ZXN0OworICAgICAgICBxdWV1ZSA9IFdURk1vdmUocmVx
dWVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3JlcXVlc3RRdWV1ZS5hcHBl
bmQocmVxdWVzdCk7CisgICAgbV9yZXF1ZXN0UXVldWUuYXBwZW5kKFdURk1vdmUocmVxdWVzdCkp
OwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25zdCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKQEAgLTIwOSw3ICsyMDMsNyBAQCB2
b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiYgcmVzdQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9m
cmFtZS5lZGl0b3IoKS5tYXJrQW5kUmVwbGFjZUZvcihtX3Byb2Nlc3NpbmdSZXF1ZXN0LCByZXN1
bHRzKTsKKyAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbmRSZXBsYWNlRm9yKCptX3Byb2Nlc3Np
bmdSZXF1ZXN0LCByZXN1bHRzKTsKIAogICAgIGlmIChtX2xhc3RQcm9jZXNzZWRTZXF1ZW5jZSA8
IHNlcXVlbmNlKQogICAgICAgICBtX2xhc3RQcm9jZXNzZWRTZXF1ZW5jZSA9IHNlcXVlbmNlOwpA
QCAtMjI5LDcgKzIyMyw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1Y2NlZWQoaW50
IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0CiAgICAgICAgIGlmIChy
ZXF1ZXN0RGF0YS5tYXNrKCkgJiBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAgICAgICAgICAg
IG1hcmtlcnMgfD0gRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI7CiAgICAgICAgIGlmIChtYXJrZXJz
KQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlcnMpOworICAgICAg
ICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygmbV9wcm9j
ZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJzKTsKICAgICB9CiAgICAgZGlk
Q2hlY2soc2VxdWVuY2UsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVj
a2VyLmgKaW5kZXggMDZhYWIwNWY3NGY4M2Y0MWJmNjdhMzFlY2ViYzhmZWI3OWQwMDUxOS4uNzE4
MGMzMzRiMTM5NjlmZWQ2YTlhMjRjYjViNzdiZTdiNjhmYWIxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC00NCwxMSArNDQsMTEgQEAgY2xhc3MgU3BlbGxDaGVja2Vy
OwogCiBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdCA6IHB1YmxpYyBUZXh0Q2hlY2tpbmdSZXF1ZXN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBjcmVhdGUo
VGV4dENoZWNraW5nVHlwZU1hc2ssIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlLCBQYXNzUmVmUHRy
PFJhbmdlPiBjaGVja2luZ1JhbmdlLCBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSk7
CisgICAgc3RhdGljIFJlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gY3JlYXRlKFRleHRDaGVja2lu
Z1R5cGVNYXNrLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSwgUmVmPFJhbmdlPiYmIGNoZWNraW5n
UmFuZ2UsIFJlZjxSYW5nZT4mJiBwYXJhZ3JhcGhSYW5nZSk7CiAgICAgdmlydHVhbCB+U3BlbGxD
aGVja1JlcXVlc3QoKTsKIAotICAgIFJhbmdlKiBjaGVja2luZ1JhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9jaGVja2luZ1JhbmdlLmdldCgpOyB9Ci0gICAgUmFuZ2UqIHBhcmFncmFwaFJhbmdlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJhZ3JhcGhSYW5nZS5nZXQoKTsgfQorICAgIFJhbmdlJiBjaGVj
a2luZ1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2luZ1JhbmdlLmdldCgpOyB9CisgICAg
UmFuZ2UmIHBhcmFncmFwaFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhZ3JhcGhSYW5nZS5n
ZXQoKTsgfQogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RFZGl0YWJsZUVsZW1lbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0Q2hlY2tlckFu
ZFNlcXVlbmNlKFNwZWxsQ2hlY2tlciosIGludCBzZXF1ZW5jZSk7CkBAIC02MCwxMSArNjAsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgZGlkQ2FuY2VsKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0g
ICAgU3BlbGxDaGVja1JlcXVlc3QoUGFzc1JlZlB0cjxSYW5nZT4gY2hlY2tpbmdSYW5nZSwgUGFz
c1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UsIGNvbnN0IFN0cmluZyYsIFRleHRDaGVja2lu
Z1R5cGVNYXNrLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSk7CisgICAgU3BlbGxDaGVja1JlcXVl
c3QoUmVmPFJhbmdlPiYmIGNoZWNraW5nUmFuZ2UsIFJlZjxSYW5nZT4mJiBwYXJhZ3JhcGhSYW5n
ZSwgY29uc3QgU3RyaW5nJiwgVGV4dENoZWNraW5nVHlwZU1hc2ssIFRleHRDaGVja2luZ1Byb2Nl
c3NUeXBlKTsKIAogICAgIFNwZWxsQ2hlY2tlciogbV9jaGVja2VyIHsgbnVsbHB0ciB9OwotICAg
IFJlZlB0cjxSYW5nZT4gbV9jaGVja2luZ1JhbmdlOwotICAgIFJlZlB0cjxSYW5nZT4gbV9wYXJh
Z3JhcGhSYW5nZTsKKyAgICBSZWY8UmFuZ2U+IG1fY2hlY2tpbmdSYW5nZTsKKyAgICBSZWY8UmFu
Z2U+IG1fcGFyYWdyYXBoUmFuZ2U7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fcm9vdEVkaXRhYmxl
RWxlbWVudDsKICAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSBtX3JlcXVlc3REYXRhOwogfTsK
QEAgLTc4LDkgKzc4LDkgQEAgcHVibGljOgogICAgIH5TcGVsbENoZWNrZXIoKTsKIAogICAgIGJv
b2wgaXNBc3luY2hyb25vdXNFbmFibGVkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0NoZWNrYWJsZShS
YW5nZSopIGNvbnN0OworICAgIGJvb2wgaXNDaGVja2FibGUoUmFuZ2UmKSBjb25zdDsKIAotICAg
IHZvaWQgcmVxdWVzdENoZWNraW5nRm9yKFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+KTsK
KyAgICB2b2lkIHJlcXVlc3RDaGVja2luZ0ZvcihSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYpOwog
CiAgICAgaW50IGxhc3RSZXF1ZXN0U2VxdWVuY2UoKSBjb25zdAogICAgIHsKQEAgLTkzLDEzICs5
MywxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgRGVxdWU8UmVm
UHRyPFNwZWxsQ2hlY2tSZXF1ZXN0Pj4gUmVxdWVzdFF1ZXVlOworICAgIHR5cGVkZWYgRGVxdWU8
UmVmPFNwZWxsQ2hlY2tSZXF1ZXN0Pj4gUmVxdWVzdFF1ZXVlOwogCi0gICAgYm9vbCBjYW5DaGVj
a0FzeW5jaHJvbm91c2x5KFJhbmdlKikgY29uc3Q7CisgICAgYm9vbCBjYW5DaGVja0FzeW5jaHJv
bm91c2x5KFJhbmdlJikgY29uc3Q7CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCgpIGNv
bnN0OwogICAgIHZvaWQgdGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKTsKLSAgICB2
b2lkIGludm9rZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4pOwotICAgIHZv
aWQgZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4pOworICAgIHZv
aWQgaW52b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYpOworICAgIHZvaWQgZW5x
dWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmKTsKICAgICB2b2lkIGRpZENoZWNr
U3VjY2VlZChpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7
CiAgICAgdm9pZCBkaWRDaGVja0NhbmNlbChpbnQgc2VxdWVuY2UpOwogICAgIHZvaWQgZGlkQ2hl
Y2soaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IDdiZDAy
MTdlOTU3Y2QzN2I2ZTc5NjRhZDZlNmMwODMzNzNjODFjOTIuLjM2ZTMzM2JjNjEzZjQxZDY1ZWY4
ZGE5YzJhMjFhMTMxYjIzM2VjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKQEAgLTExMCwyNCArMTEwLDE2IEBAIHN0YXRpYyB2b2lkIGZpbmRN
aXNzcGVsbGluZ3MoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBW
ZWN0b3I8CiAKICNlbmRpZgogCi1zdGF0aWMgUmVmPFJhbmdlPiBleHBhbmRUb1BhcmFncmFwaEJv
dW5kYXJ5KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQorc3RhdGljIFJlZjxSYW5nZT4gZXhwYW5k
VG9QYXJhZ3JhcGhCb3VuZGFyeShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgUmVmPFJhbmdlPiBwYXJh
Z3JhcGhSYW5nZSA9IHJhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgc2V0U3RhcnQocGFyYWdyYXBo
UmFuZ2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwot
ICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgocmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpKTsKKyAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcmFuZ2UuY2xv
bmVSYW5nZSgpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0cigpLCBzdGFydE9mUGFy
YWdyYXBoKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgocmFuZ2UuZW5kUG9zaXRpb24oKSkpOwogICAgIHJldHVy
biBwYXJhZ3JhcGhSYW5nZTsKIH0KIAotVGV4dENoZWNraW5nUGFyYWdyYXBoOjpUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGgoUGFzc1JlZlB0cjxSYW5nZT4gY2hlY2tpbmdSYW5nZSkKLSAgICA6IG1fY2hl
Y2tpbmdSYW5nZShjaGVja2luZ1JhbmdlKQotICAgICwgbV9jaGVja2luZ1N0YXJ0KC0xKQotICAg
ICwgbV9jaGVja2luZ0VuZCgtMSkKLSAgICAsIG1fY2hlY2tpbmdMZW5ndGgoLTEpCi17Ci19Ci0K
LVRleHRDaGVja2luZ1BhcmFncmFwaDo6VGV4dENoZWNraW5nUGFyYWdyYXBoKFBhc3NSZWZQdHI8
UmFuZ2U+IGNoZWNraW5nUmFuZ2UsIFBhc3NSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlKQot
ICAgIDogbV9jaGVja2luZ1JhbmdlKGNoZWNraW5nUmFuZ2UpCitUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6OlRleHRDaGVja2luZ1BhcmFncmFwaChSZWY8UmFuZ2U+JiYgY2hlY2tpbmdSYW5nZSwgUmFu
Z2UqIHBhcmFncmFwaFJhbmdlKQorICAgIDogbV9jaGVja2luZ1JhbmdlKFdURk1vdmUoY2hlY2tp
bmdSYW5nZSkpCiAgICAgLCBtX3BhcmFncmFwaFJhbmdlKHBhcmFncmFwaFJhbmdlKQogICAgICwg
bV9jaGVja2luZ1N0YXJ0KC0xKQogICAgICwgbV9jaGVja2luZ0VuZCgtMSkKQEAgLTE0MSw3ICsx
MzMsNiBAQCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6On5UZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKQog
CiB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6ZXhwYW5kUmFuZ2VUb05leHRFbmQoKQogewot
ICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIHNldEVuZCgmcGFyYWdyYXBoUmFuZ2Uo
KSwgZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UoKS5z
dGFydFBvc2l0aW9uKCkpKSk7CiAgICAgaW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCk7
CiB9CkBAIC0xNTUsMTMgKzE0NiwxMSBAQCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aW52
YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCkKIAogaW50IFRleHRDaGVja2luZ1BhcmFncmFw
aDo6cmFuZ2VMZW5ndGgoKSBjb25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwog
ICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZwYXJhZ3JhcGhSYW5nZSgpKTsK
IH0KIAogUmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBjb25z
dAogewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICghbV9wYXJhZ3JhcGhS
YW5nZSkKICAgICAgICAgbV9wYXJhZ3JhcGhSYW5nZSA9IGV4cGFuZFRvUGFyYWdyYXBoQm91bmRh
cnkobV9jaGVja2luZ1JhbmdlKTsKICAgICByZXR1cm4gKm1fcGFyYWdyYXBoUmFuZ2U7CkBAIC0x
NjksMTMgKzE1OCwxMSBAQCBSYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpwYXJhZ3JhcGhS
YW5nZSgpIGNvbnN0CiAKIFJlZjxSYW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5n
ZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7CiAgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6c3VicmFu
Z2UoJnBhcmFncmFwaFJhbmdlKCksIGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwog
fQogCiBFeGNlcHRpb25PcjxpbnQ+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8oY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFu
Z2UpOwogICAgIGlmICghcG9zaXRpb24uY29udGFpbmVyTm9kZSgpKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKQEAgLTE5NSw3ICsxODIsNiBAQCBib29sIFRleHRD
aGVja2luZ1BhcmFncmFwaDo6aXNFbXB0eSgpIGNvbnN0CiAKIFJhbmdlJiBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6Om9mZnNldEFzUmFuZ2UoKSBjb25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5n
UmFuZ2UpOwogICAgIGlmICghbV9vZmZzZXRBc1JhbmdlKQogICAgICAgICBtX29mZnNldEFzUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLCBwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSwgbV9jaGVja2luZ1Jhbmdl
LT5zdGFydFBvc2l0aW9uKCkpOwogCkBAIC0yMDQsNyArMTkwLDYgQEAgUmFuZ2UmIFRleHRDaGVj
a2luZ1BhcmFncmFwaDo6b2Zmc2V0QXNSYW5nZSgpIGNvbnN0CiAKIGNvbnN0IFN0cmluZyYgVGV4
dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9jaGVja2lu
Z1JhbmdlKTsKICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgbV90ZXh0ID0gcGxh
aW5UZXh0KCZwYXJhZ3JhcGhSYW5nZSgpKTsKICAgICByZXR1cm4gbV90ZXh0OyAKQEAgLTIxMiw3
ICsxOTcsNiBAQCBjb25zdCBTdHJpbmcmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6dGV4dCgpIGNv
bnN0CiAKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQoKSBjb25zdAog
ewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmIChtX2NoZWNraW5nU3RhcnQg
PT0gLTEpCiAgICAgICAgIG1fY2hlY2tpbmdTdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoJm9mZnNldEFzUmFuZ2UoKSk7CiAgICAgcmV0dXJuIG1fY2hlY2tpbmdTdGFydDsKQEAgLTIy
MCwyNiArMjA0LDIyIEBAIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQo
KSBjb25zdAogCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7CiAgICAgaWYgKG1fY2hlY2tpbmdFbmQg
PT0gLTEpCi0gICAgICAgIG1fY2hlY2tpbmdFbmQgPSBjaGVja2luZ1N0YXJ0KCkgKyBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5nZS5nZXQoKSk7CisgICAgICAgIG1fY2hl
Y2tpbmdFbmQgPSBjaGVja2luZ1N0YXJ0KCkgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1f
Y2hlY2tpbmdSYW5nZS5wdHIoKSk7CiAgICAgcmV0dXJuIG1fY2hlY2tpbmdFbmQ7CiB9CiAKIGlu
dCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQobV9jaGVja2luZ1JhbmdlKTsKICAgICBpZiAoLTEgPT0gbV9jaGVja2luZ0xlbmd0aCkK
LSAgICAgICAgbV9jaGVja2luZ0xlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobV9j
aGVja2luZ1JhbmdlLmdldCgpKTsKKyAgICAgICAgbV9jaGVja2luZ0xlbmd0aCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobV9jaGVja2luZ1JhbmdlLnB0cigpKTsKICAgICByZXR1cm4gbV9j
aGVja2luZ0xlbmd0aDsKIH0KIAotVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxw
ZXIoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQorVGV4dENo
ZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50JiBjbGllbnQsIFJh
bmdlJiByYW5nZSkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcmFuZ2UocmFuZ2Up
CiB7Ci0gICAgQVNTRVJUX0FSRyhtX2NsaWVudCwgbV9jbGllbnQpOwotICAgIEFTU0VSVF9BUkco
bV9yYW5nZSwgbV9yYW5nZSk7CiB9CiAKIFRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2lu
Z0hlbHBlcigpCkBAIC0yNTMsNyArMjMzLDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib28KICAg
ICBTdHJpbmcgZmlyc3RNaXNzcGVsbGluZzsKICAgICBpbnQgY3VycmVudENodW5rT2Zmc2V0ID0g
MDsKIAotICAgIGZvciAoV29yZEF3YXJlSXRlcmF0b3IgaXQoKm1fcmFuZ2UpOyAhaXQuYXRFbmQo
KTsgY3VycmVudENodW5rT2Zmc2V0ICs9IGl0LnRleHQoKS5sZW5ndGgoKSwgaXQuYWR2YW5jZSgp
KSB7CisgICAgZm9yIChXb3JkQXdhcmVJdGVyYXRvciBpdChtX3JhbmdlKTsgIWl0LmF0RW5kKCk7
IGN1cnJlbnRDaHVua09mZnNldCArPSBpdC50ZXh0KCkubGVuZ3RoKCksIGl0LmFkdmFuY2UoKSkg
ewogICAgICAgICBTdHJpbmdWaWV3IHRleHQgPSBpdC50ZXh0KCk7CiAgICAgICAgIGludCB0ZXh0
TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKIApAQCAtMjYzLDcgKzI0Myw3IEBAIFN0cmluZyBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGlu
Z09mZnNldCwgYm9vCiAKICAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKICAg
ICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgbV9jbGllbnQtPnRleHRD
aGVja2VyKCktPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0LCAmbWlzc3BlbGxpbmdMb2NhdGlv
biwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgbV9jbGllbnQudGV4dENoZWNrZXIoKS0+
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRleHQsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3Bl
bGxpbmdMZW5ndGgpOwogCiAgICAgICAgIC8vIDU0OTA2Mjcgc2hvd3MgdGhhdCB0aGVyZSB3YXMg
c29tZSBjb2RlIHBhdGggaGVyZSB3aGVyZSB0aGUgU3RyaW5nIGNvbnN0cnVjdG9yIGJlbG93IGNy
YXNoZXMuCiAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9u
IG9mIGJhZCBpbnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaApAQCAt
Mjc3LDcgKzI1Nyw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vCiAKICAgICAgICAgaWYgKG1p
c3NwZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA8IHRleHRMZW5ndGggJiYgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExl
bmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExl
bmd0aCkgewogICAgICAgICAgICAgLy8gQ29tcHV0ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQK
LSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UobV9yYW5nZS5nZXQoKSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxp
bmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgUmVmUHRyPFJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLnB0cigp
LCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xl
bmd0aCk7CiAKICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3Nw
ZWxsaW5nIGFuZCBpdHMgb2Zmc2V0LgogICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5n
KSB7CkBAIC0zNTUsNyArMzM1LDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZp
cnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAg
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CiAgICAgICAgICAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IHBhcmFncmFwaFJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJh
bWUoKSkKICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFw
aCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBl
cywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CisgICAgICAgICAgICAgICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hl
Y2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHQubG9jYXRp
b24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC5sb2NhdGlvbiArIHJlc3VsdC5sZW5n
dGggPD0gY3VycmVudEVuZE9mZnNldCkgewpAQCAtNDUxLDcgKzQzMSw3IEBAIGludCBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJE
ZXRhaWw+JiBncmFtCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlm
IChtYXJrQWxsKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9
IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZS5nZXQoKSwgYmFkR3JhbW1hclBocmFzZUxv
Y2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7
CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UobV9yYW5nZS5wdHIoKSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3Rh
cnRPZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CiAgICAgICAgICAg
ICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIs
IGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ3OSwx
NCArNDU5LDE0IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1t
YXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwKICAgICAvLyBFeHBhbmQgdGhlIHNl
YXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIg
Y2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBj
aGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0
YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3
YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJh
Z3JhcGgobV9yYW5nZS5jb3B5UmVmKCkpOwogICAgIAogICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZy
b20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2Nj
dXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgogICAgIGZv
ciAoaW50IHN0YXJ0T2Zmc2V0ID0gMDsgc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGguY2hlY2tpbmdF
bmQoKTsgKSB7CiAgICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsK
ICAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IC0xOwogICAgICAgICBpbnQg
YmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7Ci0gICAgICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tl
cigpLT5jaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3KHBhcmFncmFwaC50ZXh0KCkpLnN1
YnN0cmluZyhzdGFydE9mZnNldCksIGdyYW1tYXJEZXRhaWxzLCAmYmFkR3JhbW1hclBocmFzZUxv
Y2F0aW9uLCAmYmFkR3JhbW1hclBocmFzZUxlbmd0aCk7CisgICAgICAgIG1fY2xpZW50LnRleHRD
aGVja2VyKCktPmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcocGFyYWdyYXBoLnRleHQo
KSkuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KSwgZ3JhbW1hckRldGFpbHMsICZiYWRHcmFtbWFyUGhy
YXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKICAgICAgICAgCiAgICAgICAg
IGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkgewogICAgICAgICAgICAgQVNTRVJUKGJhZEdy
YW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7CkBAIC01MjQsMTAgKzUwNCw3IEBAIFN0cmluZyBU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0
R3JhbW1hckRldGFpbCwKIAogYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNh
bCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIGlmIChtX3Jh
bmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFJl
dHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBjb3JyZXNwb25kcyB0
byBhIGJhZCBncmFtbWFyIGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dvdXMKQEAgLTU1NCwx
NCArNTMxLDE0IEBAIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBj
b25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gQmFkIGdyYW1tYXIgYXQg
c3RhcnQgb2YgcmFuZ2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVy
IGVuZCBvZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2UuZ2V0KCkpKQorICAgIGlmIChncmFtbWFyRGV0YWlsLmxl
bmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2UucHRyKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0
byBiZSBkaXNwbGF5aW5nIHRoaXMgZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBw
YW5lbCBpcyBvbiBzY3JlZW4pLgogICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYSBz
dWJzZXF1ZW50IGNhbGwgdG8gW05TU3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5TcGVsbERvY3Vt
ZW50V2l0aFRhZzpdIHdvcmsKICAgICAvLyBjb3JyZWN0bHk7IHRoYXQgY2FsbCBiZWhhdmVzIGRp
ZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIGRpc3BsYXlp
bmcgYSBtaXNzcGVsbGluZwogICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJvci4KLSAgICBtX2NsaWVu
dC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdy
YW1tYXJEZXRhaWwpOworICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTU3NywxMSArNTU0LDExIEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2lu
Z0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAg
ICAgbWlzc3BlbGxlZCA9IGZhbHNlOwogICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKICAgICAK
LSAgICBpZiAoIW1fY2xpZW50IHx8ICFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZCgpKQor
ICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAK
ICAgICAvLyBFeHBhbmQgdGhlIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywg
c2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UpOworICAgIFRleHRDaGVja2luZ1BhcmFn
cmFwaCBwYXJhZ3JhcGgobV9yYW5nZS5jb3B5UmVmKCkpOwogICAgIGlmIChwYXJhZ3JhcGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIApAQCAtNTkwLDE0ICs1NjcsMTQgQEAg
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9y
VW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxl
Y3Rpb247CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5m
cmFtZSgpKQogICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC0+dGV4dENoZWNr
ZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNl
bGVjdGlvbik7CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2Vy
KCksIHBhcmFncmFwaC50ZXh0KCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxl
Y3Rpb24pOwogCiAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7CiAgICAgICAgIGlm
IChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcGFyYWdyYXBoLmNo
ZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCkpIHsKICAg
ICAgICAgICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFncmFwaC5jaGVja2luZ1N1YnN0
cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpKTsKLSAg
ICAgICAgICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtaXNz
cGVsbGVkV29yZCwgU3RyaW5nKCksIGN1cnJlbnRTZWxlY3Rpb24sIGd1ZXNzZXMpOwotICAgICAg
ICAgICAgbV9jbGllbnQtPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3Bl
bGxlZFdvcmQpOworICAgICAgICAgICAgbV9jbGllbnQudGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIFN0cmluZygpLCBjdXJyZW50U2VsZWN0aW9uLCBndWVz
c2VzKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQobWlzc3BlbGxlZFdvcmQpOwogICAgICAgICAgICAgbWlzc3BlbGxlZCA9IHRydWU7CiAg
ICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKICAgICAgICAgfQpAQCAtNjE2LDcgKzU5Myw3IEBA
IFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRP
clVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYWRH
cmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBn
dWVzcyA6IGRldGFpbC5ndWVzc2VzKQogICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5h
cHBlbmQoZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxp
bmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGRldGFpbCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhi
YWRHcmFtbWFyUGhyYXNlLCBkZXRhaWwpOwogICAgICAgICAgICAgICAgICAgICB1bmdyYW1tYXRp
Y2FsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtNjQ3LDcgKzYyNCw3IEBAIHZvaWQgVGV4dENoZWNraW5nSGVscGVyOjpt
YXJrQWxsQmFkR3JhbW1hcigpCiAKIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yYW5nZSAmJiBXZWJDb3Jl
Ojp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFt
ZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3Jh
bmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hl
Y2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYg
cmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCmluZGV4IDhmZTIwMTYyYzdk
MjJhOTFkMDZlMTM3MTM3YmVkMmJkOTUxYmViOGYuLmEwODMyMDE4NThlZjQxMDEzOWMwMjA3YzI2
NGE2NGU5MDFlYTNhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuaApAQCAtMzMsMTAgKzMzLDEyIEBAIHN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAK
IGNsYXNzIFRleHRDaGVja2luZ1BhcmFncmFwaCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4
dENoZWNraW5nUGFyYWdyYXBoKFBhc3NSZWZQdHI8UmFuZ2U+IGNoZWNraW5nUmFuZ2UpOwotICAg
IFRleHRDaGVja2luZ1BhcmFncmFwaChQYXNzUmVmUHRyPFJhbmdlPiBjaGVja2luZ1JhbmdlLCBQ
YXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSk7CisgICAgZXhwbGljaXQgVGV4dENoZWNr
aW5nUGFyYWdyYXBoKFJlZjxSYW5nZT4mJiBjaGVja2luZ1JhbmdlLCBSYW5nZSogcGFyYWdyYXBo
UmFuZ2UgPSBudWxscHRyKTsKICAgICB+VGV4dENoZWNraW5nUGFyYWdyYXBoKCk7CiAKKyAgICBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdyYXBoJiYpID0gZGVmYXVsdDsK
KyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIG9wZXJhdG9yPShUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGgmJikgPSBkZWZhdWx0OworCiAgICAgaW50IHJhbmdlTGVuZ3RoKCkgY29uc3Q7CiAgICAgUmVm
PFJhbmdlPiBzdWJyYW5nZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQp
IGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPGludD4gb2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mKSBj
b25zdDsKQEAgLTY2LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGludmFsaWRhdGVQYXJh
Z3JhcGhSYW5nZVZhbHVlcygpOwogICAgIFJhbmdlJiBvZmZzZXRBc1JhbmdlKCkgY29uc3Q7CiAK
LSAgICBSZWZQdHI8UmFuZ2U+IG1fY2hlY2tpbmdSYW5nZTsKKyAgICBSZWY8UmFuZ2U+IG1fY2hl
Y2tpbmdSYW5nZTsKICAgICBtdXRhYmxlIFJlZlB0cjxSYW5nZT4gbV9wYXJhZ3JhcGhSYW5nZTsK
ICAgICBtdXRhYmxlIFJlZlB0cjxSYW5nZT4gbV9vZmZzZXRBc1JhbmdlOwogICAgIG11dGFibGUg
U3RyaW5nIG1fdGV4dDsKQEAgLTc4LDcgKzgwLDcgQEAgcHJpdmF0ZToKIGNsYXNzIFRleHRDaGVj
a2luZ0hlbHBlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENoZWNraW5nSGVscGVy
KTsKIHB1YmxpYzoKLSAgICBUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50KiwgUGFzc1Jl
ZlB0cjxSYW5nZT4pOworICAgIFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBSYW5n
ZSYpOwogICAgIH5UZXh0Q2hlY2tpbmdIZWxwZXIoKTsKIAogICAgIFN0cmluZyBmaW5kRmlyc3RN
aXNzcGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVm
UHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKQEAgLTkyLDggKzk0LDggQEAgcHVi
bGljOgogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3Jh
bW1hdGljYWwpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7
Ci0gICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOworICAgIEVkaXRvckNsaWVudCYgbV9jbGllbnQ7
CisgICAgUmVmPFJhbmdlPiBtX3JhbmdlOwogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkKCkgY29uc3Q7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA3YzAxNGU1YWY2NGZjOGI2MGU0NGY5ZGQ3
MjA3NTE0MmFkZWZjNTY4Li43YmQ5NWNjMDhiMzUyNmJkZjM3M2E0ZGZjNGY3NjQ3YjAwOTU3ODJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTUxMCwxNCAr
NTEwLDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEVU
eXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlRm9yQWRkZWRUCiAgICAgdXBkYXRlUHJlc2VydmVzVHlw
aW5nU3R5bGUoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZyh0aGlzKTsKKyAgICBmcmFtZS5l
ZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAgICAgLy8gU2luY2UgdGhlIHNwZWxsY2hl
Y2tpbmcgY29kZSBtYXkgYWxzbyBwZXJmb3JtIGNvcnJlY3Rpb25zIGFuZCBvdGhlciByZXBsYWNl
bWVudHMsIGl0IHNob3VsZCBoYXBwZW4gYWZ0ZXIgdGhlIHR5cGluZyBjaGFuZ2VzLgogICAgIGlm
ICghbV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZykKICAgICAgICAgbWFya01pc3NwZWxsaW5n
c0FmdGVyVHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAvLyBU
aGUgb2xkIHNwZWxsY2hlY2tpbmcgY29kZSByZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRvbmUg
Zmlyc3QsIHRvIHByZXZlbnQgaXNzdWVzIGxpa2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8ZG9l
c24ndD4gaXMgbWFya2VkIGFzIG1pc3NwZWxsZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwotICAgIGZyYW1lLmVkaXRvcigpLmFw
cGxpZWRFZGl0aW5nKHRoaXMpOworICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0
aGlzKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQppbmRleCAwNWRjOGE4YzBkZmRlMjFjMTIwNmRmOTlhODEyN2UzY2FiZTdkMTczLi43
YmU2M2JjZmQxZTU3MDFkODRhZWM0ZTcxYmNhYzA4ZjVkODFhMTU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lk
IEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZAogCiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhhdHRy
aWJ1dGVkU3RyaW5nKTsKLSAgICAgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdt
ZW50KGZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKKyAgICAgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVu
dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAg
ICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFs
c2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBTdHJpbmcgdGV4dCA9IGF0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKaW5kZXggZDE2YTNmZWMzYTRjYzgwMzZhN2Y1NDM5ZDJh
ZDVlN2NiM2RiNTkzNy4uYjk4N2ZhMjM0NzBmMDhkYmEzN2VmMWZiZTlmMDRhY2FiMjcyOTQ3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9h
cmQsIGJvb2wgYWxsb3dQbGFpblRleHQsIE1hCiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0Owog
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2ZyYW1lLCAqcmFuZ2UsIGFsbG93UGxhaW5U
ZXh0LCBjaG9zZVBsYWluVGV4dCk7Ci0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZy
YWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAg
IGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVu
dChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2Fy
ZCgqcGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IDkwM2E3Mjg3
ZjdlNzA3ODQ0MTM0NmY4NDJjNzcyNWY1MDg1ODAwOTMuLjQ0NWJlMTEyNjU4Nzg0OTQyZWUyNjcx
NTZmNGFlNjlkNDIzNjVhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KQEAgLTQwMiw3ICs0MDIsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0LCBNYQogICAgICAgICBm
cmFnbWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBh
bGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHRJZ25vcmVkKTsKICAgICB9CiAKLSAgICBpZiAo
ZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNh
blNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFsc2UsIG1haWxCbG9j
a3F1b3RlSGFuZGxpbmcpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KaW5kZXggNjhkMGE3YWQ4ZmU4MDI1NzRkOTM3N2FiMjBmMjRiZTZmODczNDlmNi4uYmU5YWMw
ZTFiMDY4ZDQ4NTZlMTRjNTRmOWUwYzU0YjlkODI0MjEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0
LCBNYQogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFu
Z2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiAKLSAgICBpZiAoZnJhZ21lbnQg
JiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpm
cmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVw
bGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFsc2UsIG1haWxCbG9ja3F1b3RlSGFu
ZGxpbmcpOwogCiAgICAgY2xpZW50KCktPnNldEluc2VydGlvblBhc3RlYm9hcmQoU3RyaW5nKCkp
OwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJv
YXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiAgICAgYm9vbCBj
aG9zZVBsYWluVGV4dDsKICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQsICpyYW5nZSwgdHJ1ZSwgY2hv
c2VQbGFpblRleHQpKSB7CiAgICAgICAgIG1heWJlQ29weU5vZGVBdHRyaWJ1dGVzVG9GcmFnbWVu
dCgqbm9kZSwgKmZyYWdtZW50KTsKLSAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50KGZy
YWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJl
bGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQp
LCBmYWxzZSwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAppbmRleCA4Yjc5OTQ3
N2ViZGU4MDkzMDNkZGEzNTJjNDczMTY5MDVmNjQ4YWJhLi41NDNhOThhMWIzZWNmYTZhNjRkNDRj
NGRjNTIzYzhiNjlhNmFjZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dp
bi9FZGl0b3JXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldp
bi5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgTWEKIAogICAgIGJv
b2wgY2hvc2VQbGFpblRleHQ7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudChtX2ZyYW1lLCAqcmFuZ2UsIGFsbG93UGxh
aW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7Ci0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2Vy
dEZyYWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQor
ICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdl
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFn
bWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVi
b2FyZCgqcGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBtYWlsQmxvY2txdW90ZUhhbmRsaW5n
KTsKIH0KIApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgUGxhdGZvcm1EcmFn
RGF0YT4KIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
UGxhdGZvcm1EYXRhKFBsYXRmb3JtRHJhZ0RhdGEmIHBsYXRmb3JtRHJhZ0RhdGEsIEZyYW1lJiBm
cmFtZSkKIHsKICAgICBpZiAoY29udGFpbnNGaWxlbmFtZXMoJnBsYXRmb3JtRHJhZ0RhdGEpKSB7
Ci0gICAgICAgIGlmIChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZnJh
Z21lbnRGcm9tRmlsZW5hbWVzKGZyYW1lLmRvY3VtZW50KCksICZwbGF0Zm9ybURyYWdEYXRhKSkK
KyAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBmcmFnbWVudEZyb21GaWxlbmFtZXMoZnJhbWUu
ZG9jdW1lbnQoKSwgJnBsYXRmb3JtRHJhZ0RhdGEpKQogICAgICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBi
NTZjZDIxYjhlY2I0NTIwNGQzODY3YjUzMWFjMWQ1NjdkYWYyZmUzLi4wODVjYTJmNjBjMTI1NDk2
ODQxYmQ0ODM2ODZlMTczOWJjMTI3MGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmNwcApAQCAtNTcxLDcgKzU3MSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRl
RWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlmIChkcmFnSXNNb3ZlKGlu
bmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwog
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdt
ZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgKnJhbmdlLCB0cnVlLCBjaG9z
ZVBsYWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWlubmVyRnJhbWUtPmVkaXRv
cigpLnNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpEcm9wcGVkKSkgeworICAgICAgICBpZiAoIWZyYWdtZW50IHx8ICFpbm5lckZyYW1lLT5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIApAQCAtNTgxLDcgKzU4MSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNs
dWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgLy8gYnV0
IG9ubHkgdG8gc21hcnQgaW5zZXJ0IGlmIHRoZSBzZWxlY3Rpb24gZ3JhbnVsYXJpdHkgaXMgd29y
ZCBncmFudWxhcml0eS4KICAgICAgICAgICAgIGJvb2wgc21hcnREZWxldGUgPSBpbm5lckZyYW1l
LT5lZGl0b3IoKS5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKICAgICAgICAgICAgIGJvb2wg
c21hcnRJbnNlcnQgPSBzbWFydERlbGV0ZSAmJiBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5ncmFu
dWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSAmJiBkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2Uo
KTsKLSAgICAgICAgICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZnJhZ21lbnQsIGRy
YWdDYXJldC5iYXNlKCksIHNtYXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSktPmFwcGx5KCk7CisgICAg
ICAgICAgICBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGZyYWdtZW50LnJlbGVhc2VOb25O
dWxsKCksIGRyYWdDYXJldC5iYXNlKCksIHNtYXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSktPmFwcGx5
KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFn
Q2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCByYW5nZSwgcG9pbnQpKSB7CiAgICAg
ICAgICAgICAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRpb25zIG9wdGlv
bnMgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rpbmc7CkBAIC01ODksNyArNTg5LDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlNtYXJ0UmVwbGFjZTsKICAgICAgICAgICAgICAgICBpZiAoY2hvc2VQbGFpblRleHQpCiAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1h
dGNoU3R5bGU7Ci0gICAgICAgICAgICAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zLCBFZGl0
QWN0aW9uSW5zZXJ0RnJvbURyb3ApLT5hcHBseSgpOworICAgICAgICAgICAgICAgIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRlck1vdXNlLCBmcmFnbWVudC5y
ZWxlYXNlTm9uTnVsbCgpLCBvcHRpb25zLCBFZGl0QWN0aW9uSW5zZXJ0RnJvbURyb3ApLT5hcHBs
eSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTEwNjYsNyAr
MTA2Niw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25z
dCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBzcGVjaWZpZWQs
IGNhbGwgb3V0IHRvIHRoZSBpbmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhlIHBhc3RlYm9h
cmQgd2l0aCBkYXRhLgogICAgICAgICAgICAgICAgIGF1dG8mIGVkaXRvciA9IHNyYy5lZGl0b3Io
KTsKLSAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KHNyYy5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgICAgICAgICBl
ZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNyYy5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKICAgICAgICAgICAgICAgICBlZGl0b3Iud3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKSk7CiAgICAgICAgICAg
ICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309326</attachid>
            <date>2017-05-07 12:22:01 -0700</date>
            <delta_ts>2017-05-07 13:02:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171787-20170507122200.patch</filename>
            <type>text/plain</type>
            <size>105185</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MzQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmE3NGY5NjQ2YjE4NGI5
OGUyNjUzZGNlZTNjOGU0ODk3NDYwYTVmZC4uM2QxOTQ2MmVjOWVkZDE4ODhhYTk1ZTY2ODJkNDFj
YjkxZGQ2NDAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyOCBAQAogMjAxNy0wNS0wNiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgcmVtYWluaW5nIHVz
ZXMgb2YgUGFzc1JlZlB0ciBpbiBlZGl0aW5nIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTc4NworCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIERyb3AgcmVtYWluaW5nIHVzZXMgb2YgUGFzc1JlZlB0ciBp
biBlZGl0aW5nIGNvZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
dGltZXJGaXJlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0lkZW50aWZpZXIpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRpZEFwcGx5Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGVyZm9ybUN1
dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndpbGxXcml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNz
cGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0
aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JV
bmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5n
c09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVjdFNw
ZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZXhlY3V0ZUluc2VydEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Y29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQpOgor
ICAgICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcv
SW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVu
dENvbW1hbmQ6OmluZGVudEludG9CbG9ja3F1b3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGVu
dE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5k
OjpmaXhPcnBoYW5lZExpc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29t
bWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYXBoKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6Oklu
c2VydFRleHRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlV2l0aE1hcmtlclN1
cHBsaWVyKToKKyAgICAgICAgKiBlZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFu
ZCk6CisgICAgICAgICogZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAgICAgICAo
V2ViQ29yZTo6TW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
bWVudEZyYWdtZW50OjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6aW5zZXJ0Tm9kZUJlZm9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpyZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05v
ZGVzVG9GcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZyYWdtZW50Ojpy
ZW1vdmVVbnJlbmRlcmVkTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFn
bWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6bWFrZUluc2VydGVkQ29udGVudFJvdW5kVHJpcHBhYmxlV2l0aEhU
TUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6bW92ZU5vZGVPdXRPZkFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUhlYWRD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9B
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0
QXNMaXN0SXRlbXMpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
aDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbENoZWNrUmVxdWVzdDo6U3BlbGxDaGVja1JlcXVlc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENo
ZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxD
aGVja2VyOjppc0NoZWNrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6Omludm9r
ZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjplbnF1ZXVlUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRpZENoZWNrKToKKyAgICAgICAg
KiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja1Jl
cXVlc3Q6OmNoZWNraW5nUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja1JlcXVl
c3Q6OnBhcmFncmFwaFJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRUb1BhcmFncmFwaEJvdW5kYXJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6VGV4dENoZWNraW5nUGFyYWdy
YXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6ZXhwYW5kUmFu
Z2VUb05leHRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpy
YW5nZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnBh
cmFncmFwaFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6
c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZz
ZXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldEFz
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdTdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNz
cGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoK
KyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBs
YWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvZ3Rr
L0VkaXRvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZCk6CisgICAgICAgICogZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0
ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVi
b2FyZCk6CisgICAgICAgICogZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisK
KzIwMTctMDUtMDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBJ
bXBsZW1lbnQgdGhlIGNvbmNlcHQgb2YgY29va2llLWF2ZXJzZSBkb2N1bWVudAogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNzQ2CiAgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zMjAwNDQ2Nj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDAzNGYzY2ZjMGRhMmJjODVkNGYy
YTlhZmJmMTAyZTgxNGRkZGQwZmUuLjUyMTQ0ZDI2OGRhYjZkZjAwNTAwNGU0NDUwNzdmMzRhYWEz
NDdjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcApAQCAtMjM5LDEwICsyMzksMTAgQEAgU3RyaW5nIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHQKIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZl
VGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZl
LCBBbHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0aXZlVHlwZSwgY29uc3QgVmVjdG9yPERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKIHsKLSAgICBSZWZQdHI8
UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSByYW5nZS5jbG9uZVJh
bmdlKCk7CisgICAgYXV0byBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmFu
Z2UuY2xvbmVSYW5nZSgpOwogCi0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChyYW5nZS5zdGFydFBvc2l0aW9uKCkp
KTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwg
ZW5kT2ZQYXJhZ3JhcGgocmFuZ2UuZW5kUG9zaXRpb24oKSkpOworICAgIHNldFN0YXJ0KHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24ucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFu
Z2Uuc3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24ucHRyKCksIGVuZE9mUGFyYWdyYXBoKHJhbmdlLmVuZFBvc2l0aW9uKCkpKTsK
IAogICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KICAgICAvLyBI
b3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgaXMgbm90IHZhbGlkIGFueW1vcmUuCkBAIC0yNjUsMTYgKzI2NSwx
NiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0
VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5j
ZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFs
IHJhbmdlIGFyb3VuZC4KICAgICBhdXRvIHJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2UuY2xv
bmVSYW5nZSgpOwogCi0gICAgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgp
LnJvb3ROb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3RO
b2RlKCk7CiAgICAgaW50IHBhcmFncmFwaFN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKFJhbmdlOjpjcmVhdGUocm9vdE5vZGUuZG9jdW1lbnQoKSwgJnJvb3ROb2RlLCAwLCAm
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoKSwgcGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRPZmZzZXQoKSkucHRyKCkpOwog
ICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVdpdGhBbHRlcm5hdGl2
ZSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOwogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBt
b2RpZmllZCB0aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVn
emlsbGE6IDg5NTI2Ci0gICAgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3Jh
cGhTdGFydEluZGV4LCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCArIGFsdGVybmF0
aXZlLmxlbmd0aCgpKTsKLSAgICBpZiAoIXBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24pCisgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJh
Z3JhcGhTdGFydEluZGV4LCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCArIGFsdGVy
bmF0aXZlLmxlbmd0aCgpKTsKKyAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgc2V0RW5kKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0g
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVu
Z3RoKCkpOworICAgIHNldEVuZCh1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVj
dGlvbi5nZXQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAg
ICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdl
KCp1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKICAgICBTdHJpbmcg
bmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKIAogICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCkBAIC0zNTIsNyArMzUyLDcgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICBjYXNlIEFs
dGVybmF0aXZlVGV4dFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOiB7CiAgICAgICAgIGlmICghbV9h
bHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IHBsYWluVGV4dChtX2Fs
dGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpICE9IG1fYWx0ZXJu
YXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
U3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoJlRleHRDaGVja2luZ1BhcmFncmFwaCht
X2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdl
KCkpOworICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dCgmVGV4dENoZWNr
aW5nUGFyYWdyYXBoKCptX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
LnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsK
ICAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRl
eHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0
eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmlu
ZGV4IDYwMzc0MDIwNDZiN2RmY2ZhYmE3ZTMyZmMwOGUzN2U3ZDhiNDYyZDkuLmJjNjNhYWI3Njc5
MzFlMWM3OTFiNGViZTA2YmRjMjExMDJjOTk4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGludCB0b0lkZW50
aWZpZXIoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWUpCitzdGF0aWMgaW50IHRvSWRlbnRpZmll
cihSZWZQdHI8Q1NTVmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSA/IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS0+dmFsdWVJRCgpIDogMDsKKyAgICByZXR1cm4gaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlLmdldCgpKSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
LnZhbHVlSUQoKSA6IDA7CiB9CiAKIHN0YXRpYyBTdHJpbmcmIHN0eWxlU3BhbkNsYXNzU3RyaW5n
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
aW5kZXggNzgwY2E2ZmZkNmQwZWNkNDhmNTM0OWQ2YWJiMzdkNWZmZTZmYTA4Ni4uNDUwYmI0ZjFm
YzRmYTY3ZjFlNWU4MmEwNDU0ZGFiNDkwZTA5MGNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRp
dGluZyh0aGlzKTsKKyAgICBmcmFtZSgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsK
IH0KIAogVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp0
YXJnZXRSYW5nZXMoKSBjb25zdApAQCAtMTcwOCwxOCArMTcwOCwxNyBAQCBQb3NpdGlvbiBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnko
Y29uc3QgUG9zaQogCiAvLyBTcGxpdHMgdGhlIHRyZWUgcGFyZW50IGJ5IHBhcmVudCB1bnRpbCB3
ZSByZWFjaCB0aGUgc3BlY2lmaWVkIGFuY2VzdG9yLiBXZSB1c2UgVmlzaWJsZVBvc2l0aW9ucwog
Ly8gdG8gZGV0ZXJtaW5lIGlmIHRoZSBzcGxpdCBpcyBuZWNlc3NhcnkuIFJldHVybnMgdGhlIGxh
c3Qgc3BsaXQgbm9kZS4KLVJlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRU
cmVlVG9Ob2RlKE5vZGUqIHN0YXJ0LCBOb2RlKiBlbmQsIGJvb2wgc2hvdWxkU3BsaXRBbmNlc3Rv
cikKK1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUcmVlVG9Ob2RlKE5v
ZGUmIHN0YXJ0LCBOb2RlJiBlbmQsIGJvb2wgc2hvdWxkU3BsaXRBbmNlc3RvcikKIHsKLSAgICBB
U1NFUlQoc3RhcnQpOwotICAgIEFTU0VSVChlbmQpOwotICAgIEFTU0VSVChzdGFydCAhPSBlbmQp
OworICAgIEFTU0VSVCgmc3RhcnQgIT0gJmVuZCk7CiAKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZTsK
LSAgICBpZiAoc2hvdWxkU3BsaXRBbmNlc3RvciAmJiBlbmQtPnBhcmVudE5vZGUoKSkKLSAgICAg
ICAgZW5kID0gZW5kLT5wYXJlbnROb2RlKCk7CisgICAgUmVmUHRyPE5vZGU+IGFkanVzdGVkRW5k
ID0gJmVuZDsKKyAgICBpZiAoc2hvdWxkU3BsaXRBbmNlc3RvciAmJiBhZGp1c3RlZEVuZC0+cGFy
ZW50Tm9kZSgpKQorICAgICAgICBhZGp1c3RlZEVuZCA9IGFkanVzdGVkRW5kLT5wYXJlbnROb2Rl
KCk7CiAKLSAgICBSZWZQdHI8Tm9kZT4gZW5kTm9kZSA9IGVuZDsKLSAgICBmb3IgKG5vZGUgPSBz
dGFydDsgbm9kZSAmJiBub2RlLT5wYXJlbnROb2RlKCkgIT0gZW5kTm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgIEFTU0VSVChhZGp1c3RlZEVuZCk7CisgICAgUmVmUHRyPE5v
ZGU+IG5vZGU7CisgICAgZm9yIChub2RlID0gJnN0YXJ0OyBub2RlICYmIG5vZGUtPnBhcmVudE5v
ZGUoKSAhPSBhZGp1c3RlZEVuZDsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAg
ICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlLT5wYXJlbnROb2RlKCkpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIC8vIERvIG5vdCBzcGxpdCBhIG5vZGUgd2hlbiBkb2luZyBzbyBpbnRyb2R1
Y2VzIGFuIGVtcHR5IG5vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmgKaW5kZXggNjg4YTIzYjY1MDY5MDkxNDBjMTM3ZWQ2NWViNjk0ZDIxNjNlN2I4
OS4uZDQ2N2JmMTU4OTczYjgxMTY4YmJkZmM5OTM0MTQzOGYzZWUwNGIyYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaApAQCAtMjA1LDcgKzIwNSw3
IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBQb3NpdGlvbiBwb3NpdGlvbkF2b2lkaW5nU3BlY2lh
bEVsZW1lbnRCb3VuZGFyeShjb25zdCBQb3NpdGlvbiYpOwogICAgIAotICAgIFJlZlB0cjxOb2Rl
PiBzcGxpdFRyZWVUb05vZGUoTm9kZSosIE5vZGUqLCBib29sIHNwbGl0QW5jZXN0b3IgPSBmYWxz
ZSk7CisgICAgUmVmUHRyPE5vZGU+IHNwbGl0VHJlZVRvTm9kZShOb2RlJiwgTm9kZSYsIGJvb2wg
c3BsaXRBbmNlc3RvciA9IGZhbHNlKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RWRpdENvbW1hbmQ+
PiBtX2NvbW1hbmRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggZTM0YjQxMTBk
N2U0Y2EzMTgzYjEyZjFjNzA1M2NlMzVlYTFmODNkYS4uM2JjN2ZjNzdkZTVmNjBmNzQ5NjBjYzk0
ZWNmNzFlMDljM2M1NTdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNDcxLDE4
ICs0NzEsMTYgQEAgYm9vbCBFZGl0b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5z
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBwYXN0ZWJvYXJkLmNhblNtYXJ0UmVwbGFjZSgp
OwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCwgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjaW5nRE9NUmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wgRWRpdG9yOjpzaG91bGRJ
bnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2lu
Z0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7CiAgICAgaWYgKCFj
bGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChmcmFnbWVudCkg
ewotICAgICAgICBOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAg
IGlmIChpczxDaGFyYWN0ZXJEYXRhPihjaGlsZCkgJiYgZnJhZ21lbnQtPmxhc3RDaGlsZCgpID09
IGNoaWxkKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0YSgpLCByZXBsYWNpbmdET01SYW5nZS5n
ZXQoKSwgZ2l2ZW5BY3Rpb24pOwotICAgIH0KKyAgICBhdXRvKiBjaGlsZCA9IGZyYWdtZW50LmZp
cnN0Q2hpbGQoKTsKKyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oY2hpbGQpICYmIGZyYWdtZW50
Lmxhc3RDaGlsZCgpID09IGNoaWxkKQorICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZElu
c2VydFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJlcGxhY2lu
Z0RPTVJhbmdlLCBnaXZlbkFjdGlvbik7CiAKLSAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZElu
c2VydE5vZGUoZnJhZ21lbnQuZ2V0KCksIHJlcGxhY2luZ0RPTVJhbmdlLmdldCgpLCBnaXZlbkFj
dGlvbik7CisgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnROb2RlKCZmcmFnbWVudCwg
cmVwbGFjaW5nRE9NUmFuZ2UsIGdpdmVuQWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGJvb2wg
c2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2tx
dW90ZUhhbmRsaW5nKQpAQCAtNTI2LDggKzUyNCw5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBib29sIHNlbGVj
CiAgICAgaWYgKCFub2RlVG9DaGVjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZVRvQ2hlY2sgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRp
b25Jbk5vZGUobm9kZVRvQ2hlY2spLCBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZVRvQ2hlY2spKTsK
LSAgICBtX3NwZWxsQ2hlY2tlci0+cmVxdWVzdENoZWNraW5nRm9yKFNwZWxsQ2hlY2tSZXF1ZXN0
OjpjcmVhdGUocmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpLCBUZXh0Q2hlY2tp
bmdQcm9jZXNzQmF0Y2gsIHJhbmdlVG9DaGVjaywgcmFuZ2VUb0NoZWNrKSk7CisgICAgYXV0byBy
YW5nZVRvQ2hlY2sgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5v
ZGUobm9kZVRvQ2hlY2spLCBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZVRvQ2hlY2spKTsKKyAgICBp
ZiAoYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlVGV4dENo
ZWNraW5nVHlwZU1hc2soKm5vZGVUb0NoZWNrLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBU
ZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciksIFRleHRDaGVja2luZ1Byb2Nlc3NCYXRjaCwgcmFuZ2VU
b0NoZWNrLmNvcHlSZWYoKSwgcmFuZ2VUb0NoZWNrLmNvcHlSZWYoKSkpCisgICAgICAgIG1fc3Bl
bGxDaGVja2VyLT5yZXF1ZXN0Q2hlY2tpbmdGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpKTsK
IH0KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBFZGl0QWN0
aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDksNDMgKzk0OCw0MyBAQCBib29sIEVkaXRvcjo6d2ls
bEFwcGx5RWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCYgY29tbWFuZCwgVmVjdG9yPFJlZlB0
cjxTdGF0aQogICAgIHJldHVybiBkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnRzKGNvbXBvc2l0aW9u
LT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQoKSwgY29tbWFuZC5pbnB1dEV2ZW50VHlwZU5hbWUoKSwgY29tbWFuZC5p
bnB1dEV2ZW50RGF0YSgpLCBjb21tYW5kLmlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSwgdGFyZ2V0
UmFuZ2VzLCBjb21tYW5kLmlzQmVmb3JlSW5wdXRFdmVudENhbmNlbGFibGUoKSk7CiB9CiAKLXZv
aWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5k
PiBjbWQpCit2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQm
IGNvbW1hbmQpCiB7CiAgICAgTE9HKEVkaXRpbmcsICJFZGl0b3IgJXAgYXBwbGllZEVkaXRpbmci
LCB0aGlzKTsKIAogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBFZGl0Q29t
bWFuZENvbXBvc2l0aW9uKiBjb21wb3NpdGlvbiA9IGNtZC0+Y29tcG9zaXRpb24oKTsKLSAgICBB
U1NFUlQoY29tcG9zaXRpb24pOwotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNt
ZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIEFTU0VSVChjb21tYW5kLmNvbXBvc2l0aW9uKCkp
OworICAgIGF1dG8mIGNvbXBvc2l0aW9uID0gKmNvbW1hbmQuY29tcG9zaXRpb24oKTsKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjb21tYW5kLmVuZGluZ1NlbGVjdGlvbigpKTsK
IAotICAgIG5vdGlmeVRleHRGcm9tQ29udHJvbHMoY29tcG9zaXRpb24tPnN0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudCgpLCBjb21wb3NpdGlvbi0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgp
KTsKKyAgICBub3RpZnlUZXh0RnJvbUNvbnRyb2xzKGNvbXBvc2l0aW9uLnN0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudCgpLCBjb21wb3NpdGlvbi5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkp
OwogCi0gICAgaWYgKGNtZC0+aXNUb3BMZXZlbENvbW1hbmQoKSkgeworICAgIGlmIChjb21tYW5k
LmlzVG9wTGV2ZWxDb21tYW5kKCkpIHsKICAgICAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGlu
ZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gV2UgZG8gdGhvc2UgdGhpbmdzIGVs
c2V3aGVyZSBpZiBuZWNlc3NhcnkuCi0gICAgICAgIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rp
b25PcHRpb25zIG9wdGlvbnMgPSBjbWQtPmlzRGljdGF0aW9uQ29tbWFuZCgpID8gRnJhbWVTZWxl
Y3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCA6IDA7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uOjpT
ZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBjb21tYW5kLmlzRGljdGF0aW9uQ29tbWFuZCgp
ID8gRnJhbWVTZWxlY3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCA6IDA7CiAKICAgICAgICAgY2hh
bmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CiAgICAgfQog
Ci0gICAgaWYgKGNtZC0+c2hvdWxkRGlzcGF0Y2hJbnB1dEV2ZW50cygpKQotICAgICAgICBkaXNw
YXRjaElucHV0RXZlbnRzKGNvbXBvc2l0aW9uLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQo
KSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY21kLT5pbnB1dEV2
ZW50VHlwZU5hbWUoKSwgY21kLT5pbnB1dEV2ZW50RGF0YSgpLCBjbWQtPmlucHV0RXZlbnREYXRh
VHJhbnNmZXIoKSk7CisgICAgaWYgKGNvbW1hbmQuc2hvdWxkRGlzcGF0Y2hJbnB1dEV2ZW50cygp
KQorICAgICAgICBkaXNwYXRjaElucHV0RXZlbnRzKGNvbXBvc2l0aW9uLnN0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudCgpLCBjb21wb3NpdGlvbi5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCks
IGNvbW1hbmQuaW5wdXRFdmVudFR5cGVOYW1lKCksIGNvbW1hbmQuaW5wdXRFdmVudERhdGEoKSwg
Y29tbWFuZC5pbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkpOwogCi0gICAgaWYgKGNtZC0+aXNUb3BM
ZXZlbENvbW1hbmQoKSkgeworICAgIGlmIChjb21tYW5kLmlzVG9wTGV2ZWxDb21tYW5kKCkpIHsK
ICAgICAgICAgdXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogCi0gICAgICAgIG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoY21kLmdldCgp
KTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBsaWVk
RWRpdGluZygmY29tbWFuZCk7CiAKLSAgICAgICAgaWYgKCFjbWQtPnByZXNlcnZlc1R5cGluZ1N0
eWxlKCkpCisgICAgICAgIGlmICghY29tbWFuZC5wcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpKQogICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAg
ICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkgaW4g
dGhlIGNhc2Ugb2YgdHlwaW5nCi0gICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQoKSA9
PSBjbWQpCi0gICAgICAgICAgICBBU1NFUlQoY21kLT5pc1R5cGluZ0NvbW1hbmQoKSk7CisgICAg
ICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQoKSA9PSAmY29tbWFuZCkKKyAgICAgICAgICAg
IEFTU0VSVChjb21tYW5kLmlzVHlwaW5nQ29tbWFuZCgpKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAvLyBPbmx5IHJlZ2lzdGVyIGEgbmV3IHVuZG8gY29tbWFuZCBpZiB0aGUgY29tbWFu
ZCBwYXNzZWQgaW4gaXMKICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IGNv
bW1hbmQKLSAgICAgICAgICAgIG1fbGFzdEVkaXRDb21tYW5kID0gY21kOworICAgICAgICAgICAg
bV9sYXN0RWRpdENvbW1hbmQgPSAmY29tbWFuZDsKICAgICAgICAgICAgIGlmIChjbGllbnQoKSkK
ICAgICAgICAgICAgICAgICBjbGllbnQoKS0+cmVnaXN0ZXJVbmRvU3RlcChtX2xhc3RFZGl0Q29t
bWFuZC0+ZW5zdXJlQ29tcG9zaXRpb24oKSk7CiAgICAgICAgIH0KQEAgLTEyMzAsNyArMTIyOSw3
IEBAIHZvaWQgRWRpdG9yOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzCiB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29w
eShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogewogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwotICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChzZWxlY3Rpb24pOworICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxl
Y3Rpb24uZ2V0KCkpOwogICAgIGlmIChhY3Rpb24gPT0gQ3V0QWN0aW9uKSB7CiAgICAgICAgIGlm
ICghc2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLmdldCgpKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE1NzEsMTAgKzE1NzAsMTAgQEAgdm9pZCBFZGl0b3I6OmRpZEVuZEVkaXRpbmcoKQog
ICAgICAgICBjbGllbnQoKS0+ZGlkRW5kRWRpdGluZygpOwogfQogCi12b2lkIEVkaXRvcjo6d2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQordm9p
ZCBFZGl0b3I6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSogcmFuZ2UpCiB7
CiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+d2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKHJhbmdlLmdldCgpKTsKKyAgICAgICAgY2xpZW50KCktPndpbGxXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChyYW5nZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpkaWRXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZCgpCkBAIC0xODkyLDcgKzE4OTEsNyBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAg
Ly8gU3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBk
b2N1bWVudC4gIFN0YXJ0aW5nIGF0IHRoZSBzZWxlY3Rpb24gZW5kIG1ha2VzCiAgICAgLy8gcmVw
ZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5kcyB3b3JrLgogICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgIFJlZlB0
cjxSYW5nZT4gc3BlbGxpbmdTZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSkp
OworICAgIFJlZjxSYW5nZT4gc3BlbGxpbmdTZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhk
b2N1bWVudCgpKTsKIAogICAgIGJvb2wgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKICAg
ICBpZiAoc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkgewpAQCAtMTkwMSw5ICsx
OTAwLDkgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBtYXRjaCBBcHBLaXQncyBy
dWxlOiBTdGFydCAxIGNoYXJhY3RlciBiZWZvcmUgdGhlIHNlbGVjdGlvbi4KICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBvbmVCZWZvcmVTdGFydCA9IHN0YXJ0LnByZXZpb3VzKCk7Ci0gICAg
ICAgICAgICBzZXRTdGFydChzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBvbmVCZWZvcmVTdGFy
dC5pc05vdE51bGwoKSA/IG9uZUJlZm9yZVN0YXJ0IDogc3RhcnQpOworICAgICAgICAgICAgc2V0
U3RhcnQoc3BlbGxpbmdTZWFyY2hSYW5nZS5wdHIoKSwgb25lQmVmb3JlU3RhcnQuaXNOb3ROdWxs
KCkgPyBvbmVCZWZvcmVTdGFydCA6IHN0YXJ0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBzZXRTdGFydChzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpKTsKKyAgICAgICAgICAgIHNldFN0YXJ0KHNwZWxsaW5nU2VhcmNoUmFuZ2UucHRyKCksIHNl
bGVjdGlvbi52aXNpYmxlRW5kKCkpOwogICAgIH0KIAogICAgIFBvc2l0aW9uIHBvc2l0aW9uID0g
c3BlbGxpbmdTZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwpAQCAtMTkzMyw5ICsxOTMyLDkg
QEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3Jl
U2VsZWN0aW9uKQogICAgIC8vIElmIHNwZWxsaW5nU2VhcmNoUmFuZ2Ugc3RhcnRzIGluIHRoZSBt
aWRkbGUgb2YgYSB3b3JkLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHdvcmQgc28gd2Ugc3RhcnQgY2hl
Y2tpbmcKICAgICAvLyBhdCBhIHdvcmQgYm91bmRhcnkuIEdvaW5nIGJhY2sgYnkgb25lIGNoYXIg
YW5kIHRoZW4gZm9yd2FyZCBieSBhIHdvcmQgZG9lcyB0aGUgdHJpY2suCiAgICAgaWYgKHN0YXJ0
ZWRXaXRoU2VsZWN0aW9uKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBvbmVCZWZvcmVTdGFy
dCA9IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIERPV05T
VFJFQU0pLnByZXZpb3VzKCk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbmVCZWZvcmVTdGFy
dCA9IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNwZWxsaW5nU2VhcmNoUmFuZ2UucHRyKCksIERPV05T
VFJFQU0pLnByZXZpb3VzKCk7CiAgICAgICAgIGlmIChvbmVCZWZvcmVTdGFydC5pc05vdE51bGwo
KSkKLSAgICAgICAgICAgIHNldFN0YXJ0KHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIGVuZE9m
V29yZChvbmVCZWZvcmVTdGFydCkpOworICAgICAgICAgICAgc2V0U3RhcnQoc3BlbGxpbmdTZWFy
Y2hSYW5nZS5wdHIoKSwgZW5kT2ZXb3JkKG9uZUJlZm9yZVN0YXJ0KSk7CiAgICAgICAgIC8vIGVs
c2Ugd2Ugd2VyZSBhbHJlYWR5IGF0IHRoZSBzdGFydCBvZiB0aGUgZWRpdGFibGUgbm9kZQogICAg
IH0KIApAQCAtMTk2NSw3ICsxOTY0LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNz
cGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIFJlZlB0cjxSYW5nZT4gZmly
c3RNaXNzcGVsbGluZ1JhbmdlOwogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkp
IHsKICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xv
bmVSYW5nZSgpOwotICAgICAgICBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50
KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFy
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNldCwgZ3Jh
bW1hckRldGFpbCk7CisgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xp
ZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFt
bWFyKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNldCwg
Z3JhbW1hckRldGFpbCk7CiAgICAgICAgIGlmIChpc1NwZWxsaW5nKSB7CiAgICAgICAgICAgICBt
aXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKICAgICAgICAgICAgIG1pc3NwZWxsaW5nT2Zmc2V0
ID0gZm91bmRPZmZzZXQ7CkBAIC0xOTc0LDcgKzE5NzMsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5j
ZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAg
ICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQo
KSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdP
ZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICBtaXNzcGVsbGVk
V29yZCA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2Up
LmZpbmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKTsKIAogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQogICAgICAgICBncmFt
bWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKCk7CkBAIC0x
OTg2LDcgKzE5ODUsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJv
b2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIH0KICAgICAKICAgICAgICAgaWYgKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9
IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmly
c3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsK
KyAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVu
dCgpLCAqZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRh
aWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAg
LTIwMDAsNyArMTk5OSw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgCiAgICAgICAgIGlmICh1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9
IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAgICAgICAgICAgIGZvdW5kSXRl
bSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmlu
ZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCks
IGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKKyAgICAgICAgICAgIGZv
dW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFu
Z2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNldCwgZ3JhbW1hckRldGFpbCk7CiAgICAgICAg
ICAgICBpZiAoaXNTcGVsbGluZykgewogICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0g
Zm91bmRJdGVtOwogICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nT2Zmc2V0ID0gZm91bmRPZmZz
ZXQ7CkBAIC0yMDA5LDcgKzIwMDgsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICAgICAgZ3JhbW1h
clBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xp
ZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxs
aW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIG1p
c3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgc3BlbGxpbmdTZWFy
Y2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogCiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCiAgICAg
ICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJh
bmdlKCk7CkBAIC0yMDIxLDcgKzIwMjAsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAg
ICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFy
U2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBo
cmFzZU9mZnNldCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBU
ZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAqZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmly
c3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsK
ICNlbmRpZgogICAgICAgICB9CiAgICAgfQpAQCAtMjAzOSw3ICsyMDM4LDcgQEAgdm9pZCBFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQog
ICAgICAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiAhPSAtMSAmJiBncmFtbWFyRGV0
YWlsLmxlbmd0aCA+IDApOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhp
cyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEg
cGFyYWdyYXBoCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpzdWJyYW5nZShncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCksIGdyYW1tYXJQaHJhc2VP
ZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxvY2F0aW9uLCBncmFtbWFyRGV0YWlsLmxlbmd0aCk7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJy
YW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCBncmFtbWFyUGhyYXNlT2Zmc2V0ICsgZ3JhbW1hckRl
dGFpbC5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5sZW5ndGgpOwogICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpiYWRHcmFtbWFyUmFuZ2Us
IFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIApAQCAtMjA1MSwxMiArMjA1MCwxMiBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgICAgIC8vIFdlIGZvdW5kIGEgbWlzc3BlbGxpbmcsIGJ1dCBub3QgYW55IGVhcmxpZXIg
YmFkIGdyYW1tYXIuIFNlbGVjdCB0aGUgbWlzc3BlbGxpbmcsIHVwZGF0ZSB0aGUgc3BlbGxpbmcg
cGFuZWwsIGFuZCBzdG9yZQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSByZWQg
c3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxs
aW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0
KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7Ci0gICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKm1pc3Nw
ZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgYXV0byBtaXNzcGVsbGluZ1Jhbmdl
ID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShzcGVsbGluZ1NlYXJjaFJhbmdlLCBtaXNzcGVsbGlu
Z09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOworICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERP
V05TVFJFQU0pKTsKICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
KTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7CisgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1Jh
bmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgIH0KIH0KIApAQCAtMjEy
MCw5ICsyMTE5LDkgQEAgYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7
CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQor
ICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmlzVW5ncmFtbWF0aWNh
bCgpOworICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAqcmFuZ2UpLmlz
VW5ncmFtbWF0aWNhbCgpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTIx
NDksOSArMjE0OCw5IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vCiAgICAgICAgICAgICByYW5n
ZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAg
ICBpZiAoIXJhbmdlKQorICAgICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAgICAg
ICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwotICAgICAgICByZXR1cm4gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCByYW5nZSkuZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWxSYW5nZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgbWlzc3BlbGxlZCwgdW5ncmFtbWF0
aWNhbCk7CisgICAgICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAqcmFu
Z2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOwogICAgIH0KIAogICAg
IFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1
Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpID8gbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5n
ZShkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkpIDogbWlzc3BlbGxlZFNlbGVjdGlvblN0cmlu
ZygpOwpAQCAtMjMyMyw3ICsyMzIyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NP
ckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICAgICBp
ZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVGV4dENoZWNraW5nSGVs
cGVyIGNoZWNrZXIoY2xpZW50KCksIHNlYXJjaFJhbmdlKTsKKyAgICBUZXh0Q2hlY2tpbmdIZWxw
ZXIgY2hlY2tlcigqY2xpZW50KCksICpzZWFyY2hSYW5nZSk7CiAgICAgaWYgKGNoZWNrU3BlbGxp
bmcpCiAgICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpOwogICAgIGVsc2UgewpAQCAtMjM5Nyw3ICsyMzk2LDcgQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nVHlwZU1h
c2sgdGV4dEMKICAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoJmVkaXRhYmxlTm9k
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJhbmdlKiByYW5nZVRvQ2hlY2sgPSBzaG91bGRN
YXJrR3JhbW1hciA/IGdyYW1tYXJSYW5nZSA6IHNwZWxsaW5nUmFuZ2U7CisgICAgUmFuZ2UmIHJh
bmdlVG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gKmdyYW1tYXJSYW5nZSA6ICpzcGVsbGlu
Z1JhbmdlOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0NoZWNrKHJhbmdl
VG9DaGVjayk7CiAgICAgaWYgKHBhcmFncmFwaFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yNDA3LDE2ICsyNDA2LDE4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDCiAK
ICAgICAvLyBJbiBhc3luY2hyb25vdXMgbW9kZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJh
Z3JhcGgtd2lkZSBzZW50ZW5jZS4KICAgICBjb25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJl
c29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhlZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlv
bnMpOwotICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2
ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGFzeW5jaHJvbm91cyA/
IHBhcmFncmFwaFJhbmdlLnB0cigpIDogcmFuZ2VUb0NoZWNrLCBwYXJhZ3JhcGhSYW5nZS5wdHIo
KSk7CisgICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZl
ZE9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8g
cGFyYWdyYXBoUmFuZ2UuZ2V0KCkgOiByYW5nZVRvQ2hlY2ssIHBhcmFncmFwaFJhbmdlLmNvcHlS
ZWYoKSk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXN5
bmNocm9ub3VzKSB7Ci0gICAgICAgIG1fc3BlbGxDaGVja2VyLT5yZXF1ZXN0Q2hlY2tpbmdGb3Io
V1RGTW92ZShyZXF1ZXN0KSk7CisgICAgICAgIG1fc3BlbGxDaGVja2VyLT5yZXF1ZXN0Q2hlY2tp
bmdGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNv
bHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwot
ICAgIG1hcmtBbmRSZXBsYWNlRm9yKFdURk1vdmUocmVxdWVzdCksIHJlc3VsdHMpOworICAgIG1h
cmtBbmRSZXBsYWNlRm9yKHJlcXVlc3QucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0cyk7CiB9CiAK
IHN0YXRpYyBib29sIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50VHlwZShUZXh0Q2hlY2tpbmdU
eXBlIHR5cGUpCkBAIC0yNDUzLDE2ICsyNDU0LDE1IEBAIHN0YXRpYyB2b2lkIGNvcnJlY3RTcGVs
bGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJh
CiAKICAgICBSZWZQdHI8UmFuZ2U+IG5ld1BhcmFncmFwaFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmc2NvcGUsIHBhcmFncmFwaExvY2F0aW9uLCBwYXJh
Z3JhcGhMZW5ndGggKyByZXBsYWNlbWVudC5sZW5ndGgoKSAtIHJlc3VsdExlbmd0aCk7CiAKLSAg
ICBwYXJhZ3JhcGggPSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dEl0ZXJhdG9yOjpzdWJyYW5n
ZShuZXdQYXJhZ3JhcGhSYW5nZS5nZXQoKSwgcmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50Lmxl
bmd0aCgpKSwgbmV3UGFyYWdyYXBoUmFuZ2UpOworICAgIHBhcmFncmFwaCA9IFRleHRDaGVja2lu
Z1BhcmFncmFwaChUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpuZXdQYXJhZ3JhcGhSYW5nZSwgcmVz
dWx0TG9jYXRpb24sIHJlcGxhY2VtZW50Lmxlbmd0aCgpKSwgbmV3UGFyYWdyYXBoUmFuZ2UuZ2V0
KCkpOwogfQogCi12b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0cjxTcGVs
bENoZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdHMpCit2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVj
a1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1
bHRzKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKLSAgICBBU1NFUlQo
cmVxdWVzdCk7CiAKLSAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25z
ID0gcmVxdWVzdC0+ZGF0YSgpLm1hc2soKTsKLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFy
YWdyYXBoKHJlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgcmVxdWVzdC0+cGFyYWdyYXBoUmFuZ2Uo
KSk7CisgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucyA9IHJlcXVl
c3QuZGF0YSgpLm1hc2soKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHJl
cXVlc3QuY2hlY2tpbmdSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKIAogICAg
IGNvbnN0IGJvb2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZzsKICAgICBjb25zdCBib29sIHNob3VsZE1hcmtHcmFtbWFy
ID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOwpAQCAtMjYw
NSw3ICsyNjA1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdHI8
U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZlY3QKICAgICB9CiAKICAgICBpZiAo
c2VsZWN0aW9uQ2hhbmdlZCkgewotICAgICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggZXh0ZW5k
ZWRQYXJhZ3JhcGgocGFyYWdyYXBoKTsKKyAgICAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIGV4
dGVuZGVkUGFyYWdyYXBoKFdURk1vdmUocGFyYWdyYXBoKSk7CiAgICAgICAgIC8vIFJlc3RvcmUg
dGhlIGNhcmV0IHBvc2l0aW9uIGlmIHdlIGhhdmUgbWFkZSBhbnkgcmVwbGFjZW1lbnRzCiAgICAg
ICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7CiAgICAgICAgIGlm
IChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgJiYgc2VsZWN0aW9uT2Zmc2V0ID49IDAgJiYg
c2VsZWN0aW9uT2Zmc2V0IDw9IGV4dGVuZGVkUGFyYWdyYXBoLnJhbmdlTGVuZ3RoKCkpIHsKQEAg
LTI2MzQsNyArMjYzNCw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBsYWNlZFN0cmluZywgc2Vs
ZWN0aW9uLmdldCgpKTsKLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHNlbGVj
dGlvbik7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaCgqc2VsZWN0aW9uKTsK
ICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBmYWxz
ZSwgRWRpdEFjdGlvbkluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3Ro
KCkpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQsIFN0cmluZygpKTsKQEAgLTMzOTQsNyArMzM5NCw3IEBAIHZvaWQgRWRpdG9yOjpzY2Fu
UmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nVmlldyYg
c3RyaW5nCiAgICAgICAgIHVuc2lnbmVkIHN1YnJhbmdlT2Zmc2V0ID0gc2Nhbm5lclBvc2l0aW9u
ICsgcmVsYXRpdmVTdGFydFBvc2l0aW9uOwogICAgICAgICB1bnNpZ25lZCBzdWJyYW5nZUxlbmd0
aCA9IHJlbGF0aXZlRW5kUG9zaXRpb24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gKyAxOwogCi0g
ICAgICAgIFJlZlB0cjxSYW5nZT4gc3VicmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCZy
YW5nZSwgc3VicmFuZ2VPZmZzZXQsIHN1YnJhbmdlTGVuZ3RoKTsKKyAgICAgICAgUmVmUHRyPFJh
bmdlPiBzdWJyYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocmFuZ2UsIHN1YnJhbmdlT2Zm
c2V0LCBzdWJyYW5nZUxlbmd0aCk7CiAKICAgICAgICAgbWFya2VkUmFuZ2VzLmFwcGVuZChzdWJy
YW5nZSk7CiAgICAgICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2Vy
KHN1YnJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKQEAgLTM2
MDksNyArMzYwOSw3IEBAIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2lu
Z1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsCiAgICAgaWYgKCFjb250ZXh0
UmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UoY29udGV4dFJhbmdlLmdldCgpLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5s
ZW5ndGgpOworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpjb250ZXh0UmFuZ2Us
IHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpoYW5k
bGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBmNjkwNDU2NGMyODlkNjQwNDhmZTNhMTQxZGY4
NTE0YTc3ZGMxNTJiLi45YzVlNTYzZTE2MjI3NTY0Njc1Y2I5NzhhMGE0NjAzNDM0NWY5MTk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTE2MCw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBvdXRkZW50KCk7CiAgICAgdm9pZCB0cmFuc3Bvc2UoKTsKIAot
ICAgIGJvb2wgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiwgUGFzc1JlZlB0cjxSYW5nZT4sIEVkaXRvckluc2VydEFjdGlvbik7CisgICAgYm9vbCBzaG91
bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRB
Y3Rpb24pOwogICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSos
IEVkaXRvckluc2VydEFjdGlvbikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91
bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShT
dHlsZVByb3BlcnRpZXMqLCBSYW5nZSopOwpAQCAtMjEwLDcgKzIxMCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIHdpbGxVbmFwcGx5RWRpdGluZyhjb25zdCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uJikg
Y29uc3Q7CiAgICAgYm9vbCB3aWxsUmVhcHBseUVkaXRpbmcoY29uc3QgRWRpdENvbW1hbmRDb21w
b3NpdGlvbiYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPENv
bXBvc2l0ZUVkaXRDb21tYW5kPik7CisgICAgdm9pZCBhcHBsaWVkRWRpdGluZyhDb21wb3NpdGVF
ZGl0Q29tbWFuZCYpOwogICAgIHZvaWQgdW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBv
c2l0aW9uJik7CiAgICAgdm9pZCByZWFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRp
b24mKTsKICAgICB2b2lkIHVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbik7CkBAIC0yMjIsNyArMjIyLDcgQEAgcHVibGljOgogICAg
IGNsYXNzIENvbW1hbmQgewogICAgIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgQ29t
bWFuZCgpOwotICAgICAgICBDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIFBhc3NSZWZQdHI8RnJhbWU+KTsKKyAgICAgICAgQ29tbWFuZChj
b25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBGcmFtZSYp
OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBh
cmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikgY29u
c3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dlcmlu
Z0V2ZW50KSBjb25zdDsKQEAgLTI3MSw3ICsyNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJr
TWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZWZQdHI8UmFuZ2U+JiBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGdyYW1tYXJTZWxlY3Rpb24pOwotICAgIHZvaWQgbWFy
a0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4sIGNvbnN0IFZlY3Rv
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CisgICAgdm9pZCBtYXJrQW5kUmVwbGFjZUZvcihjb25z
dCBTcGVsbENoZWNrUmVxdWVzdCYsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7
CiAKICAgICBib29sIGlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX292
ZXJ3cml0ZU1vZGVFbmFibGVkOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVPdmVy
d3JpdGVNb2RlRW5hYmxlZCgpOwpAQCAtMjk5LDcgKzI5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZGlkQmVnaW5FZGl0aW5nKCk7CiAgICAgdm9pZCBkaWRFbmRFZGl0aW5nKCk7Ci0gICAgdm9p
ZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzc1JlZlB0cjxSYW5nZT4pOworICAg
IHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKik7CiAgICAgdm9pZCBk
aWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogCiAgICAgdm9pZCBzaG93Rm9udFBhbmVs
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA3YjJkYzZl
ZTI3YjIyMjkwNzBjMTkyM2JjYmMwZmIzMGZkZDI5NDUwLi42Y2YyMzUyZGRhMDlmOWU2MDU2YTZl
M2I4YzFmZGMzYjhmMDM3NDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKQEAgLTE1NSwxMCArMTU1LDEwIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVBhcmFn
cmFwaFN0eWxlKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0RnJhZ21lbnQoRnJh
bWUmIGZyYW1lLCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50KQorc3RhdGlj
IGJvb2wgZXhlY3V0ZUluc2VydEZyYWdtZW50KEZyYW1lJiBmcmFtZSwgUmVmPERvY3VtZW50RnJh
Z21lbnQ+JiYgZnJhZ21lbnQpCiB7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwotICAg
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGZyYWdt
ZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcsIEVkaXRBY3Rpb25J
bnNlcnQpLT5hcHBseSgpOworICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6UHJldmVudE5lc3RpbmcsIEVkaXRBY3Rpb25JbnNlcnQpLT5hcHBseSgpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xNzM2LDEyICsxNzM2LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJ
bnRlcm5hbENvbW1hbmQqIGludGVybmFsQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
KQogCiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUpCiB7Ci0gICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1l
KSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCAmbV9mcmFtZSk7CisgICAgcmV0dXJuIENv
bW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBtX2ZyYW1lKTsKIH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChj
b25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsK
LSAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2Us
ICZtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5h
bWUpLCBzb3VyY2UsIG1fZnJhbWUpOwogfQogCiBib29sIEVkaXRvcjo6Y29tbWFuZElzU3VwcG9y
dGVkRnJvbU1lbnVPcktleUJpbmRpbmcoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKQEAgLTE3
NTMsMTYgKzE3NTMsMTIgQEAgRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKCkKIHsKIH0KIAotRWRp
dG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFu
ZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIFBhc3NSZWZQdHI8RnJhbWU+IGZyYW1lKQor
RWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29t
bWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEZyYW1lJiBmcmFtZSkKICAgICA6IG1f
Y29tbWFuZChjb21tYW5kKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShj
b21tYW5kID8gZnJhbWUgOiAwKQorICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1lIDogbnVs
bHB0cikKIHsKLSAgICAvLyBVc2Ugc2VwYXJhdGUgYXNzZXJ0aW9ucyBzbyB3ZSBjYW4gdGVsbCB3
aGljaCBiYWQgdGhpbmcgaGFwcGVuZWQuCi0gICAgaWYgKCFjb21tYW5kKQotICAgICAgICBBU1NF
UlQoIW1fZnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFT
U0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKIH0KIAogYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4
ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKaW5k
ZXggMTk3NGEzZTBhZjQ0YjZiYzgxMTM2ODVmZDFkNGM3N2VmMGFjNjIzNS4uY2U1MTg5ZGE3ODJk
YmQwZTc1MzljNjM1OTk2NTdmZmNmYmYxMTA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtNjQsNyArNjQsOCBAQCB2b2lkIEZvcm1hdEJs
b2NrQ29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRP
ZlNlbGVjdGlvbgogdm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgY29uc3QgUG9zaXRpb24mIGVuZE9m
U2VsZWN0aW9uLCBSZWZQdHI8RWxlbWVudD4mIGJsb2NrTm9kZSkKIHsKICAgICBOb2RlKiBub2Rl
VG9TcGxpdFRvID0gZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCkpOwotICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBzdGFydC5kZXByZWNhdGVkTm9kZSgpIDogc3BsaXRU
cmVlVG9Ob2RlKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIG5vZGVUb1NwbGl0VG8pOworICAgIEFT
U0VSVChub2RlVG9TcGxpdFRvKTsKKyAgICBSZWZQdHI8Tm9kZT4gb3V0ZXJCbG9jayA9IChzdGFy
dC5kZXByZWNhdGVkTm9kZSgpID09IG5vZGVUb1NwbGl0VG8pID8gc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA6IHNwbGl0VHJlZVRvTm9kZSgqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgKm5vZGVUb1Nw
bGl0VG8pOwogICAgIFJlZlB0cjxOb2RlPiBub2RlQWZ0ZXJJbnNlcnRpb25Qb3NpdGlvbiA9IG91
dGVyQmxvY2s7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCgpLCBzdGFydCwgZW5kT2ZTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAppbmRleCA3ZjhkYTE3NTk1MmUwOTY2NTY0YWJl
ODgxNGMwZDE5ZDgyMTAzYmY0Li5hNDVkOTZhM2ZkYTUzNDkzNGFlYTA5ZjcxNjVjZTM5ZGFmM2Mz
NGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmluZGVu
dEludG9CbG9ja3F1b3RlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZlB0cjxOb2RlPiBub2RlQWZ0ZXJTdGFydCA9IHN0YXJ0LmNvbXB1
dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOwotICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0
YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0LmNvbnRhaW5lck5v
ZGUoKSA6IHNwbGl0VHJlZVRvTm9kZShzdGFydC5jb250YWluZXJOb2RlKCksIG5vZGVUb1NwbGl0
VG8pOworICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0LmNvbnRhaW5lck5vZGUo
KSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA6IHNwbGl0VHJlZVRv
Tm9kZSgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCAqbm9kZVRvU3BsaXRUbyk7CiAKICAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRPZkNvbnRlbnRzID0gc3RhcnQ7CiAgICAgaWYgKCF0YXJnZXRCbG9j
a3F1b3RlKSB7CkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6
b3V0ZGVudFBhcmFncmFwaCgpCiAgICAgYXV0byogZW5jbG9zaW5nQmxvY2tGbG93ID0gZW5jbG9z
aW5nQmxvY2soc3RhcnRPZlBhcmFncmFwaE5vZGUpOwogICAgIFJlZlB0cjxOb2RlPiBzcGxpdEJs
b2NrcXVvdGVOb2RlID0gZW5jbG9zaW5nTm9kZTsKICAgICBpZiAoZW5jbG9zaW5nQmxvY2tGbG93
ICE9IGVuY2xvc2luZ05vZGUpCi0gICAgICAgIHNwbGl0QmxvY2txdW90ZU5vZGUgPSBzcGxpdFRy
ZWVUb05vZGUoc3RhcnRPZlBhcmFncmFwaE5vZGUsIGVuY2xvc2luZ05vZGUsIHRydWUpOworICAg
ICAgICBzcGxpdEJsb2NrcXVvdGVOb2RlID0gc3BsaXRUcmVlVG9Ob2RlKCpzdGFydE9mUGFyYWdy
YXBoTm9kZSwgKmVuY2xvc2luZ05vZGUsIHRydWUpOwogICAgIGVsc2UgewogICAgICAgICAvLyBX
ZSBzcGxpdCB0aGUgYmxvY2txdW90ZSBhdCB3aGVyZSB3ZSBzdGFydCBvdXRkZW50aW5nLgogICAg
ICAgICBhdXRvKiBoaWdoZXN0SW5saW5lTm9kZSA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBl
KHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCksIGlzSW5saW5lLCBDYW5u
b3RDcm9zc0VkaXRpbmdCb3VuZGFyeSwgZW5jbG9zaW5nQmxvY2tGbG93KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggYjYyNzY3NjIwOTBiYzc4
YjE4NWEzOTQyZThiNjUzNjk0MzNiYmIzNy4uOTc3MTBiZTQwZGZmOWRmOTAxOTc3ZDZkYmUwOWI3
ZDVlOWMzYTUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFu
ZC5jcHAKQEAgLTU0LDM1ICs1NCwzMyBAQCBSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RD
b21tYW5kOjppbnNlcnRMaXN0KERvY3VtZW50JiBkb2N1bWVudCwgVHlwZSB0eXBlKQogICAgIHJl
dHVybiBpbnNlcnRDb21tYW5kLT5tX2xpc3RFbGVtZW50OwogfQogCi1IVE1MRWxlbWVudCogSW5z
ZXJ0TGlzdENvbW1hbmQ6OmZpeE9ycGhhbmVkTGlzdENoaWxkKE5vZGUmIG5vZGUpCitIVE1MRWxl
bWVudCYgSW5zZXJ0TGlzdENvbW1hbmQ6OmZpeE9ycGhhbmVkTGlzdENoaWxkKE5vZGUmIG5vZGUp
CiB7CiAgICAgYXV0byBsaXN0RWxlbWVudCA9IEhUTUxVTGlzdEVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCgpKTsKICAgICBpbnNlcnROb2RlQmVmb3JlKGxpc3RFbGVtZW50LmNvcHlSZWYoKSwgbm9k
ZSk7CiAgICAgcmVtb3ZlTm9kZShub2RlKTsKICAgICBhcHBlbmROb2RlKG5vZGUsIGxpc3RFbGVt
ZW50LmNvcHlSZWYoKSk7Ci0gICAgbV9saXN0RWxlbWVudCA9IGxpc3RFbGVtZW50LmNvcHlSZWYo
KTsKLSAgICByZXR1cm4gbGlzdEVsZW1lbnQucHRyKCk7CisgICAgbV9saXN0RWxlbWVudCA9IFdU
Rk1vdmUobGlzdEVsZW1lbnQpOworICAgIHJldHVybiAqbV9saXN0RWxlbWVudDsKIH0KIAotUmVm
UHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdM
aXN0cyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBwYXNzZWRMaXN0KQorUmVmPEhUTUxFbGVtZW50
PiBJbnNlcnRMaXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhIVE1MRWxlbWVu
dCYgbGlzdCkKIHsKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3QgPSBwYXNzZWRMaXN0Owot
ICAgIEVsZW1lbnQqIHByZXZpb3VzTGlzdCA9IGxpc3QtPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KTsKLSAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91c0xpc3QsIGxpc3QuZ2V0KCkpKQotICAg
ICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpwcmV2aW91c0xpc3QsICpsaXN0KTsKLQotICAg
IGlmICghbGlzdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgRWxlbWVudCogc2libGlu
ZyA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCpsaXN0KTsKKyAgICBSZWY8SFRNTEVs
ZW1lbnQ+IHByb3RlY3RlZExpc3QgPSBsaXN0OworICAgIEVsZW1lbnQqIHByZXZpb3VzTGlzdCA9
IGxpc3QucHJldmlvdXNFbGVtZW50U2libGluZygpOworICAgIGlmIChjYW5NZXJnZUxpc3RzKHBy
ZXZpb3VzTGlzdCwgJmxpc3QpKQorICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpwcmV2
aW91c0xpc3QsIGxpc3QpOworCisgICAgRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKGxpc3QpOwogICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KHNpYmxpbmcp
KQotICAgICAgICByZXR1cm4gbGlzdDsKKyAgICAgICAgcmV0dXJuIHByb3RlY3RlZExpc3Q7CiAK
LSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG5leHRMaXN0ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KHNpYmxpbmcpOwotICAgIGlmIChjYW5NZXJnZUxpc3RzKGxpc3QuZ2V0KCksIG5leHRMaXN0Lmdl
dCgpKSkgewotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpsaXN0LCAqbmV4dExpc3Qp
OworICAgIFJlZjxIVE1MRWxlbWVudD4gbmV4dExpc3QgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4o
KnNpYmxpbmcpOworICAgIGlmIChjYW5NZXJnZUxpc3RzKCZsaXN0LCBuZXh0TGlzdC5wdHIoKSkp
IHsKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhsaXN0LCBuZXh0TGlzdCk7CiAgICAg
ICAgIHJldHVybiBuZXh0TGlzdDsKICAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7CisgICAgcmV0dXJu
IHByb3RlY3RlZExpc3Q7CiB9CiAKIGJvb2wgSW5zZXJ0TGlzdENvbW1hbmQ6OnNlbGVjdGlvbkhh
c0xpc3RPZlR5cGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBsaXN0VGFnKQpAQCAtMjA4LDEwICsyMDYsOSBAQCB2b2lkIEluc2VydExpc3RD
b21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBj
b25zdCBIVAogICAgIGlmIChsaXN0Q2hpbGROb2RlKSB7CiAgICAgICAgIC8vIFJlbW92ZSB0aGUg
bGlzdCBjaGxpbGQuCiAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdE5vZGUgPSBlbmNs
b3NpbmdMaXN0KGxpc3RDaGlsZE5vZGUpOwotICAgICAgICBpZiAoIWxpc3ROb2RlKSB7Ci0gICAg
ICAgICAgICBsaXN0Tm9kZSA9IGZpeE9ycGhhbmVkTGlzdENoaWxkKCpsaXN0Q2hpbGROb2RlKTsK
LSAgICAgICAgICAgIGxpc3ROb2RlID0gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhsaXN0Tm9k
ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFsaXN0Tm9kZSkKKyAgICAgICAgICAgIGxpc3RO
b2RlID0gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhmaXhPcnBoYW5lZExpc3RDaGlsZCgqbGlz
dENoaWxkTm9kZSkpOworCiAgICAgICAgIGlmICghbGlzdE5vZGUtPmhhc1RhZ05hbWUobGlzdFRh
ZykpIHsKICAgICAgICAgICAgIC8vIGxpc3RDaGlsZE5vZGUgd2lsbCBiZSByZW1vdmVkIGZyb20g
dGhlIGxpc3QgYW5kIGEgbGlzdCBvZiB0eXBlIG1fdHlwZSB3aWxsIGJlIGNyZWF0ZWQuCiAgICAg
ICAgICAgICBzd2l0Y2hMaXN0VHlwZSA9IHRydWU7CkBAIC0yNDAsNyArMjM3LDcgQEAgdm9pZCBJ
bnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3Jl
YXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAgIGlmIChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+
aXNDb25uZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpsaXN0Tm9kZSk7CiAK
LSAgICAgICAgICAgIG5ld0xpc3QgPSBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKG5ld0xpc3Qp
OworICAgICAgICAgICAgbmV3TGlzdCA9IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoKm5ld0xp
c3QpOwogCiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiBj
dXJyZW50IHNlbGVjdGlvbiBpZiB0aGV5IHN0YXJ0ZWQgaW5zaWRlIGxpc3ROb2RlCiAgICAgICAg
ICAgICAvLyBiZWNhdXNlIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzIGNvdWxkIGhhdmUgcmVtb3Zl
ZCB0aGVtLgpAQCAtMzAwLDcgKzI5Nyw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlz
dGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsCiAgICAg
ICAgIC8vIEZJWE1FOiBXZSBhcHBlYXIgdG8gc3BsaXQgYXQgbmV4dExpc3RDaGlsZCBhcyBvcHBv
c2VkIHRvIGxpc3RDaGlsZE5vZGUgc28gdGhhdCB3aGVuIHdlIHJlbW92ZQogICAgICAgICAvLyBs
aXN0Q2hpbGROb2RlIGJlbG93IGluIG1vdmVQYXJhZ3JhcGhzLCBwcmV2aW91c0xpc3RDaGlsZCB3
aWxsIGJlIHJlbW92ZWQgYWxvbmcgd2l0aCBpdCBpZiBpdCBpcyAKICAgICAgICAgLy8gdW5yZW5k
ZXJlZC4gQnV0IHdlIG91Z2h0IHRvIHJlbW92ZSBuZXh0TGlzdENoaWxkIHRvbywgaWYgaXQgaXMg
dW5yZW5kZXJlZC4KLSAgICAgICAgc3BsaXRFbGVtZW50KCpsaXN0Tm9kZSwgKnNwbGl0VHJlZVRv
Tm9kZShuZXh0TGlzdENoaWxkLCBsaXN0Tm9kZSkpOworICAgICAgICBzcGxpdEVsZW1lbnQoKmxp
c3ROb2RlLCAqc3BsaXRUcmVlVG9Ob2RlKCpuZXh0TGlzdENoaWxkLCAqbGlzdE5vZGUpKTsKICAg
ICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQucmVsZWFzZU5vbk51bGwoKSwgKmxp
c3ROb2RlKTsKICAgICB9IGVsc2UgaWYgKG5leHRMaXN0Q2hpbGQgfHwgbGlzdENoaWxkTm9kZS0+
cGFyZW50Tm9kZSgpICE9IGxpc3ROb2RlKSB7CiAgICAgICAgIC8vIEp1c3QgYmVjYXVzZSBsaXN0
Q2hpbGROb2RlIGhhcyBubyBwcmV2aW91c0xpc3RDaGlsZCBkb2Vzbid0IG1lYW4gdGhlcmUgaXNu
J3QgYW55IGNvbnRlbnQKQEAgLTMwOCw3ICszMDUsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojp1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0YXJ0
LAogICAgICAgICAvLyBiZXR3ZWVuIGl0IGFuZCBsaXN0Tm9kZS4gU28sIHdlIHNwbGl0IHVwIHRv
IGxpc3ROb2RlIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHBsYWNlaG9sZGVyCiAgICAgICAgIC8vIHdo
ZXJlIHdlJ3JlIGFib3V0IHRvIG1vdmUgbGlzdENoaWxkTm9kZSB0by4KICAgICAgICAgaWYgKGxp
c3RDaGlsZE5vZGUtPnBhcmVudE5vZGUoKSAhPSBsaXN0Tm9kZSkKLSAgICAgICAgICAgIHNwbGl0
RWxlbWVudCgqbGlzdE5vZGUsICpzcGxpdFRyZWVUb05vZGUobGlzdENoaWxkTm9kZSwgbGlzdE5v
ZGUpLmdldCgpKTsKKyAgICAgICAgICAgIHNwbGl0RWxlbWVudCgqbGlzdE5vZGUsICpzcGxpdFRy
ZWVUb05vZGUoKmxpc3RDaGlsZE5vZGUsICpsaXN0Tm9kZSkuZ2V0KCkpOwogICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKG5vZGVUb0luc2VydC5yZWxlYXNlTm9uTnVsbCgpLCAqbGlzdE5vZGUpOwog
ICAgIH0gZWxzZQogICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZVRvSW5zZXJ0LnJlbGVhc2VO
b25OdWxsKCksICpsaXN0Tm9kZSk7CkBAIC0zOTgsNyArMzk1LDcgQEAgUmVmUHRyPEhUTUxFbGVt
ZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9z
aXRpb24mIG8KICAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0LCBlbmQsIHBvc2l0aW9uQmVmb3JlTm9k
ZShwbGFjZWhvbGRlci5wdHIoKSksIHRydWUpOwogCiAgICAgaWYgKGxpc3RFbGVtZW50KQotICAg
ICAgICByZXR1cm4gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhsaXN0RWxlbWVudCk7CisgICAg
ICAgIHJldHVybiBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKCpsaXN0RWxlbWVudCk7CiAKICAg
ICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91c0xpc3QsIG5leHRMaXN0KSkKICAgICAgICAgbWVy
Z2VJZGVudGljYWxFbGVtZW50cygqcHJldmlvdXNMaXN0LCAqbmV4dExpc3QpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCmluZGV4IGQ2YmFiMWY3OWE2YmYxOTg3
NDNkM2RmOWYzZmZlZTIwY2ExZWZkNjAuLmVkZTA4MmU2ODcxYjU5NmVhMjEzNWNmNjUzYmY0NDA3
NDA1YTcwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENv
bW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgK
QEAgLTUxLDkgKzUxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBmaW5hbDsKICAg
ICBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCBmaW5hbDsKIAotICAgIEhUTUxFbGVt
ZW50KiBmaXhPcnBoYW5lZExpc3RDaGlsZChOb2RlJik7CisgICAgSFRNTEVsZW1lbnQmIGZpeE9y
cGhhbmVkTGlzdENoaWxkKE5vZGUmKTsKICAgICBib29sIHNlbGVjdGlvbkhhc0xpc3RPZlR5cGUo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBRdWFsaWZpZWROYW1lJik7
Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKFBhc3NS
ZWZQdHI8SFRNTEVsZW1lbnQ+KTsKKyAgICBSZWY8SFRNTEVsZW1lbnQ+IG1lcmdlV2l0aE5laWdo
Ym9yaW5nTGlzdHMoSFRNTEVsZW1lbnQmKTsKICAgICB2b2lkIGRvQXBwbHlGb3JTaW5nbGVQYXJh
Z3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lJiwgUmFu
Z2UqIGN1cnJlbnRTZWxlY3Rpb24pOwogICAgIHZvaWQgdW5saXN0aWZ5UGFyYWdyYXBoKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwgSFRNTEVsZW1lbnQqIGxpc3ROb2RlLCBO
b2RlKiBsaXN0Q2hpbGROb2RlKTsKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RpZnlQYXJh
Z3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0YXJ0LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBsaXN0VGFnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCmluZGV4IDg1ZGUxMmM4N2I4ZjM4
MWYxYTlhY2ZkOGJmNjYwN2JkYmMyYzliNWIuLjZmOGU0OWMzZDkzYTRlM2M0MTBjZjY1MTNiZTU1
ZjVjN2Q0NzQzYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcApAQCAtMzgyLDcgKzM4Miw3IEBAIHZv
aWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAg
ICBpZiAoaXM8VGV4dD4oKnNwbGl0VG8pICYmIGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpID49IGNhcmV0TWF4T2Zmc2V0KCpzcGxpdFRvKSkKICAgICAgICAgICAgICAg
ICBzcGxpdFRvID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqc3BsaXRUbywgc3RhcnRCbG9jay5nZXQo
KSk7CiAgICAgICAgICAgICBBU1NFUlQoc3BsaXRUbyk7Ci0gICAgICAgICAgICBzcGxpdFRyZWVU
b05vZGUoc3BsaXRUbywgc3RhcnRCbG9jay5nZXQoKSk7CisgICAgICAgICAgICBzcGxpdFRyZWVU
b05vZGUoKnNwbGl0VG8sICpzdGFydEJsb2NrKTsKIAogICAgICAgICAgICAgZm9yIChuID0gc3Rh
cnRCbG9jay0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVOb2RlUG9zaXRpb24gPSBwb3NpdGlvbkJl
Zm9yZU5vZGUobik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRl
eHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwCmluZGV4IDE3NTVlZjBkOGQ1NWNlOGVhNmExYWFhNmM2OGFmY2NiMjRmNTlmYzIuLmVmZDg2
NTA5YTE1ZTZjNThkYmM5YTcwZjE5OTBiZjZmNTkwMmZkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC00NSwxMiArNDUsMTIgQEAgSW5zZXJ0
VGV4dENvbW1hbmQ6Okluc2VydFRleHRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBib28KIHsKIH0KIAotSW5zZXJ0VGV4dENvbW1hbmQ6Okluc2VydFRleHRD
b21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBQYXNzUmVmUHRy
PFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcj4gbWFya2VyU3VwcGxpZXIsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbikKK0luc2VydFRleHRDb21tYW5kOjpJbnNlcnRUZXh0Q29tbWFuZChEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmPFRleHRJbnNlcnRpb25NYXJr
ZXJTdXBwbGllcj4mJiBtYXJrZXJTdXBwbGllciwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQog
ICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQsIGVkaXRpbmdBY3Rpb24pCiAgICAg
LCBtX3RleHQodGV4dCkKICAgICAsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KGZhbHNlKQogICAgICwg
bV9yZWJhbGFuY2VUeXBlKFJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzKQot
ICAgICwgbV9tYXJrZXJTdXBwbGllcihtYXJrZXJTdXBwbGllcikKKyAgICAsIG1fbWFya2VyU3Vw
cGxpZXIoV1RGTW92ZShtYXJrZXJTdXBwbGllcikpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaAppbmRleCBiZjc5MTdiZmI4NDk3NTg3M2UyYmNmMjY3
ZDY2ZmNmMWUxNjJlY2U3Li45YmM4YjM5OTU2N2VkNzUyYWFkMTk0YjQ2ZDg2MTMyMmQyNmQ3NjEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCkBAIC01Mywx
MyArNTMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNlcnRU
ZXh0Q29tbWFuZChkb2N1bWVudCwgdGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0LCByZWJhbGFuY2VU
eXBlLCBlZGl0aW5nQWN0aW9uKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJlZjxJbnNlcnRUZXh0
Q29tbWFuZD4gY3JlYXRlV2l0aE1hcmtlclN1cHBsaWVyKERvY3VtZW50JiBkb2N1bWVudCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBQYXNzUmVmUHRyPFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcj4g
bWFya2VyU3VwcGxpZXIsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiA9IEVkaXRBY3Rpb25JbnNl
cnQpCisgICAgc3RhdGljIFJlZjxJbnNlcnRUZXh0Q29tbWFuZD4gY3JlYXRlV2l0aE1hcmtlclN1
cHBsaWVyKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWY8VGV4dElu
c2VydGlvbk1hcmtlclN1cHBsaWVyPiYmIG1hcmtlclN1cHBsaWVyLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24gPSBFZGl0QWN0aW9uSW5zZXJ0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQsIHRleHQsIG1hcmtlclN1cHBsaWVy
LCBlZGl0aW5nQWN0aW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc2VydFRl
eHRDb21tYW5kKGRvY3VtZW50LCB0ZXh0LCBXVEZNb3ZlKG1hcmtlclN1cHBsaWVyKSwgZWRpdGlu
Z0FjdGlvbikpOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIEluc2VydFRleHRDb21tYW5kKERv
Y3VtZW50JiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBQYXNzUmVmUHRyPFRleHRJbnNlcnRpb25NYXJr
ZXJTdXBwbGllcj4sIEVkaXRBY3Rpb24pOworICAgIEluc2VydFRleHRDb21tYW5kKERvY3VtZW50
JiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWY8VGV4dEluc2VydGlvbk1hcmtlclN1cHBsaWVyPiYm
LCBFZGl0QWN0aW9uKTsKICAgICBJbnNlcnRUZXh0Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFN0
cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIFJlYmFsYW5jZVR5cGUsIEVkaXRB
Y3Rpb24pOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
b3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxl
Y3Rpb25Db21tYW5kLmNwcAppbmRleCBkYjkxMGNhZjFmMGFkMjQ5MTM2NjExYjAwMDE5OWMyOGYx
ZGM5MTFkLi45ZjFlZWU2NTA2ODY1ODVmNzIzNTNiNmQ5YzIyM2Y4MGY5MWQzY2Q4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzIs
MTQgKzMyLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTW92ZVNlbGVjdGlvbkNvbW1h
bmQ6Ok1vdmVTZWxlY3Rpb25Db21tYW5kKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgYm9vbCBzbWFydEluc2VydCwgYm9vbCBz
bWFydERlbGV0ZSkgCitNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6TW92ZVNlbGVjdGlvbkNvbW1hbmQo
UmVmPERvY3VtZW50RnJhZ21lbnQ+JiYgZnJhZ21lbnQsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
biwgYm9vbCBzbWFydEluc2VydCwgYm9vbCBzbWFydERlbGV0ZSkKICAgICA6IENvbXBvc2l0ZUVk
aXRDb21tYW5kKHBvc2l0aW9uLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fZnJh
Z21lbnQoZnJhZ21lbnQpCisgICAgLCBtX2ZyYWdtZW50KFdURk1vdmUoZnJhZ21lbnQpKQogICAg
ICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAgICAsIG1fc21hcnRJbnNlcnQoc21hcnRJbnNlcnQp
CiAgICAgLCBtX3NtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKQogewotICAgIEFTU0VSVChtX2ZyYWdt
ZW50KTsKIH0KIAogdm9pZCBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmgKaW5kZXggOGIzYzMzOGIx
NjIyM2FkMmQzOWQ2ZjRmZDU3ZWMzMjI4NDUzODBjNy4uYmM0ZWQ4MDE3NjI5MzkyNDdmZjM2N2E4
OWMzMDI0ZGExYWM5NTViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb3Zl
U2VsZWN0aW9uQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVj
dGlvbkNvbW1hbmQuaApAQCAtMzMsMTkgKzMzLDE5IEBAIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7
CiAKIGNsYXNzIE1vdmVTZWxlY3Rpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21t
YW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1vdmVTZWxlY3Rpb25Db21tYW5kPiBjcmVh
dGUoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uLCBib29sIHNtYXJ0SW5zZXJ0ID0gZmFsc2UsIGJvb2wgc21hcnREZWxldGUgPSBm
YWxzZSkKKyAgICBzdGF0aWMgUmVmPE1vdmVTZWxlY3Rpb25Db21tYW5kPiBjcmVhdGUoUmVmPERv
Y3VtZW50RnJhZ21lbnQ+JiYgZnJhZ21lbnQsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgYm9v
bCBzbWFydEluc2VydCA9IGZhbHNlLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNb3ZlU2VsZWN0aW9uQ29tbWFuZChmcmFnbWVu
dCwgcG9zaXRpb24sIHNtYXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBNb3ZlU2VsZWN0aW9uQ29tbWFuZChXVEZNb3ZlKGZyYWdtZW50KSwgcG9z
aXRpb24sIHNtYXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBNb3ZlU2VsZWN0aW9uQ29tbWFuZChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBjb25z
dCBQb3NpdGlvbiYsIGJvb2wgc21hcnRJbnNlcnQsIGJvb2wgc21hcnREZWxldGUpOworICAgIE1v
dmVTZWxlY3Rpb25Db21tYW5kKFJlZjxEb2N1bWVudEZyYWdtZW50PiYmLCBjb25zdCBQb3NpdGlv
biYsIGJvb2wgc21hcnRJbnNlcnQsIGJvb2wgc21hcnREZWxldGUpOwogCiAgICAgdm9pZCBkb0Fw
cGx5KCkgb3ZlcnJpZGU7CiAgICAgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgYm9vbCBzaG91bGREaXNwYXRjaElucHV0RXZlbnRzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbV9m
cmFnbWVudDsKKyAgICBSZWY8RG9jdW1lbnRGcmFnbWVudD4gbV9mcmFnbWVudDsKICAgICBQb3Np
dGlvbiBtX3Bvc2l0aW9uOwogICAgIGJvb2wgbV9zbWFydEluc2VydDsKICAgICBib29sIG1fc21h
cnREZWxldGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCmluZGV4IGU1MGM0ZWJmZTlkZGY2MjFmMjVlOWZlMDNmNGIyMzU4OWE1YzZm
NTcuLmE0ZTQ4NjM1ODg3NGY3MjM0ODhkYjkyZDI4M2M1OTNmOThmOTAyZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC04
OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0ludGVyY2hhbmdlTmV3bGluZUF0U3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQ7IH0KICAg
ICBib29sIGhhc0ludGVyY2hhbmdlTmV3bGluZUF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJ
bnRlcmNoYW5nZU5ld2xpbmVBdEVuZDsgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHJlbW92ZU5vZGUoTm9kZSYpOwogICAgIHZvaWQgcmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihOb2RlJik7CiAKIHByaXZhdGU6CkBAIC05OCw3ICs5
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05v
ZGVzVG9GcmFnbWVudChTdHlsZWRFbGVtZW50Kik7CiAgICAgdm9pZCByZW1vdmVJbnRlcmNoYW5n
ZU5vZGVzKE5vZGUqKTsKICAgICAKLSAgICB2b2lkIGluc2VydE5vZGVCZWZvcmUoUGFzc1JlZlB0
cjxOb2RlPiBub2RlLCBOb2RlKiByZWZOb2RlKTsKKyAgICB2b2lkIGluc2VydE5vZGVCZWZvcmUo
Tm9kZSYsIE5vZGUmIHJlZk5vZGUpOwogCiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1
cm4gKm1fZG9jdW1lbnQ7IH0KIApAQCAtMjI4LDM0ICsyMjgsMjggQEAgdm9pZCBSZXBsYWNlbWVu
dEZyYWdtZW50OjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUmIG5vZGUpCiB7CiAg
ICAgUmVmPE5vZGU+IHByb3RlY3RlZE5vZGUgPSBub2RlOwogICAgIHdoaWxlIChSZWZQdHI8Tm9k
ZT4gbiA9IG5vZGUuZmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUobik7Ci0gICAg
ICAgIGluc2VydE5vZGVCZWZvcmUoV1RGTW92ZShuKSwgJm5vZGUpOworICAgICAgICByZW1vdmVO
b2RlKCpuKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZSgqbiwgbm9kZSk7CiAgICAgfQotICAg
IHJlbW92ZU5vZGUoJm5vZGUpOworICAgIHJlbW92ZU5vZGUobm9kZSk7CiB9CiAKLXZvaWQgUmVw
bGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCit2b2lk
IFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBub2RlLT5ub25TaGFkb3dCb3VuZGFyeVBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBub2RlLm5vblNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpOwogICAgIGlmICgh
cGFyZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgcGFyZW50LT5yZW1vdmVDaGlsZCgq
bm9kZSk7CisgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlKTsKIH0KIAotdm9pZCBSZXBsYWNl
bWVudEZyYWdtZW50OjppbnNlcnROb2RlQmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgTm9k
ZSogcmVmTm9kZSkKK3ZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6aW5zZXJ0Tm9kZUJlZm9yZShO
b2RlJiBub2RlLCBOb2RlJiByZWZOb2RlKQogewotICAgIGlmICghbm9kZSB8fCAhcmVmTm9kZSkK
LSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBy
ZWZOb2RlLT5ub25TaGFkb3dCb3VuZGFyeVBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSByZWZOb2RlLm5vblNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpOwogICAgIGlm
ICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIHBhcmVudC0+aW5zZXJ0
QmVmb3JlKCpub2RlLCByZWZOb2RlKTsKKyAgICBwYXJlbnQtPmluc2VydEJlZm9yZShub2RlLCAm
cmVmTm9kZSk7CiB9CiAKIFJlZjxIVE1MRWxlbWVudD4gUmVwbGFjZW1lbnRGcmFnbWVudDo6aW5z
ZXJ0RnJhZ21lbnRGb3JUZXN0UmVuZGVyaW5nKE5vZGUqIHJvb3RFZGl0YWJsZUVsZW1lbnQpCkBA
IC0yNzksMTYgKzI3MywxNiBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlc3RvcmVBbmRS
ZW1vdmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KFN0eWxlZEVsZQogICAgICAgICBtX2Zy
YWdtZW50LT5hcHBlbmRDaGlsZCgqbm9kZSk7CiAgICAgfQogCi0gICAgcmVtb3ZlTm9kZShob2xk
ZXIpOworICAgIHJlbW92ZU5vZGUoKmhvbGRlcik7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFn
bWVudDo6cmVtb3ZlVW5yZW5kZXJlZE5vZGVzKE5vZGUqIGhvbGRlcikKIHsKLSAgICBWZWN0b3I8
UmVmUHRyPE5vZGU+PiB1bnJlbmRlcmVkOworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IHVucmVuZGVy
ZWQ7CiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBob2xkZXItPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsIGhvbGRlcikpIHsKICAgICAgICAgaWYg
KCFpc05vZGVSZW5kZXJlZCgqbm9kZSkgJiYgIWlzVGFibGVTdHJ1Y3R1cmVOb2RlKG5vZGUpKQot
ICAgICAgICAgICAgdW5yZW5kZXJlZC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB1bnJlbmRl
cmVkLmFwcGVuZCgqbm9kZSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBub2RlIDogdW5yZW5k
ZXJlZCkKQEAgLTMwNiw3ICszMDAsNyBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92
ZUludGVyY2hhbmdlTm9kZXMoTm9kZSogY29udGFpbmVyKQogICAgIHdoaWxlIChub2RlKSB7CiAg
ICAgICAgIGlmIChpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUobm9kZSkpIHsKICAgICAgICAgICAg
IG1faGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydCA9IHRydWU7Ci0gICAgICAgICAgICByZW1v
dmVOb2RlKG5vZGUpOworICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBub2RlID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwpA
QCAtMzE5LDcgKzMxMyw3IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJj
aGFuZ2VOb2RlcyhOb2RlKiBjb250YWluZXIpCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAg
aWYgKGlzSW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShub2RlKSkgewogICAgICAgICAgICAgbV9oYXNJ
bnRlcmNoYW5nZU5ld2xpbmVBdEVuZCA9IHRydWU7Ci0gICAgICAgICAgICByZW1vdmVOb2RlKG5v
ZGUpOworICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBub2RlID0gbm9kZS0+bGFzdENoaWxkKCk7CkBAIC02NDAsMTUg
KzYzNCwxNCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptYWtlSW5zZXJ0ZWRDb250
ZW50Um91bmRUcmlwcGFibGVXaXRoSFRNTFRyZWVCdWlsZAogICAgICAgICAgICAgaWYgKGF1dG8q
IHBhcmFncmFwaEVsZW1lbnQgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhwb3NpdGlvbkluUGFy
ZW50QmVmb3JlTm9kZShub2RlLmdldCgpKSwgcFRhZykpIHsKICAgICAgICAgICAgICAgICBhdXRv
KiBwYXJlbnQgPSBwYXJhZ3JhcGhFbGVtZW50LT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbW92ZU5vZGVPdXRPZkFuY2VzdG9yKG5vZGUsIHBhcmFncmFwaEVsZW1lbnQsIGlu
c2VydGVkTm9kZXMpOworICAgICAgICAgICAgICAgICAgICBtb3ZlTm9kZU91dE9mQW5jZXN0b3Io
Km5vZGUsICpwYXJhZ3JhcGhFbGVtZW50LCBpbnNlcnRlZE5vZGVzKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0hlYWRlckVsZW1lbnQobm9kZS5nZXQoKSkpIHsK
LSAgICAgICAgICAgIGF1dG8qIGhlYWRlckVsZW1lbnQgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9m
VHlwZShwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlLmdldCgpKSwgaXNIZWFkZXJFbGVt
ZW50KTsKLSAgICAgICAgICAgIGlmIChoZWFkZXJFbGVtZW50KSB7CisgICAgICAgICAgICBpZiAo
YXV0byogaGVhZGVyRWxlbWVudCA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKHBvc2l0aW9u
SW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBpc0hlYWRlckVsZW1lbnQpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGhlYWRlckVsZW1lbnQtPnBhcmVudE5vZGUoKSAmJiBoZWFkZXJFbGVt
ZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIG1vdmVOb2RlT3V0T2ZBbmNlc3Rvcihub2RlLCBoZWFkZXJFbGVtZW50LCBpbnNl
cnRlZE5vZGVzKTsKKyAgICAgICAgICAgICAgICAgICAgbW92ZU5vZGVPdXRPZkFuY2VzdG9yKCpu
b2RlLCAqaGVhZGVyRWxlbWVudCwgaW5zZXJ0ZWROb2Rlcyk7CiAgICAgICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBuZXdTcGFuRWxlbWVudCA9IHJl
cGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKGRvd25j
YXN0PEhUTUxFbGVtZW50Pigqbm9kZSkpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZE5v
ZGVzLmRpZFJlcGxhY2VOb2RlKG5vZGUuZ2V0KCksIG5ld1NwYW5FbGVtZW50KTsKQEAgLTY1OCwy
NyArNjUxLDI3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VJbnNlcnRlZENv
bnRlbnRSb3VuZFRyaXBwYWJsZVdpdGhIVE1MVHJlZUJ1aWxkCiAgICAgfQogfQogCi12b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjptb3ZlTm9kZU91dE9mQW5jZXN0b3IoUGFzc1JlZlB0cjxO
b2RlPiBwcnBOb2RlLCBQYXNzUmVmUHRyPE5vZGU+IHBycEFuY2VzdG9yLCBJbnNlcnRlZE5vZGVz
JiBpbnNlcnRlZE5vZGVzKQordm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVP
dXRPZkFuY2VzdG9yKE5vZGUmIG5vZGUsIE5vZGUmIGFuY2VzdG9yLCBJbnNlcnRlZE5vZGVzJiBp
bnNlcnRlZE5vZGVzKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcHJwTm9kZTsKLSAgICBS
ZWZQdHI8Tm9kZT4gYW5jZXN0b3IgPSBwcnBBbmNlc3RvcjsKKyAgICBSZWY8Tm9kZT4gcHJvdGVj
dGVkTm9kZSA9IG5vZGU7CisgICAgUmVmPE5vZGU+IHByb3RlY3RlZEFuY2VzdG9yID0gYW5jZXN0
b3I7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BdEVuZE9mTm9kZSA9IGxhc3RQb3Np
dGlvbkluT3JBZnRlck5vZGUobm9kZS5nZXQoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RQ
b3NpdGlvbkluUGFyYWdyYXBoID0gbGFzdFBvc2l0aW9uSW5Ob2RlKGFuY2VzdG9yLmdldCgpKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BdEVuZE9mTm9kZSA9IGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUoJm5vZGUpOworICAgIFZpc2libGVQb3NpdGlvbiBsYXN0UG9zaXRpb25JblBh
cmFncmFwaCA9IGxhc3RQb3NpdGlvbkluTm9kZSgmYW5jZXN0b3IpOwogICAgIGlmIChwb3NpdGlv
bkF0RW5kT2ZOb2RlID09IGxhc3RQb3NpdGlvbkluUGFyYWdyYXBoKSB7Ci0gICAgICAgIHJlbW92
ZU5vZGUoKm5vZGUpOwotICAgICAgICBpZiAoYW5jZXN0b3ItPm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGUucmVsZWFzZU5vbk51bGwoKSwgKmFuY2VzdG9y
LT5uZXh0U2libGluZygpKTsKKyAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKKyAgICAgICAgaWYg
KGFuY2VzdG9yLm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKFdU
Rk1vdmUocHJvdGVjdGVkTm9kZSksICphbmNlc3Rvci5uZXh0U2libGluZygpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXBwZW5kTm9kZShub2RlLnJlbGVhc2VOb25OdWxsKCksICphbmNl
c3Rvci0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZE5vZGUoV1RGTW92ZShwcm90
ZWN0ZWROb2RlKSwgKmFuY2VzdG9yLnBhcmVudE5vZGUoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgUmVmUHRyPE5vZGU+IG5vZGVUb1NwbGl0VG8gPSBzcGxpdFRyZWVUb05vZGUobm9kZS5nZXQo
KSwgYW5jZXN0b3IuZ2V0KCksIHRydWUpOwotICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKLSAg
ICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlLnJlbGVhc2VOb25OdWxsKCksICpub2RlVG9TcGxp
dFRvKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGVUb1NwbGl0VG8gPSBzcGxpdFRyZWVUb05v
ZGUobm9kZSwgYW5jZXN0b3IsIHRydWUpOworICAgICAgICByZW1vdmVOb2RlKG5vZGUpOworICAg
ICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUocHJvdGVjdGVkTm9kZSksICpub2RlVG9TcGxp
dFRvKTsKICAgICB9Ci0gICAgaWYgKCFhbmNlc3Rvci0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAg
IGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUoYW5jZXN0b3IuZ2V0KCkpOwotICAgICAgICBy
ZW1vdmVOb2RlKCphbmNlc3Rvcik7CisgICAgaWYgKCFhbmNlc3Rvci5maXJzdENoaWxkKCkpIHsK
KyAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZSgmYW5jZXN0b3IpOworICAgICAg
ICByZW1vdmVOb2RlKGFuY2VzdG9yKTsKICAgICB9CiB9CiAKQEAgLTczOSw3ICs3MzIsNyBAQCBz
dGF0aWMgdm9pZCByZW1vdmVIZWFkQ29udGVudHMoUmVwbGFjZW1lbnRGcmFnbWVudCYgZnJhZ21l
bnQpCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9SZW1vdmUpCi0gICAgICAg
IGZyYWdtZW50LnJlbW92ZU5vZGUoZWxlbWVudCk7CisgICAgICAgIGZyYWdtZW50LnJlbW92ZU5v
ZGUoKmVsZW1lbnQpOwogfQogCiAvLyBSZW1vdmUgc3R5bGUgc3BhbnMgYmVmb3JlIGluc2VydGlv
biBpZiB0aGV5IGFyZSB1bm5lY2Vzc2FyeS4gIEl0J3MgZmFzdGVyIGJlY2F1c2Ugd2UnbGwgCkBA
IC0xMDg1LDcgKzEwNzgsOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgICAgICAgICBOb2RlKiBzcGxpdFN0YXJ0ID0gaW5zZXJ0aW9uUG9zLmNvbXB1
dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIGlmICghc3BsaXRTdGFydCkK
ICAgICAgICAgICAgICAgICAgICAgc3BsaXRTdGFydCA9IGluc2VydGlvblBvcy5jb250YWluZXJO
b2RlKCk7Ci0gICAgICAgICAgICAgICAgbm9kZVRvU3BsaXRUbyA9IHNwbGl0VHJlZVRvTm9kZShz
cGxpdFN0YXJ0LCBub2RlVG9TcGxpdFRvLT5wYXJlbnROb2RlKCkpLmdldCgpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChzcGxpdFN0YXJ0KTsKKyAgICAgICAgICAgICAgICBub2RlVG9TcGxpdFRv
ID0gc3BsaXRUcmVlVG9Ob2RlKCpzcGxpdFN0YXJ0LCAqbm9kZVRvU3BsaXRUby0+cGFyZW50Tm9k
ZSgpKS5nZXQoKTsKICAgICAgICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBwb3NpdGlvbkluUGFy
ZW50QmVmb3JlTm9kZShub2RlVG9TcGxpdFRvLmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMTEwOCwxMiArMTEwMiwxMyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKICAgICBSZWZQdHI8Tm9kZT4gcmVmTm9kZSA9IGZyYWdtZW50LmZpcnN0Q2hp
bGQoKTsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJlZk5vZGUtPm5leHRTaWJsaW5nKCk7CiAg
ICAgCi0gICAgZnJhZ21lbnQucmVtb3ZlTm9kZShyZWZOb2RlKTsKKyAgICBpZiAocmVmTm9kZSkK
KyAgICAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZSgqcmVmTm9kZSk7CiAKICAgICBOb2RlKiBibG9j
a1N0YXJ0ID0gZW5jbG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICgoaXNMaXN0SFRNTEVsZW1lbnQocmVmTm9kZS5nZXQoKSkgfHwgKGlzTGVnYWN5QXBw
bGVTdHlsZVNwYW4ocmVmTm9kZS5nZXQoKSkgJiYgaXNMaXN0SFRNTEVsZW1lbnQocmVmTm9kZS0+
Zmlyc3RDaGlsZCgpKSkpCiAgICAgICAgICYmIGJsb2NrU3RhcnQgJiYgYmxvY2tTdGFydC0+cmVu
ZGVyZXIoKS0+aXNMaXN0SXRlbSgpKQotICAgICAgICByZWZOb2RlID0gaW5zZXJ0QXNMaXN0SXRl
bXMoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHJlZk5vZGUuZ2V0KCkpLCBibG9ja1N0YXJ0LCBpbnNl
cnRpb25Qb3MsIGluc2VydGVkTm9kZXMpOworICAgICAgICByZWZOb2RlID0gaW5zZXJ0QXNMaXN0
SXRlbXMoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpyZWZOb2RlKSwgYmxvY2tTdGFydCwgaW5zZXJ0
aW9uUG9zLCBpbnNlcnRlZE5vZGVzKTsKICAgICBlbHNlIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0
KCpyZWZOb2RlLCBpbnNlcnRpb25Qb3MpOwogICAgICAgICBpbnNlcnRlZE5vZGVzLnJlc3BvbmRU
b05vZGVJbnNlcnRpb24ocmVmTm9kZS5nZXQoKSk7CkBAIC0xMTI3LDcgKzExMjIsNyBAQCB2b2lk
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIAogICAgIHdoaWxlIChub2RlKSB7
CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAg
ICAgZnJhZ21lbnQucmVtb3ZlTm9kZShub2RlLmdldCgpKTsKKyAgICAgICAgZnJhZ21lbnQucmVt
b3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgIGluc2VydE5vZGVBZnRlcigqbm9kZSwgKnJlZk5vZGUp
OwogICAgICAgICBpbnNlcnRlZE5vZGVzLnJlc3BvbmRUb05vZGVJbnNlcnRpb24obm9kZS5nZXQo
KSk7CiAKQEAgLTE0NjAsMTQgKzE0NTUsMjggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlvbihQb3NpdGlvbiYgcG9zaXRpb24sIFAKICAg
ICB9CiB9CiAKK3N0YXRpYyBIVE1MRWxlbWVudCogc2luZ2xlQ2hpbGRMaXN0KEhUTUxFbGVtZW50
JiBlbGVtZW50KQoreworICAgIGlmICghZWxlbWVudC5oYXNPbmVDaGlsZCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIGNoaWxkID0gKmVsZW1lbnQuZmlyc3RDaGlsZCgp
OworICAgIHJldHVybiBpc0xpc3RIVE1MRWxlbWVudCgmY2hpbGQpID8gJmRvd25jYXN0PEhUTUxF
bGVtZW50PihjaGlsZCkgOiBudWxscHRyOworfQorCitzdGF0aWMgSFRNTEVsZW1lbnQmIGRlZXBl
c3RTaW5nbGVDaGlsZExpc3QoSFRNTEVsZW1lbnQmIHRvcExldmVsTGlzdCkKK3sKKyAgICBhdXRv
KiBsaXN0ID0gJnRvcExldmVsTGlzdDsKKyAgICB3aGlsZSAoYXV0byogY2hpbGRMaXN0ID0gc2lu
Z2xlQ2hpbGRMaXN0KCpsaXN0KSkKKyAgICAgICAgbGlzdCA9IGNoaWxkTGlzdDsKKyAgICByZXR1
cm4gKmxpc3Q7Cit9CisKIC8vIElmIHRoZSB1c2VyIGlzIGluc2VydGluZyBhIGxpc3QgaW50byBh
biBleGlzdGluZyBsaXN0LCBpbnN0ZWFkIG9mIG5lc3RpbmcgdGhlIGxpc3QsCiAvLyB3ZSBwdXQg
dGhlIGxpc3QgaXRlbXMgaW50byB0aGUgZXhpc3RpbmcgbGlzdC4KLU5vZGUqIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBw
cnBMaXN0RWxlbWVudCwgTm9kZSogaW5zZXJ0aW9uQmxvY2ssIGNvbnN0IFBvc2l0aW9uJiBpbnNl
cnRQb3MsIEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCitOb2RlKiBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMoSFRNTEVsZW1lbnQmIHBhc3NlZExpc3RFbGVt
ZW50LCBOb2RlKiBpbnNlcnRpb25CbG9jaywgY29uc3QgUG9zaXRpb24mIGluc2VydFBvcywgSW5z
ZXJ0ZWROb2RlcyYgaW5zZXJ0ZWROb2RlcykKIHsKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxp
c3RFbGVtZW50ID0gcHJwTGlzdEVsZW1lbnQ7Ci0KLSAgICB3aGlsZSAobGlzdEVsZW1lbnQtPmhh
c09uZUNoaWxkKCkgJiYgaXNMaXN0SFRNTEVsZW1lbnQobGlzdEVsZW1lbnQtPmZpcnN0Q2hpbGQo
KSkpCi0gICAgICAgIGxpc3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGxpc3RFbGVt
ZW50LT5maXJzdENoaWxkKCkpOworICAgIFJlZjxIVE1MRWxlbWVudD4gbGlzdEVsZW1lbnQgPSBk
ZWVwZXN0U2luZ2xlQ2hpbGRMaXN0KHBhc3NlZExpc3RFbGVtZW50KTsKIAogICAgIGJvb2wgaXNT
dGFydCA9IGlzU3RhcnRPZlBhcmFncmFwaChpbnNlcnRQb3MpOwogICAgIGJvb2wgaXNFbmQgPSBp
c0VuZE9mUGFyYWdyYXBoKGluc2VydFBvcyk7CkBAIC0xNDgwLDcgKzE0ODksNyBAQCBOb2RlKiBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4gcHJwTGlzdAogICAgICAgICBpbnQgdGV4dE5vZGVPZmZzZXQgPSBpbnNlcnRQb3Mu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0PigqaW5zZXJ0UG9z
LmRlcHJlY2F0ZWROb2RlKCkpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkKICAgICAgICAgICAgIHNw
bGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKmluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpKSwg
dGV4dE5vZGVPZmZzZXQpOwotICAgICAgICBzcGxpdFRyZWVUb05vZGUoaW5zZXJ0UG9zLmRlcHJl
Y2F0ZWROb2RlKCksIGxhc3ROb2RlLCB0cnVlKTsKKyAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKCpp
bnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSwgKmxhc3ROb2RlLCB0cnVlKTsKICAgICB9CiAKICAg
ICB3aGlsZSAoUmVmUHRyPE5vZGU+IGxpc3RJdGVtID0gbGlzdEVsZW1lbnQtPmZpcnN0Q2hpbGQo
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5oCmluZGV4IDNkMmY0MTllYzdhMTYyYmQ4ZjkyMWYwYzc5NzY4ZjllNTNmMTMwZjQuLjZkZmI5
MWUxYTBmMGVjYWJhZjJjMmY4OWE2YWZlODBkZjc2NTNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgKQEAgLTg1LDcgKzg1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fbGFzdE5vZGVJbnNlcnRlZDsKICAgICB9
OwogCi0gICAgTm9kZSogaW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4g
bGlzdEVsZW1lbnQsIE5vZGUqIGluc2VydGlvbk5vZGUsIGNvbnN0IFBvc2l0aW9uJiwgSW5zZXJ0
ZWROb2RlcyYpOworICAgIE5vZGUqIGluc2VydEFzTGlzdEl0ZW1zKEhUTUxFbGVtZW50JiBsaXN0
RWxlbWVudCwgTm9kZSogaW5zZXJ0aW9uTm9kZSwgY29uc3QgUG9zaXRpb24mLCBJbnNlcnRlZE5v
ZGVzJik7CiAKICAgICB2b2lkIHVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9kZSopOwogICAgIGJvb2wg
c2hvdWxkUmVtb3ZlRW5kQlIoTm9kZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwpAQCAtMTAw
LDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCByZW1vdmVSZWR1bmRhbnRTdHls
ZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydGVkTm9kZXMmKTsKICAgICB2b2lkIG1ha2VJ
bnNlcnRlZENvbnRlbnRSb3VuZFRyaXBwYWJsZVdpdGhIVE1MVHJlZUJ1aWxkZXIoSW5zZXJ0ZWRO
b2RlcyYpOwotICAgIHZvaWQgbW92ZU5vZGVPdXRPZkFuY2VzdG9yKFBhc3NSZWZQdHI8Tm9kZT4s
IFBhc3NSZWZQdHI8Tm9kZT4gYW5jZXN0b3IsIEluc2VydGVkTm9kZXMmKTsKKyAgICB2b2lkIG1v
dmVOb2RlT3V0T2ZBbmNlc3RvcihOb2RlJiwgTm9kZSYgYW5jZXN0b3IsIEluc2VydGVkTm9kZXMm
KTsKICAgICB2b2lkIGhhbmRsZVN0eWxlU3BhbnMoSW5zZXJ0ZWROb2RlcyYpOwogICAgIHZvaWQg
aGFuZGxlUGFzdGVBc1F1b3RhdGlvbk5vZGUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcAppbmRleCAwMTNkMTMxMDQxNTBlN2EyYzQwMzY4OGJmM2IwNWQ4Zjg4
YWJhMWE1Li44ZjNmNWViYjczYjU5Yzg2MDE1Y2U2NmZlZTc5Mzg0YzQyM2U5M2U2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC00MCw5ICs0MCw5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0
KFBhc3NSZWZQdHI8UmFuZ2U+IGNoZWNraW5nUmFuZ2UsIFBhc3NSZWZQdHI8UmFuZ2U+IHBhcmFn
cmFwaFJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ss
IFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHByb2Nlc3NUeXBlKQotICAgIDogbV9jaGVja2luZ1Jh
bmdlKGNoZWNraW5nUmFuZ2UpCi0gICAgLCBtX3BhcmFncmFwaFJhbmdlKHBhcmFncmFwaFJhbmdl
KQorU3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KFJlZjxSYW5nZT4mJiBjaGVj
a2luZ1JhbmdlLCBSZWY8UmFuZ2U+JiYgcGFyYWdyYXBoUmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4
dCwgVGV4dENoZWNraW5nVHlwZU1hc2sgbWFzaywgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgcHJv
Y2Vzc1R5cGUpCisgICAgOiBtX2NoZWNraW5nUmFuZ2UoV1RGTW92ZShjaGVja2luZ1JhbmdlKSkK
KyAgICAsIG1fcGFyYWdyYXBoUmFuZ2UoV1RGTW92ZShwYXJhZ3JhcGhSYW5nZSkpCiAgICAgLCBt
X3Jvb3RFZGl0YWJsZUVsZW1lbnQobV9jaGVja2luZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAsIG1fcmVxdWVzdERhdGEodW5yZXF1ZXN0ZWRUZXh0
Q2hlY2tpbmdTZXF1ZW5jZSwgdGV4dCwgbWFzaywgcHJvY2Vzc1R5cGUpCiB7CkBAIC01MiwxNyAr
NTIsMTMgQEAgU3BlbGxDaGVja1JlcXVlc3Q6On5TcGVsbENoZWNrUmVxdWVzdCgpCiB7CiB9CiAK
LS8vIHN0YXRpYwotUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBTcGVsbENoZWNrUmVxdWVzdDo6
Y3JlYXRlKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2luZ09wdGlvbnMsIFRleHRDaGVj
a2luZ1Byb2Nlc3NUeXBlIHByb2Nlc3NUeXBlLCBQYXNzUmVmUHRyPFJhbmdlPiBjaGVja2luZ1Jh
bmdlLCBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSkKK1JlZlB0cjxTcGVsbENoZWNr
UmVxdWVzdD4gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShUZXh0Q2hlY2tpbmdUeXBlTWFzayB0
ZXh0Q2hlY2tpbmdPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZSwg
UmVmPFJhbmdlPiYmIGNoZWNraW5nUmFuZ2UsIFJlZjxSYW5nZT4mJiBwYXJhZ3JhcGhSYW5nZSkK
IHsKLSAgICBBU1NFUlQoY2hlY2tpbmdSYW5nZSk7Ci0gICAgQVNTRVJUKHBhcmFncmFwaFJhbmdl
KTsKLQogICAgIFN0cmluZyB0ZXh0ID0gY2hlY2tpbmdSYW5nZS0+dGV4dCgpOwogICAgIGlmICgh
dGV4dC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTcGVsbENoZWNrUmVxdWVzdChjaGVja2luZ1JhbmdlLCBwYXJhZ3JhcGhSYW5n
ZSwgdGV4dCwgdGV4dENoZWNraW5nT3B0aW9ucywgcHJvY2Vzc1R5cGUpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTcGVsbENoZWNrUmVxdWVzdChXVEZNb3ZlKGNoZWNraW5nUmFuZ2UpLCBX
VEZNb3ZlKHBhcmFncmFwaFJhbmdlKSwgdGV4dCwgdGV4dENoZWNraW5nT3B0aW9ucywgcHJvY2Vz
c1R5cGUpKTsKIH0KIAogY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFNwZWxsQ2hlY2tS
ZXF1ZXN0OjpkYXRhKCkgY29uc3QKQEAgLTE0MSwyNCArMTM3LDI0IEBAIGJvb2wgU3BlbGxDaGVj
a2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lLnNl
dHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0KIAotYm9vbCBT
cGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UqIHJhbmdlKSBjb25zdAor
Ym9vbCBTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UmIHJhbmdlKSBj
b25zdAogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBpc0NoZWNrYWJsZShyYW5nZSkgJiYgaXNB
c3luY2hyb25vdXNFbmFibGVkKCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjppc0NoZWNrYWJs
ZShSYW5nZSogcmFuZ2UpIGNvbnN0Citib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUoUmFu
Z2UmIHJhbmdlKSBjb25zdAogewotICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5maXJzdE5vZGUo
KSB8fCAhcmFuZ2UtPmZpcnN0Tm9kZSgpLT5yZW5kZXJlcigpKQorICAgIGlmICghcmFuZ2UuZmly
c3ROb2RlKCkgfHwgIXJhbmdlLmZpcnN0Tm9kZSgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY29uc3QgTm9kZSYgbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigp
OworICAgIGNvbnN0IE5vZGUmIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOwogICAgIGlm
IChpczxFbGVtZW50Pihub2RlKSAmJiAhZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuaXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgU3BlbGxDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdGb3IoUGFzc1JlZlB0cjxT
cGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKK3ZvaWQgU3BlbGxDaGVja2VyOjpyZXF1ZXN0Q2hl
Y2tpbmdGb3IoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCiB7Ci0gICAgaWYgKCFy
ZXF1ZXN0IHx8ICFjYW5DaGVja0FzeW5jaHJvbm91c2x5KHJlcXVlc3QtPnBhcmFncmFwaFJhbmdl
KCkpKQorICAgIGlmICghY2FuQ2hlY2tBc3luY2hyb25vdXNseShyZXF1ZXN0LT5wYXJhZ3JhcGhS
YW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHJlcXVlc3QtPmRhdGEoKS5z
ZXF1ZW5jZSgpID09IHVucmVxdWVzdGVkVGV4dENoZWNraW5nU2VxdWVuY2UpOwpAQCAtMTY5LDM1
ICsxNjUsMzMgQEAgdm9pZCBTcGVsbENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ0ZvcihQYXNzUmVm
UHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0KQogICAgIHJlcXVlc3QtPnNldENoZWNrZXJB
bmRTZXF1ZW5jZSh0aGlzLCBzZXF1ZW5jZSk7CiAKICAgICBpZiAobV90aW1lclRvUHJvY2Vzc1F1
ZXVlZFJlcXVlc3QuaXNBY3RpdmUoKSB8fCBtX3Byb2Nlc3NpbmdSZXF1ZXN0KSB7Ci0gICAgICAg
IGVucXVldWVSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICBlbnF1ZXVlUmVxdWVzdChXVEZNb3Zl
KHJlcXVlc3QpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludm9rZVJlcXVlc3Qo
cmVxdWVzdCk7CisgICAgaW52b2tlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKIH0KIAotdm9p
ZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVz
dD4gcmVxdWVzdCkKK3ZvaWQgU3BlbGxDaGVja2VyOjppbnZva2VSZXF1ZXN0KFJlZjxTcGVsbENo
ZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogewogICAgIEFTU0VSVCghbV9wcm9jZXNzaW5nUmVxdWVz
dCk7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzc2lu
Z1JlcXVlc3QgPSByZXF1ZXN0OworICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSBXVEZNb3ZlKHJl
cXVlc3QpOwogICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9wcm9jZXNz
aW5nUmVxdWVzdCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKLXZvaWQg
U3BlbGxDaGVja2VyOjplbnF1ZXVlUmVxdWVzdChQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0
PiByZXF1ZXN0KQordm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFJlZjxTcGVsbENo
ZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogewotICAgIEFTU0VSVChyZXF1ZXN0KTsKLQogICAgIGZv
ciAoYXV0byYgcXVldWUgOiBtX3JlcXVlc3RRdWV1ZSkgewogICAgICAgICBpZiAocmVxdWVzdC0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHF1ZXVlLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBxdWV1ZSA9IHJlcXVlc3Q7CisgICAgICAg
IHF1ZXVlID0gV1RGTW92ZShyZXF1ZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fcmVxdWVzdFF1ZXVlLmFwcGVuZChyZXF1ZXN0KTsKKyAgICBtX3JlcXVlc3RRdWV1ZS5hcHBl
bmQoV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVjayhp
bnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQpA
QCAtMjA5LDcgKzIwMyw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVjayhpbnQgc2VxdWVu
Y2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbmRSZXBsYWNlRm9yKG1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJl
cGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFz
dFByb2Nlc3NlZFNlcXVlbmNlIDwgc2VxdWVuY2UpCiAgICAgICAgIG1fbGFzdFByb2Nlc3NlZFNl
cXVlbmNlID0gc2VxdWVuY2U7CkBAIC0yMjksNyArMjIzLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6
OmRpZENoZWNrU3VjY2VlZChpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQKICAgICAgICAgaWYgKHJlcXVlc3REYXRhLm1hc2soKSAmIFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyKQogICAgICAgICAgICAgbWFya2VycyB8PSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjsK
ICAgICAgICAgaWYgKG1hcmtlcnMpCi0gICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2Uo
KSwgbWFya2Vycyk7CisgICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKCZtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtl
cnMpOwogICAgIH0KICAgICBkaWRDaGVjayhzZXF1ZW5jZSwgcmVzdWx0cyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAppbmRleCAwNmFhYjA1Zjc0ZjgzZjQxYmY2N2EzMWVj
ZWJjOGZlYjc5ZDAwNTE5Li43MTgwYzMzNGIxMzk2OWZlZDZhOWEyNGNiNWI3N2JlN2I2OGZhYjE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKQEAgLTQ0LDExICs0NCwxMSBA
QCBjbGFzcyBTcGVsbENoZWNrZXI7CiAKIGNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0IDogcHVibGlj
IFRleHRDaGVja2luZ1JlcXVlc3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8U3BlbGxD
aGVja1JlcXVlc3Q+IGNyZWF0ZShUZXh0Q2hlY2tpbmdUeXBlTWFzaywgVGV4dENoZWNraW5nUHJv
Y2Vzc1R5cGUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNoZWNraW5nUmFuZ2UsIFBhc3NSZWZQdHI8UmFu
Z2U+IHBhcmFncmFwaFJhbmdlKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0
PiBjcmVhdGUoVGV4dENoZWNraW5nVHlwZU1hc2ssIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlLCBS
ZWY8UmFuZ2U+JiYgY2hlY2tpbmdSYW5nZSwgUmVmPFJhbmdlPiYmIHBhcmFncmFwaFJhbmdlKTsK
ICAgICB2aXJ0dWFsIH5TcGVsbENoZWNrUmVxdWVzdCgpOwogCi0gICAgUmFuZ2UqIGNoZWNraW5n
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2NoZWNraW5nUmFuZ2UuZ2V0KCk7IH0KLSAgICBSYW5n
ZSogcGFyYWdyYXBoUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhcmFncmFwaFJhbmdlLmdldCgp
OyB9CisgICAgUmFuZ2UmIGNoZWNraW5nUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2NoZWNraW5n
UmFuZ2UuZ2V0KCk7IH0KKyAgICBSYW5nZSYgcGFyYWdyYXBoUmFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFncmFwaFJhbmdlLmdldCgpOyB9CiAgICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVkaXRhYmxlRWxlbWVudC5nZXQoKTsgfQogCiAg
ICAgdm9pZCBzZXRDaGVja2VyQW5kU2VxdWVuY2UoU3BlbGxDaGVja2VyKiwgaW50IHNlcXVlbmNl
KTsKQEAgLTYwLDExICs2MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDYW5jZWwoKSBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKLSAgICBTcGVsbENoZWNrUmVxdWVzdChQYXNzUmVmUHRyPFJhbmdl
PiBjaGVja2luZ1JhbmdlLCBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSwgY29uc3Qg
U3RyaW5nJiwgVGV4dENoZWNraW5nVHlwZU1hc2ssIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlKTsK
KyAgICBTcGVsbENoZWNrUmVxdWVzdChSZWY8UmFuZ2U+JiYgY2hlY2tpbmdSYW5nZSwgUmVmPFJh
bmdlPiYmIHBhcmFncmFwaFJhbmdlLCBjb25zdCBTdHJpbmcmLCBUZXh0Q2hlY2tpbmdUeXBlTWFz
aywgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUpOwogCiAgICAgU3BlbGxDaGVja2VyKiBtX2NoZWNr
ZXIgeyBudWxscHRyIH07Ci0gICAgUmVmUHRyPFJhbmdlPiBtX2NoZWNraW5nUmFuZ2U7Ci0gICAg
UmVmUHRyPFJhbmdlPiBtX3BhcmFncmFwaFJhbmdlOworICAgIFJlZjxSYW5nZT4gbV9jaGVja2lu
Z1JhbmdlOworICAgIFJlZjxSYW5nZT4gbV9wYXJhZ3JhcGhSYW5nZTsKICAgICBSZWZQdHI8RWxl
bWVudD4gbV9yb290RWRpdGFibGVFbGVtZW50OwogICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRh
IG1fcmVxdWVzdERhdGE7CiB9OwpAQCAtNzgsOSArNzgsOSBAQCBwdWJsaWM6CiAgICAgflNwZWxs
Q2hlY2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKLSAg
ICBib29sIGlzQ2hlY2thYmxlKFJhbmdlKikgY29uc3Q7CisgICAgYm9vbCBpc0NoZWNrYWJsZShS
YW5nZSYpIGNvbnN0OwogCi0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdGb3IoUGFzc1JlZlB0cjxT
cGVsbENoZWNrUmVxdWVzdD4pOworICAgIHZvaWQgcmVxdWVzdENoZWNraW5nRm9yKFJlZjxTcGVs
bENoZWNrUmVxdWVzdD4mJik7CiAKICAgICBpbnQgbGFzdFJlcXVlc3RTZXF1ZW5jZSgpIGNvbnN0
CiAgICAgewpAQCAtOTMsMTMgKzkzLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+PiBSZXF1ZXN0UXVldWU7
CisgICAgdHlwZWRlZiBEZXF1ZTxSZWY8U3BlbGxDaGVja1JlcXVlc3Q+PiBSZXF1ZXN0UXVldWU7
CiAKLSAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UqKSBjb25zdDsKKyAgICBi
b29sIGNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UmKSBjb25zdDsKICAgICBUZXh0Q2hlY2tl
ckNsaWVudCogY2xpZW50KCkgY29uc3Q7CiAgICAgdm9pZCB0aW1lckZpcmVkVG9Qcm9jZXNzUXVl
dWVkUmVxdWVzdCgpOwotICAgIHZvaWQgaW52b2tlUmVxdWVzdChQYXNzUmVmUHRyPFNwZWxsQ2hl
Y2tSZXF1ZXN0Pik7Ci0gICAgdm9pZCBlbnF1ZXVlUmVxdWVzdChQYXNzUmVmUHRyPFNwZWxsQ2hl
Y2tSZXF1ZXN0Pik7CisgICAgdm9pZCBpbnZva2VSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVz
dD4mJik7CisgICAgdm9pZCBlbnF1ZXVlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYp
OwogICAgIHZvaWQgZGlkQ2hlY2tTdWNjZWVkKGludCBzZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4mKTsKICAgICB2b2lkIGRpZENoZWNrQ2FuY2VsKGludCBzZXF1ZW5j
ZSk7CiAgICAgdm9pZCBkaWRDaGVjayhpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5jcHAKaW5kZXggN2JkMDIxN2U5NTdjZDM3YjZlNzk2NGFkNmU2YzA4MzM3M2M4MWM5Mi4u
NzU2ZTBkM2ViODlhMWIzYzVhMTA5NThiYjY2ZjJhYmI1N2U0NjdhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMTEwLDI0ICsxMTAsMTYg
QEAgc3RhdGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50
LCBTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjwKIAogI2VuZGlmCiAKLXN0YXRpYyBSZWY8UmFuZ2U+
IGV4cGFuZFRvUGFyYWdyYXBoQm91bmRhcnkoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCitzdGF0
aWMgUmVmPFJhbmdlPiBleHBhbmRUb1BhcmFncmFwaEJvdW5kYXJ5KFJhbmdlJiByYW5nZSkKIHsK
LSAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAg
ICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChyYW5nZS0+
c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRP
ZlBhcmFncmFwaChyYW5nZS0+ZW5kUG9zaXRpb24oKSkpOworICAgIFJlZjxSYW5nZT4gcGFyYWdy
YXBoUmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7CisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFu
Z2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSk7CisgICAg
c2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChyYW5nZS5lbmRQb3Np
dGlvbigpKSk7CiAgICAgcmV0dXJuIHBhcmFncmFwaFJhbmdlOwogfQogCi1UZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OlRleHRDaGVja2luZ1BhcmFncmFwaChQYXNzUmVmUHRyPFJhbmdlPiBjaGVja2lu
Z1JhbmdlKQotICAgIDogbV9jaGVja2luZ1JhbmdlKGNoZWNraW5nUmFuZ2UpCi0gICAgLCBtX2No
ZWNraW5nU3RhcnQoLTEpCi0gICAgLCBtX2NoZWNraW5nRW5kKC0xKQotICAgICwgbV9jaGVja2lu
Z0xlbmd0aCgtMSkKLXsKLX0KLQotVGV4dENoZWNraW5nUGFyYWdyYXBoOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGgoUGFzc1JlZlB0cjxSYW5nZT4gY2hlY2tpbmdSYW5nZSwgUGFzc1JlZlB0cjxSYW5n
ZT4gcGFyYWdyYXBoUmFuZ2UpCi0gICAgOiBtX2NoZWNraW5nUmFuZ2UoY2hlY2tpbmdSYW5nZSkK
K1RleHRDaGVja2luZ1BhcmFncmFwaDo6VGV4dENoZWNraW5nUGFyYWdyYXBoKFJlZjxSYW5nZT4m
JiBjaGVja2luZ1JhbmdlLCBSYW5nZSogcGFyYWdyYXBoUmFuZ2UpCisgICAgOiBtX2NoZWNraW5n
UmFuZ2UoV1RGTW92ZShjaGVja2luZ1JhbmdlKSkKICAgICAsIG1fcGFyYWdyYXBoUmFuZ2UocGFy
YWdyYXBoUmFuZ2UpCiAgICAgLCBtX2NoZWNraW5nU3RhcnQoLTEpCiAgICAgLCBtX2NoZWNraW5n
RW5kKC0xKQpAQCAtMTM1LDEzICsxMjcsOCBAQCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OlRleHRD
aGVja2luZ1BhcmFncmFwaChQYXNzUmVmUHRyPFJhbmdlPiBjaGVja2luZ1JhbmdlLCBQYQogewog
fQogCi1UZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6On5UZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKQotewot
fQotCiB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6ZXhwYW5kUmFuZ2VUb05leHRFbmQoKQog
ewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIHNldEVuZCgmcGFyYWdyYXBoUmFu
Z2UoKSwgZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2Uo
KS5zdGFydFBvc2l0aW9uKCkpKSk7CiAgICAgaW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVz
KCk7CiB9CkBAIC0xNTUsMTMgKzE0MiwxMSBAQCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6
aW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCkKIAogaW50IFRleHRDaGVja2luZ1BhcmFn
cmFwaDo6cmFuZ2VMZW5ndGgoKSBjb25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2Up
OwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZwYXJhZ3JhcGhSYW5nZSgp
KTsKIH0KIAogUmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBj
b25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICghbV9wYXJhZ3Jh
cGhSYW5nZSkKICAgICAgICAgbV9wYXJhZ3JhcGhSYW5nZSA9IGV4cGFuZFRvUGFyYWdyYXBoQm91
bmRhcnkobV9jaGVja2luZ1JhbmdlKTsKICAgICByZXR1cm4gKm1fcGFyYWdyYXBoUmFuZ2U7CkBA
IC0xNjksMTMgKzE1NCwxMSBAQCBSYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpwYXJhZ3Jh
cGhSYW5nZSgpIGNvbnN0CiAKIFJlZjxSYW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJy
YW5nZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoJnBhcmFncmFwaFJhbmdlKCksIGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyQ291bnQp
OworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlKCksIGNo
YXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogfQogCiBFeGNlcHRpb25PcjxpbnQ+IFRl
eHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBj
b25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICghcG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07
CiAKQEAgLTE5NSw3ICsxNzgsNiBAQCBib29sIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNFbXB0
eSgpIGNvbnN0CiAKIFJhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldEFzUmFuZ2Uo
KSBjb25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICghbV9vZmZz
ZXRBc1JhbmdlKQogICAgICAgICBtX29mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZSgp
LnN0YXJ0UG9zaXRpb24oKSwgbV9jaGVja2luZ1JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwogCkBA
IC0yMDQsNyArMTg2LDYgQEAgUmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0QXNS
YW5nZSgpIGNvbnN0CiAKIGNvbnN0IFN0cmluZyYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsKICAgICBpZiAobV90ZXh0
LmlzRW1wdHkoKSkKICAgICAgICAgbV90ZXh0ID0gcGxhaW5UZXh0KCZwYXJhZ3JhcGhSYW5nZSgp
KTsKICAgICByZXR1cm4gbV90ZXh0OyAKQEAgLTIxMiw3ICsxOTMsNiBAQCBjb25zdCBTdHJpbmcm
IFRleHRDaGVja2luZ1BhcmFncmFwaDo6dGV4dCgpIGNvbnN0CiAKIGludCBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQoKSBjb25zdAogewotICAgIEFTU0VSVChtX2NoZWNraW5n
UmFuZ2UpOwogICAgIGlmIChtX2NoZWNraW5nU3RhcnQgPT0gLTEpCiAgICAgICAgIG1fY2hlY2tp
bmdTdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoJm9mZnNldEFzUmFuZ2UoKSk7CiAg
ICAgcmV0dXJuIG1fY2hlY2tpbmdTdGFydDsKQEAgLTIyMCwyNiArMjAwLDIyIEBAIGludCBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQoKSBjb25zdAogCiBpbnQgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fY2hlY2tp
bmdSYW5nZSk7CiAgICAgaWYgKG1fY2hlY2tpbmdFbmQgPT0gLTEpCi0gICAgICAgIG1fY2hlY2tp
bmdFbmQgPSBjaGVja2luZ1N0YXJ0KCkgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hl
Y2tpbmdSYW5nZS5nZXQoKSk7CisgICAgICAgIG1fY2hlY2tpbmdFbmQgPSBjaGVja2luZ1N0YXJ0
KCkgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5nZS5wdHIoKSk7CiAg
ICAgcmV0dXJuIG1fY2hlY2tpbmdFbmQ7CiB9CiAKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6
OmNoZWNraW5nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsK
ICAgICBpZiAoLTEgPT0gbV9jaGVja2luZ0xlbmd0aCkKLSAgICAgICAgbV9jaGVja2luZ0xlbmd0
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobV9jaGVja2luZ1JhbmdlLmdldCgpKTsKKyAg
ICAgICAgbV9jaGVja2luZ0xlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobV9jaGVj
a2luZ1JhbmdlLnB0cigpKTsKICAgICByZXR1cm4gbV9jaGVja2luZ0xlbmd0aDsKIH0KIAotVGV4
dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50KiBjbGllbnQs
IFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQorVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tp
bmdIZWxwZXIoRWRpdG9yQ2xpZW50JiBjbGllbnQsIFJhbmdlJiByYW5nZSkKICAgICA6IG1fY2xp
ZW50KGNsaWVudCkKICAgICAsIG1fcmFuZ2UocmFuZ2UpCiB7Ci0gICAgQVNTRVJUX0FSRyhtX2Ns
aWVudCwgbV9jbGllbnQpOwotICAgIEFTU0VSVF9BUkcobV9yYW5nZSwgbV9yYW5nZSk7CiB9CiAK
IFRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBlcigpCkBAIC0yNTMsNyArMjI5
LDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmcoaW50
JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib28KICAgICBTdHJpbmcgZmlyc3RNaXNzcGVsbGlu
ZzsKICAgICBpbnQgY3VycmVudENodW5rT2Zmc2V0ID0gMDsKIAotICAgIGZvciAoV29yZEF3YXJl
SXRlcmF0b3IgaXQoKm1fcmFuZ2UpOyAhaXQuYXRFbmQoKTsgY3VycmVudENodW5rT2Zmc2V0ICs9
IGl0LnRleHQoKS5sZW5ndGgoKSwgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChXb3JkQXdhcmVJ
dGVyYXRvciBpdChtX3JhbmdlKTsgIWl0LmF0RW5kKCk7IGN1cnJlbnRDaHVua09mZnNldCArPSBp
dC50ZXh0KCkubGVuZ3RoKCksIGl0LmFkdmFuY2UoKSkgewogICAgICAgICBTdHJpbmdWaWV3IHRl
eHQgPSBpdC50ZXh0KCk7CiAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
IApAQCAtMjYzLDcgKzIzOSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vCiAKICAgICAgICAg
aW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKICAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVu
Z3RoID0gMDsKLSAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyh0ZXh0LCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsK
KyAgICAgICAgbV9jbGllbnQudGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRl
eHQsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogCiAgICAgICAg
IC8vIDU0OTA2Mjcgc2hvd3MgdGhhdCB0aGVyZSB3YXMgc29tZSBjb2RlIHBhdGggaGVyZSB3aGVy
ZSB0aGUgU3RyaW5nIGNvbnN0cnVjdG9yIGJlbG93IGNyYXNoZXMuCiAgICAgICAgIC8vIFdlIGRv
bid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1dCBjYXVzZWQgdGhp
cywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaApAQCAtMjc3LDcgKzI1Myw3IEBAIFN0cmluZyBU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVs
bGluZ09mZnNldCwgYm9vCiAKICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCAm
JiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IHRleHRMZW5n
dGggJiYgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0
aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCkgewogICAgICAgICAgICAgLy8g
Q29tcHV0ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQKLSAgICAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZS5nZXQo
KSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdM
ZW5ndGgpOworICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiAKICAgICAgICAgICAgIC8vIFJlbWVt
YmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3NwZWxsaW5nIGFuZCBpdHMgb2Zmc2V0LgogICAgICAg
ICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7CkBAIC0zNTUsNyArMzMxLDcgQEAgU3RyaW5n
IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9v
bCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJl
bnRTZWxlY3Rpb247CiAgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHBhcmFncmFw
aFJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAg
ICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBh
cmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7
CisgICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVj
a2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNl
bGVjdGlvbik7CiAKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZyAmJiByZXN1bHQubG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJl
c3VsdC5sb2NhdGlvbiArIHJlc3VsdC5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCkgewpAQCAt
NDUxLDcgKzQyNyw3IEBAIGludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJE
ZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChtYXJrQWxsKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5n
ZS5nZXQoKSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwt
PmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJh
ZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgYmFkR3JhbW1h
clBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwt
Pmxlbmd0aCk7CiAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTQ3OSwxNCArNDU1LDE0IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxw
ZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwK
ICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFn
cmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAg
ICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRo
ZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAg
ICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4K
LSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UpOworICAgIFRleHRD
aGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZS5jb3B5UmVmKCkpOwogICAgIAogICAg
IC8vIFN0YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAg
cGFzdCByZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwg
c2VhcmNoIHJhbmdlLgogICAgIGZvciAoaW50IHN0YXJ0T2Zmc2V0ID0gMDsgc3RhcnRPZmZzZXQg
PCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQoKTsgKSB7CiAgICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0
YWlsPiBncmFtbWFyRGV0YWlsczsKICAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlv
biA9IC0xOwogICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7Ci0gICAgICAg
IG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3
KHBhcmFncmFwaC50ZXh0KCkpLnN1YnN0cmluZyhzdGFydE9mZnNldCksIGdyYW1tYXJEZXRhaWxz
LCAmYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCAmYmFkR3JhbW1hclBocmFzZUxlbmd0aCk7Cisg
ICAgICAgIG1fY2xpZW50LnRleHRDaGVja2VyKCktPmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
Z1ZpZXcocGFyYWdyYXBoLnRleHQoKSkuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KSwgZ3JhbW1hckRl
dGFpbHMsICZiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3Ro
KTsKICAgICAgICAgCiAgICAgICAgIGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkgewogICAg
ICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7CkBAIC01MjQs
MTAgKzUwMCw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1t
YXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwKIAogYm9vbCBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxh
cHNlZCgpKQorICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBwYXNzZWQgcmFuZ2Ug
ZXhhY3RseSBjb3JyZXNwb25kcyB0byBhIGJhZCBncmFtbWFyIGRldGFpbCByYW5nZS4gVGhpcyBp
cyBhbmFsb2dvdXMKQEAgLTU1NCwxNCArNTI3LDE0IEBAIGJvb2wgVGV4dENoZWNraW5nSGVscGVy
Ojppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQgb2YgcmFuZ2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1t
YXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBvZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0YWls
Lmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2UuZ2V0KCkpKQorICAg
IGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1f
cmFuZ2UucHRyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVXBkYXRl
IHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMgZXJyb3IgKHdoZXRoZXIg
b3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgogICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05TU3BlbGxDaGVja2VyIGln
bm9yZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsKICAgICAvLyBjb3JyZWN0bHk7
IHRoYXQgY2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNwZWxs
aW5nIHBhbmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGluZwogICAgIC8vIG9yIGEgZ3JhbW1h
ciBlcnJvci4KLSAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOworICAgIG1fY2xpZW50LnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWls
KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTU3NywxMSArNTUwLDExIEBAIFZlY3Rv
cjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3Jh
bW1hdGljYWxSYW5nZShib29sCiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwogICAgIHVuZ3JhbW1h
dGljYWwgPSBmYWxzZTsKICAgICAKLSAgICBpZiAoIW1fY2xpZW50IHx8ICFtX3JhbmdlIHx8IG1f
cmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAg
ICAgcmV0dXJuIGd1ZXNzZXM7CiAKICAgICAvLyBFeHBhbmQgdGhlIHJhbmdlIHRvIGVuY29tcGFz
cyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2gg
Y29udGV4dC4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UpOwor
ICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZS5jb3B5UmVmKCkpOwog
ICAgIGlmIChwYXJhZ3JhcGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIApA
QCAtNTkwLDE0ICs1NjMsMTQgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpn
dWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBWaXNpYmxl
U2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KCptX2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBl
cywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Km1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0KCksIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCiAgICAgZm9yIChhdXRvJiByZXN1bHQgOiBy
ZXN1bHRzKSB7CiAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC5sb2NhdGlvbiwg
cmVzdWx0Lmxlbmd0aCkpIHsKICAgICAgICAgICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBh
cmFncmFwaC5jaGVja2luZ1N1YnN0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxs
ZWRXb3JkLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5n
ZXRHdWVzc2VzRm9yV29yZChtaXNzcGVsbGVkV29yZCwgU3RyaW5nKCksIGN1cnJlbnRTZWxlY3Rp
b24sIGd1ZXNzZXMpOwotICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworICAgICAgICAgICAgbV9jbGllbnQudGV4
dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIFN0cmluZygpLCBj
dXJyZW50U2VsZWN0aW9uLCBndWVzc2VzKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOwogICAgICAgICAgICAg
bWlzc3BlbGxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKICAgICAgICAg
fQpAQCAtNjE2LDcgKzU4OSw3IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBndWVzcyA6IGRldGFpbC5ndWVzc2VzKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICBt
X2NsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJh
c2UsIGRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBkZXRhaWwpOwogICAgICAgICAg
ICAgICAgICAgICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjQ3LDcgKzYyMCw3IEBAIHZvaWQg
VGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCiAKIGJvb2wgVGV4dENoZWNr
aW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9yYW5nZSAmJiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9CiAK
IHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3Ry
aW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oCmluZGV4IDhmZTIwMTYyYzdkMjJhOTFkMDZlMTM3MTM3YmVkMmJkOTUxYmViOGYuLjZiMGY0
M2ZjZjc0YWVhZTcxNTZjYTkyNDk4NjNhZDcyYzA1NGRkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApAQCAtMzMsOSArMzMsNyBAQCBzdHJ1Y3QgVGV4
dENoZWNraW5nUmVzdWx0OwogCiBjbGFzcyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggewogcHVibGlj
OgotICAgIGV4cGxpY2l0IFRleHRDaGVja2luZ1BhcmFncmFwaChQYXNzUmVmUHRyPFJhbmdlPiBj
aGVja2luZ1JhbmdlKTsKLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoUGFzc1JlZlB0cjxSYW5n
ZT4gY2hlY2tpbmdSYW5nZSwgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UpOwotICAg
IH5UZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKTsKKyAgICBleHBsaWNpdCBUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGgoUmVmPFJhbmdlPiYmIGNoZWNraW5nUmFuZ2UsIFJhbmdlKiBwYXJhZ3JhcGhSYW5nZSA9
IG51bGxwdHIpOwogCiAgICAgaW50IHJhbmdlTGVuZ3RoKCkgY29uc3Q7CiAgICAgUmVmPFJhbmdl
PiBzdWJyYW5nZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpIGNvbnN0
OwpAQCAtNjYsNyArNjQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZVBhcmFncmFw
aFJhbmdlVmFsdWVzKCk7CiAgICAgUmFuZ2UmIG9mZnNldEFzUmFuZ2UoKSBjb25zdDsKIAotICAg
IFJlZlB0cjxSYW5nZT4gbV9jaGVja2luZ1JhbmdlOworICAgIFJlZjxSYW5nZT4gbV9jaGVja2lu
Z1JhbmdlOwogICAgIG11dGFibGUgUmVmUHRyPFJhbmdlPiBtX3BhcmFncmFwaFJhbmdlOwogICAg
IG11dGFibGUgUmVmUHRyPFJhbmdlPiBtX29mZnNldEFzUmFuZ2U7CiAgICAgbXV0YWJsZSBTdHJp
bmcgbV90ZXh0OwpAQCAtNzgsNyArNzYsNyBAQCBwcml2YXRlOgogY2xhc3MgVGV4dENoZWNraW5n
SGVscGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0Q2hlY2tpbmdIZWxwZXIpOwog
cHVibGljOgotICAgIFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQqLCBQYXNzUmVmUHRy
PFJhbmdlPik7CisgICAgVGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYsIFJhbmdlJik7
CiAgICAgflRleHRDaGVja2luZ0hlbHBlcigpOwogCiAgICAgU3RyaW5nIGZpbmRGaXJzdE1pc3Nw
ZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8
UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwpAQCAtOTIsOCArOTAsOCBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxS
YW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0
aWNhbCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKLSAg
ICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7CisgICAgRWRpdG9yQ2xpZW50JiBtX2NsaWVudDsKKyAg
ICBSZWY8UmFuZ2U+IG1fcmFuZ2U7CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSBjb25zdDsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBlYzQ3MmViNjk1OWE5MGM4MmRlNTBmMWM4N2M2Y2Iw
NGZjNWNjODE3Li4xOTQwNDEyYWVjMWFhNDRmZmE0Yzk5Yjg4NzJkYjQ5MDMwZGNjYmRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0yNDkzLDEwICsyNDkzLDEw
IEBAIGludCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvbnN0IFJhbmdlKiByYW5nZSwgYm9v
bCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24pCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotUmVm
PFJhbmdlPiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKFJhbmdlKiBlbnRpcmVSYW5nZSwgaW50IGNo
YXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KQorUmVmPFJhbmdlPiBUZXh0SXRlcmF0
b3I6OnN1YnJhbmdlKFJhbmdlJiBlbnRpcmVSYW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50
IGNoYXJhY3RlckNvdW50KQogewotICAgIENoYXJhY3Rlckl0ZXJhdG9yIGVudGlyZVJhbmdlSXRl
cmF0b3IoKmVudGlyZVJhbmdlKTsKLSAgICByZXR1cm4gY2hhcmFjdGVyU3VicmFuZ2UoZW50aXJl
UmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgZW50aXJlUmFuZ2VJdGVyYXRvciwgY2hhcmFjdGVyT2Zm
c2V0LCBjaGFyYWN0ZXJDb3VudCk7CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgZW50aXJlUmFuZ2VJ
dGVyYXRvcihlbnRpcmVSYW5nZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlclN1YnJhbmdlKGVudGly
ZVJhbmdlLm93bmVyRG9jdW1lbnQoKSwgZW50aXJlUmFuZ2VJdGVyYXRvciwgY2hhcmFjdGVyT2Zm
c2V0LCBjaGFyYWN0ZXJDb3VudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0luc2lkZVJl
cGxhY2VkRWxlbWVudChUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmgKaW5kZXggYzBkMDg1MWY0MDhiZDZhYmQyMGYwNmQ4YWI1MjcxMWNiNjM2
Njk0My4uNDA2NDYxMmQ1OWZlMmQxZjA0NmNlNTJhYWQ1Y2E5NTc1YjQ1YWY4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpbnQgcmFuZ2VMZW5ndGgoY29uc3QgUmFuZ2UqLCBi
b29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFp
bmVyTm9kZSogc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIGJvb2wg
c3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2RlKiBzY29wZSwgY29u
c3QgUmFuZ2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gc3VicmFuZ2UoUmFuZ2UqIGVudGlyZVJhbmdlLCBp
bnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWY8UmFuZ2U+IHN1YnJhbmdlKFJhbmdlJiBlbnRpcmVSYW5nZSwgaW50IGNo
YXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IGV4aXROb2RlKE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
CmluZGV4IDdjMDE0ZTVhZjY0ZmM4YjYwZTQ0ZjlkZDcyMDc1MTQyYWRlZmM1NjguLjdiZDk1Y2Mw
OGIzNTI2YmRmMzczYTRkZmM0Zjc2NDdiMDA5NTc4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNTEwLDE0ICs1MTAsMTQgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGVG
b3JBZGRlZFQKICAgICB1cGRhdGVQcmVzZXJ2ZXNUeXBpbmdTdHlsZShjb21tYW5kVHlwZUZvckFk
ZGVkVHlwaW5nKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGZyYW1lLmVkaXRvcigpLmFw
cGxpZWRFZGl0aW5nKHRoaXMpOworICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0
aGlzKTsKICAgICAvLyBTaW5jZSB0aGUgc3BlbGxjaGVja2luZyBjb2RlIG1heSBhbHNvIHBlcmZv
cm0gY29ycmVjdGlvbnMgYW5kIG90aGVyIHJlcGxhY2VtZW50cywgaXQgc2hvdWxkIGhhcHBlbiBh
ZnRlciB0aGUgdHlwaW5nIGNoYW5nZXMuCiAgICAgaWYgKCFtX3Nob3VsZFByZXZlbnRTcGVsbENo
ZWNraW5nKQogICAgICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVG
b3JBZGRlZFR5cGluZyk7CiAjZWxzZQogICAgIC8vIFRoZSBvbGQgc3BlbGxjaGVja2luZyBjb2Rl
IHJlcXVpcmVzIHRoYXQgY2hlY2tpbmcgYmUgZG9uZSBmaXJzdCwgdG8gcHJldmVudCBpc3N1ZXMg
bGlrZSB0aGF0IGluIDY4NjQwNzIsIHdoZXJlIDxkb2Vzbid0PiBpcyBtYXJrZWQgYXMgbWlzc3Bl
bGxlZC4KICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRl
ZFR5cGluZyk7Ci0gICAgZnJhbWUuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcodGhpcyk7CisgICAg
ZnJhbWUuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogI2VuZGlmCiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRleCBhYzYxZjc2
M2Y4MjAyZjMxMmUxZTJjZmRmYmExZjY0MTdhZTJiZWQzLi41ODA5MWNiZDJiMzI3ZTZkMDFiYWU1
ZjNhYTc5ZTZiYzg2OTg4NDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rp
b25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24K
ICAgICAgICAgQ0ZSYW5nZSByZXN1bHRSYW5nZUluQ29udGV4dCA9IEREUmVzdWx0R2V0UmFuZ2Uo
cmVzdWx0KTsKICAgICAgICAgaWYgKGhpdExvY2F0aW9uID49IHJlc3VsdFJhbmdlSW5Db250ZXh0
LmxvY2F0aW9uICYmIChoaXRMb2NhdGlvbiAtIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9u
KSA8IHJlc3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCkgewogICAgICAgICAgICAgbWFpblJlc3Vs
dCA9IHJlc3VsdDsKLSAgICAgICAgICAgIG1haW5SZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
c3VicmFuZ2UoY29udGV4dFJhbmdlLmdldCgpLCByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlv
biwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubGVuZ3RoKTsKKyAgICAgICAgICAgIG1haW5SZXN1bHRS
YW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0UmFuZ2VJ
bkNvbnRleHQubG9jYXRpb24sIHJlc3VsdFJhbmdlSW5Db250ZXh0Lmxlbmd0aCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTQ5Myw3ICs0OTMsNyBAQCBOU0FycmF5
ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250
ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IGl0
ZXJhdG9yLnJhbmdlKCk7CiAgICAgICAgIENGSW5kZXggZnJhZ21lbnRJbmRleCA9IHF1ZXJ5UmFu
Z2Uuc3RhcnQucXVlcnlJbmRleDsKICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggPT0gcXVlcnlS
YW5nZS5lbmQucXVlcnlJbmRleCkKLSAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChU
ZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSwgcXVlcnlSYW5nZS5zdGFy
dC5vZmZzZXQsIHF1ZXJ5UmFuZ2UuZW5kLm9mZnNldCAtIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0
KSk7CisgICAgICAgICAgICBmcmFnbWVudFJhbmdlcy5hcHBlbmQoVGV4dEl0ZXJhdG9yOjpzdWJy
YW5nZSgqY3VycmVudFJhbmdlLCBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldCwgcXVlcnlSYW5nZS5l
bmQub2Zmc2V0IC0gcXVlcnlSYW5nZS5zdGFydC5vZmZzZXQpKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoIXF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0KQogICAgICAgICAgICAgICAg
IGZyYWdtZW50UmFuZ2VzLmFwcGVuZChjdXJyZW50UmFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggMDVkYzhhOGMwZGZkZTIxYzEyMDZkZjk5
YTgxMjdlM2NhYmU3ZDE3My4uN2JlNjNiY2ZkMWU1NzAxZDg0YWVjNGU3MWJjYWMwOGY1ZDgxYTE1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC0y
MzUsNyArMjM1LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRl
ZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWQKIAogICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAg
ICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRB
bmRBZGRSZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIGlmIChmcmFnbWVudCAm
JiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJl
bGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBhdHRyaWJ1dGVkU3RyaW5nLnN0cmlu
ZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCmluZGV4IGQxNmEzZmVj
M2E0Y2M4MDM2YTdmNTQzOWQyYWQ1ZTdjYjNkYjU5MzcuLmI5ODdmYTIzNDcwZjA4ZGJhMzdlZjFm
YmU5ZjA0YWNhYjI3Mjk0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3Rr
L0VkaXRvckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3Rr
LmNwcApAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0LCBNYQogCiAgICAgYm9v
bCBjaG9zZVBsYWluVGV4dDsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgbV9mcmFtZSwg
KnJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwotICAgIGlmIChmcmFnbWVu
dCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQo
KmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAg
ICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRS
ZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCwgbWFpbEJs
b2NrcXVvdGVIYW5kbGluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklP
Uy5tbQppbmRleCA5MDNhNzI4N2Y3ZTcwNzg0NDEzNDZmODQyYzc3MjVmNTA4NTgwMDkzLi40NDVi
ZTExMjY1ODc4NDk0MmVlMjY3MTU2ZjRhZTY5ZDQyMzY1YWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBFZGl0b3I6OnBh
c3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCwgTWEKICAgICAgICAgZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoKnBh
c3RlYm9hcmQsICpyYW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0SWdub3JlZCk7
CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KGZyYWdt
ZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVu
dCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5y
ZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2Fy
ZCksIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAubW0KaW5kZXggZmI4ZWZkOTBkMGE3OTg5
NDlmNDIzMmVlZWRjYzgzYjU5NDI0YTNmZC4uNzZlMTM4YTU4MTZlZjYxZDQ5OTBhNzVlZTUyM2U3
NWY1YmY4OTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlv
bmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5
TG9va3VwLm1tCkBAIC0xNDUsNyArMTQ1LDcgQEAgUmVmUHRyPFJhbmdlPiBEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXMKICAg
ICBpZiAoZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8fCBleHRyYWN0ZWRS
YW5nZS5sZW5ndGggPT0gMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4g
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIGV4dHJhY3Rl
ZFJhbmdlLmxvY2F0aW9uLCBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpOworICAgIHJldHVybiBUZXh0
SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGV4dHJhY3RlZFJhbmdlLmxv
Y2F0aW9uLCBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQppbmRleCA2OGQwYTdhZDhmZTgwMjU3NGQ5Mzc3YWIyMGYyNGJlNmY4NzM0OWY2
Li5iZTlhYzBlMWIwNjhkNDg1NmUxNGM1NGY5ZTBjNTRiOWQ4MjQyMTBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRWRpdG9y
OjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIGJvb2wgYWxsb3dQ
bGFpblRleHQsIE1hCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoKnBhc3RlYm9h
cmQsICpyYW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKIAotICAgIGlmIChm
cmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJh
Z21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQp
KQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2Fu
U21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBmYWxzZSwgbWFpbEJsb2Nr
cXVvdGVIYW5kbGluZyk7CiAKICAgICBjbGllbnQoKS0+c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChT
dHJpbmcoKSk7CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJv
bVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKICAg
ICBib29sIGNob3NlUGxhaW5UZXh0OwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCwgKnJhbmdlLCB0
cnVlLCBjaG9zZVBsYWluVGV4dCkpIHsKICAgICAgICAgbWF5YmVDb3B5Tm9kZUF0dHJpYnV0ZXNU
b0ZyYWdtZW50KCpub2RlLCAqZnJhZ21lbnQpOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJh
Z21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAg
ICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJh
Z21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFz
dGVib2FyZCksIGZhbHNlLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3Rl
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRv
cldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4
IDhiNzk5NDc3ZWJkZTgwOTMwM2RkYTM1MmM0NzMxNjkwNWY2NDhhYmEuLjU0M2E5OGExYjNlY2Zh
NmE2NGQ0NGM0ZGM1MjNjOGI2OWE2YWNlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4v
RWRpdG9yV2luLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFz
dGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0LCBNYQog
CiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KG1fZnJhbWUsICpyYW5nZSwg
YWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hv
dWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBh
c3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVu
dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFz
dGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdp
dGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG1haWxCbG9ja3F1b3Rl
SGFuZGxpbmcpOwogfQogCkBAIC01MSw3ICs1MSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBQbGF0
Zm9ybURyYWdEYXRhPgogc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QbGF0Zm9ybURhdGEoUGxhdGZvcm1EcmFnRGF0YSYgcGxhdGZvcm1EcmFnRGF0YSwg
RnJhbWUmIGZyYW1lKQogewogICAgIGlmIChjb250YWluc0ZpbGVuYW1lcygmcGxhdGZvcm1EcmFn
RGF0YSkpIHsKLSAgICAgICAgaWYgKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBmcmFnbWVudEZyb21GaWxlbmFtZXMoZnJhbWUuZG9jdW1lbnQoKSwgJnBsYXRmb3JtRHJh
Z0RhdGEpKQorICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGZyYWdtZW50RnJvbUZpbGVuYW1l
cyhmcmFtZS5kb2N1bWVudCgpLCAmcGxhdGZvcm1EcmFnRGF0YSkpCiAgICAgICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CmluZGV4IGI1NmNkMjFiOGVjYjQ1MjA0ZDM4NjdiNTMxYWMxZDU2N2RhZjJmZTMuLjA4NWNhMmY2
MGMxMjU0OTY4NDFiZDQ4MzY4NmUxNzM5YmMxMjcwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCkBAIC01NzEsNyArNTcxLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6
Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKGRyYWdJ
c01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXND
b250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0g
ZmFsc2U7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3Vt
ZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCAqcmFuZ2UsIHRy
dWUsIGNob3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhaW5uZXJGcmFt
ZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OkRyb3BwZWQpKSB7CisgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWlubmVy
RnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpIHsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogCkBAIC01ODEsNyArNTgxLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgICAg
ICAvLyBidXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYgdGhlIHNlbGVjdGlvbiBncmFudWxhcml0
eSBpcyB3b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAgICAgYm9vbCBzbWFydERlbGV0ZSA9IGlu
bmVyRnJhbWUtPmVkaXRvcigpLnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwogICAgICAgICAg
ICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0RGVsZXRlICYmIGlubmVyRnJhbWUtPnNlbGVjdGlv
bigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5ICYmIGRyYWdEYXRhLmNhblNtYXJ0
UmVwbGFjZSgpOwotICAgICAgICAgICAgTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShmcmFn
bWVudCwgZHJhZ0NhcmV0LmJhc2UoKSwgc21hcnRJbnNlcnQsIHNtYXJ0RGVsZXRlKS0+YXBwbHko
KTsKKyAgICAgICAgICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZnJhZ21lbnQucmVs
ZWFzZU5vbk51bGwoKSwgZHJhZ0NhcmV0LmJhc2UoKSwgc21hcnRJbnNlcnQsIHNtYXJ0RGVsZXRl
KS0+YXBwbHkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rp
b25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkp
IHsKICAgICAgICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlv
bnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCB8
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZzsKQEAgLTU4OSw3ICs1ODks
NyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRh
JiBkcmFnRGF0YSkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlOwogICAgICAgICAgICAgICAgIGlmIChjaG9zZVBsYWlu
VGV4dCkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6TWF0Y2hTdHlsZTsKLSAgICAgICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgV1RGTW92ZShmcmFnbWVudCksIG9wdGlv
bnMsIEVkaXRBY3Rpb25JbnNlcnRGcm9tRHJvcCktPmFwcGx5KCk7CisgICAgICAgICAgICAgICAg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIGZy
YWdtZW50LnJlbGVhc2VOb25OdWxsKCksIG9wdGlvbnMsIEVkaXRBY3Rpb25JbnNlcnRGcm9tRHJv
cCktPmFwcGx5KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAt
MTA2Niw3ICsxMDY2LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBz
cmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVyYXRpb24KICNpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG5vIGZpbGUgVVJMIGlzIHNw
ZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhlIGluamVjdGVkIGJ1bmRsZSB0byBwb3B1bGF0ZSB0aGUg
cGFzdGVib2FyZCB3aXRoIGRhdGEuCiAgICAgICAgICAgICAgICAgYXV0byYgZWRpdG9yID0gc3Jj
LmVkaXRvcigpOwotICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmQoc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICAg
ICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoc3JjLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci53
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICAg
ICAgICAgICAgICAgICBlZGl0b3IuZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDQ4NjJlNDYzZTA5OTgy
Zjc5MjBiN2U1NTNhNjBiNTAyYzU4NWJiMWQuLjM5M2JiN2ViYWYzOTQ2OGFhMzhkMTA1NzZlMDg2
OTYwODc4Mjg1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE2ODEs
NyArMTY4MSw3IEBAIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiBy
YW5nZSkKIAogUmVmPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdlKFJhbmdlJiByYW5nZSwgaW50
IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgmcmFuZ2UsIHJhbmdlTG9jYXRpb24sIHJhbmdlTGVuZ3RoKTsKKyAgICBy
ZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShyYW5nZSwgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VM
ZW5ndGgpOwogfQogCiBSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJM
b2NhdGlvbihjb25zdCBSYW5nZSYgc2VhcmNoUmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgdW5z
aWduZWQgdGFyZ2V0T2Zmc2V0KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>