<?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>6109</bug_id>
          
          <creation_ts>2005-12-16 02:06:30 -0800</creation_ts>
          <short_desc>khtml/editing should use RefPtr instead of manual ref/deref</short_desc>
          <delta_ts>2006-01-03 01:17:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>26038</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-16 02:06:30 -0800</bug_when>
    <thetext>khtml/editing should use RefPtr instead of manual ref/deref

Patch attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26039</commentid>
    <comment_count>1</comment_count>
      <attachid>5106</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-16 02:07:05 -0800</bug_when>
    <thetext>Created attachment 5106
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26040</commentid>
    <comment_count>2</comment_count>
      <attachid>5106</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-16 02:09:52 -0800</bug_when>
    <thetext>Comment on attachment 5106
Proposed patch.

Unfortunately this one is the biggest of the bunch, and the most complex.  I
can break it up into smaller chunks if that would be better.

A reviewer should look for the same things as with any RefPtr patch:

1.  Did I mark the same instance variables RefPtr&lt;Foo&gt; as I removed
ref()/deref() methods for?
2.  Did I remember to remove any m_foo(0) initializers
3.  Did I mark some variable m_foo as a RefPtr when it really should have been
a weak reference?

I&apos;ve of course looked for all these already... but those are the main things
that can go wrong in this kind of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26045</commentid>
    <comment_count>3</comment_count>
      <attachid>5110</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-16 02:29:59 -0800</bug_when>
    <thetext>Created attachment 5110
changes in kwq necessary as a result of khtml/editing patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26052</commentid>
    <comment_count>4</comment_count>
      <attachid>5110</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-16 07:32:53 -0800</bug_when>
    <thetext>Comment on attachment 5110
changes in kwq necessary as a result of khtml/editing patch

The forward looking way to to to this is to change the
_documentFragmentWithImpl parameter to a PassRefPtr -- this completely avoid
reference counting churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26053</commentid>
    <comment_count>5</comment_count>
      <attachid>5106</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-16 08:08:31 -0800</bug_when>
    <thetext>Comment on attachment 5106
Proposed patch.

Looks, good. I have many suggestions and I noticed at least one bug (that I
hope would be caught by layout tests!).

First the bug:

In the RemoveNodeCommand constructor, there&apos;s a bug that will cause a crash.
You set m_parent to m_removeChild-&gt;parentNode() before m_removeChild is
initialized. Also, why not initialize m_refChild just as you do m_parent?

Now the rest of the suggestions:

In the case of StyleChange::init, a forward-looking change would be to change
the function to take a PassRefPtr to the style. The &quot;keepAlive&quot; name for the
RefPtr is a tiny bit misleading, since the primary purpose of doing a ref/deref
pair here is to allow the caller to pass in a just-created style without
ref/deref&apos;ing and know that it will not leak.

The comment you added to ApplyStyleCommand::removeInlineStyle is misleading.
That deref is not part of a &quot;calling convention&quot;. The call to deref is there to
balance a call to style = style-&gt;copy() at the start of the function. If you
want to clean that up, you could add a new local RefPtr variable. And perhaps
this function as well should take a PassRefPtr?

If computedStyle() was changed to return a PassRefPtr, then we could get rid of
the computedStyle local variables entirely in
DeleteSelectionCommand::saveTypingStyle, which would be even better. Same thing
in EditCommand::styleAtPosition and createMarkup and in some
ReplaceSelectionCommand code.

This line of code is entirely unneeded:

+	 RefPtr&lt;CSSMutableStyleDeclarationImpl&gt; oldStyle = m_typingStyle;

That&apos;s just a remnant of the old code.

It&apos;s extremely dangerous that there&apos;s a CSSComputedStyleDeclarationImpl
endingStyle declared here that&apos;s a local. We need to create that with new and
put it in a RefPtr instead because if anyone does a ref/deref on it, there will
be an attempt to delete it!

There&apos;s no need for:

+    if (m_typingStyle != style)

in EditCommand::assignTypingStyle.

In general, I think the functions like assignTypingStyle and setStartNode
should just go away completely and be replaced by simple assignment, unless
they are part of the public interface.

~InsertIntoTextNodeCommand, ~InsertNodeBeforeCommand, ~JoinTextNodesCommand,
~MergeIdenticalElementsCommand, ~MoveSelectionCommand,
~RemoveCSSPropertyCommand, ~RemoveNodeAttributeCommand, ~RemoveNodeCommand,
~RemoveNodePreservingChildrenCommand, ~ReplacementFragment, ~NodeDesiredStyle,
~ReplaceSelectionCommand, ~SetNodeAttributeCommand, ~SplitElementCommand,
~SplitTextNodeContainingElementCommand, and ~WrapContentsInDummySpanCommand
should be removed entirely; there&apos;s no need to declare them and define them.
The assertions at destruction time aren&apos;t valuable and these are otherwise
empty.

In selectionStartHasStyle we don&apos;t need a local variable for &quot;bool hasStyle&quot;.

The line of code that says fragment-&gt;setParent(0) should be removed from
createFragmentFromText and createFragmentFromNodeList. Parent is already 0.

Lines like this one:

+    ASSERT(m_element1-&gt;nextSibling() == m_element2.get());

should not require a get() call. If they don&apos;t work without get(), we should
fix RefPtr by adding the appropriate operator== overloads to make it work.

This line:

+    RefPtr&lt;NodeImpl&gt; holder = insertFragmentForTestRendering().get();

should be instead:

    PassRefPtr&lt;NodeImpl&gt; holder = insertFragmentForTestRendering();

That will avoid reference count churn entirely.

ReplacementFragment::removeNode should probably be changed to just call
node-&gt;remove() and take a PassRefPtr parameter.

NodeDesiredStyle(const NodeDesiredStyle &amp;), ~NodeDesiredStyle, and
NodeDesiredStyle::operator= can just be removed; the automatically generated
ones will &quot;just work&quot;. In general also the you&apos;ve been writing operator=
implementations with equality checks that aren&apos;t necessary; RefPtr handles that
case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26054</commentid>
    <comment_count>6</comment_count>
      <attachid>5110</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-16 08:09:35 -0800</bug_when>
    <thetext>Comment on attachment 5110
changes in kwq necessary as a result of khtml/editing patch

Seems best to deploy PassRefPtr here as I suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27278</commentid>
    <comment_count>7</comment_count>
      <attachid>5390</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-30 16:28:18 -0800</bug_when>
    <thetext>Created attachment 5390
New combined patch addressing darin&apos;s concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27279</commentid>
    <comment_count>8</comment_count>
      <attachid>5390</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-30 16:30:35 -0800</bug_when>
    <thetext>Comment on attachment 5390
New combined patch addressing darin&apos;s concerns.

Unfortunately this patch has grown rather large.  It passes all the layout
tests and introduces no leaks.	So I think this one should be ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27293</commentid>
    <comment_count>9</comment_count>
      <attachid>5390</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-30 23:45:38 -0800</bug_when>
    <thetext>Comment on attachment 5390
New combined patch addressing darin&apos;s concerns.

~DeleteFromTextNodeCommand, ~InsertIntoTextNodeCommand,
~InsertNodeBeforeCommand, ~JoinTextNodesCommand,
~MergeIdenticalElementsCommand, ~MoveSelectionCommand,
~RebalanceWhitespaceCommand, ~RemoveCSSPropertyCommand,
~RemoveNodeAttributeCommand, ~RemoveNodeCommand,
~RemoveNodePreservingChildrenCommand, ~SetNodeAttributeCommand,
~SplitElementCommand, ~SplitTextNodeCommand,
~SplitTextNodeContainingElementCommand, ~WrapContentsInDummySpanCommand, don&apos;t
need to be declared or defined and should be removed from the class
declaration. There&apos;s no reason to declare the destructor with an inline empty
body -- just leave it out entirely. The base class already has a virtual
destructor and that&apos;s all that&apos;s needed to handle destruction properly in cases
like this.

Also, ~ReplacementFragment need not be declared or defined, for similar
reasons.

In the stateStyle function, there&apos;s no need for the &quot;state&quot; local variable.

In _createDocumentFragmentWithMarkupString:baseURLString:, it&apos;s fine to use
just a RefPtr, it need not be a PassRefPtr to avoid churn if you&apos;re not passing
it to another function that takes a PassRefPtr or returning it as a PassRefPtr,
and Maciej opined it was clearer to only use PassRefPtr instead of RefPtr when
it&apos;s superior.

The line of code in createFragmentFromText and createFragmentFromNodeList that
says fragment-&gt;setParent(0) is no longer needed and should be omitted.

But I think those changes can go in another patch. This looks fine to land as
is, r=me.

I recommend searching for &quot;ref&quot; and &quot;deref&quot; in all the affected source files to
make sure one didn&apos;t slip by.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27564</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-03 00:50:45 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 5390 [edit])
&gt; ~DeleteFromTextNodeCommand, ~InsertIntoTextNodeCommand,
&gt; ~InsertNodeBeforeCommand, ~JoinTextNodesCommand,
&gt; ~MergeIdenticalElementsCommand, ~MoveSelectionCommand,
&gt; ~RebalanceWhitespaceCommand, ~RemoveCSSPropertyCommand,
&gt; ~RemoveNodeAttributeCommand, ~RemoveNodeCommand,
&gt; ~RemoveNodePreservingChildrenCommand, ~SetNodeAttributeCommand,
&gt; ~SplitElementCommand, ~SplitTextNodeCommand,
&gt; ~SplitTextNodeContainingElementCommand, ~WrapContentsInDummySpanCommand, don&apos;t
&gt; need to be declared or defined and should be removed from the class
&gt; declaration. There&apos;s no reason to declare the destructor with an inline empty
&gt; body -- just leave it out entirely. The base class already has a virtual
&gt; destructor and that&apos;s all that&apos;s needed to handle destruction properly in cases
&gt; like this.

When I tried removing these, I got compile warnings/errors, because the implicit destructors required 
the actual Type information for whatever the RefPtr&apos;s in that class pointed to (for example 
DocumentImpl).  I was uncomfortable pulling in all the additional headers to make this implicit 
construction work, so I just left many of these as is (empty in the .cpp file)

&gt; Also, ~ReplacementFragment need not be declared or defined, for similar
&gt; reasons.
&gt; 
&gt; In the stateStyle function, there&apos;s no need for the &quot;state&quot; local variable.

Removed.

&gt; In _createDocumentFragmentWithMarkupString:baseURLString:, it&apos;s fine to use
&gt; just a RefPtr, it need not be a PassRefPtr to avoid churn if you&apos;re not passing
&gt; it to another function that takes a PassRefPtr or returning it as a PassRefPtr,
&gt; and Maciej opined it was clearer to only use PassRefPtr instead of RefPtr when
&gt; it&apos;s superior.

Fixed.

&gt; The line of code in createFragmentFromText and createFragmentFromNodeList that
&gt; says fragment-&gt;setParent(0) is no longer needed and should be omitted.

Removed.

&gt; But I think those changes can go in another patch. This looks fine to land as
&gt; is, r=me.
&gt; 
&gt; I recommend searching for &quot;ref&quot; and &quot;deref&quot; in all the affected source files to
&gt; make sure one didn&apos;t slip by.

I did.  Only 3 remain, and these are for the QPtrList (clonedNodes) which holds NodeImpl pointers.  
They&apos;re manually ref&apos;d before adding and deref&apos;d when removing.   Eventually that should be removed 
as well, but I left it for now.

One more round of tests, then landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27566</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-03 01:17:36 -0800</bug_when>
    <thetext>Landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5106</attachid>
            <date>2005-12-16 02:07:05 -0800</date>
            <delta_ts>2005-12-30 16:28:18 -0800</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>editing_ref.patch</filename>
            <type>text/plain</type>
            <size>84585</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGFwcGVuZF9ub2RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFuZC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGFwcGVuZF9ub2RlX2NvbW1hbmQu
Y3BwCi0tLSBhcHBlbmRfbm9kZV9jb21tYW5kLmNwcAkyMSBOb3YgMjAwNSAwMToyMDowMSAtMDAw
MAkxLjQKKysrIGFwcGVuZF9ub2RlX2NvbW1hbmQuY3BwCTE2IERlYyAyMDA1IDEwOjA3OjU5IC0w
MDAwCkBAIC0zOSwxOSArMzksMTMgQEAgQXBwZW5kTm9kZUNvbW1hbmQ6OkFwcGVuZE5vZGVDb21t
YW5kKERvYwogICAgIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX2FwcGVuZENoaWxkKGFwcGVu
ZENoaWxkKSwgbV9wYXJlbnROb2RlKHBhcmVudE5vZGUpCiB7CiAgICAgQVNTRVJUKG1fYXBwZW5k
Q2hpbGQpOwotICAgIG1fYXBwZW5kQ2hpbGQtPnJlZigpOwotCiAgICAgQVNTRVJUKG1fcGFyZW50
Tm9kZSk7Ci0gICAgbV9wYXJlbnROb2RlLT5yZWYoKTsKIH0KIAogQXBwZW5kTm9kZUNvbW1hbmQ6
On5BcHBlbmROb2RlQ29tbWFuZCgpCiB7CiAgICAgQVNTRVJUKG1fYXBwZW5kQ2hpbGQpOwotICAg
IG1fYXBwZW5kQ2hpbGQtPmRlcmVmKCk7Ci0KICAgICBBU1NFUlQobV9wYXJlbnROb2RlKTsKLSAg
ICBtX3BhcmVudE5vZGUtPmRlcmVmKCk7CiB9CiAKIHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRv
QXBwbHkoKQpAQCAtNjAsNyArNTQsNyBAQCB2b2lkIEFwcGVuZE5vZGVDb21tYW5kOjpkb0FwcGx5
KCkKICAgICBBU1NFUlQobV9wYXJlbnROb2RlKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0g
MDsKLSAgICBtX3BhcmVudE5vZGUtPmFwcGVuZENoaWxkKG1fYXBwZW5kQ2hpbGQsIGV4Y2VwdGlv
bkNvZGUpOworICAgIG1fcGFyZW50Tm9kZS0+YXBwZW5kQ2hpbGQobV9hcHBlbmRDaGlsZC5nZXQo
KSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiB9CiAK
QEAgLTcxLDcgKzY1LDcgQEAgdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICAg
ICBBU1NFUlQoc3RhdGUoKSA9PSBBcHBsaWVkKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0g
MDsKLSAgICBtX3BhcmVudE5vZGUtPnJlbW92ZUNoaWxkKG1fYXBwZW5kQ2hpbGQsIGV4Y2VwdGlv
bkNvZGUpOworICAgIG1fcGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobV9hcHBlbmRDaGlsZC5nZXQo
KSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiB9CiAK
SW5kZXg6IGFwcGVuZF9ub2RlX2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgYXBwZW5kX25vZGVfY29tbWFuZC5oCi0t
LSBhcHBlbmRfbm9kZV9jb21tYW5kLmgJMTIgTWF5IDIwMDUgMDQ6MDA6MTkgLTAwMDAJMS4xCisr
KyBhcHBlbmRfbm9kZV9jb21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6MDc6NTkgLTAwMDAKQEAgLTQz
LDEyICs0MywxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBET006Ok5vZGVJbXBsICphcHBlbmRDaGls
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwZW5kQ2hpbGQ7IH0KLSAgICBET006Ok5vZGVJbXBsICpw
YXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CisgICAgRE9NOjpOb2Rl
SW1wbCAqYXBwZW5kQ2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2FwcGVuZENoaWxkLmdldCgpOyB9
CisgICAgRE9NOjpOb2RlSW1wbCAqcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
Tm9kZS5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIERPTTo6Tm9kZUltcGwgKm1fYXBwZW5kQ2hp
bGQ7Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9wYXJlbnROb2RlOyAgICAKKyAgICBSZWZQdHI8RE9N
OjpOb2RlSW1wbD4gbV9hcHBlbmRDaGlsZDsKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9w
YXJlbnROb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Uga2h0bWwKSW5kZXg6IGFwcGx5X3N0eWxl
X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTkKZGlmZiAtcCAtdSAtcjEuMTkgYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAKLS0tIGFwcGx5X3N0
eWxlX2NvbW1hbmQuY3BwCTEgRGVjIDIwMDUgMTA6MzI6MTQgLTAwMDAJMS4xOQorKysgYXBwbHlf
c3R5bGVfY29tbWFuZC5jcHAJMTYgRGVjIDIwMDUgMTA6MDg6MDAgLTAwMDAKQEAgLTExOSw5ICsx
MTksOCBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoQ1NTU3R5bGVEZWNsYXJhCiAKIHZvaWQg
U3R5bGVDaGFuZ2U6OmluaXQoQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBjb25zdCBQ
b3NpdGlvbiAmcG9zaXRpb24pCiB7Ci0gICAgc3R5bGUtPnJlZigpOworICAgIFJlZlB0cjxDU1NT
dHlsZURlY2xhcmF0aW9uSW1wbD4ga2VlcEFsaXZlKHN0eWxlKTsKICAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBtdXRhYmxlU3R5bGUgPSBzdHlsZS0+bWFrZU11dGFi
bGUoKTsKLSAgICBzdHlsZS0+ZGVyZWYoKTsKICAgICAKICAgICBRU3RyaW5nIHN0eWxlVGV4dCgi
Iik7CiAKQEAgLTg5Nyw3ICs4OTYsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJ
bmxpbmVTdHlsCiAKIAogICAgIGlmICh0ZXh0RGVjb3JhdGlvblNwZWNpYWxQcm9wZXJ0eSkgewot
ICAgICAgICBzdHlsZS0+ZGVyZWYoKTsKKyAgICAgICAgc3R5bGUtPmRlcmVmKCk7IC8vIEZJWE1F
OiBUaGlzIHNlZW1zIGxpa2UgYSB2ZXJ5IHVuaW50dWl0aXZlIGNhbGxpbmcgY29udmVudGlvbiEK
ICAgICB9CiAgICAgCiAgICAgQVNTRVJUKHMubm9kZSgpLT5pbkRvY3VtZW50KCkpOwpJbmRleDog
Y29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yMApkaWZmIC1wIC11IC1yMS4yMCBjb21wb3NpdGVfZWRpdF9jb21t
YW5kLmNwcAotLS0gY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJMTAgRGVjIDIwMDUgMDI6NTk6
MzEgLTAwMDAJMS4yMAorKysgY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJMTYgRGVjIDIwMDUg
MTA6MDg6MDEgLTAwMDAKQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpkZWxldGVJbnNpZ25pCiAKICAgICBpbnQgcmVtb3ZlZCA9IDA7CiAgICAgSW5saW5lVGV4
dEJveCAqcHJldkJveCA9IDA7Ci0gICAgRE9NU3RyaW5nSW1wbCAqc3RyID0gMDsKKyAgICBSZWZQ
dHI8RE9NU3RyaW5nSW1wbD4gc3RyOwogCiAgICAgLy8gVGhpcyBsb29wIHN0cnVjdHVyZSB3b3Jr
cyB0byBwcm9jZXNzIGFsbCBnYXBzIHByZWNlZGluZyBhIGJveCwKICAgICAvLyBhbmQgYWxzbyB3
aWxsIGxvb2sgYXQgdGhlIGdhcCBhZnRlciB0aGUgbGFzdCBib3guCkBAIC0zOTAsMTAgKzM5MCw4
IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICAgICAgaWYg
KGluZGljZXNJbnRlcnNlY3QgJiYgZ2FwTGVuID4gMCkgewogICAgICAgICAgICAgZ2FwU3RhcnQg
PSBrTWF4KGdhcFN0YXJ0LCBzdGFydCk7CiAgICAgICAgICAgICBnYXBFbmQgPSBrTWluKGdhcEVu
ZCwgZW5kKTsKLSAgICAgICAgICAgIGlmICghc3RyKSB7CisgICAgICAgICAgICBpZiAoIXN0cikK
ICAgICAgICAgICAgICAgICBzdHIgPSB0ZXh0Tm9kZS0+c3RyaW5nKCktPnN1YnN0cmluZyhzdGFy
dCwgZW5kIC0gc3RhcnQpOwotICAgICAgICAgICAgICAgIHN0ci0+cmVmKCk7Ci0gICAgICAgICAg
ICB9ICAgIAogICAgICAgICAgICAgLy8gcmVtb3ZlIHRleHQgaW4gdGhlIGdhcAogICAgICAgICAg
ICAgc3RyLT5yZW1vdmUoZ2FwU3RhcnQgLSBzdGFydCAtIHJlbW92ZWQsIGdhcExlbik7CiAgICAg
ICAgICAgICByZW1vdmVkICs9IGdhcExlbjsKQEAgLTQwNyw3ICs0MDUsNyBAQCB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgaWYgKHN0cikgewogICAgICAgICAv
LyBSZXBsYWNlIHRoZSB0ZXh0IGJldHdlZW4gc3RhcnQgYW5kIGVuZCB3aXRoIG91ciBwcnVuZWQg
dmVyc2lvbi4KICAgICAgICAgaWYgKHN0ci0+bCA+IDApIHsKLSAgICAgICAgICAgIHJlcGxhY2VU
ZXh0SW5Ob2RlKHRleHROb2RlLCBzdGFydCwgZW5kIC0gc3RhcnQsIHN0cik7CisgICAgICAgICAg
ICByZXBsYWNlVGV4dEluTm9kZSh0ZXh0Tm9kZSwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdHIuZ2V0
KCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQXNzZXJ0IHRo
YXQgd2UgYXJlIG5vdCBnb2luZyB0byBkZWxldGUgYWxsIG9mIHRoZSB0ZXh0IGluIHRoZSBub2Rl
LgpAQCAtNDE2LDcgKzQxNCw2IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUlu
c2lnbmkKICAgICAgICAgICAgIEFTU0VSVChzdGFydCA+IDAgfHwgKHVuc2lnbmVkKWVuZCAtIHN0
YXJ0IDwgdGV4dE5vZGUtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9k
ZSh0ZXh0Tm9kZSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgfQotICAgICAgICBzdHIt
PmRlcmVmKCk7CiAgICAgfQogfQogCkluZGV4OiBkZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNQpkaWZmIC1wIC11IC1yMS41IGRlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcAot
LS0gZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAxOjIwOjAy
IC0wMDAwCTEuNQorKysgZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTE2IERlYyAy
MDA1IDEwOjA4OjAxIC0wMDAwCkBAIC00MiwxNCArNDIsMTEgQEAgRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZDo6RGVsZXRlRnJvbVRleAogICAgIEFTU0VSVChtX29mZnNldCA+PSAwKTsKICAgICBB
U1NFUlQobV9vZmZzZXQgPCAoaW50KW1fbm9kZS0+bGVuZ3RoKCkpOwogICAgIEFTU0VSVChtX2Nv
dW50ID49IDApOwotICAgIAotICAgIG1fbm9kZS0+cmVmKCk7CiB9CiAKIERlbGV0ZUZyb21UZXh0
Tm9kZUNvbW1hbmQ6On5EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKCkKIHsKICAgICBBU1NFUlQo
bV9ub2RlKTsKLSAgICBtX25vZGUtPmRlcmVmKCk7CiB9CiAKIHZvaWQgRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZDo6ZG9BcHBseSgpCkluZGV4OiBkZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcv
ZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
CmRpZmYgLXAgLXUgLXIxLjIgZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaAotLS0gZGVs
ZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaAkxNiBTZXAgMjAwNSAyMjo0MjowNiAtMDAwMAkx
LjIKKysrIGRlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6MDg6
MDEgLTAwMDAKQEAgLTQ1LDEyICs0NSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRv
QXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBET006OlRleHRJ
bXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgRE9NOjpUZXh0SW1wbCAq
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogICAgIGludCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY291bnQ7IH0KIAogcHJpdmF0ZToKLSAgICBET006OlRleHRJbXBsICptX25vZGU7CisgICAg
UmVmUHRyPERPTTo6VGV4dEltcGw+IG1fbm9kZTsKICAgICBpbnQgbV9vZmZzZXQ7CiAgICAgaW50
IG1fY291bnQ7CiAgICAgRE9NOjpET01TdHJpbmcgbV90ZXh0OwpJbmRleDogZGVsZXRlX3NlbGVj
dGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEuMjMgZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAotLS0gZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyMSBOb3YgMjAwNSAwMToyMDowMiAt
MDAwMAkxLjIzCisrKyBkZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTE2IERlYyAyMDA1IDEw
OjA4OjAyIC0wMDAwCkBAIC0yMDQsMTEgKzIwNCw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6aW5pdGlhbGl6ZVAKICAgICAvLyBIYW5kbGUgc2V0dGluZyBzdGFydCBhbmQgZW5kIGJs
b2NrcyBhbmQgdGhlIHN0YXJ0IG5vZGUuCiAgICAgLy8KICAgICBtX3N0YXJ0QmxvY2sgPSBtX2Rv
d25zdHJlYW1TdGFydC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKLSAgICBt
X3N0YXJ0QmxvY2stPnJlZigpOwogICAgIG1fZW5kQmxvY2sgPSBtX3Vwc3RyZWFtRW5kLm5vZGUo
KS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwotICAgIG1fZW5kQmxvY2stPnJlZigpOwog
ICAgIG1fc3RhcnROb2RlID0gbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKTsKLSAgICBtX3N0YXJ0Tm9k
ZS0+cmVmKCk7CiAKICAgICAvLwogICAgIC8vIEhhbmRsZSBkZXRlY3RpbmcgaWYgdGhlIGxpbmUg
Y29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGVuZCBpcyBpdHNlbGYgZnVsbHkgc2VsZWN0ZWQuCkBA
IC0yMjcsOSArMjI0LDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFsaXpl
UAogICAgIGRlYnVnUG9zaXRpb24oIm1fZG93bnN0cmVhbUVuZCAgICAgICIsIG1fZG93bnN0cmVh
bUVuZCk7CiAgICAgZGVidWdQb3NpdGlvbigibV9sZWFkaW5nV2hpdGVzcGFjZSAgIiwgbV9sZWFk
aW5nV2hpdGVzcGFjZSk7CiAgICAgZGVidWdQb3NpdGlvbigibV90cmFpbGluZ1doaXRlc3BhY2Ug
IiwgbV90cmFpbGluZ1doaXRlc3BhY2UpOwotICAgIGRlYnVnTm9kZSggICAgIm1fc3RhcnRCbG9j
ayAgICAgICAgICIsIG1fc3RhcnRCbG9jayk7Ci0gICAgZGVidWdOb2RlKCAgICAibV9lbmRCbG9j
ayAgICAgICAgICAgIiwgbV9lbmRCbG9jayk7ICAgIAotICAgIGRlYnVnTm9kZSggICAgIm1fc3Rh
cnROb2RlICAgICAgICAgICIsIG1fc3RhcnROb2RlKTsgICAgCisgICAgZGVidWdOb2RlKCAgICAi
bV9zdGFydEJsb2NrICAgICAgICAgIiwgbV9zdGFydEJsb2NrLmdldCgpKTsKKyAgICBkZWJ1Z05v
ZGUoICAgICJtX2VuZEJsb2NrICAgICAgICAgICAiLCBtX2VuZEJsb2NrLmdldCgpKTsgICAgCisg
ICAgZGVidWdOb2RlKCAgICAibV9zdGFydE5vZGUgICAgICAgICAgIiwgbV9zdGFydE5vZGUuZ2V0
KCkpOyAgICAKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRQbGFjZWhv
bGRlckZvckFuY2VzdG9yQmxvY2tDb250ZW50KCkKQEAgLTI3MiwyMCArMjY5LDE0IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKICAgICAvLyBGaWd1cmUgb3V0IHRo
ZSB0eXBpbmcgc3R5bGUgaW4gZWZmZWN0IGJlZm9yZSB0aGUgZGVsZXRlIGlzIGRvbmUuCiAgICAg
Ly8gRklYTUU6IEltcHJvdmUgdHlwaW5nIHN0eWxlLgogICAgIC8vIFNlZSB0aGlzIGJ1ZzogPHJk
YXI6Ly9wcm9ibGVtLzM3Njk4OTk+IEltcGxlbWVudGF0aW9uIG9mIHR5cGluZyBzdHlsZSBuZWVk
cyBpbXByb3ZlbWVudAotICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKmNvbXB1
dGVkU3R5bGUgPSBwb3NpdGlvbkJlZm9yZVRhYlNwYW4obV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFy
dCgpKS5jb21wdXRlZFN0eWxlKCk7Ci0gICAgY29tcHV0ZWRTdHlsZS0+cmVmKCk7CisgICAgUmVm
UHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGw+IGNvbXB1dGVkU3R5bGUgPSBwb3Np
dGlvbkJlZm9yZVRhYlNwYW4obV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKS5jb21wdXRlZFN0
eWxlKCk7CiAgICAgbV90eXBpbmdTdHlsZSA9IGNvbXB1dGVkU3R5bGUtPmNvcHlJbmhlcml0YWJs
ZVByb3BlcnRpZXMoKTsKLSAgICBtX3R5cGluZ1N0eWxlLT5yZWYoKTsKLSAgICBjb21wdXRlZFN0
eWxlLT5kZXJlZigpOwogICAgIAogICAgIC8vIElmIHdlJ3JlIGRlbGV0aW5nIGludG8gYSBNYWls
IGJsb2NrcXVvdGUsIHNhdmUgdGhlIHN0eWxlIGF0IGVuZCgpIGluc3RlYWQgb2Ygc3RhcnQoKQog
ICAgIC8vIFdlJ2xsIHVzZSB0aGlzIGxhdGVyIGluIGNvbXB1dGVUeXBpbmdTdHlsZUFmdGVyRGVs
ZXRlIGlmIHdlIGVuZCB1cCBvdXRzaWRlIG9mIGEgTWFpbCBibG9ja3F1b3RlCiAgICAgaWYgKG5l
YXJlc3RNYWlsQmxvY2txdW90ZShtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkubm9kZSgpKSkg
ewogICAgICAgICBjb21wdXRlZFN0eWxlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5jb21w
dXRlZFN0eWxlKCk7Ci0gICAgICAgIGNvbXB1dGVkU3R5bGUtPnJlZigpOwogICAgICAgICBtX2Rl
bGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSBjb21wdXRlZFN0eWxlLT5jb3B5SW5oZXJpdGFibGVQ
cm9wZXJ0aWVzKCk7Ci0gICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZS0+cmVmKCk7
Ci0gICAgICAgIGNvbXB1dGVkU3R5bGUtPmRlcmVmKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
ZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7CiB9CkBAIC0zMTQsMTIgKzMwNSw3IEBAIGJv
b2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2kKIAogdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpzZXRTdGFydE5vZGUoTm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgTm9kZUlt
cGwgKm9sZCA9IG1fc3RhcnROb2RlOwogICAgIG1fc3RhcnROb2RlID0gbm9kZTsKLSAgICBpZiAo
bV9zdGFydE5vZGUpCi0gICAgICAgIG1fc3RhcnROb2RlLT5yZWYoKTsKLSAgICBpZiAob2xkKQot
ICAgICAgICBvbGQtPmRlcmVmKCk7CiB9CiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
aGFuZGxlR2VuZXJhbERlbGV0ZSgpCkBAIC0zNDcsNyArMzMzLDcgQEAgdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICBzdGFydE9mZnNldCA9IDA7CiAgICAg
fQogICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBpc1N0YXJ0T2ZCbG9jayhW
aXNpYmxlUG9zaXRpb24obV91cHN0cmVhbVN0YXJ0LCBtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0
QWZmaW5pdHkoKSkpKSB7Ci0gICAgICAgIGlmICghbV9zdGFydEJsb2NrLT5pc0FuY2VzdG9yKG1f
ZW5kQmxvY2spICYmICFpc1N0YXJ0T2ZCbG9jayh2aXNpYmxlRW5kKSAmJiBlbmRBdEVuZE9mQmxv
Y2spIHsKKyAgICAgICAgaWYgKCFtX3N0YXJ0QmxvY2stPmlzQW5jZXN0b3IobV9lbmRCbG9jay5n
ZXQoKSkgJiYgIWlzU3RhcnRPZkJsb2NrKHZpc2libGVFbmQpICYmIGVuZEF0RW5kT2ZCbG9jaykg
ewogICAgICAgICAgICAgLy8gRGVsZXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGJsb2NrLCBi
dXQgbm90IHRoZSBibG9jayBpdHNlbGYuCiAgICAgICAgICAgICBzZXRTdGFydE5vZGUobV9zdGFy
dEJsb2NrLT5maXJzdENoaWxkKCkpOwogICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwpAQCAt
MzYyLDcgKzM0OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIK
ICAgICAgICAgLy8gQWxzbywgYmVmb3JlIG1vdmluZyBvbiwgZGVsZXRlIGFueSBpbnNpZ25pZmlj
YW50IHRleHQgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiBhIHRleHQgbm9kZS4KICAgICAgICAgaWYg
KG1fc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgIC8vIERlbGV0ZSBhbnkg
aW5zaWduaWZpY2FudCB0ZXh0IGZyb20gdGhpcyBub2RlLgotICAgICAgICAgICAgVGV4dEltcGwg
KnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihtX3N0YXJ0Tm9kZSk7CisgICAgICAgICAg
ICBUZXh0SW1wbCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG1fc3RhcnROb2RlLmdl
dCgpKTsKICAgICAgICAgICAgIGlmICh0ZXh0LT5sZW5ndGgoKSA+ICh1bnNpZ25lZCltX3N0YXJ0
Tm9kZS0+Y2FyZXRNYXhPZmZzZXQoKSkKICAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5v
ZGUodGV4dCwgbV9zdGFydE5vZGUtPmNhcmV0TWF4T2Zmc2V0KCksIHRleHQtPmxlbmd0aCgpIC0g
bV9zdGFydE5vZGUtPmNhcmV0TWF4T2Zmc2V0KCkpOwogICAgICAgICB9CkBAIC0zNzksMjQgKzM2
NSwyNCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgaWYg
KG1fc3RhcnROb2RlID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpIHsKICAgICAgICAgLy8gVGhl
IHNlbGVjdGlvbiB0byBkZWxldGUgaXMgYWxsIGluIG9uZSBub2RlLgogICAgICAgICBpZiAoIW1f
c3RhcnROb2RlLT5yZW5kZXJlcigpIHx8IAotICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID09IDAg
JiYgbV9kb3duc3RyZWFtRW5kLm9mZnNldCgpID49IG1heERlZXBPZmZzZXQobV9zdGFydE5vZGUp
KSkgeworICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID09IDAgJiYgbV9kb3duc3RyZWFtRW5kLm9m
ZnNldCgpID49IG1heERlZXBPZmZzZXQobV9zdGFydE5vZGUuZ2V0KCkpKSkgewogICAgICAgICAg
ICAgLy8ganVzdCBkZWxldGUKLSAgICAgICAgICAgIHJlbW92ZUZ1bGx5U2VsZWN0ZWROb2RlKG1f
c3RhcnROb2RlKTsKKyAgICAgICAgICAgIHJlbW92ZUZ1bGx5U2VsZWN0ZWROb2RlKG1fc3RhcnRO
b2RlLmdldCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChtX2Rvd25zdHJlYW1FbmQub2Zmc2V0KCkg
LSBzdGFydE9mZnNldCA+IDApIHsKICAgICAgICAgICAgIGlmIChtX3N0YXJ0Tm9kZS0+aXNUZXh0
Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0
byBiZSB0cmltbWVkCi0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnRleHQgPSBzdGF0aWNfY2Fz
dDxUZXh0SW1wbCAqPihtX3N0YXJ0Tm9kZSk7CisgICAgICAgICAgICAgICAgVGV4dEltcGwgKnRl
eHQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihtX3N0YXJ0Tm9kZS5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJl
YW1FbmQub2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbV90cmFpbGlu
Z1doaXRlc3BhY2VWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICByZW1vdmVDaGlsZHJlbkluUmFuZ2UobV9zdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBt
X2Rvd25zdHJlYW1FbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVu
SW5SYW5nZShtX3N0YXJ0Tm9kZS5nZXQoKSwgc3RhcnRPZmZzZXQsIG1fZG93bnN0cmVhbUVuZC5v
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IG1fdXBzdHJlYW1T
dGFydDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAg
ICAgLy8gVGhlIHNlbGVjdGlvbiB0byBkZWxldGUgc3BhbnMgbW9yZSB0aGFuIG9uZSBub2RlLgot
ICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IG1fc3RhcnROb2RlOworICAgICAgICBOb2RlSW1wbCAq
bm9kZSA9IG1fc3RhcnROb2RlLmdldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHN0YXJ0T2Zm
c2V0ID4gMCkgewogICAgICAgICAgICAgaWYgKG1fc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsK
QEAgLTYxNCwxMSArNjAwLDExIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3Vs
YXRlRW4KICAgICBpZiAobV9lbmRpbmdQb3NpdGlvbi5ub2RlKCktPmluRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9lbmRpbmdQb3NpdGlvbiA9IFBvc2l0aW9uKG1fc3RhcnRC
bG9jaywgMCk7CisgICAgbV9lbmRpbmdQb3NpdGlvbiA9IFBvc2l0aW9uKG1fc3RhcnRCbG9jay5n
ZXQoKSwgMCk7CiAgICAgaWYgKG1fZW5kaW5nUG9zaXRpb24ubm9kZSgpLT5pbkRvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZW5kaW5nUG9zaXRpb24gPSBQb3NpdGlvbihtX2Vu
ZEJsb2NrLCAwKTsKKyAgICBtX2VuZGluZ1Bvc2l0aW9uID0gUG9zaXRpb24obV9lbmRCbG9jay5n
ZXQoKSwgMCk7CiAgICAgaWYgKG1fZW5kaW5nUG9zaXRpb24ubm9kZSgpLT5pbkRvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNjM1LDI1ICs2MjEsMTcgQEAgdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeQogICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5cGluZyBz
dHlsZS4KICAgICAvLyBTZWUgdGhpcyBidWc6IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5PiBJbXBs
ZW1lbnRhdGlvbiBvZiB0eXBpbmcgc3R5bGUgbmVlZHMgaW1wcm92ZW1lbnQKICAgICAKLSAgICBp
ZiAobV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlKSB7Ci0gICAgICAgIC8vIElmIHdlIGRlbGV0
ZWQgaW50byBhIGJsb2NrcXVvdGUsIGJ1dCBhcmUgbm93IG5vIGxvbmdlciBpbiBhIGJsb2NrcXVv
dGUsIHVzZSB0aGUgYWx0ZXJuYXRlIHR5cGluZyBzdHlsZQotICAgICAgICBpZiAoIW5lYXJlc3RN
YWlsQmxvY2txdW90ZShtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqb2xkU3R5bGUgPSBtX3R5cGluZ1N0eWxlOwot
ICAgICAgICAgICAgbV90eXBpbmdTdHlsZSA9IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsK
LSAgICAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7Ci0gICAgICAgICAg
ICBvbGRTdHlsZS0+ZGVyZWYoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fZGVs
ZXRlSW50b0Jsb2NrcXVvdGVTdHlsZS0+ZGVyZWYoKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSW50
b0Jsb2NrcXVvdGVTdHlsZSA9IDA7Ci0gICAgICAgIH0KKyAgICAvLyBJZiB3ZSBkZWxldGVkIGlu
dG8gYSBibG9ja3F1b3RlLCBidXQgYXJlIG5vdyBubyBsb25nZXIgaW4gYSBibG9ja3F1b3RlLCB1
c2UgdGhlIGFsdGVybmF0ZSB0eXBpbmcgc3R5bGUKKyAgICBpZiAobV9kZWxldGVJbnRvQmxvY2tx
dW90ZVN0eWxlICYmICFuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9lbmRpbmdQb3NpdGlvbi5ub2Rl
KCkpKSB7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+IG9s
ZFN0eWxlID0gbV90eXBpbmdTdHlsZTsKKyAgICAgICAgbV90eXBpbmdTdHlsZSA9IG1fZGVsZXRl
SW50b0Jsb2NrcXVvdGVTdHlsZTsKICAgICB9CisgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0
eWxlID0gMDsKICAgICAKICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsIGVuZGlu
Z1N0eWxlKG1fZW5kaW5nUG9zaXRpb24ubm9kZSgpKTsKLSAgICBlbmRpbmdTdHlsZS5kaWZmKG1f
dHlwaW5nU3R5bGUpOwotICAgIGlmICghbV90eXBpbmdTdHlsZS0+bGVuZ3RoKCkpIHsKLSAgICAg
ICAgbV90eXBpbmdTdHlsZS0+ZGVyZWYoKTsKKyAgICBlbmRpbmdTdHlsZS5kaWZmKG1fdHlwaW5n
U3R5bGUuZ2V0KCkpOworICAgIGlmICghbV90eXBpbmdTdHlsZS0+bGVuZ3RoKCkpCiAgICAgICAg
IG1fdHlwaW5nU3R5bGUgPSAwOwotICAgIH0KICAgICBpZiAoaW5zZXJ0ZWRQbGFjZWhvbGRlciAm
JiBtX3R5cGluZ1N0eWxlKSB7CiAgICAgICAgIC8vIEFwcGx5IHN0eWxlIHRvIHRoZSBwbGFjZWhv
bGRlci4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHNpbmdsZSBsaW5lIGluIHRoZQogICAgICAg
ICAvLyBwYXJhZ3JhcGggaGFzIHRoZSByaWdodCBoZWlnaHQsIGFuZCB0aGF0IHRoZSBwYXJhZ3Jh
cGggdGFrZXMgb24gdGhlIHN0eWxlCkBAIC02NjIsMTUgKzY0MCwxMyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5CiAgICAgICAgIC8vIGlzIG5vdCByZXRhaW5lZCB1
bnRpbCB0aGUgbmV4dCB0eXBpbmcgYWN0aW9uLgogCiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlv
bihTZWxlY3Rpb25Db250cm9sbGVyKFBvc2l0aW9uKGluc2VydGVkUGxhY2Vob2xkZXIsIDApLCBE
T1dOU1RSRUFNKSk7Ci0gICAgICAgIGFwcGx5U3R5bGUobV90eXBpbmdTdHlsZSwgRWRpdEFjdGlv
blVuc3BlY2lmaWVkKTsKLQotICAgICAgICBtX3R5cGluZ1N0eWxlLT5kZXJlZigpOworICAgICAg
ICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7
CiAgICAgICAgIG1fdHlwaW5nU3R5bGUgPSAwOwogICAgIH0KICAgICAvLyBTZXQgbV90eXBpbmdT
dHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgogICAgIC8vIEl0J3MgcGVyZmVjdGx5IE9LIGZvciBt
X3R5cGluZ1N0eWxlIHRvIGJlIG51bGwuCi0gICAgZG9jdW1lbnQoKS0+cGFydCgpLT5zZXRUeXBp
bmdTdHlsZShtX3R5cGluZ1N0eWxlKTsKLSAgICBzZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxl
KTsKKyAgICBkb2N1bWVudCgpLT5wYXJ0KCktPnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUu
Z2V0KCkpOworICAgIHNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtNjgz
LDI3ICs2NTksNiBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpCiAg
ICAgbV9lbmRpbmdQb3NpdGlvbi5jbGVhcigpOwogICAgIG1fbGVhZGluZ1doaXRlc3BhY2UuY2xl
YXIoKTsKICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZS5jbGVhcigpOwotCi0gICAgaWYgKG1fc3Rh
cnRCbG9jaykgewotICAgICAgICBtX3N0YXJ0QmxvY2stPmRlcmVmKCk7Ci0gICAgICAgIG1fc3Rh
cnRCbG9jayA9IDA7Ci0gICAgfQotICAgIGlmIChtX2VuZEJsb2NrKSB7Ci0gICAgICAgIG1fZW5k
QmxvY2stPmRlcmVmKCk7Ci0gICAgICAgIG1fZW5kQmxvY2sgPSAwOwotICAgIH0KLSAgICBpZiAo
bV9zdGFydE5vZGUpIHsKLSAgICAgICAgbV9zdGFydE5vZGUtPmRlcmVmKCk7Ci0gICAgICAgIG1f
c3RhcnROb2RlID0gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHlwaW5nU3R5bGUpIHsKLSAgICAgICAg
bV90eXBpbmdTdHlsZS0+ZGVyZWYoKTsKLSAgICAgICAgbV90eXBpbmdTdHlsZSA9IDA7Ci0gICAg
fQotICAgIGlmIChtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUpIHsKLSAgICAgICAgbV9kZWxl
dGVJbnRvQmxvY2txdW90ZVN0eWxlLT5kZXJlZigpOwotICAgICAgICBtX2RlbGV0ZUludG9CbG9j
a3F1b3RlU3R5bGUgPSAwOwotICAgIH0KIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKSW5kZXg6IGRlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlv
bl9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IGRl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5oCi0tLSBkZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuaAky
NCBTZXAgMjAwNSAwMToxODo1NSAtMDAwMAkxLjUKKysrIGRlbGV0ZV9zZWxlY3Rpb25fY29tbWFu
ZC5oCTE2IERlYyAyMDA1IDEwOjA4OjAyIC0wMDAwCkBAIC02OSwxMSArNjksMTEgQEAgcHJpdmF0
ZToKICAgICBET006OlBvc2l0aW9uIG1fZW5kaW5nUG9zaXRpb247CiAgICAgRE9NOjpQb3NpdGlv
biBtX2xlYWRpbmdXaGl0ZXNwYWNlOwogICAgIERPTTo6UG9zaXRpb24gbV90cmFpbGluZ1doaXRl
c3BhY2U7Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9zdGFydEJsb2NrOwotICAgIERPTTo6Tm9kZUlt
cGwgKm1fZW5kQmxvY2s7Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9zdGFydE5vZGU7Ci0gICAgRE9N
OjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKm1fdHlwaW5nU3R5bGU7Ci0gICAgRE9N
OjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKm1fZGVsZXRlSW50b0Jsb2NrcXVvdGVT
dHlsZTsKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9zdGFydEJsb2NrOworICAgIFJlZlB0
cjxET006Ok5vZGVJbXBsPiBtX2VuZEJsb2NrOworICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBt
X3N0YXJ0Tm9kZTsKKyAgICBSZWZQdHI8RE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbklt
cGw+IG1fdHlwaW5nU3R5bGU7CisgICAgUmVmUHRyPERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25JbXBsPiBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBraHRtbApJbmRleDogZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEuMTMgZWRpdF9jb21tYW5kLmNwcAotLS0g
ZWRpdF9jb21tYW5kLmNwcAkyIERlYyAyMDA1IDAzOjQ4OjA3IC0wMDAwCTEuMTMKKysrIGVkaXRf
Y29tbWFuZC5jcHAJMTYgRGVjIDIwMDUgMTA6MDg6MDIgLTAwMDAKQEAgLTIwMiwxMSArMjAyLDEw
IEBAIEVkaXRDb21tYW5kUHRyICZFZGl0Q29tbWFuZFB0cjo6ZW1wdHlDb20KIH0KIAogRWRpdENv
bW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50SW1wbCAqZG9jdW1lbnQpIAotICAgIDogbV9kb2N1
bWVudChkb2N1bWVudCksIG1fc3RhdGUoTm90QXBwbGllZCksIG1fdHlwaW5nU3R5bGUoMCksIG1f
cGFyZW50KDApCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KSwgbV9zdGF0ZShOb3RBcHBsaWVk
KSwgbV9wYXJlbnQoMCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1f
ZG9jdW1lbnQtPnBhcnQoKSk7Ci0gICAgbV9kb2N1bWVudC0+cmVmKCk7CiAgICAgbV9zdGFydGlu
Z1NlbGVjdGlvbiA9IG1fZG9jdW1lbnQtPnBhcnQoKS0+c2VsZWN0aW9uKCk7CiAgICAgbV9lbmRp
bmdTZWxlY3Rpb24gPSBtX3N0YXJ0aW5nU2VsZWN0aW9uOwogfQpAQCAtMjE0LDkgKzIxMyw2IEBA
IEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudEltcGwgKmQKIEVkaXRDb21tYW5kOjp+
RWRpdENvbW1hbmQoKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLSAgICBtX2RvY3VtZW50
LT5kZXJlZigpOwotICAgIGlmIChtX3R5cGluZ1N0eWxlKQotICAgICAgICBtX3R5cGluZ1N0eWxl
LT5kZXJlZigpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjphcHBseSgpCkBAIC0zMzcsMTUgKzMz
Myw4IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbihjb24KIAogdm9pZCBF
ZGl0Q29tbWFuZDo6YXNzaWduVHlwaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25J
bXBsICpzdHlsZSkKIHsKLSAgICBpZiAobV90eXBpbmdTdHlsZSA9PSBzdHlsZSkKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKm9s
ZCA9IG1fdHlwaW5nU3R5bGU7Ci0gICAgbV90eXBpbmdTdHlsZSA9IHN0eWxlOwotICAgIGlmICht
X3R5cGluZ1N0eWxlKQotICAgICAgICBtX3R5cGluZ1N0eWxlLT5yZWYoKTsKLSAgICBpZiAob2xk
KQotICAgICAgICBvbGQtPmRlcmVmKCk7CisgICAgaWYgKG1fdHlwaW5nU3R5bGUgIT0gc3R5bGUp
CisgICAgICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6
c2V0VHlwaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSkKQEAg
LTM3MywxMCArMzYyLDggQEAgYm9vbCBFZGl0Q29tbWFuZDo6aXNUeXBpbmdDb21tYW5kKCkgY29u
cwogCiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkVkaXRDb21tYW5kOjpzdHlsZUF0
UG9zaXRpb24oY29uc3QgUG9zaXRpb24gJnBvcykKIHsKLSAgICBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb25JbXBsICpjb21wdXRlZFN0eWxlID0gcG9zaXRpb25CZWZvcmVUYWJTcGFuKHBvcyku
Y29tcHV0ZWRTdHlsZSgpOwotICAgIGNvbXB1dGVkU3R5bGUtPnJlZigpOworICAgIFJlZlB0cjxD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsPiBjb21wdXRlZFN0eWxlID0gcG9zaXRpb25C
ZWZvcmVUYWJTcGFuKHBvcykuY29tcHV0ZWRTdHlsZSgpOwogICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uSW1wbCAqc3R5bGUgPSBjb21wdXRlZFN0eWxlLT5jb3B5SW5oZXJpdGFibGVQcm9w
ZXJ0aWVzKCk7Ci0gICAgY29tcHV0ZWRTdHlsZS0+ZGVyZWYoKTsKICAKICAgICAvLyBGSVhNRTog
SW1wcm92ZSB0eXBpbmcgc3R5bGUuCiAgICAgLy8gU2VlIHRoaXMgYnVnOiA8cmRhcjovL3Byb2Js
ZW0vMzc2OTg5OT4gSW1wbGVtZW50YXRpb24gb2YgdHlwaW5nIHN0eWxlIG5lZWRzIGltcHJvdmVt
ZW50CkluZGV4OiBlZGl0X2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQKZGlmZiAtcCAtdSAtcjEuNCBlZGl0X2NvbW1hbmQuaAotLS0gZWRpdF9jb21tYW5kLmgJ
MSBEZWMgMjAwNSAxMDozMjoxNCAtMDAwMAkxLjQKKysrIGVkaXRfY29tbWFuZC5oCTE2IERlYyAy
MDA1IDEwOjA4OjAyIC0wMDAwCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIERPTTo6
RG9jdW1lbnRJbXBsICogY29uc3QgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50
OyB9CisgICAgdmlydHVhbCBET006OkRvY3VtZW50SW1wbCAqIGNvbnN0IGRvY3VtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQogCiAgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzdGFydGluZ1NlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdTZWxlY3Rpb247
IH0KICAgICBTZWxlY3Rpb25Db250cm9sbGVyIGVuZGluZ1NlbGVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZW5kaW5nU2VsZWN0aW9uOyB9CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApOwogICAgIHZv
aWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IERPTTo6UG9zaXRpb24gJnAsIEVBZmZpbml0eSBh
ZmZpbml0eSk7CiAKLSAgICBET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqdHlw
aW5nU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGluZ1N0eWxlOyB9OworICAgIERPTTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0eXBpbmdTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwaW5nU3R5bGUuZ2V0KCk7IH07CiAgICAgdm9pZCBzZXRUeXBpbmdTdHlsZShET006OkNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqKTsKICAgICAKICAgICBET006OkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGVBdFBvc2l0aW9uKGNvbnN0IERPTTo6UG9zaXRp
b24gJnBvcyk7CkBAIC05MiwxMSArOTIsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9v
bCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0OwogCi0gICAgRE9NOjpEb2N1bWVudEltcGwg
Km1fZG9jdW1lbnQ7CisgICAgUmVmUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBtX2RvY3VtZW50Owog
ICAgIEVDb21tYW5kU3RhdGUgbV9zdGF0ZTsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyIG1fc3Rh
cnRpbmdTZWxlY3Rpb247CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBtX2VuZGluZ1NlbGVjdGlv
bjsKLSAgICBET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqbV90eXBpbmdTdHls
ZTsKKyAgICBSZWZQdHI8RE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+IG1fdHlw
aW5nU3R5bGU7CiAgICAgRWRpdENvbW1hbmQgKm1fcGFyZW50OwogfTsKIApJbmRleDogaW5zZXJ0
X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBpbnNlcnRfaW50b190
ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0tIGluc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNw
cAkyMSBOb3YgMjAwNSAwMToyMDowMyAtMDAwMAkxLjUKKysrIGluc2VydF9pbnRvX3RleHRfbm9k
ZV9jb21tYW5kLmNwcAkxNiBEZWMgMjAwNSAxMDowODowMiAtMDAwMApAQCAtNDMsMTQgKzQzLDEx
IEBAIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXgKICAgICBBU1NFUlQo
bV9vZmZzZXQgPj0gMCk7CiAgICAgQVNTRVJUKCF0ZXh0LmlzRW1wdHkoKSk7CiAgICAgCi0gICAg
bV9ub2RlLT5yZWYoKTsKICAgICBtX3RleHQgPSB0ZXh0LmNvcHkoKTsgLy8gbWFrZSBhIGNvcHkg
dG8gZW5zdXJlIHRoYXQgdGhlIHN0cmluZyBuZXZlciBjaGFuZ2VzCiB9CiAKIEluc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQ6On5JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKCkKIHsKLSAgICBpZiAo
bV9ub2RlKQotICAgICAgICBtX25vZGUtPmRlcmVmKCk7CiB9CiAKIHZvaWQgSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCkluZGV4OiBpbnNlcnRfaW50b190ZXh0X25vZGVfY29t
bWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yCmRpZmYgLXAgLXUgLXIxLjIgaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuaAotLS0g
aW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuaAkxNiBTZXAgMjAwNSAyMjo0MjowNiAtMDAw
MAkxLjIKKysrIGluc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6
MDg6MDIgLTAwMDAKQEAgLTQ2LDEyICs0NiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBET006OlRl
eHRJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgRE9NOjpUZXh0SW1w
bCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogICAgIGludCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIERPTTo6RE9NU3RyaW5nIHRleHQoKSBj
b25zdCB7IHJldHVybiBtX3RleHQ7IH0KIAogcHJpdmF0ZToKLSAgICBET006OlRleHRJbXBsICpt
X25vZGU7CisgICAgUmVmUHRyPERPTTo6VGV4dEltcGw+IG1fbm9kZTsKICAgICBpbnQgbV9vZmZz
ZXQ7CiAgICAgRE9NOjpET01TdHJpbmcgbV90ZXh0OwogfTsKSW5kZXg6IGluc2VydF9ub2RlX2Jl
Zm9yZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQgaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmQu
Y3BwCi0tLSBpbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6
MDMgLTAwMDAJMS40CisrKyBpbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZC5jcHAJMTYgRGVjIDIw
MDUgMTA6MDg6MDIgLTAwMDAKQEAgLTM5LDE5ICszOSwxMyBAQCBJbnNlcnROb2RlQmVmb3JlQ29t
bWFuZDo6SW5zZXJ0Tm9kZUJlZm9yCiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1faW5z
ZXJ0Q2hpbGQoaW5zZXJ0Q2hpbGQpLCBtX3JlZkNoaWxkKHJlZkNoaWxkKQogewogICAgIEFTU0VS
VChtX2luc2VydENoaWxkKTsKLSAgICBtX2luc2VydENoaWxkLT5yZWYoKTsKLQogICAgIEFTU0VS
VChtX3JlZkNoaWxkKTsKLSAgICBtX3JlZkNoaWxkLT5yZWYoKTsKIH0KIAogSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ6On5JbnNlcnROb2RlQmVmb3JlQ29tbWFuZCgpCiB7CiAgICAgQVNTRVJUKG1f
aW5zZXJ0Q2hpbGQpOwotICAgIG1faW5zZXJ0Q2hpbGQtPmRlcmVmKCk7Ci0KICAgICBBU1NFUlQo
bV9yZWZDaGlsZCk7Ci0gICAgbV9yZWZDaGlsZC0+ZGVyZWYoKTsKIH0KIAogdm9pZCBJbnNlcnRO
b2RlQmVmb3JlQ29tbWFuZDo6ZG9BcHBseSgpCkBAIC02MSw3ICs1NSw3IEBAIHZvaWQgSW5zZXJ0
Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIEFTU0VSVChtX3JlZkNoaWxkLT5wYXJl
bnROb2RlKCkpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIG1fcmVmQ2hpbGQt
PnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3JlKG1faW5zZXJ0Q2hpbGQsIG1fcmVmQ2hpbGQsIGV4
Y2VwdGlvbkNvZGUpOworICAgIG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3Jl
KG1faW5zZXJ0Q2hpbGQuZ2V0KCksIG1fcmVmQ2hpbGQuZ2V0KCksIGV4Y2VwdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogfQogCkBAIC03Miw3ICs2Niw3IEBAIHZv
aWQgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvVW5hcHBseSgKICAgICBBU1NFUlQobV9yZWZD
aGlsZC0+cGFyZW50Tm9kZSgpKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICBt
X3JlZkNoaWxkLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG1faW5zZXJ0Q2hpbGQsIGV4Y2Vw
dGlvbkNvZGUpOworICAgIG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobV9p
bnNlcnRDaGlsZC5nZXQoKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNv
ZGUgPT0gMCk7CiB9CiAKSW5kZXg6IGluc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfbm9k
ZV9iZWZvcmVfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBpbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZC5oCi0tLSBpbnNlcnRfbm9kZV9iZWZvcmVf
Y29tbWFuZC5oCTEzIE1heSAyMDA1IDA4OjM3OjE1IC0wMDAwCTEuMQorKysgaW5zZXJ0X25vZGVf
YmVmb3JlX2NvbW1hbmQuaAkxNiBEZWMgMjAwNSAxMDowODowMiAtMDAwMApAQCAtMzksMTIgKzM5
LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwg
dm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIERPTTo6Tm9kZUltcGwgKmluc2VydENoaWxkKCkgY29u
c3QgeyByZXR1cm4gbV9pbnNlcnRDaGlsZDsgfQotICAgIERPTTo6Tm9kZUltcGwgKnJlZkNoaWxk
KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDaGlsZDsgfQorICAgIERPTTo6Tm9kZUltcGwgKmluc2Vy
dENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9pbnNlcnRDaGlsZC5nZXQoKTsgfQorICAgIERPTTo6
Tm9kZUltcGwgKnJlZkNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDaGlsZC5nZXQoKTsgfQog
CiBwcml2YXRlOgotICAgIERPTTo6Tm9kZUltcGwgKm1faW5zZXJ0Q2hpbGQ7Ci0gICAgRE9NOjpO
b2RlSW1wbCAqbV9yZWZDaGlsZDsgCisgICAgUmVmUHRyPERPTTo6Tm9kZUltcGw+IG1faW5zZXJ0
Q2hpbGQ7CisgICAgUmVmUHRyPERPTTo6Tm9kZUltcGw+IG1fcmVmQ2hpbGQ7IAogfTsKIAogfSAv
LyBuYW1lc3BhY2Uga2h0bWwKSW5kZXg6IGluc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAgaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3Jf
Y29tbWFuZC5jcHAKLS0tIGluc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTIx
IE5vdiAyMDA1IDAxOjIwOjAzIC0wMDAwCTEuMTAKKysrIGluc2VydF9wYXJhZ3JhcGhfc2VwYXJh
dG9yX2NvbW1hbmQuY3BwCTE2IERlYyAyMDA1IDEwOjA4OjAzIC0wMDAwCkBAIC01MiwxNSArNTIs
MTMgQEAgdXNpbmcgRE9NOjpUZXh0SW1wbDsKIG5hbWVzcGFjZSBraHRtbCB7CiAKIEluc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQo
RG9jdW1lbnRJbXBsICpkb2N1bWVudCkgCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1
bWVudCksIG1fc3R5bGUoMCkKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KQog
ewogfQogCiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjp+SW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yQ29tbWFuZCgpIAogewogICAgIGRlcmVmTm9kZXNJbkxpc3QoY2xvbmVkTm9kZXMp
OwotICAgIGlmIChtX3N0eWxlKQotICAgICAgICBtX3N0eWxlLT5kZXJlZigpOwogfQogCiBib29s
IEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OnByZXNlcnZlc1R5cGluZ1N0eWxlKCkg
Y29uc3QKQEAgLTg1LDEwICs4Myw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6Y2EKICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSAmJiAhaXNF
bmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlm
IChtX3N0eWxlKQotICAgICAgICBtX3N0eWxlLT5kZXJlZigpOwogICAgIG1fc3R5bGUgPSBzdHls
ZUF0UG9zaXRpb24ocG9zKTsKLSAgICBtX3N0eWxlLT5yZWYoKTsKIH0KIAogdm9pZCBJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjphcHBseVN0eWxlQWZ0ZXJJbnNlcnRpb24oKQpAQCAt
OTksMTAgKzk0LDkgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjphcAog
ICAgICAgICByZXR1cm47CiAKICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsIGVu
ZGluZ1N0eWxlKGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpKTsKLSAgICBlbmRpbmdT
dHlsZS5kaWZmKG1fc3R5bGUpOwotICAgIGlmIChtX3N0eWxlLT5sZW5ndGgoKSA+IDApIHsKLSAg
ICAgICAgYXBwbHlTdHlsZShtX3N0eWxlKTsKLSAgICB9CisgICAgZW5kaW5nU3R5bGUuZGlmZiht
X3N0eWxlLmdldCgpKTsKKyAgICBpZiAobV9zdHlsZS0+bGVuZ3RoKCkgPiAwKQorICAgICAgICBh
cHBseVN0eWxlKG1fc3R5bGUuZ2V0KCkpOwogfQogCiB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQ6OmRvQXBwbHkoKQpJbmRleDogaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3Jf
Y29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Vk
aXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBpbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9j
b21tYW5kLmgKLS0tIGluc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuaAkyNCBNYXkg
MjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGluc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2Nv
bW1hbmQuaAkxNiBEZWMgMjAwNSAxMDowODowMyAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCBwcml2
YXRlOgogCiAgICAgUVB0ckxpc3Q8RE9NOjpOb2RlSW1wbD4gYW5jZXN0b3JzOwogICAgIFFQdHJM
aXN0PERPTTo6Tm9kZUltcGw+IGNsb25lZE5vZGVzOwotICAgIERPTTo6Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25JbXBsICptX3N0eWxlOworICAgIFJlZlB0cjxET006OkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uSW1wbD4gbV9zdHlsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGtodG1sCklu
ZGV4OiBqb2luX3RleHRfbm9kZXNfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9qb2luX3RleHRfbm9kZXNfY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGpvaW5fdGV4dF9ub2Rl
c19jb21tYW5kLmNwcAotLS0gam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1
IDAxOjIwOjAzIC0wMDAwCTEuNAorKysgam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuY3BwCTE2IERl
YyAyMDA1IDEwOjA4OjAzIC0wMDAwCkBAIC00MSwzMyArNDEsMjggQEAgSm9pblRleHROb2Rlc0Nv
bW1hbmQ6OkpvaW5UZXh0Tm9kZXNDb21tYQogewogICAgIEFTU0VSVChtX3RleHQxKTsKICAgICBB
U1NFUlQobV90ZXh0Mik7Ci0gICAgQVNTRVJUKG1fdGV4dDEtPm5leHRTaWJsaW5nKCkgPT0gbV90
ZXh0Mik7CisgICAgQVNTRVJUKG1fdGV4dDEtPm5leHRTaWJsaW5nKCkgPT0gbV90ZXh0Mi5nZXQo
KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEtPmxlbmd0aCgpID4gMCk7CiAgICAgQVNTRVJUKG1fdGV4
dDItPmxlbmd0aCgpID4gMCk7Ci0KLSAgICBtX3RleHQxLT5yZWYoKTsKLSAgICBtX3RleHQyLT5y
ZWYoKTsKIH0KIAogSm9pblRleHROb2Rlc0NvbW1hbmQ6On5Kb2luVGV4dE5vZGVzQ29tbWFuZCgp
CiB7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAgIG1fdGV4dDEtPmRlcmVmKCk7CiAgICAgQVNT
RVJUKG1fdGV4dDIpOwotICAgIG1fdGV4dDItPmRlcmVmKCk7CiB9CiAKIHZvaWQgSm9pblRleHRO
b2Rlc0NvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIEFTU0VSVChtX3RleHQxKTsKICAgICBBU1NF
UlQobV90ZXh0Mik7Ci0gICAgQVNTRVJUKG1fdGV4dDEtPm5leHRTaWJsaW5nKCkgPT0gbV90ZXh0
Mik7CisgICAgQVNTRVJUKG1fdGV4dDEtPm5leHRTaWJsaW5nKCkgPT0gbV90ZXh0Mi5nZXQoKSk7
CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAgICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgw
LCBtX3RleHQxLT5kYXRhKCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25D
b2RlID09IDApOwogCi0gICAgbV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChtX3Rl
eHQxLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX3RleHQyLT5wYXJlbnROb2RlKCktPnJlbW92ZUNo
aWxkKG1fdGV4dDEuZ2V0KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25D
b2RlID09IDApOwogCiAgICAgbV9vZmZzZXQgPSBtX3RleHQxLT5sZW5ndGgoKTsKQEAgLTgzLDEx
ICs3OCwxMSBAQCB2b2lkIEpvaW5UZXh0Tm9kZXNDb21tYW5kOjpkb1VuYXBwbHkoKQogICAgIG1f
dGV4dDItPmRlbGV0ZURhdGEoMCwgbV9vZmZzZXQsIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VS
VChleGNlcHRpb25Db2RlID09IDApOwogCi0gICAgbV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5pbnNl
cnRCZWZvcmUobV90ZXh0MSwgbV90ZXh0MiwgZXhjZXB0aW9uQ29kZSk7CisgICAgbV90ZXh0Mi0+
cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUobV90ZXh0MS5nZXQoKSwgbV90ZXh0Mi5nZXQoKSwg
ZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgICAg
IAogICAgIEFTU0VSVChtX3RleHQyLT5wcmV2aW91c1NpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsK
LSAgICBBU1NFUlQobV90ZXh0Mi0+cHJldmlvdXNTaWJsaW5nKCkgPT0gbV90ZXh0MSk7CisgICAg
QVNTRVJUKG1fdGV4dDItPnByZXZpb3VzU2libGluZygpID09IG1fdGV4dDEuZ2V0KCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBraHRtbApJbmRleDogam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5f
dGV4dF9ub2Rlc19jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11
IC1yMS4yIGpvaW5fdGV4dF9ub2Rlc19jb21tYW5kLmgKLS0tIGpvaW5fdGV4dF9ub2Rlc19jb21t
YW5kLmgJMTYgU2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJMS4yCisrKyBqb2luX3RleHRfbm9kZXNf
Y29tbWFuZC5oCTE2IERlYyAyMDA1IDEwOjA4OjAzIC0wMDAwCkBAIC00MywxMiArNDMsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRv
VW5hcHBseSgpOwogCi0gICAgRE9NOjpUZXh0SW1wbCAqZmlyc3ROb2RlKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0MTsgfQotICAgIERPTTo6VGV4dEltcGwgKnNlY29uZE5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3RleHQyOyB9CisgICAgRE9NOjpUZXh0SW1wbCAqZmlyc3ROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0MS5nZXQoKTsgfQorICAgIERPTTo6VGV4dEltcGwgKnNlY29uZE5vZGUoKSBj
b25zdCB7IHJldHVybiBtX3RleHQyLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NOjpUZXh0
SW1wbCAqbV90ZXh0MTsKLSAgICBET006OlRleHRJbXBsICptX3RleHQyOworICAgIFJlZlB0cjxE
T006OlRleHRJbXBsPiBtX3RleHQxOworICAgIFJlZlB0cjxET006OlRleHRJbXBsPiBtX3RleHQy
OwogICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwogfTsKIApJbmRleDoganNlZGl0aW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pzZWRpdGlu
Zy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtcCAtdSAtcjEuMzUganNlZGl0
aW5nLmNwcAotLS0ganNlZGl0aW5nLmNwcAkyMSBOb3YgMjAwNSAwMToyMDowMyAtMDAwMAkxLjM1
CisrKyBqc2VkaXRpbmcuY3BwCTE2IERlYyAyMDA1IDEwOjA4OjAzIC0wMDAwCkBAIC0xNDUsMTEg
KzE0NSw5IEBAIG5hbWVzcGFjZSB7CiAKIGJvb2wgZXhlY1N0eWxlQ2hhbmdlKEtIVE1MUGFydCAq
cGFydCwgaW50IHByb3BlcnR5SUQsIGNvbnN0IERPTVN0cmluZyAmcHJvcGVydHlWYWx1ZSkKIHsK
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlID0gbmV3IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25JbXBsPiBzdHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpOwotICAgIHN0
eWxlLT5yZWYoKTsKLSAgICBwYXJ0LT5hcHBseVN0eWxlKHN0eWxlKTsKLSAgICBzdHlsZS0+ZGVy
ZWYoKTsKKyAgICBwYXJ0LT5hcHBseVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTYwLDIxICsxNTgsMTcgQEAgYm9vbCBleGVjU3R5bGVDaGFuZ2UoS0hUTUxQ
YXJ0ICpwYXJ0LCBpbgogCiBLSFRNTFBhcnQ6OlRyaVN0YXRlIHN0YXRlU3R5bGUoS0hUTUxQYXJ0
ICpwYXJ0LCBpbnQgcHJvcGVydHlJRCwgY29uc3QgY2hhciAqZGVzaXJlZFZhbHVlKQogewotICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb25JbXBsOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bkltcGw+IHN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKICAgICBz
dHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZGVzaXJlZFZhbHVlKTsKLSAgICBzdHlsZS0+
cmVmKCk7Ci0gICAgS0hUTUxQYXJ0OjpUcmlTdGF0ZSBzdGF0ZSA9IHBhcnQtPnNlbGVjdGlvbkhh
c1N0eWxlKHN0eWxlKTsKLSAgICBzdHlsZS0+ZGVyZWYoKTsKKyAgICBLSFRNTFBhcnQ6OlRyaVN0
YXRlIHN0YXRlID0gcGFydC0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpOwogICAgIHJl
dHVybiBzdGF0ZTsKIH0KIAogYm9vbCBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKEtIVE1MUGFydCAq
cGFydCwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIgKmRlc2lyZWRWYWx1ZSkKIHsKLSAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlID0gbmV3IENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uSW1wbDsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25J
bXBsPiBzdHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CiAgICAgc3R5
bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIGRlc2lyZWRWYWx1ZSk7Ci0gICAgc3R5bGUtPnJl
ZigpOwotICAgIGJvb2wgaGFzU3R5bGUgPSBwYXJ0LT5zZWxlY3Rpb25TdGFydEhhc1N0eWxlKHN0
eWxlKTsKLSAgICBzdHlsZS0+ZGVyZWYoKTsKKyAgICBib29sIGhhc1N0eWxlID0gcGFydC0+c2Vs
ZWN0aW9uU3RhcnRIYXNTdHlsZShzdHlsZS5nZXQoKSk7CiAgICAgcmV0dXJuIGhhc1N0eWxlOwog
fQogCkluZGV4OiBtYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40Mgpk
aWZmIC1wIC11IC1yMS40MiBtYXJrdXAuY3BwCi0tLSBtYXJrdXAuY3BwCTEgRGVjIDIwMDUgMTA6
MzI6MTQgLTAwMDAJMS40MgorKysgbWFya3VwLmNwcAkxNiBEZWMgMjAwNSAxMDowODowNCAtMDAw
MApAQCAtMzU0LDIwICszNTQsMTUgQEAgUVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2VJ
bXBsICpyYQogCiAgICAgLy8gY2FsY3VsYXRlIHRoZSAiZGVmYXVsdCBzdHlsZSIgZm9yIHRoaXMg
bWFya3VwCiAgICAgUG9zaXRpb24gcG9zKGRvYy0+ZG9jdW1lbnRFbGVtZW50KCksIDApOwotICAg
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKmNvbXB1dGVkU3R5bGUgPSBwb3MuY29t
cHV0ZWRTdHlsZSgpOwotICAgIGNvbXB1dGVkU3R5bGUtPnJlZigpOwotICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbCAqZGVmYXVsdFN0eWxlID0gY29tcHV0ZWRTdHlsZS0+Y29weUlu
aGVyaXRhYmxlUHJvcGVydGllcygpOwotICAgIGNvbXB1dGVkU3R5bGUtPmRlcmVmKCk7Ci0gICAg
ZGVmYXVsdFN0eWxlLT5yZWYoKTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uSW1wbD4gY29tcHV0ZWRTdHlsZSA9IHBvcy5jb21wdXRlZFN0eWxlKCk7CisgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4gZGVmYXVsdFN0eWxlID0gY29tcHV0ZWRT
dHlsZS0+Y29weUluaGVyaXRhYmxlUHJvcGVydGllcygpOwogICAgIAogICAgIE5vZGVJbXBsICpz
dGFydE5vZGUgPSByYW5nZS0+c3RhcnROb2RlKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVTdGFydChyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChyYW5nZS0+ZW5kUG9zaXRpb24oKSwgVlBfREVG
QVVMVF9BRkZJTklUWSk7CiAgICAgaWYgKCFpblNhbWVCbG9jayh2aXNpYmxlU3RhcnQsIHZpc2li
bGVTdGFydC5uZXh0KCkpKSB7Ci0gICAgICAgIGlmICh2aXNpYmxlU3RhcnQgPT0gdmlzaWJsZUVu
ZC5wcmV2aW91cygpKSB7Ci0gICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmRlcmVmKCk7CisgICAg
ICAgIGlmICh2aXNpYmxlU3RhcnQgPT0gdmlzaWJsZUVuZC5wcmV2aW91cygpKQogICAgICAgICAg
ICAgcmV0dXJuIGludGVyY2hhbmdlTmV3bGluZVN0cmluZzsKLSAgICAgICAgfQogICAgICAgICBt
YXJrdXBzLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOwogICAgICAgICBzdGFydE5v
ZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICB9CkBAIC0zODQsNyArMzc5
LDcgQEAgUVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2VJbXBsICpyYQogICAgICAgICAK
ICAgICAgICAgLy8gQWRkIHRoZSBub2RlIHRvIHRoZSBtYXJrdXAuCiAgICAgICAgIGlmIChuLT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChzdGFydE1hcmt1cChuLCBy
YW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZSkpOworICAgICAgICAgICAgbWFya3Vwcy5hcHBl
bmQoc3RhcnRNYXJrdXAobiwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsK
ICAgICAgICAgICAgIGlmIChub2RlcykgewogICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQo
bik7CiAgICAgICAgICAgICB9CkBAIC00MTYsNyArNDExLDcgQEAgUVN0cmluZyBjcmVhdGVNYXJr
dXAoY29uc3QgUmFuZ2VJbXBsICpyYQogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwg
Km5leHRQYXJlbnQgPSBuZXh0LT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobiAhPSBuZXh0UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChOb2RlSW1wbCAqcGFyZW50ID0gbi0+cGFyZW50KCk7IHBhcmVudCAhPSAwICYmIHBhcmVudCAh
PSBuZXh0UGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAocGFyZW50
LCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAocGFyZW50LCByYW5nZSwgYW5u
b3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXJrdXBzLmFwcGVuZChlbmRNYXJrdXAocGFyZW50KSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZXMtPmFwcGVuZChwYXJlbnQpOwpAQCAtNDU0LDcgKzQ0OSw3IEBAIFFTdHJp
bmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlSW1wbCAqcmEKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFy
a3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1
bHRTdHlsZSkpOworICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2Vz
dG9yLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAg
bWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICBpZiAobm9k
ZXMpIHsKICAgICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGFuY2VzdG9yKTsKQEAgLTQ3Myw3
ICs0NjgsNyBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZUltcGwgKnJhCiAgICAg
Ly8gUmV0YWluIHRoZSBNYWlsIHF1b3RlIGxldmVsIGJ5IGluY2x1ZGluZyBhbGwgYW5jZXN0b3Ig
bWFpbCBibG9jayBxdW90ZXMuCiAgICAgZm9yIChOb2RlSW1wbCAqYW5jZXN0b3IgPSBjb21tb25B
bmNlc3RvckJsb2NrOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgp
KSB7CiAgICAgICAgIGlmIChpc01haWxCbG9ja3F1b3RlKGFuY2VzdG9yKSkgewotICAgICAgICAg
ICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5ub3RhdGUs
IGRlZmF1bHRTdHlsZSkpOworICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3Vw
KGFuY2VzdG9yLCByYW5nZSwgYW5ub3RhdGUsIGRlZmF1bHRTdHlsZS5nZXQoKSkpOwogICAgICAg
ICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC00ODMsMjIgKzQ3OCwyMSBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5n
ZUltcGwgKnJhCiAgICAgUVN0cmluZyBvcGVuVGFnID0gUVN0cmluZygiPHNwYW4gY2xhc3M9XCIi
KSArIEFwcGxlU3R5bGVTcGFuQ2xhc3MgKyAiXCIgc3R5bGU9XCIiICsgZGVmYXVsdFN0eWxlLT5j
c3NUZXh0KCkucXN0cmluZygpICsgIlwiPiI7CiAgICAgbWFya3Vwcy5wcmVwZW5kKG9wZW5UYWcp
OwogICAgIG1hcmt1cHMuYXBwZW5kKCI8L3NwYW4+Iik7Ci0gICAgZGVmYXVsdFN0eWxlLT5kZXJl
ZigpOwogCiAgICAgcmV0dXJuIG1hcmt1cHMuam9pbigiIik7CiB9CiAKLURvY3VtZW50RnJhZ21l
bnRJbXBsICpjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnRJbXBsICpkb2N1bWVudCwg
Y29uc3QgUVN0cmluZyAmbWFya3VwLCBjb25zdCBRU3RyaW5nICZiYXNlVVJMKQorUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50SW1wbD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50
SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFFTdHJpbmcgJm1hcmt1cCwgY29uc3QgUVN0cmluZyAmYmFz
ZVVSTCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLT5pc0hUTUxF
bGVtZW50KCkpOwogICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBkb2N1bWVudCBlbGVtZW50IGlz
IG5vdCBhbiBIVE1MIGVsZW1lbnQ/CiAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSk7
CiAKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBlbGVtZW50LT5jcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnRJbXBsPiBmcmFnbWVudCA9IGVsZW1lbnQtPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJr
dXApOwogICAgIEFTU0VSVChmcmFnbWVudCk7CiAKICAgICBpZiAoIWJhc2VVUkwuaXNFbXB0eSgp
ICYmIGJhc2VVUkwgIT0gZG9jdW1lbnQtPmJhc2VVUkwoKSkKLSAgICAgICAgY29tcGxldGVVUkxz
KGZyYWdtZW50LCBiYXNlVVJMKTsKKyAgICAgICAgY29tcGxldGVVUkxzKGZyYWdtZW50LmdldCgp
LCBiYXNlVVJMKTsKIAogICAgIHJldHVybiBmcmFnbWVudDsKIH0KQEAgLTU1MywxMyArNTQ3LDEy
IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVBhcmFncmFwaENvbnRlbnRzRnJvbVMKICAgICB9CiB9CiAK
LURPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmNyZWF0ZUZyYWdtZW50RnJvbVRleHQoRE9NOjpE
b2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBRU3RyaW5nICZ0ZXh0KQorUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50SW1wbD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChEb2N1bWVudEltcGwg
KmRvY3VtZW50LCBjb25zdCBRU3RyaW5nICZ0ZXh0KQogewogICAgIGlmICghZG9jdW1lbnQpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0g
ZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICBmcmFnbWVudC0+cmVmKCk7
CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50SW1wbD4gZnJhZ21lbnQgPSBkb2N1bWVu
dC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICghdGV4dC5pc0VtcHR5
KCkpIHsKICAgICAgICAgUVN0cmluZyBzdHJpbmcgPSB0ZXh0OwpAQCAtNTczLDU5ICs1NjYsNDMg
QEAgRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqY3JlYXRlRnJhZ21lbgogICAgICAgICAgICAg
bGlzdC5wb3BfZnJvbnQoKTsKIAogICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwot
ICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQ7CisgICAgICAgICAgICBSZWZQdHI8RWxl
bWVudEltcGw+IGVsZW1lbnQ7CiAgICAgICAgICAgICBpZiAocy5pc0VtcHR5KCkgJiYgbGlzdC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGb3IgbGFzdCBsaW5lLCB1c2UgdGhlICJt
YWdpYyBCUiIgcmF0aGVyIHRoYW4gYSBQLgogICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1
bWVudC0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAiYnIiLCBleGNlcHRpb25D
b2RlKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKLSAgICAg
ICAgICAgICAgICBlbGVtZW50LT5yZWYoKTsKICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRB
dHRyaWJ1dGUoY2xhc3NBdHRyLCBBcHBsZUludGVyY2hhbmdlTmV3bGluZSk7ICAgICAgICAgICAg
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVE
ZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1bWVudCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVu
dC0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgY3JlYXRlUGFyYWdyYXBoQ29udGVudHNGcm9tU3Ry
aW5nKGRvY3VtZW50LCBlbGVtZW50LCBzKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVQYXJhZ3Jh
cGhDb250ZW50c0Zyb21TdHJpbmcoZG9jdW1lbnQsIGVsZW1lbnQuZ2V0KCksIHMpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQsIGV4Y2Vw
dGlvbkNvZGUpOworICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQuZ2V0
KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0g
MCk7Ci0gICAgICAgICAgICBlbGVtZW50LT5kZXJlZigpOwogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIC8vIFRyaWNrIHRvIGdldCB0aGUgZnJhZ21lbnQgYmFjayB0byB0aGUgZmxvYXRpbmcg
c3RhdGUsIHdpdGggMAotICAgIC8vIHJlZnMgYnV0IG5vdCBkZXN0cm95ZWQuCi0gICAgZnJhZ21l
bnQtPnNldFBhcmVudChkb2N1bWVudCk7Ci0gICAgZnJhZ21lbnQtPmRlcmVmKCk7CiAgICAgZnJh
Z21lbnQtPnNldFBhcmVudCgwKTsKLSAgICAKICAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAKLURP
TTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmNyZWF0ZUZyYWdtZW50RnJvbU5vZGVMaXN0KERPTTo6
RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgUVB0ckxpc3Q8RE9NOjpOb2RlSW1wbD4gJm5v
ZGVMaXN0KQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50SW1wbD4gY3JlYXRlRnJhZ21lbnRG
cm9tTm9kZUxpc3QoRG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgUVB0ckxpc3Q8Tm9kZUlt
cGw+ICZub2RlTGlzdCkKIHsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBkb2N1bWVudC0+Y3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5yZWYoKTsKKyAgICBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnRJbXBsPiBmcmFnbWVudCA9IGRvY3VtZW50LT5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7CiAgICAgCi0gICAgRWxlbWVudEltcGwgKmVsZW1lbnQ7CisgICAgUmVm
UHRyPEVsZW1lbnRJbXBsPiBlbGVtZW50OwogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKICAg
ICBmb3IgKFFQdHJMaXN0SXRlcmF0b3I8Tm9kZUltcGw+IGkobm9kZUxpc3QpOyBpLmN1cnJlbnQo
KTsgKytpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVu
dChkb2N1bWVudCk7Ci0gICAgICAgIGVsZW1lbnQtPnJlZigpOwogICAgICAgICBlbGVtZW50LT5h
cHBlbmRDaGlsZChpLmN1cnJlbnQoKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIEFTU0VSVChl
eGNlcHRpb25Db2RlID09IDApOwotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVu
dCwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50
LmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0g
MCk7Ci0gICAgICAgIGVsZW1lbnQtPmRlcmVmKCk7CiAgICAgfQogICAgIAotICAgIC8vIFRyaWNr
IHRvIGdldCB0aGUgZnJhZ21lbnQgYmFjayB0byB0aGUgZmxvYXRpbmcgc3RhdGUsIHdpdGggMAot
ICAgIC8vIHJlZnMgYnV0IG5vdCBkZXN0cm95ZWQuCi0gICAgZnJhZ21lbnQtPnNldFBhcmVudChk
b2N1bWVudCk7Ci0gICAgZnJhZ21lbnQtPmRlcmVmKCk7CiAgICAgZnJhZ21lbnQtPnNldFBhcmVu
dCgwKTsKLSAgICAKICAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAKSW5kZXg6IG1hcmt1cC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3Vw
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIG1hcmt1cC5oCi0t
LSBtYXJrdXAuaAkzMCBOb3YgMjAwNSAwMjowNjozMyAtMDAwMAkxLjIKKysrIG1hcmt1cC5oCTE2
IERlYyAyMDA1IDEwOjA4OjA0IC0wMDAwCkBAIC0yOCwxNCArMjgsMTUgQEAKIAogI2luY2x1ZGUg
PHhtbC9kb21fZG9jaW1wbC5oPgogI2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2UuaCIKKyNpbmNs
dWRlIDxreG1sY29yZS9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKIGVudW0g
RUNoaWxkcmVuT25seSB7IEluY2x1ZGVOb2RlLCBDaGlsZHJlbk9ubHkgfTsKIAotRE9NOjpEb2N1
bWVudEZyYWdtZW50SW1wbCAqY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChET006OkRvY3VtZW50SW1w
bCAqZG9jdW1lbnQsIGNvbnN0IFFTdHJpbmcgJnRleHQpOwotRE9NOjpEb2N1bWVudEZyYWdtZW50
SW1wbCAqY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVu
dCwgY29uc3QgUVN0cmluZyAmbWFya3VwLCBjb25zdCBRU3RyaW5nICZiYXNlVVJMKTsKLURPTTo6
RG9jdW1lbnRGcmFnbWVudEltcGwgKmNyZWF0ZUZyYWdtZW50RnJvbU5vZGVMaXN0KERPTTo6RG9j
dW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgUVB0ckxpc3Q8RE9NOjpOb2RlSW1wbD4gJm5vZGVM
aXN0KTsKK1Bhc3NSZWZQdHI8RE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbD4gY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dChET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFFTdHJpbmcgJnRl
eHQpOworUGFzc1JlZlB0cjxET006OkRvY3VtZW50RnJhZ21lbnRJbXBsPiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBRU3RyaW5nICZt
YXJrdXAsIGNvbnN0IFFTdHJpbmcgJmJhc2VVUkwpOworUGFzc1JlZlB0cjxET006OkRvY3VtZW50
RnJhZ21lbnRJbXBsPiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlTGlzdChET006OkRvY3VtZW50SW1w
bCAqZG9jdW1lbnQsIGNvbnN0IFFQdHJMaXN0PERPTTo6Tm9kZUltcGw+ICZub2RlTGlzdCk7CiAK
IFFTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IERPTTo6UmFuZ2VJbXBsICpyYW5nZSwKICAgICBR
UHRyTGlzdDxET006Ok5vZGVJbXBsPiAqbm9kZXMgPSAwLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSA9IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CkluZGV4OiBtZXJnZV9pZGVudGljYWxf
ZWxlbWVudHNfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZWRpdGluZy9tZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IG1lcmdlX2lkZW50aWNhbF9l
bGVtZW50c19jb21tYW5kLmNwcAotLS0gbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQu
Y3BwCTIxIE5vdiAyMDA1IDAxOjIwOjA0IC0wMDAwCTEuNAorKysgbWVyZ2VfaWRlbnRpY2FsX2Vs
ZW1lbnRzX2NvbW1hbmQuY3BwCTE2IERlYyAyMDA1IDEwOjA4OjA0IC0wMDAwCkBAIC0zNyw0NSAr
MzcsMzUgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIG5hbWVzcGFjZSBraHRtbCB7CiAKIE1l
cmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZChET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIERPTTo6RWxlbWVudEltcGwgKmZpcnN0LCBE
T006OkVsZW1lbnRJbXBsICpzZWNvbmQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1f
ZWxlbWVudDEoZmlyc3QpLCBtX2VsZW1lbnQyKHNlY29uZCksIG1fYXRDaGlsZCgwKQorICAgIDog
RWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX2VsZW1lbnQxKGZpcnN0KSwgbV9lbGVtZW50MihzZWNv
bmQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudDEpOwogICAgIEFTU0VSVChtX2VsZW1lbnQyKTsK
LQotICAgIG1fZWxlbWVudDEtPnJlZigpOwotICAgIG1fZWxlbWVudDItPnJlZigpOwogfQogCiBN
ZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6fk1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kKCkKIHsKLSAgICBpZiAobV9hdENoaWxkKQotICAgICAgICBtX2F0Q2hpbGQtPmRlcmVmKCk7
Ci0KICAgICBBU1NFUlQobV9lbGVtZW50MSk7Ci0gICAgbV9lbGVtZW50MS0+ZGVyZWYoKTsKICAg
ICBBU1NFUlQobV9lbGVtZW50Mik7Ci0gICAgbV9lbGVtZW50Mi0+ZGVyZWYoKTsKIH0KIAogdm9p
ZCBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQVNTRVJU
KG1fZWxlbWVudDEpOwogICAgIEFTU0VSVChtX2VsZW1lbnQyKTsKLSAgICBBU1NFUlQobV9lbGVt
ZW50MS0+bmV4dFNpYmxpbmcoKSA9PSBtX2VsZW1lbnQyKTsKKyAgICBBU1NFUlQobV9lbGVtZW50
MS0+bmV4dFNpYmxpbmcoKSA9PSBtX2VsZW1lbnQyLmdldCgpKTsKIAogICAgIGludCBleGNlcHRp
b25Db2RlID0gMDsKIAotICAgIGlmICghbV9hdENoaWxkKSB7CisgICAgaWYgKCFtX2F0Q2hpbGQp
CiAgICAgICAgIG1fYXRDaGlsZCA9IG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAg
bV9hdENoaWxkLT5yZWYoKTsKLSAgICB9CiAKICAgICB3aGlsZSAobV9lbGVtZW50MS0+bGFzdENo
aWxkKCkpIHsKICAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEtPmxh
c3RDaGlsZCgpLCBtX2VsZW1lbnQyLT5maXJzdENoaWxkKCksIGV4Y2VwdGlvbkNvZGUpOwogICAg
ICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICB9CiAKLSAgICBtX2VsZW1lbnQy
LT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG1fZWxlbWVudDEsIGV4Y2VwdGlvbkNvZGUpOwor
ICAgIG1fZWxlbWVudDItPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobV9lbGVtZW50MS5nZXQo
KSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiB9CiAK
QEAgLTg2LDcgKzc2LDcgQEAgdm9pZCBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9V
bgogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogCi0gICAgbV9lbGVtZW50Mi0+cGFyZW50
KCktPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLCBtX2VsZW1lbnQyLCBleGNlcHRpb25Db2RlKTsK
KyAgICBtX2VsZW1lbnQyLT5wYXJlbnQoKS0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEuZ2V0KCks
IG1fZWxlbWVudDIuZ2V0KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25D
b2RlID09IDApOwogCiAgICAgd2hpbGUgKG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKSAhPSBtX2F0
Q2hpbGQpIHsKSW5kZXg6IG1lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9tZXJnZV9pZGVu
dGljYWxfZWxlbWVudHNfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBtZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5oCi0tLSBtZXJnZV9p
ZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5oCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEu
MQorKysgbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuaAkxNiBEZWMgMjAwNSAxMDow
ODowNCAtMDAwMApAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRv
VW5hcHBseSgpOwogCiBwcml2YXRlOgotICAgIERPTTo6RWxlbWVudEltcGwgKm1fZWxlbWVudDE7
Ci0gICAgRE9NOjpFbGVtZW50SW1wbCAqbV9lbGVtZW50MjsKLSAgICBET006Ok5vZGVJbXBsICpt
X2F0Q2hpbGQ7CisgICAgUmVmUHRyPERPTTo6RWxlbWVudEltcGw+IG1fZWxlbWVudDE7CisgICAg
UmVmUHRyPERPTTo6RWxlbWVudEltcGw+IG1fZWxlbWVudDI7CisgICAgUmVmUHRyPERPTTo6Tm9k
ZUltcGw+IG1fYXRDaGlsZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGtodG1sCkluZGV4OiBtb3Zl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBtb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAotLS0gbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDQgLTAw
MDAJMS42CisrKyBtb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkxNiBEZWMgMjAwNSAxMDowODow
NCAtMDAwMApAQCAtNDIsMTMgKzQyLDExIEBAIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2Vs
ZWN0aW9uQ29tbWEKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9mcmFn
bWVudChmcmFnbWVudCksIG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX3NtYXJ0TW92ZShzbWFydE1v
dmUpCiB7CiAgICAgQVNTRVJUKG1fZnJhZ21lbnQpOwotICAgIG1fZnJhZ21lbnQtPnJlZigpOwog
fQogCiBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6fk1vdmVTZWxlY3Rpb25Db21tYW5kKCkKIHsKICAg
ICBBU1NFUlQobV9mcmFnbWVudCk7Ci0gICAgbV9mcmFnbWVudC0+ZGVyZWYoKTsKIH0KIAogdm9p
ZCBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCkBAIC04NCw3ICs4Miw3IEBAIHZvaWQg
TW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBwb3MgPSBlbmRpbmdTZWxl
Y3Rpb24oKS5zdGFydCgpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKHBvcywgZW5kaW5nU2Vs
ZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKTsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kKGRvY3VtZW50KCksIG1fZnJhZ21lbnQsIHRydWUsIG1fc21h
cnRNb3ZlKSk7CisgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZChkb2N1bWVudCgpLCBtX2ZyYWdtZW50LmdldCgpLCB0cnVlLCBtX3NtYXJ0TW92ZSkpOwog
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CiB9CiAKSW5kZXg6IG1vdmVfc2VsZWN0
aW9uX2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEgbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5oCi0tLSBtb3ZlX3Nl
bGVjdGlvbl9jb21tYW5kLmgJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBtb3Zl
X3NlbGVjdGlvbl9jb21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6MDg6MDQgLTAwMDAKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkg
Y29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKm1f
ZnJhZ21lbnQ7CisgICAgUmVmUHRyPERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGw+IG1fZnJhZ21l
bnQ7CiAgICAgRE9NOjpQb3NpdGlvbiBtX3Bvc2l0aW9uOwogICAgIGJvb2wgbV9zbWFydE1vdmU7
CiB9OwpJbmRleDogcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9jc3NfcHJvcGVy
dHlfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40
IHJlbW92ZV9jc3NfcHJvcGVydHlfY29tbWFuZC5jcHAKLS0tIHJlbW92ZV9jc3NfcHJvcGVydHlf
Y29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDQgLTAwMDAJMS40CisrKyByZW1vdmVfY3Nz
X3Byb3BlcnR5X2NvbW1hbmQuY3BwCTE2IERlYyAyMDA1IDEwOjA4OjA0IC0wMDAwCkBAIC00MCwx
MyArNDAsMTEgQEAgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpSZW1vdmVDU1NQcm9wZQogICAg
IDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX2RlY2woZGVjbC0+bWFrZU11dGFibGUoKSksIG1f
cHJvcGVydHkocHJvcGVydHkpLCBtX2ltcG9ydGFudChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9k
ZWNsKTsKLSAgICBtX2RlY2wtPnJlZigpOwogfQogCiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6
On5SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQoKQogewogICAgIEFTU0VSVChtX2RlY2wpOwotICAg
IG1fZGVjbC0+ZGVyZWYoKTsKIH0KIAogdm9pZCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OmRv
QXBwbHkoKQpJbmRleDogcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfY3NzX3Byb3Bl
cnR5X2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
cmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmgKLS0tIHJlbW92ZV9jc3NfcHJvcGVydHlfY29t
bWFuZC5oCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysgcmVtb3ZlX2Nzc19wcm9w
ZXJ0eV9jb21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6MDg6MDQgLTAwMDAKQEAgLTQ1LDExICs0NSwx
MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZv
aWQgZG9VbmFwcGx5KCk7CiAKLSAgICBET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1w
bCAqc3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVjbDsgfQorICAgIERPTTo6
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZURlY2xhcmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNsLmdldCgpOyB9CiAgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eTsgfQogICAgIAogcHJpdmF0ZToKLSAgICBET006OkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uSW1wbCAqbV9kZWNsOworICAgIFJlZlB0cjxET006OkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uSW1wbD4gbV9kZWNsOwogICAgIGludCBtX3Byb3BlcnR5OwogICAgIERPTTo6
RE9NU3RyaW5nIG1fb2xkVmFsdWU7CiAgICAgYm9vbCBtX2ltcG9ydGFudDsKSW5kZXg6IHJlbW92
ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYgcmVtb3ZlX25vZGVf
YXR0cmlidXRlX2NvbW1hbmQuY3BwCi0tLSByZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5j
cHAJMjEgTm92IDIwMDUgMDE6MjA6MDQgLTAwMDAJMS42CisrKyByZW1vdmVfbm9kZV9hdHRyaWJ1
dGVfY29tbWFuZC5jcHAJMTYgRGVjIDIwMDUgMTA6MDg6MDQgLTAwMDAKQEAgLTQxLDEzICs0MSwx
MSBAQCBSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZDo6UmVtb3ZlTm9kZUF0CiAgICAgOiBFZGl0
Q29tbWFuZChkb2N1bWVudCksIG1fZWxlbWVudChlbGVtZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmli
dXRlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+cmVmKCk7CiB9
CiAKIFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kOjp+UmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1h
bmQoKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZGVyZWYoKTsK
IH0KIAogdm9pZCBSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZDo6ZG9BcHBseSgpCkluZGV4OiBy
ZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIgcmVtb3ZlX25vZGVf
YXR0cmlidXRlX2NvbW1hbmQuaAotLS0gcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuaAkx
OCBKdWwgMjAwNSAyMTo0NDoxOCAtMDAwMAkxLjIKKysrIHJlbW92ZV9ub2RlX2F0dHJpYnV0ZV9j
b21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6MDg6MDQgLTAwMDAKQEAgLTQyLDExICs0MiwxMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9V
bmFwcGx5KCk7CiAKLSAgICBET006OkVsZW1lbnRJbXBsICplbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50OyB9CisgICAgRE9NOjpFbGVtZW50SW1wbCAqZWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAgIGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGU7IH0KICAgICAKIHByaXZhdGU6
Ci0gICAgRE9NOjpFbGVtZW50SW1wbCAqbV9lbGVtZW50OworICAgIFJlZlB0cjxET006OkVsZW1l
bnRJbXBsPiBtX2VsZW1lbnQ7CiAgICAgRE9NOjpRdWFsaWZpZWROYW1lIG1fYXR0cmlidXRlOwog
ICAgIERPTTo6RE9NU3RyaW5nIG1fb2xkVmFsdWU7CiB9OwpJbmRleDogcmVtb3ZlX25vZGVfY29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9yZW1vdmVfbm9kZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRp
ZmYgLXAgLXUgLXIxLjQgcmVtb3ZlX25vZGVfY29tbWFuZC5jcHAKLS0tIHJlbW92ZV9ub2RlX2Nv
bW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAxOjIwOjA1IC0wMDAwCTEuNAorKysgcmVtb3ZlX25vZGVf
Y29tbWFuZC5jcHAJMTYgRGVjIDIwMDUgMTA6MDg6MDQgLTAwMDAKQEAgLTM2LDMwICszNiwxNyBA
QCB1c2luZyBET006Ok5vZGVJbXBsOwogbmFtZXNwYWNlIGtodG1sIHsKIAogUmVtb3ZlTm9kZUNv
bW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKERvY3VtZW50SW1wbCAqZG9jdW1lbnQsIE5vZGVJbXBs
ICpyZW1vdmVDaGlsZCkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9wYXJlbnQoMCks
IG1fcmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpLCBtX3JlZkNoaWxkKDApCisgICAgOiBFZGl0Q29t
bWFuZChkb2N1bWVudCksIG1fcGFyZW50KG1fcmVtb3ZlQ2hpbGQtPnBhcmVudE5vZGUoKSksIG1f
cmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpCiB7CiAgICAgQVNTRVJUKG1fcmVtb3ZlQ2hpbGQpOwot
ICAgIG1fcmVtb3ZlQ2hpbGQtPnJlZigpOwotCi0gICAgbV9wYXJlbnQgPSBtX3JlbW92ZUNoaWxk
LT5wYXJlbnROb2RlKCk7CiAgICAgQVNTRVJUKG1fcGFyZW50KTsKLSAgICBtX3BhcmVudC0+cmVm
KCk7Ci0gICAgCiAgICAgbV9yZWZDaGlsZCA9IG1fcmVtb3ZlQ2hpbGQtPm5leHRTaWJsaW5nKCk7
Ci0gICAgaWYgKG1fcmVmQ2hpbGQpCi0gICAgICAgIG1fcmVmQ2hpbGQtPnJlZigpOwogfQogCiBS
ZW1vdmVOb2RlQ29tbWFuZDo6flJlbW92ZU5vZGVDb21tYW5kKCkKIHsKICAgICBBU1NFUlQobV9w
YXJlbnQpOwotICAgIG1fcGFyZW50LT5kZXJlZigpOwotCiAgICAgQVNTRVJUKG1fcmVtb3ZlQ2hp
bGQpOwotICAgIG1fcmVtb3ZlQ2hpbGQtPmRlcmVmKCk7Ci0KLSAgICBpZiAobV9yZWZDaGlsZCkK
LSAgICAgICAgbV9yZWZDaGlsZC0+ZGVyZWYoKTsKIH0KIAogdm9pZCBSZW1vdmVOb2RlQ29tbWFu
ZDo6ZG9BcHBseSgpCkBAIC02OCw3ICs1NSw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIEFTU0VSVChtX3JlbW92ZUNoaWxkKTsKIAogICAgIGludCBleGNlcHRpb25D
b2RlID0gMDsKLSAgICBtX3BhcmVudC0+cmVtb3ZlQ2hpbGQobV9yZW1vdmVDaGlsZCwgZXhjZXB0
aW9uQ29kZSk7CisgICAgbV9wYXJlbnQtPnJlbW92ZUNoaWxkKG1fcmVtb3ZlQ2hpbGQuZ2V0KCks
IGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogfQogCkBA
IC03OCw3ICs2NSw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAg
QVNTRVJUKG1fcmVtb3ZlQ2hpbGQpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAg
IG1fcGFyZW50LT5pbnNlcnRCZWZvcmUobV9yZW1vdmVDaGlsZCwgbV9yZWZDaGlsZCwgZXhjZXB0
aW9uQ29kZSk7CisgICAgbV9wYXJlbnQtPmluc2VydEJlZm9yZShtX3JlbW92ZUNoaWxkLmdldCgp
LCBtX3JlZkNoaWxkLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9u
Q29kZSA9PSAwKTsKIH0KIApJbmRleDogcmVtb3ZlX25vZGVfY29tbWFuZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29t
bWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSByZW1vdmVf
bm9kZV9jb21tYW5kLmgKLS0tIHJlbW92ZV9ub2RlX2NvbW1hbmQuaAkyNCBNYXkgMjAwNSAwNzoy
MTo0NyAtMDAwMAkxLjEKKysrIHJlbW92ZV9ub2RlX2NvbW1hbmQuaAkxNiBEZWMgMjAwNSAxMDow
ODowNCAtMDAwMApAQCAtMzksMTIgKzM5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIERPTTo6Tm9k
ZUltcGwgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZUNoaWxkOyB9CisgICAgRE9NOjpO
b2RlSW1wbCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlQ2hpbGQuZ2V0KCk7IH0KIAog
cHJpdmF0ZToKLSAgICBET006Ok5vZGVJbXBsICptX3BhcmVudDsgICAgCi0gICAgRE9NOjpOb2Rl
SW1wbCAqbV9yZW1vdmVDaGlsZDsKLSAgICBET006Ok5vZGVJbXBsICptX3JlZkNoaWxkOyAgICAK
KyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9wYXJlbnQ7ICAgIAorICAgIFJlZlB0cjxET006
Ok5vZGVJbXBsPiBtX3JlbW92ZUNoaWxkOworICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBtX3Jl
ZkNoaWxkOyAgICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGtodG1sCkluZGV4OiByZW1vdmVfbm9k
ZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfcHJlc2VydmluZ19jaGls
ZHJlbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIx
LjQgcmVtb3ZlX25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcAotLS0gcmVtb3Zl
X25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcAkyMSBOb3YgMjAwNSAwMToyMDow
NSAtMDAwMAkxLjQKKysrIHJlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFuZC5j
cHAJMTYgRGVjIDIwMDUgMTA6MDg6MDUgLTAwMDAKQEAgLTM5LDEzICszOSwxMSBAQCBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6UmVtCiAgICAgOiBDb21wb3NpdGVFZGl0Q29t
bWFuZChkb2N1bWVudCksIG1fbm9kZShub2RlKQogewogICAgIEFTU0VSVChtX25vZGUpOwotICAg
IG1fbm9kZS0+cmVmKCk7CiB9CiAKIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
Ojp+UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQoKQogewogICAgIEFTU0VSVCht
X25vZGUpOwotICAgIG1fbm9kZS0+ZGVyZWYoKTsKIH0KIAogdm9pZCBSZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZDo6ZG9BcHBseSgpCkluZGV4OiByZW1vdmVfbm9kZV9wcmVzZXJ2
aW5nX2NoaWxkcmVuX2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFu
ZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSByZW1vdmVfbm9k
ZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuaAotLS0gcmVtb3ZlX25vZGVfcHJlc2Vydmlu
Z19jaGlsZHJlbl9jb21tYW5kLmgJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBy
ZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuaAkxNiBEZWMgMjAwNSAxMDow
ODowNSAtMDAwMApAQCAtMzgsMTAgKzM4LDEwIEBAIHB1YmxpYzoKIAkKICAgICB2aXJ0dWFsIHZv
aWQgZG9BcHBseSgpOwogCi0gICAgRE9NOjpOb2RlSW1wbCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZTsgfQorICAgIERPTTo6Tm9kZUltcGwgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX25v
ZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBET006Ok5vZGVJbXBsICptX25vZGU7CisgICAg
UmVmUHRyPERPTTo6Tm9kZUltcGw+IG1fbm9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGtodG1s
CkluZGV4OiByZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1h
bmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAgLXUgLXIxLjIwIHJlcGxh
Y2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSByZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAkxMyBEZWMgMjAwNSAwMToyODo1OCAtMDAwMAkxLjIwCisrKyByZXBsYWNlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcAkxNiBEZWMgMjAwNSAxMDowODowNSAtMDAwMApAQCAtNzQsMTAgKzc0LDcgQEAg
UmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgICAgICBtX3R5cGUg
PSBFbXB0eUZyYWdtZW50OwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgbV9kb2N1bWVu
dC0+cmVmKCk7Ci0gICAgbV9mcmFnbWVudC0+cmVmKCk7Ci0KKyAgICAKICAgICBOb2RlSW1wbCAq
Zmlyc3RDaGlsZCA9IG1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICBOb2RlSW1wbCAqbGFz
dENoaWxkID0gbV9mcmFnbWVudC0+bGFzdENoaWxkKCk7CiAKQEAgLTEwOSwxMiArMTA2LDEwIEBA
IFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VT
cGFuKG5vZGUpKSB7Ci0gICAgICAgICAgICBOb2RlSW1wbCAqbiA9IDA7CisgICAgICAgICAgICBS
ZWZQdHI8Tm9kZUltcGw+IG4gPSAwOwogICAgICAgICAgICAgd2hpbGUgKChuID0gbm9kZS0+Zmly
c3RDaGlsZCgpKSkgewotICAgICAgICAgICAgICAgIG4tPnJlZigpOwotICAgICAgICAgICAgICAg
IHJlbW92ZU5vZGUobik7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShuLCBub2Rl
KTsKLSAgICAgICAgICAgICAgICBuLT5kZXJlZigpOworICAgICAgICAgICAgICAgIHJlbW92ZU5v
ZGUobi5nZXQoKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShuLmdldCgpLCBu
b2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CiAgICAg
ICAgICAgICBpZiAobikKQEAgLTEyOCwyNiArMTIzLDE4IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6
OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICBpZiAobmV3bGluZUF0RW5kTm9kZSkKICAgICAgICAg
cmVtb3ZlTm9kZShuZXdsaW5lQXRFbmROb2RlKTsKICAgICAKLSAgICBOb2RlSW1wbCAqaG9sZGVy
ID0gaW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVuZGVyaW5nKCk7Ci0gICAgaWYgKGhvbGRlcikKLSAg
ICAgICAgaG9sZGVyLT5yZWYoKTsKLSAgICBpZiAoIW1fbWF0Y2hTdHlsZSkgewotICAgICAgICBj
b21wdXRlU3R5bGVzVXNpbmdUZXN0UmVuZGVyaW5nKGhvbGRlcik7Ci0gICAgfQotICAgIHJlbW92
ZVVucmVuZGVyZWROb2Rlc1VzaW5nVGVzdFJlbmRlcmluZyhob2xkZXIpOwotICAgIG1faGFzTW9y
ZVRoYW5PbmVCbG9jayA9IGNvdW50UmVuZGVyZWRCbG9ja3MoaG9sZGVyKSA+IDE7Ci0gICAgcmVz
dG9yZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyKTsKLSAgICByZW1vdmVOb2Rl
KGhvbGRlcik7Ci0gICAgaG9sZGVyLT5kZXJlZigpOworICAgIFJlZlB0cjxOb2RlSW1wbD4gaG9s
ZGVyID0gaW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVuZGVyaW5nKCkuZ2V0KCk7CisgICAgaWYgKCFt
X21hdGNoU3R5bGUpCisgICAgICAgIGNvbXB1dGVTdHlsZXNVc2luZ1Rlc3RSZW5kZXJpbmcoaG9s
ZGVyLmdldCgpKTsKKyAgICByZW1vdmVVbnJlbmRlcmVkTm9kZXNVc2luZ1Rlc3RSZW5kZXJpbmco
aG9sZGVyLmdldCgpKTsKKyAgICBtX2hhc01vcmVUaGFuT25lQmxvY2sgPSBjb3VudFJlbmRlcmVk
QmxvY2tzKGhvbGRlci5nZXQoKSkgPiAxOworICAgIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNU
b0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CisgICAgcmVtb3ZlTm9kZShob2xkZXIuZ2V0KCkpOwog
ICAgIHJlbW92ZVN0eWxlTm9kZXMoKTsKIH0KIAogUmVwbGFjZW1lbnRGcmFnbWVudDo6flJlcGxh
Y2VtZW50RnJhZ21lbnQoKQogewotICAgIGlmIChtX2RvY3VtZW50KQotICAgICAgICBtX2RvY3Vt
ZW50LT5kZXJlZigpOwotICAgIGlmIChtX2ZyYWdtZW50KQotICAgICAgICBtX2ZyYWdtZW50LT5k
ZXJlZigpOwogfQogCiBOb2RlSW1wbCAqUmVwbGFjZW1lbnRGcmFnbWVudDo6Zmlyc3RDaGlsZCgp
IGNvbnN0IApAQCAtMjA5LDcgKzE5Niw3IEBAIE5vZGVJbXBsICpSZXBsYWNlbWVudEZyYWdtZW50
OjplbmNsb3NpbmcKIHsKICAgICB3aGlsZSAobm9kZSAmJiAhaXNQcm9iYWJseUJsb2NrKG5vZGUp
KQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOyAgICAKLSAgICByZXR1cm4gbm9k
ZSA/IG5vZGUgOiBtX2ZyYWdtZW50OworICAgIHJldHVybiBub2RlID8gbm9kZSA6IG1fZnJhZ21l
bnQuZ2V0KCk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihOb2RlSW1wbCAqbm9kZSkKQEAgLTIxNywyOCArMjA0LDI1IEBAIHZvaWQg
UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlTm9kZVByZXMKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHdoaWxlIChOb2RlSW1wbCAqbiA9IG5vZGUtPmZpcnN0Q2hpbGQo
KSkgewotICAgICAgICBuLT5yZWYoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShuKTsKLSAgICAgICAg
aW5zZXJ0Tm9kZUJlZm9yZShuLCBub2RlKTsKLSAgICAgICAgbi0+ZGVyZWYoKTsKKyAgICB3aGls
ZSAoUmVmUHRyPE5vZGVJbXBsPiBuID0gbm9kZS0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgIHJl
bW92ZU5vZGUobi5nZXQoKSk7CisgICAgICAgIGluc2VydE5vZGVCZWZvcmUobi5nZXQoKSwgbm9k
ZSk7CiAgICAgfQogICAgIHJlbW92ZU5vZGUobm9kZSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRG
cmFnbWVudDo6cmVtb3ZlTm9kZShOb2RlSW1wbCAqbm9kZSkKIHsKKyAgICBSZWZQdHI8Tm9kZUlt
cGw+IGtlZXBBbGl2ZShub2RlKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCisgICAgCiAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
ICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICAKICAgICBp
bnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgbm9kZS0+cmVmKCk7CiAgICAgcGFyZW50LT5yZW1v
dmVDaGlsZChub2RlLCBleGNlcHRpb25Db2RlKTsKLSAgICBub2RlLT5kZXJlZigpOwogICAgIEFT
U0VSVChleGNlcHRpb25Db2RlID09IDApOwogfQogCkBAIC0yNTYsMjIgKzI0MCwyMCBAQCB2b2lk
IFJlcGxhY2VtZW50RnJhZ21lbnQ6Omluc2VydE5vZGVCZWZvCiAgICAgQVNTRVJUKGV4Y2VwdGlv
bkNvZGUgPT0gMCk7CiB9CiAKLU5vZGVJbXBsICpSZXBsYWNlbWVudEZyYWdtZW50OjppbnNlcnRG
cmFnbWVudEZvclRlc3RSZW5kZXJpbmcoKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4gUmVwbGFjZW1l
bnRGcmFnbWVudDo6aW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVuZGVyaW5nKCkKIHsKICAgICBOb2Rl
SW1wbCAqYm9keSA9IG1fZG9jdW1lbnQtPmJvZHkoKTsKICAgICBpZiAoIWJvZHkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgRWxlbWVudEltcGwgKmhvbGRlciA9IGNyZWF0ZURlZmF1bHRQYXJh
Z3JhcGhFbGVtZW50KG1fZG9jdW1lbnQpOwotICAgIGhvbGRlci0+cmVmKCk7CisgICAgUGFzc1Jl
ZlB0cjxFbGVtZW50SW1wbD4gaG9sZGVyID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQo
bV9kb2N1bWVudC5nZXQoKSk7CiAgICAgCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAg
IGhvbGRlci0+YXBwZW5kQ2hpbGQobV9mcmFnbWVudCwgZXhjZXB0aW9uQ29kZSk7CisgICAgaG9s
ZGVyLT5hcHBlbmRDaGlsZChtX2ZyYWdtZW50LmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAKLSAgICBib2R5LT5hcHBlbmRDaGlsZCho
b2xkZXIsIGV4Y2VwdGlvbkNvZGUpOworICAgIGJvZHktPmFwcGVuZENoaWxkKGhvbGRlci5nZXQo
KSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7Ci0gICAg
aG9sZGVyLT5kZXJlZigpOwogICAgIAogICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwog
ICAgIApAQCAtMjg0LDEzICsyNjYsMTEgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZXN0
b3JlVGVzdFJlbgogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7
Ci0gICAgd2hpbGUgKE5vZGVJbXBsICpub2RlID0gaG9sZGVyLT5maXJzdENoaWxkKCkpIHsKLSAg
ICAgICAgbm9kZS0+cmVmKCk7Ci0gICAgICAgIGhvbGRlci0+cmVtb3ZlQ2hpbGQobm9kZSwgZXhj
ZXB0aW9uQ29kZSk7CisgICAgd2hpbGUgKFJlZlB0cjxOb2RlSW1wbD4gbm9kZSA9IGhvbGRlci0+
Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgIGhvbGRlci0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwg
ZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwotICAg
ICAgICBtX2ZyYWdtZW50LT5hcHBlbmRDaGlsZChub2RlLCBleGNlcHRpb25Db2RlKTsKKyAgICAg
ICAgbV9mcmFnbWVudC0+YXBwZW5kQ2hpbGQobm9kZS5nZXQoKSwgZXhjZXB0aW9uQ29kZSk7CiAg
ICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwotICAgICAgICBub2RlLT5kZXJlZigp
OwogICAgIH0KIH0KIApAQCAtMzE5LDggKzI5OSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmZpeHVwTm9kZVMKICAgICAgICAgLy8gVGhlIGRlc2lyZWRTdHlsZSBkZWNsYXJhdGlv
biB0ZWxscyB3aGF0IHN0eWxlIHRoaXMgbm9kZSB3YW50cyB0byBiZS4KICAgICAgICAgLy8gQ29t
cGFyZSB0aGF0IHRvIHRoZSBzdHlsZSB0aGF0IGl0IGlzIHJpZ2h0IG5vdyBpbiB0aGUgZG9jdW1l
bnQuCiAgICAgICAgIFBvc2l0aW9uIHBvcyhub2RlLCAwKTsKLSAgICAgICAgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uSW1wbCAqY3VycmVudFN0eWxlID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsK
LSAgICAgICAgY3VycmVudFN0eWxlLT5yZWYoKTsKKyAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbkltcGw+IGN1cnJlbnRTdHlsZSA9IHBvcy5jb21wdXRlZFN0eWxlKCk7
CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBzcGVjaWFsICJtYXRjaCBuZWFyZXN0IGJsb2Nr
cXVvdGUgY29sb3IiIHByb3BlcnR5IGFuZCByZXNvbHZlIHRvIHRoZSBjb3JyZWN0CiAgICAgICAg
IC8vIGNvbG9yIGlmIG5lY2Vzc2FyeS4KQEAgLTMyOCwxMSArMzA3LDkgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6Zml4dXBOb2RlUwogICAgICAgICBpZiAobWF0Y2hDb2xvckNoZWNr
ID09IG1hdGNoTmVhcmVzdEJsb2NrcXVvdGVDb2xvclN0cmluZygpKSB7CiAgICAgICAgICAgICBO
b2RlSW1wbCAqYmxvY2txdW90ZSA9IG5lYXJlc3RNYWlsQmxvY2txdW90ZShub2RlKTsKICAgICAg
ICAgICAgIFBvc2l0aW9uIHBvcyhibG9ja3F1b3RlID8gYmxvY2txdW90ZSA6IG5vZGUtPmdldERv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLCAwKTsKLSAgICAgICAgICAgIENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKLSAgICAg
ICAgICAgIHN0eWxlLT5yZWYoKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb25JbXBsPiBzdHlsZSA9IHBvcy5jb21wdXRlZFN0eWxlKCk7CiAgICAgICAgICAg
ICBET01TdHJpbmcgZGVzaXJlZENvbG9yID0gZGVzaXJlZFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVl
KENTU19QUk9QX0NPTE9SKTsKICAgICAgICAgICAgIERPTVN0cmluZyBuZWFyZXN0Q29sb3IgPSBz
dHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUF9DT0xPUik7Ci0gICAgICAgICAgICBzdHls
ZS0+ZGVyZWYoKTsKICAgICAgICAgICAgIGlmIChkZXNpcmVkQ29sb3IgIT0gbmVhcmVzdENvbG9y
KQogICAgICAgICAgICAgICAgIGRlc2lyZWRTdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQ09M
T1IsIG5lYXJlc3RDb2xvcik7CiAgICAgICAgIH0KQEAgLTM0OCwxOSArMzI1LDE1IEBAIHZvaWQg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwTm9kZVMKICAgICAgICAgLy8gSWYgdGhlIGRl
c2lyZWRTdHlsZSBpcyBub24temVybyBsZW5ndGgsIHRoYXQgbWVhbnMgdGhlIGN1cnJlbnQgc3R5
bGUgZGlmZmVycwogICAgICAgICAvLyBmcm9tIHRoZSBkZXNpcmVkIGJ5IHRoZSBzdHlsZXMgcmVt
YWluaW5nIGluIHRoZSBkZXNpcmVkU3R5bGUgZGVjbGFyYXRpb24uCiAgICAgICAgIGlmIChkZXNp
cmVkU3R5bGUtPmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgRE9NOjpSYW5nZUltcGwgKnJh
bmdlQXJvdW5kTm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBy
YW5nZUFyb3VuZE5vZGUtPnJlZigpOworICAgICAgICAgICAgUmVmUHRyPERPTTo6UmFuZ2VJbXBs
PiByYW5nZUFyb3VuZE5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOwogICAgICAgICAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogICAgICAgICAgICAgcmFuZ2VBcm91bmROb2RlLT5z
ZWxlY3ROb2RlKG5vZGUsIGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICAgICAgQVNTRVJUKGV4Y2Vw
dGlvbkNvZGUgPT0gMCk7CiAgICAgICAgICAgICAvLyBhZmZpbml0eSBpcyBub3QgcmVhbGx5IGlt
cG9ydGFudCBzaW5jZSB0aGlzIGlzIGEgdGVtcCBzZWxlY3Rpb24KICAgICAgICAgICAgIC8vIGp1
c3QgZm9yIGNhbGxpbmcgYXBwbHlTdHlsZQotICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFNlbGVjdGlvbkNvbnRyb2xsZXIocmFuZ2VBcm91bmROb2RlLCBTRUxfREVGQVVMVF9BRkZJTklU
WSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlv
bihTZWxlY3Rpb25Db250cm9sbGVyKHJhbmdlQXJvdW5kTm9kZS5nZXQoKSwgU0VMX0RFRkFVTFRf
QUZGSU5JVFksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgICAgICBhcHBseVN0eWxl
KGRlc2lyZWRTdHlsZSk7Ci0gICAgICAgICAgICByYW5nZUFyb3VuZE5vZGUtPmRlcmVmKCk7CiAg
ICAgICAgIH0KLQotICAgICAgICBjdXJyZW50U3R5bGUtPmRlcmVmKCk7CiAgICAgfQogfQogCkBA
IC0zNjksMjAgKzM0MiwxNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlQW5kU3RvcmVOb2RlRGVzaXJl
ZFN0CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbCAqY29tcHV0
ZWRTdHlsZSA9IFBvc2l0aW9uKG5vZGUsIDApLmNvbXB1dGVkU3R5bGUoKTsKLSAgICBjb21wdXRl
ZFN0eWxlLT5yZWYoKTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1w
bD4gY29tcHV0ZWRTdHlsZSA9IFBvc2l0aW9uKG5vZGUsIDApLmNvbXB1dGVkU3R5bGUoKTsKICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlID0gY29tcHV0ZWRTdHlsZS0+
Y29weUluaGVyaXRhYmxlUHJvcGVydGllcygpOwogICAgIGxpc3QuYXBwZW5kKE5vZGVEZXNpcmVk
U3R5bGUobm9kZSwgc3R5bGUpKTsKLSAgICBjb21wdXRlZFN0eWxlLT5kZXJlZigpOwogCiAgICAg
Ly8gSW4gZWl0aGVyIG9mIHRoZSBjb2xvci1tYXRjaGluZyB0ZXN0cyBiZWxvdywgc2V0IHRoZSBj
b2xvciB0byBhIHBzZXVkby1jb2xvciB0aGF0IHdpbGwKICAgICAvLyBtYWtlIHRoZSBjb250ZW50
IHRha2Ugb24gdGhlIGNvbG9yIG9mIHRoZSBuZWFyZXN0LWVuY2xvc2luZyBibG9ja3F1b3RlIChp
ZiBhbnkpIGFmdGVyCiAgICAgLy8gYmVpbmcgcGFzdGVkIGluLgogICAgIGlmIChOb2RlSW1wbCAq
YmxvY2txdW90ZSA9IG5lYXJlc3RNYWlsQmxvY2txdW90ZShub2RlKSkgewotICAgICAgICBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpibG9ja3F1b3RlU3R5bGUgPSBQb3NpdGlvbihi
bG9ja3F1b3RlLCAwKS5jb21wdXRlZFN0eWxlKCk7Ci0gICAgICAgIGJsb2NrcXVvdGVTdHlsZS0+
cmVmKCk7CisgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsPiBi
bG9ja3F1b3RlU3R5bGUgPSBQb3NpdGlvbihibG9ja3F1b3RlLCAwKS5jb21wdXRlZFN0eWxlKCk7
CiAgICAgICAgIGJvb2wgbWF0Y2ggPSAoYmxvY2txdW90ZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVl
KENTU19QUk9QX0NPTE9SKSA9PSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUF9DT0xP
UikpOwotICAgICAgICBibG9ja3F1b3RlU3R5bGUtPmRlcmVmKCk7CiAgICAgICAgIGlmIChtYXRj
aCkgewogICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU19QUk9QX19LSFRNTF9NQVRD
SF9ORUFSRVNUX01BSUxfQkxPQ0tRVU9URV9DT0xPUiwgbWF0Y2hOZWFyZXN0QmxvY2txdW90ZUNv
bG9yU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkwLDEzICszNTksMTAgQEAg
c3RhdGljIHZvaWQgY29tcHV0ZUFuZFN0b3JlTm9kZURlc2lyZWRTdAogICAgIH0KICAgICBOb2Rl
SW1wbCAqZG9jdW1lbnRFbGVtZW50ID0gbm9kZS0+Z2V0RG9jdW1lbnQoKSA/IG5vZGUtPmdldERv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsKICAgICBpZiAoZG9jdW1lbnRFbGVtZW50
KSB7Ci0gICAgICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKmRvY3VtZW50U3R5
bGUgPSBQb3NpdGlvbihkb2N1bWVudEVsZW1lbnQsIDApLmNvbXB1dGVkU3R5bGUoKTsKLSAgICAg
ICAgZG9jdW1lbnRTdHlsZS0+cmVmKCk7CisgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb25JbXBsPiBkb2N1bWVudFN0eWxlID0gUG9zaXRpb24oZG9jdW1lbnRFbGVtZW50
LCAwKS5jb21wdXRlZFN0eWxlKCk7CiAgICAgICAgIGJvb2wgbWF0Y2ggPSAoZG9jdW1lbnRTdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUF9DT0xPUikgPT0gc3R5bGUtPmdldFByb3BlcnR5
VmFsdWUoQ1NTX1BST1BfQ09MT1IpKTsKLSAgICAgICAgZG9jdW1lbnRTdHlsZS0+ZGVyZWYoKTsK
LSAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgIGlmIChtYXRjaCkKICAgICAgICAgICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9fS0hUTUxfTUFUQ0hfTkVBUkVTVF9NQUlMX0JMT0NL
UVVPVEVfQ09MT1IsIG1hdGNoTmVhcmVzdEJsb2NrcXVvdGVDb2xvclN0cmluZygpKTsKLSAgICAg
ICAgfQogICAgIH0KIH0KIApAQCAtNDk2LDU3ICs0NjIsMjkgQEAgdm9pZCBSZXBsYWNlbWVudEZy
YWdtZW50OjpyZW1vdmVTdHlsZU5vZAogTm9kZURlc2lyZWRTdHlsZTo6Tm9kZURlc2lyZWRTdHls
ZShOb2RlSW1wbCAqbm9kZSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSkg
CiAgICAgOiBtX25vZGUobm9kZSksIG1fc3R5bGUoc3R5bGUpCiB7Ci0gICAgaWYgKG1fbm9kZSkK
LSAgICAgICAgbV9ub2RlLT5yZWYoKTsKLSAgICBpZiAobV9zdHlsZSkKLSAgICAgICAgbV9zdHls
ZS0+cmVmKCk7CiB9CiAKIE5vZGVEZXNpcmVkU3R5bGU6Ok5vZGVEZXNpcmVkU3R5bGUoY29uc3Qg
Tm9kZURlc2lyZWRTdHlsZSAmb3RoZXIpCiAgICAgOiBtX25vZGUob3RoZXIubm9kZSgpKSwgbV9z
dHlsZShvdGhlci5zdHlsZSgpKQogewotICAgIGlmIChtX25vZGUpCi0gICAgICAgIG1fbm9kZS0+
cmVmKCk7Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPnJlZigpOwogfQogCiBO
b2RlRGVzaXJlZFN0eWxlOjp+Tm9kZURlc2lyZWRTdHlsZSgpCiB7Ci0gICAgaWYgKG1fbm9kZSkK
LSAgICAgICAgbV9ub2RlLT5kZXJlZigpOwotICAgIGlmIChtX3N0eWxlKQotICAgICAgICBtX3N0
eWxlLT5kZXJlZigpOwogfQogCiBOb2RlRGVzaXJlZFN0eWxlICZOb2RlRGVzaXJlZFN0eWxlOjpv
cGVyYXRvcj0oY29uc3QgTm9kZURlc2lyZWRTdHlsZSAmb3RoZXIpCiB7Ci0gICAgTm9kZUltcGwg
Km9sZE5vZGUgPSBtX25vZGU7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpv
bGRTdHlsZSA9IG1fc3R5bGU7Ci0KLSAgICBtX25vZGUgPSBvdGhlci5ub2RlKCk7Ci0gICAgbV9z
dHlsZSA9IG90aGVyLnN0eWxlKCk7Ci0gICAgCi0gICAgaWYgKG1fbm9kZSkKLSAgICAgICAgbV9u
b2RlLT5yZWYoKTsKLSAgICBpZiAobV9zdHlsZSkKLSAgICAgICAgbV9zdHlsZS0+cmVmKCk7Ci0g
ICAgCi0gICAgaWYgKG9sZE5vZGUpCi0gICAgICAgIG9sZE5vZGUtPmRlcmVmKCk7Ci0gICAgaWYg
KG9sZFN0eWxlKQotICAgICAgICBvbGRTdHlsZS0+ZGVyZWYoKTsKLSAgICAgICAgCisgICAgaWYg
KG1fbm9kZSAhPSAgb3RoZXIubm9kZSgpKQorICAgICAgICBtX25vZGUgPSBvdGhlci5ub2RlKCk7
CisgICAgaWYgKG1fc3R5bGUgIT0gIG90aGVyLnN0eWxlKCkpCisgICAgICAgIG1fc3R5bGUgPSBv
dGhlci5zdHlsZSgpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAogUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50SW1wbCAqZG9jdW1lbnQsIERv
Y3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9v
bCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSkgCiAgICAgOiBDb21wb3NpdGVFZGl0Q29t
bWFuZChkb2N1bWVudCksIAogICAgICAgbV9mcmFnbWVudChkb2N1bWVudCwgZnJhZ21lbnQsIG1h
dGNoU3R5bGUpLAotICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCgwKSwKLSAgICAgIG1fbGFzdE5v
ZGVJbnNlcnRlZCgwKSwKLSAgICAgIG1fbGFzdFRvcE5vZGVJbnNlcnRlZCgwKSwKLSAgICAgIG1f
aW5zZXJ0aW9uU3R5bGUoMCksCiAgICAgICBtX3NlbGVjdFJlcGxhY2VtZW50KHNlbGVjdFJlcGxh
Y2VtZW50KSwgCiAgICAgICBtX3NtYXJ0UmVwbGFjZShzbWFydFJlcGxhY2UpLAogICAgICAgbV9t
YXRjaFN0eWxlKG1hdGNoU3R5bGUpCkBAIC01NTUsMTQgKzQ5Myw2IEBAIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpSZXBsYWNlU2VsZWN0aW8KIAogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6On5S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZCgpCiB7Ci0gICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQp
Ci0gICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmRlcmVmKCk7Ci0gICAgaWYgKG1fbGFzdE5v
ZGVJbnNlcnRlZCkKLSAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVkLT5kZXJlZigpOwotICAgIGlm
IChtX2xhc3RUb3BOb2RlSW5zZXJ0ZWQpCi0gICAgICAgIG1fbGFzdFRvcE5vZGVJbnNlcnRlZC0+
ZGVyZWYoKTsKLSAgICBpZiAobV9pbnNlcnRpb25TdHlsZSkKLSAgICAgICAgbV9pbnNlcnRpb25T
dHlsZS0+ZGVyZWYoKTsKIH0KIAogc3RhdGljIGludCBtYXhSYW5nZU9mZnNldChOb2RlSW1wbCAq
bikKQEAgLTU5OSwxMCArNTI5LDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rp
b24oKTsKICAgICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwogICAgIAotICAg
IGlmIChtX21hdGNoU3R5bGUpIHsKKyAgICBpZiAobV9tYXRjaFN0eWxlKQogICAgICAgICBtX2lu
c2VydGlvblN0eWxlID0gc3R5bGVBdFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKTsKLSAgICAg
ICAgbV9pbnNlcnRpb25TdHlsZS0+cmVmKCk7Ci0gICAgfQogICAgIAogICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlU3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5zdGFydEFmZmlu
aXR5KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKHNlbGVjdGlvbi5lbmQoKSwg
c2VsZWN0aW9uLmVuZEFmZmluaXR5KCkpOwpAQCAtNzY5LDcgKzY5Nyw3IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyB1cGRhdGUgaW5zZXJ0aW9u
IHBvaW50IHRvIGJlIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgYmxvY2sgaW5zZXJ0ZWQKICAgICAg
ICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCkgewogICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0KCk7Ci0gICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBQb3NpdGlvbihtX2xhc3RO
b2RlSW5zZXJ0ZWQsIG1fbGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CisgICAg
ICAgICAgICBpbnNlcnRpb25Qb3MgPSBQb3NpdGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCks
IG1fbGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC03OTksMjMgKzcyNywyMyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgICAgICB9CiAgICAgICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgICAgICBpbnNlcnRpb25Qb3MgPSBQb3Np
dGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQsIG1fbGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhPZmZz
ZXQoKSk7CisgICAgICAgIGluc2VydGlvblBvcyA9IFBvc2l0aW9uKG1fbGFzdE5vZGVJbnNlcnRl
ZC5nZXQoKSwgbV9sYXN0Tm9kZUluc2VydGVkLT5jYXJldE1heE9mZnNldCgpKTsKICAgICB9CiAK
ICAgICAvLyBzdGVwIDMgOiBoYW5kbGUgInNtYXJ0IHJlcGxhY2UiIHdoaXRlc3BhY2UKICAgICBp
ZiAoYWRkVHJhaWxpbmdTcGFjZSAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQpIHsKICAgICAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgIFBvc2l0aW9uIHBvcyhtX2xhc3ROb2Rl
SW5zZXJ0ZWQsIG1fbGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CisgICAgICAg
IFBvc2l0aW9uIHBvcyhtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCksIG1fbGFzdE5vZGVJbnNlcnRl
ZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgIGJvb2wgbmVlZHNUcmFpbGluZ1NwYWNlID0g
cG9zLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUp
LmlzTnVsbCgpOwogICAgICAgICBpZiAobmVlZHNUcmFpbGluZ1NwYWNlKSB7CiAgICAgICAgICAg
ICBpZiAobV9sYXN0Tm9kZUluc2VydGVkLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICBUZXh0SW1wbCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG1fbGFzdE5vZGVJbnNl
cnRlZCk7CisgICAgICAgICAgICAgICAgVGV4dEltcGwgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0
SW1wbCAqPihtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGluc2Vy
dFRleHRJbnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5ndGgoKSwgbm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZygpKTsKICAgICAgICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBQb3NpdGlvbih0ZXh0LCB0ZXh0
LT5sZW5ndGgoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9k
ZShub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZSwgbV9sYXN0Tm9kZUluc2VydGVkKTsKKyAg
ICAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXJBbmRVcGRhdGVOb2Rlc0luc2VydGVkKG5vZGUs
IG1fbGFzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uUG9z
ID0gUG9zaXRpb24obm9kZSwgMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTgyMywx
NSArNzUxLDE1IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogCiAg
ICAgaWYgKGFkZExlYWRpbmdTcGFjZSAmJiBtX2ZpcnN0Tm9kZUluc2VydGVkKSB7CiAgICAgICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgICAgICBQb3NpdGlvbiBwb3MobV9maXJz
dE5vZGVJbnNlcnRlZCwgMCk7CisgICAgICAgIFBvc2l0aW9uIHBvcyhtX2ZpcnN0Tm9kZUluc2Vy
dGVkLmdldCgpLCAwKTsKICAgICAgICAgYm9vbCBuZWVkc0xlYWRpbmdTcGFjZSA9IHBvcy5sZWFk
aW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTnVsbCgp
OwogICAgICAgICBpZiAobmVlZHNMZWFkaW5nU3BhY2UpIHsKICAgICAgICAgICAgIGlmIChtX2Zp
cnN0Tm9kZUluc2VydGVkLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBUZXh0SW1w
bCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG1fZmlyc3ROb2RlSW5zZXJ0ZWQpOwor
ICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4o
bV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dElu
dG9Ob2RlKHRleHQsIDAsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gZG9jdW1lbnQoKS0+Y3Jl
YXRlRWRpdGluZ1RleHROb2RlKG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICAgICAgaW5zZXJ0Tm9kZUJlZm9yZUFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZSwgbV9maXJz
dE5vZGVJbnNlcnRlZCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZUFuZFVwZGF0
ZU5vZGVzSW5zZXJ0ZWQobm9kZSwgbV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC04NDksNyArNzc3LDcgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICBib29sIGluc2VydFBhcmFn
cmFwaCA9IGZhbHNlOwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbnNlcnRpb25Q
b3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogCi0gICAgICAgICAgICBpZiAoc3RhcnRCbG9jayA9
PSBlbmRCbG9jayAmJiAhaXNQcm9iYWJseUJsb2NrKG1fbGFzdFRvcE5vZGVJbnNlcnRlZCkpIHsK
KyAgICAgICAgICAgIGlmIChzdGFydEJsb2NrID09IGVuZEJsb2NrICYmICFpc1Byb2JhYmx5Qmxv
Y2sobV9sYXN0VG9wTm9kZUluc2VydGVkLmdldCgpKSkgewogICAgICAgICAgICAgICAgIGluc2Vy
dFBhcmFncmFwaCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBlbmQtb2YtZG9jdW1lbnQgY2FzZS4KQEAgLTg3NSwyMyArODAzLDIzIEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGVsc2UgewogICAgICAg
ICBpZiAobV9sYXN0Tm9kZUluc2VydGVkICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+aGFzVGFnTmFt
ZShiclRhZykgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBk
b2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBw
b3MoUG9zaXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAxKSwgRE9XTlNUUkVBTSk7CisgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKFBvc2l0aW9uKG1fbGFzdE5vZGVJbnNlcnRlZC5nZXQo
KSwgMSksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGlzRW5kT2ZCbG9jayhwb3MpKSB7
CiAgICAgICAgICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgICAgICAgICBib29sIGhhc1RyYWlsaW5nQlIgPSBu
ZXh0ICYmIG5leHQtPmhhc1RhZ05hbWUoYnJUYWcpICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+ZW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc1RyYWlsaW5nQlIpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IGFuICJleHRyYSIgQlIgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2su
IAotICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGNyZWF0ZUJyZWFrRWxlbWVu
dChkb2N1bWVudCgpKSwgbV9sYXN0Tm9kZUluc2VydGVkKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0Tm9kZUJlZm9yZShjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIG1fbGFzdE5v
ZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1vdmVOb2Rlc0FmdGVyRW5kICYmICFpc0xhc3RWaXNpYmxl
UG9zaXRpb25JblNwZWNpYWxFbGVtZW50KFBvc2l0aW9uKG1fbGFzdE5vZGVJbnNlcnRlZCwgbWF4
UmFuZ2VPZmZzZXQobV9sYXN0Tm9kZUluc2VydGVkKSkpKSB7CisgICAgICAgIGlmIChtb3ZlTm9k
ZXNBZnRlckVuZCAmJiAhaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5TcGVjaWFsRWxlbWVudChQb3Np
dGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCksIG1heFJhbmdlT2Zmc2V0KG1fbGFzdE5vZGVJ
bnNlcnRlZC5nZXQoKSkpKSkgewogICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7CiAgICAgICAgICAgICBRVmFsdWVMaXN0PE5vZGVEZXNpcmVkU3R5bGU+IHN0eWxlczsKICAg
ICAgICAgICAgIFFQdHJMaXN0PE5vZGVJbXBsPiBibG9ja3M7CiAgICAgICAgICAgICBOb2RlSW1w
bCAqbm9kZSA9IGJleW9uZEVuZE5vZGU7Ci0gICAgICAgICAgICBOb2RlSW1wbCAqcmVmTm9kZSA9
IG1fbGFzdE5vZGVJbnNlcnRlZDsKKyAgICAgICAgICAgIE5vZGVJbXBsICpyZWZOb2RlID0gbV9s
YXN0Tm9kZUluc2VydGVkLmdldCgpOwogICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAg
ICAgICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgICAgICAgICAvLyBTdG9wIGF0IHRoZSBmaXJzdCB0YWJsZSBvciBibG9jay4KQEAgLTk2
Miw3ICs4OTAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjb21wbGV0ZUhUCiAg
ICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmluRG9jdW1l
bnQoKSkgewogCiAgICAgICAgIC8vIEZpbmQgdGhlIGxhc3QgbGVhZi4KLSAgICAgICAgTm9kZUlt
cGwgKmxhc3RMZWFmID0gbV9sYXN0Tm9kZUluc2VydGVkOworICAgICAgICBOb2RlSW1wbCAqbGFz
dExlYWYgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCk7CiAgICAgICAgIHdoaWxlICgxKSB7CiAg
ICAgICAgICAgICBOb2RlSW1wbCAqbmV4dENoaWxkID0gbGFzdExlYWYtPmxhc3RDaGlsZCgpOwog
ICAgICAgICAgICAgaWYgKCFuZXh0Q2hpbGQpCkBAIC05NzEsNyArODk5LDcgQEAgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6Y29tcGxldGVIVAogICAgICAgICB9CiAgICAgCiAgICAgICAg
IC8vIEZpbmQgdGhlIGZpcnN0IGxlYWYuCi0gICAgICAgIE5vZGVJbXBsICpmaXJzdExlYWYgPSBt
X2ZpcnN0Tm9kZUluc2VydGVkOworICAgICAgICBOb2RlSW1wbCAqZmlyc3RMZWFmID0gbV9maXJz
dE5vZGVJbnNlcnRlZC5nZXQoKTsKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIE5v
ZGVJbXBsICpuZXh0Q2hpbGQgPSBmaXJzdExlYWYtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAg
IGlmICghbmV4dENoaWxkKQpAQCAtOTg3LDcgKzkxNSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmNvbXBsZXRlSFQKICAgICAgICAgaWYgKG1fbWF0Y2hTdHlsZSkgewogICAgICAg
ICAgICAgYXNzZXJ0KG1faW5zZXJ0aW9uU3R5bGUpOwogICAgICAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnQsIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBl
bmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgICAgICBhcHBseVN0eWxlKG1faW5z
ZXJ0aW9uU3R5bGUpOworICAgICAgICAgICAgYXBwbHlTdHlsZShtX2luc2VydGlvblN0eWxlLmdl
dCgpKTsKICAgICAgICAgfSAgICAKICAgICAgICAgCiAgICAgICAgIGlmIChsYXN0UG9zaXRpb25U
b1NlbGVjdC5pc05vdE51bGwoKSkKQEAgLTEwMzYsMjcgKzk2NCwxNCBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjp1cGRhdGVOb2RlCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyB1cGRhdGUgbV9sYXN0VG9wTm9kZUluc2VydGVkCi0gICAgbm9kZS0+cmVm
KCk7Ci0gICAgaWYgKG1fbGFzdFRvcE5vZGVJbnNlcnRlZCkKLSAgICAgICAgbV9sYXN0VG9wTm9k
ZUluc2VydGVkLT5kZXJlZigpOwogICAgIG1fbGFzdFRvcE5vZGVJbnNlcnRlZCA9IG5vZGU7Ci0g
ICAgCi0gICAgLy8gdXBkYXRlIG1fZmlyc3ROb2RlSW5zZXJ0ZWQKLSAgICBpZiAoIW1fZmlyc3RO
b2RlSW5zZXJ0ZWQpIHsKKyAgICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQpCiAgICAgICAgIG1f
Zmlyc3ROb2RlSW5zZXJ0ZWQgPSBub2RlOwotICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkLT5y
ZWYoKTsKLSAgICB9CiAgICAgCiAgICAgaWYgKG5vZGUgPT0gbV9sYXN0Tm9kZUluc2VydGVkKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8gdXBkYXRlIG1fbGFzdE5vZGVJbnNlcnRlZAot
ICAgIE5vZGVJbXBsICpvbGQgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQ7CiAgICAgbV9sYXN0Tm9kZUlu
c2VydGVkID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQt
PnJlZigpOwotICAgIGlmIChvbGQpCi0gICAgICAgIG9sZC0+ZGVyZWYoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2Uga2h0bWwKSW5kZXg6IHJlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2Vs
ZWN0aW9uX2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIx
LjMgcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5oCi0tLSByZXBsYWNlX3NlbGVjdGlvbl9jb21t
YW5kLmgJMTMgRGVjIDIwMDUgMDE6Mjg6NTkgLTAwMDAJMS4zCisrKyByZXBsYWNlX3NlbGVjdGlv
bl9jb21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6MDg6MDYgLTAwMDAKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgX19yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiY29t
cG9zaXRlX2VkaXRfY29tbWFuZC5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudEltcGw7CkBAIC00
MSwxNCArNDIsMTQgQEAgcHVibGljOgogICAgIE5vZGVEZXNpcmVkU3R5bGUoY29uc3QgTm9kZURl
c2lyZWRTdHlsZSAmKTsKICAgICB+Tm9kZURlc2lyZWRTdHlsZSgpOwogICAgIAotICAgIERPTTo6
Tm9kZUltcGwgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBET006OkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
OyB9CisgICAgRE9NOjpOb2RlSW1wbCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQo
KTsgfQorICAgIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KIAogICAgIE5vZGVEZXNpcmVkU3R5bGUgJm9w
ZXJhdG9yPShjb25zdCBOb2RlRGVzaXJlZFN0eWxlICYpOwogCiBwcml2YXRlOgotICAgIERPTTo6
Tm9kZUltcGwgKm1fbm9kZTsKLSAgICBET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1w
bCAqbV9zdHlsZTsKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9ub2RlOworICAgIFJlZlB0
cjxET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4gbV9zdHlsZTsKIH07CiAKIC8v
IC0tLSBSZXBsYWNlbWVudEZyYWdtZW50IGhlbHBlciBjbGFzcwpAQCAtNjEsNyArNjIsNyBAQCBw
dWJsaWM6CiAKICAgICBlbnVtIEVGcmFnbWVudFR5cGUgeyBFbXB0eUZyYWdtZW50LCBTaW5nbGVU
ZXh0Tm9kZUZyYWdtZW50LCBUcmVlRnJhZ21lbnQgfTsKIAotICAgIERPTTo6RG9jdW1lbnRGcmFn
bWVudEltcGwgKnJvb3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50OyB9CisgICAgRE9NOjpE
b2N1bWVudEZyYWdtZW50SW1wbCAqcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnQuZ2V0
KCk7IH0KICAgICBET006Ok5vZGVJbXBsICpmaXJzdENoaWxkKCkgY29uc3Q7CiAgICAgRE9NOjpO
b2RlSW1wbCAqbGFzdENoaWxkKCkgY29uc3Q7CiAKQEAgLTg2LDcgKzg3LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUoY29uc3QgRE9NOjpOb2Rl
SW1wbCAqKTsKICAgICBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFu
KGNvbnN0IERPTTo6Tm9kZUltcGwgKik7CiAKLSAgICBET006Ok5vZGVJbXBsICppbnNlcnRGcmFn
bWVudEZvclRlc3RSZW5kZXJpbmcoKTsKKyAgICBQYXNzUmVmUHRyPERPTTo6Tm9kZUltcGw+IGlu
c2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmluZygpOwogICAgIHZvaWQgcmVzdG9yZVRlc3RSZW5k
ZXJpbmdOb2Rlc1RvRnJhZ21lbnQoRE9NOjpOb2RlSW1wbCAqKTsKICAgICB2b2lkIGNvbXB1dGVT
dHlsZXNVc2luZ1Rlc3RSZW5kZXJpbmcoRE9NOjpOb2RlSW1wbCAqKTsKICAgICB2b2lkIHJlbW92
ZVVucmVuZGVyZWROb2Rlc1VzaW5nVGVzdFJlbmRlcmluZyhET006Ok5vZGVJbXBsICopOwpAQCAt
MTAwLDggKzEwMSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnNlcnROb2RlQmVmb3JlKERPTTo6
Tm9kZUltcGwgKm5vZGUsIERPTTo6Tm9kZUltcGwgKnJlZk5vZGUpOwogCiAgICAgRUZyYWdtZW50
VHlwZSBtX3R5cGU7Ci0gICAgRE9NOjpEb2N1bWVudEltcGwgKm1fZG9jdW1lbnQ7Ci0gICAgRE9N
OjpEb2N1bWVudEZyYWdtZW50SW1wbCAqbV9mcmFnbWVudDsKKyAgICBSZWZQdHI8RE9NOjpEb2N1
bWVudEltcGw+IG1fZG9jdW1lbnQ7CisgICAgUmVmUHRyPERPTTo6RG9jdW1lbnRGcmFnbWVudElt
cGw+IG1fZnJhZ21lbnQ7CiAgICAgUVZhbHVlTGlzdDxOb2RlRGVzaXJlZFN0eWxlPiBtX3N0eWxl
czsKICAgICBib29sIG1fbWF0Y2hTdHlsZTsKICAgICBib29sIG1faGFzSW50ZXJjaGFuZ2VOZXds
aW5lQXRTdGFydDsKQEAgLTEzMCwxMCArMTMxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1v
dmVMaW5lUGxhY2Vob2xkZXJJZk5lZWRlZChET006Ok5vZGVJbXBsICopOwogCiAgICAgUmVwbGFj
ZW1lbnRGcmFnbWVudCBtX2ZyYWdtZW50OwotICAgIERPTTo6Tm9kZUltcGwgKm1fZmlyc3ROb2Rl
SW5zZXJ0ZWQ7Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9sYXN0Tm9kZUluc2VydGVkOwotICAgIERP
TTo6Tm9kZUltcGwgKm1fbGFzdFRvcE5vZGVJbnNlcnRlZDsKLSAgICBET006OkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbCAqbV9pbnNlcnRpb25TdHlsZTsKKyAgICBSZWZQdHI8RE9NOjpO
b2RlSW1wbD4gbV9maXJzdE5vZGVJbnNlcnRlZDsKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4g
bV9sYXN0Tm9kZUluc2VydGVkOworICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBtX2xhc3RUb3BO
b2RlSW5zZXJ0ZWQ7CisgICAgUmVmUHRyPERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25J
bXBsPiBtX2luc2VydGlvblN0eWxlOwogICAgIGJvb2wgbV9zZWxlY3RSZXBsYWNlbWVudDsKICAg
ICBib29sIG1fc21hcnRSZXBsYWNlOwogICAgIGJvb2wgbV9tYXRjaFN0eWxlOwpJbmRleDogc2V0
X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc2V0X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBzZXRfbm9kZV9hdHRyaWJ1
dGVfY29tbWFuZC5jcHAKLS0tIHNldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAkyMSBOb3Yg
MjAwNSAwMToyMDowNSAtMDAwMAkxLjYKKysrIHNldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNw
cAkxNiBEZWMgMjAwNSAxMDowODowNiAtMDAwMApAQCAtNDMsMTQgKzQzLDEyIEBAIFNldE5vZGVB
dHRyaWJ1dGVDb21tYW5kOjpTZXROb2RlQXR0cmlidXQKICAgICA6IEVkaXRDb21tYW5kKGRvY3Vt
ZW50KSwgbV9lbGVtZW50KGVsZW1lbnQpLCBtX2F0dHJpYnV0ZShhdHRyaWJ1dGUpLCBtX3ZhbHVl
KHZhbHVlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+cmVmKCk7
CiAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKIH0KIAogU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQ6On5TZXROb2RlQXR0cmlidXRlQ29tbWFuZCgpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVu
dCk7Ci0gICAgbV9lbGVtZW50LT5kZXJlZigpOwogfQogCiB2b2lkIFNldE5vZGVBdHRyaWJ1dGVD
b21tYW5kOjpkb0FwcGx5KCkKSW5kZXg6IHNldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZXRfbm9k
ZV9hdHRyaWJ1dGVfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAt
dSAtcjEuMiBzZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5oCi0tLSBzZXRfbm9kZV9hdHRyaWJ1
dGVfY29tbWFuZC5oCTE4IEp1bCAyMDA1IDIxOjQ0OjE4IC0wMDAwCTEuMgorKysgc2V0X25vZGVf
YXR0cmlidXRlX2NvbW1hbmQuaAkxNiBEZWMgMjAwNSAxMDowODowNiAtMDAwMApAQCAtNDIsMTIg
KzQyLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1
YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIERPTTo6RWxlbWVudEltcGwgKmVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBET006OkVsZW1lbnRJbXBsICplbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CiAgICAgY29uc3QgRE9NOjpRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZTsgfQogICAg
IERPTTo6RE9NU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIAog
cHJpdmF0ZToKLSAgICBET006OkVsZW1lbnRJbXBsICptX2VsZW1lbnQ7CisgICAgUmVmUHRyPERP
TTo6RWxlbWVudEltcGw+IG1fZWxlbWVudDsKICAgICBET006OlF1YWxpZmllZE5hbWUgbV9hdHRy
aWJ1dGU7CiAgICAgRE9NOjpET01TdHJpbmcgbV92YWx1ZTsKICAgICBET006OkRPTVN0cmluZyBt
X29sZFZhbHVlOwpJbmRleDogc3BsaXRfZWxlbWVudF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29t
bWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IHNwbGl0
X2VsZW1lbnRfY29tbWFuZC5jcHAKLS0tIHNwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAJMjEgTm92
IDIwMDUgMDE6MjA6MDUgLTAwMDAJMS40CisrKyBzcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwCTE2
IERlYyAyMDA1IDEwOjA4OjA2IC0wMDAwCkBAIC0zNywyNCArMzcsMTYgQEAgdXNpbmcgRE9NOjpO
b2RlSW1wbDsKIG5hbWVzcGFjZSBraHRtbCB7CiAKIFNwbGl0RWxlbWVudENvbW1hbmQ6OlNwbGl0
RWxlbWVudENvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBET006OkVsZW1lbnRJ
bXBsICplbGVtZW50LCBET006Ok5vZGVJbXBsICphdENoaWxkKQotICAgIDogRWRpdENvbW1hbmQo
ZG9jdW1lbnQpLCBtX2VsZW1lbnQxKDApLCBtX2VsZW1lbnQyKGVsZW1lbnQpLCBtX2F0Q2hpbGQo
YXRDaGlsZCkKKyAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9lbGVtZW50MihlbGVtZW50
KSwgbV9hdENoaWxkKGF0Q2hpbGQpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudDIpOwogICAgIEFT
U0VSVChtX2F0Q2hpbGQpOwotCi0gICAgbV9lbGVtZW50Mi0+cmVmKCk7Ci0gICAgbV9hdENoaWxk
LT5yZWYoKTsKIH0KIAogU3BsaXRFbGVtZW50Q29tbWFuZDo6flNwbGl0RWxlbWVudENvbW1hbmQo
KQogewotICAgIGlmIChtX2VsZW1lbnQxKQotICAgICAgICBtX2VsZW1lbnQxLT5kZXJlZigpOwot
CiAgICAgQVNTRVJUKG1fZWxlbWVudDIpOwotICAgIG1fZWxlbWVudDItPmRlcmVmKCk7CiAgICAg
QVNTRVJUKG1fYXRDaGlsZCk7Ci0gICAgbV9hdENoaWxkLT5kZXJlZigpOwogfQogCiB2b2lkIFNw
bGl0RWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQpAQCAtNjksMTAgKzYxLDkgQEAgdm9pZCBTcGxp
dEVsZW1lbnRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gaWYgcmVhcHBseWluZywgdGhp
cyBvYmplY3Qgd2lsbCBhbHJlYWR5IGV4aXN0LgogICAgICAgICBtX2VsZW1lbnQxID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwgKj4obV9lbGVtZW50Mi0+Y2xvbmVOb2RlKGZhbHNlKSk7CiAgICAg
ICAgIEFTU0VSVChtX2VsZW1lbnQxKTsKLSAgICAgICAgbV9lbGVtZW50MS0+cmVmKCk7CiAgICAg
fQogCi0gICAgbV9lbGVtZW50Mi0+cGFyZW50KCktPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLCBt
X2VsZW1lbnQyLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX2VsZW1lbnQyLT5wYXJlbnQoKS0+aW5z
ZXJ0QmVmb3JlKG1fZWxlbWVudDEuZ2V0KCksIG1fZWxlbWVudDIuZ2V0KCksIGV4Y2VwdGlvbkNv
ZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIAogICAgIHdoaWxlICht
X2VsZW1lbnQyLT5maXJzdENoaWxkKCkgIT0gbV9hdENoaWxkKSB7CkBAIC04OCw3ICs3OSw3IEBA
IHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICBBU1NFUlQobV9lbGVt
ZW50Mik7CiAgICAgQVNTRVJUKG1fYXRDaGlsZCk7CiAKLSAgICBBU1NFUlQobV9lbGVtZW50MS0+
bmV4dFNpYmxpbmcoKSA9PSBtX2VsZW1lbnQyKTsKKyAgICBBU1NFUlQobV9lbGVtZW50MS0+bmV4
dFNpYmxpbmcoKSA9PSBtX2VsZW1lbnQyLmdldCgpKTsKICAgICBBU1NFUlQobV9lbGVtZW50Mi0+
Zmlyc3RDaGlsZCgpICYmIG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKSA9PSBtX2F0Q2hpbGQpOwog
CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwpAQCAtOTgsNyArODksNyBAQCB2b2lkIFNwbGl0
RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2Rl
ID09IDApOwogICAgIH0KIAotICAgIG1fZWxlbWVudDItPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hp
bGQobV9lbGVtZW50MSwgZXhjZXB0aW9uQ29kZSk7CisgICAgbV9lbGVtZW50Mi0+cGFyZW50Tm9k
ZSgpLT5yZW1vdmVDaGlsZChtX2VsZW1lbnQxLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIH0KIApJbmRleDogc3BsaXRfZWxlbWVudF9jb21t
YW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEgc3BsaXRfZWxlbWVudF9jb21tYW5kLmgKLS0tIHNwbGl0X2VsZW1lbnRfY29t
bWFuZC5oCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysgc3BsaXRfZWxlbWVudF9j
b21tYW5kLmgJMTYgRGVjIDIwMDUgMTA6MDg6MDYgLTAwMDAKQEAgLTQwLDkgKzQwLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAogcHJpdmF0ZToKLSAgICBET006
OkVsZW1lbnRJbXBsICptX2VsZW1lbnQxOwotICAgIERPTTo6RWxlbWVudEltcGwgKm1fZWxlbWVu
dDI7Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9hdENoaWxkOworICAgIFJlZlB0cjxET006OkVsZW1l
bnRJbXBsPiBtX2VsZW1lbnQxOworICAgIFJlZlB0cjxET006OkVsZW1lbnRJbXBsPiBtX2VsZW1l
bnQyOworICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBtX2F0Q2hpbGQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBraHRtbApJbmRleDogc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9z
cGxpdF90ZXh0X25vZGVfY29udGFpbmluZ19lbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS41CmRpZmYgLXAgLXUgLXIxLjUgc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVu
dC5jcHAKLS0tIHNwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnQuY3BwCTIxIE5vdiAy
MDA1IDAxOjIwOjA1IC0wMDAwCTEuNQorKysgc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxl
bWVudC5jcHAJMTYgRGVjIDIwMDUgMTA6MDg6MDYgLTAwMDAKQEAgLTQ0LDE0ICs0NCwxMSBAQCBT
cGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpTCiB7CiAgICAgQVNTRVJUKG1f
dGV4dCk7CiAgICAgQVNTRVJUKG1fdGV4dC0+bGVuZ3RoKCkgPiAwKTsKLQotICAgIG1fdGV4dC0+
cmVmKCk7CiB9CiAKIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6On5TcGxp
dFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKCkKIHsKICAgICBBU1NFUlQobV90ZXh0
KTsKLSAgICBtX3RleHQtPmRlcmVmKCk7CiB9CiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCkBAIC01OSw3ICs1Niw3IEBAIHZvaWQgU3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWEKICAgICBBU1NFUlQobV90ZXh0KTsKICAgICBB
U1NFUlQobV9vZmZzZXQgPiAwKTsKIAotICAgIHNwbGl0VGV4dE5vZGUobV90ZXh0LCBtX29mZnNl
dCk7CisgICAgc3BsaXRUZXh0Tm9kZShtX3RleHQuZ2V0KCksIG1fb2Zmc2V0KTsKICAgICAKICAg
ICBOb2RlSW1wbCAqcGFyZW50Tm9kZSA9IG1fdGV4dC0+cGFyZW50Tm9kZSgpOwogICAgIGlmICgh
cGFyZW50Tm9kZS0+cmVuZGVyZXIoKSB8fCAhcGFyZW50Tm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxp
bmUoKSkgewpAQCAtNjcsNyArNjQsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hCiAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7
CiAgICAgfQogCi0gICAgc3BsaXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KHBh
cmVudE5vZGUpLCBtX3RleHQpOworICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihwYXJlbnROb2RlKSwgbV90ZXh0LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
a2h0bWwKSW5kZXg6IHNwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnRfY29tbWFuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc3Bs
aXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudF9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIHNwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2Vs
ZW1lbnRfY29tbWFuZC5oCi0tLSBzcGxpdF90ZXh0X25vZGVfY29udGFpbmluZ19lbGVtZW50X2Nv
bW1hbmQuaAkxNiBTZXAgMjAwNSAyMjo0MjowNyAtMDAwMAkxLjIKKysrIHNwbGl0X3RleHRfbm9k
ZV9jb250YWluaW5nX2VsZW1lbnRfY29tbWFuZC5oCTE2IERlYyAyMDA1IDEwOjA4OjA2IC0wMDAw
CkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwog
CiBwcml2YXRlOgotICAgIERPTTo6VGV4dEltcGwgKm1fdGV4dDsKKyAgICBSZWZQdHI8RE9NOjpU
ZXh0SW1wbD4gbV90ZXh0OwogICAgIGludCBtX29mZnNldDsKIH07CiAKSW5kZXg6IHdyYXBfY29u
dGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3dyYXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQgd3Jh
cF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuY3BwCi0tLSB3cmFwX2NvbnRlbnRzX2lu
X2R1bW15X3NwYW5fY29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDYgLTAwMDAJMS40Cisr
KyB3cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5jcHAJMTYgRGVjIDIwMDUgMTA6
MDg6MDYgLTAwMDAKQEAgLTM3LDIwICszNywxNCBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwog
bmFtZXNwYWNlIGtodG1sIHsKIAogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpXcmFw
Q29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBE
T006OkVsZW1lbnRJbXBsICplbGVtZW50KQotICAgIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBt
X2VsZW1lbnQoZWxlbWVudCksIG1fZHVtbXlTcGFuKDApCisgICAgOiBFZGl0Q29tbWFuZChkb2N1
bWVudCksIG1fZWxlbWVudChlbGVtZW50KQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotCi0g
ICAgbV9lbGVtZW50LT5yZWYoKTsKIH0KIAogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5k
Ojp+V3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kKCkKIHsKLSAgICBpZiAobV9kdW1teVNw
YW4pCi0gICAgICAgIG1fZHVtbXlTcGFuLT5kZXJlZigpOwotCiAgICAgQVNTRVJUKG1fZWxlbWVu
dCk7Ci0gICAgbV9lbGVtZW50LT5kZXJlZigpOwogfQogCiB2b2lkIFdyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZDo6ZG9BcHBseSgpCkBAIC01OSwxNyArNTMsMTUgQEAgdm9pZCBXcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvQQogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAw
OwogCi0gICAgaWYgKCFtX2R1bW15U3BhbikgeworICAgIGlmICghbV9kdW1teVNwYW4pCiAgICAg
ICAgIG1fZHVtbXlTcGFuID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1bWVudCgpKTsKLSAg
ICAgICAgbV9kdW1teVNwYW4tPnJlZigpOwotICAgIH0KLQorIAogICAgIHdoaWxlIChtX2VsZW1l
bnQtPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBtX2R1bW15U3Bhbi0+YXBwZW5kQ2hpbGQobV9l
bGVtZW50LT5maXJzdENoaWxkKCksIGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBBU1NFUlQoZXhj
ZXB0aW9uQ29kZSA9PSAwKTsKICAgICB9CiAKLSAgICBtX2VsZW1lbnQtPmFwcGVuZENoaWxkKG1f
ZHVtbXlTcGFuLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX2VsZW1lbnQtPmFwcGVuZENoaWxkKG1f
ZHVtbXlTcGFuLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29k
ZSA9PSAwKTsKIH0KIApAQCAtNzgsNyArNzAsNyBAQCB2b2lkIFdyYXBDb250ZW50c0luRHVtbXlT
cGFuQ29tbWFuZDo6ZG9VCiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKG1fZHVt
bXlTcGFuKTsKIAotICAgIEFTU0VSVChtX2VsZW1lbnQtPmZpcnN0Q2hpbGQoKSA9PSBtX2R1bW15
U3Bhbik7CisgICAgQVNTRVJUKG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpID09IG1fZHVtbXlTcGFu
LmdldCgpKTsKICAgICBBU1NFUlQoIW1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpLT5uZXh0U2libGlu
ZygpKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKQEAgLTg4LDcgKzgwLDcgQEAgdm9p
ZCBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvVQogICAgICAgICBBU1NFUlQoZXhj
ZXB0aW9uQ29kZSA9PSAwKTsKICAgICB9CiAKLSAgICBtX2VsZW1lbnQtPnJlbW92ZUNoaWxkKG1f
ZHVtbXlTcGFuLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX2VsZW1lbnQtPnJlbW92ZUNoaWxkKG1f
ZHVtbXlTcGFuLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29k
ZSA9PSAwKTsKIH0KIApJbmRleDogd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3dy
YXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIHdyYXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5k
LmgKLS0tIHdyYXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmgJMjQgTWF5IDIwMDUg
MDc6MjE6NDcgLTAwMDAJMS4xCisrKyB3cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFu
ZC5oCTE2IERlYyAyMDA1IDEwOjA4OjA2IC0wMDAwCkBAIC00MCw4ICs0MCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKIHByaXZhdGU6Ci0gICAgRE9NOjpFbGVt
ZW50SW1wbCAqbV9lbGVtZW50OwotICAgIERPTTo6RWxlbWVudEltcGwgKm1fZHVtbXlTcGFuOwor
ICAgIFJlZlB0cjxET006OkVsZW1lbnRJbXBsPiBtX2VsZW1lbnQ7CisgICAgUmVmUHRyPERPTTo6
RWxlbWVudEltcGw+IG1fZHVtbXlTcGFuOwogfTsKIAogfSAvLyBuYW1lc3BhY2Uga2h0bWwK
</data>
<flag name="review"
          id="1015"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5110</attachid>
            <date>2005-12-16 02:29:59 -0800</date>
            <delta_ts>2005-12-30 16:28:18 -0800</delta_ts>
            <desc>changes in kwq necessary as a result of khtml/editing patch</desc>
            <filename>kwq_editing_ref.patch</filename>
            <type>text/plain</type>
            <size>3105</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IERPTUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0RPTUhUTUwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtcCAtdSAtcjEu
MzEgRE9NSFRNTC5tbQotLS0gRE9NSFRNTC5tbQkzIE9jdCAyMDA1IDIxOjEzOjAwIC0wMDAwCTEu
MzEKKysrIERPTUhUTUwubW0JMTYgRGVjIDIwMDUgMTA6MzA6MjIgLTAwMDAKQEAgLTU1MiwxMyAr
NTUyLDEzIEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQg
KilfY3JlYXRlRG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFy
a3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZwogewotICAg
IERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChbc2VsZiBfZG9jdW1lbnRJbXBsXSwgUVN0cmluZzo6ZnJvbU5TU3RyaW5nKG1hcmt1cFN0cmlu
ZyksIFFTdHJpbmc6OmZyb21OU1N0cmluZyhiYXNlVVJMU3RyaW5nKSk7CisgICAgRG9jdW1lbnRG
cmFnbWVudEltcGwgKmZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKFtzZWxmIF9k
b2N1bWVudEltcGxdLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcobWFya3VwU3RyaW5nKSwgUVN0cmlu
Zzo6ZnJvbU5TU3RyaW5nKGJhc2VVUkxTdHJpbmcpKS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFtE
T01Eb2N1bWVudEZyYWdtZW50IF9kb2N1bWVudEZyYWdtZW50V2l0aEltcGw6ZnJhZ21lbnRdOwog
fQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2NyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRo
VGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIFtET01Eb2N1bWVudEZyYWdtZW50
IF9kb2N1bWVudEZyYWdtZW50V2l0aEltcGw6Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChbc2VsZiBf
ZG9jdW1lbnRJbXBsXSwgUVN0cmluZzo6ZnJvbU5TU3RyaW5nKHRleHQpKV07CisgICAgcmV0dXJu
IFtET01Eb2N1bWVudEZyYWdtZW50IF9kb2N1bWVudEZyYWdtZW50V2l0aEltcGw6Y3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChbc2VsZiBfZG9jdW1lbnRJbXBsXSwgUVN0cmluZzo6ZnJvbU5TU3RyaW5n
KHRleHQpKS5yZWxlYXNlKCldOwogfQogCiBAZW5kCkluZGV4OiBXZWJDb3JlQnJpZGdlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0MwpkaWZmIC1wIC11IC1yMS40NDMgV2ViQ29yZUJy
aWRnZS5tbQotLS0gV2ViQ29yZUJyaWRnZS5tbQkxNCBEZWMgMjAwNSAyMzozMjowMiAtMDAwMAkx
LjQ0MworKysgV2ViQ29yZUJyaWRnZS5tbQkxNiBEZWMgMjAwNSAxMDozMDoyNCAtMDAwMApAQCAt
MTg2OCw3ICsxODY4LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50
RgogICAgIGlmICghX3BhcnQgfHwgIV9wYXJ0LT54bWxEb2NJbXBsKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKF9wYXJ0LT54bWxEb2NJbXBsKCksIFFTdHJpbmc6OmZyb21OU1N0cmluZyht
YXJrdXBTdHJpbmcpLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcoYmFzZVVSTFN0cmluZykpOworICAg
IERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChfcGFydC0+eG1sRG9jSW1wbCgpLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcobWFya3VwU3RyaW5n
KSwgUVN0cmluZzo6ZnJvbU5TU3RyaW5nKGJhc2VVUkxTdHJpbmcpKS5yZWxlYXNlKCk7CiAgICAg
cmV0dXJuIFtET01Eb2N1bWVudEZyYWdtZW50IF9kb2N1bWVudEZyYWdtZW50V2l0aEltcGw6ZnJh
Z21lbnRdOwogfQogCkBAIC0xODc3LDcgKzE4NzcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpIHx8ICF0
ZXh0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gW0RPTURvY3VtZW50RnJh
Z21lbnQgX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1wbDpjcmVhdGVGcmFnbWVudEZyb21UZXh0KF9w
YXJ0LT54bWxEb2NJbXBsKCksIFFTdHJpbmc6OmZyb21OU1N0cmluZyh0ZXh0KSldOworICAgIHJl
dHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbXBsOmNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoX3BhcnQtPnhtbERvY0ltcGwoKSwgUVN0cmluZzo6ZnJvbU5TU3Ry
aW5nKHRleHQpKS5yZWxlYXNlKCldOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopZG9j
dW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczooTlNBcnJheSAqKW5vZGVzCkBAIC0x
ODkzLDcgKzE4OTMsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRG
CiAgICAgICAgIG5vZGVMaXN0LmFwcGVuZChbbm9kZSBfbm9kZUltcGxdKTsKICAgICB9CiAgICAg
Ci0gICAgcmV0dXJuIFtET01Eb2N1bWVudEZyYWdtZW50IF9kb2N1bWVudEZyYWdtZW50V2l0aElt
cGw6Y3JlYXRlRnJhZ21lbnRGcm9tTm9kZUxpc3QoX3BhcnQtPnhtbERvY0ltcGwoKSwgbm9kZUxp
c3QpXTsKKyAgICByZXR1cm4gW0RPTURvY3VtZW50RnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRX
aXRoSW1wbDpjcmVhdGVGcmFnbWVudEZyb21Ob2RlTGlzdChfcGFydC0+eG1sRG9jSW1wbCgpLCBu
b2RlTGlzdCkucmVsZWFzZSgpXTsKIH0KIAogLSAodm9pZClyZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6
KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBt
YXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUK
</data>
<flag name="review"
          id="1020"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5390</attachid>
            <date>2005-12-30 16:28:18 -0800</date>
            <delta_ts>2005-12-30 23:45:38 -0800</delta_ts>
            <desc>New combined patch addressing darin&apos;s concerns.</desc>
            <filename>editing.patch</filename>
            <type>text/plain</type>
            <size>114340</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDYKZGlmZiAtcCAtdSAtcjEuMTA2IGto
dG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKLS0tIGtodG1sL2VkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHAJMTAgRGVjIDIwMDUgMDI6NTk6MzAgLTAwMDAJMS4xMDYKKysr
IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6
NDEgLTAwMDAKQEAgLTYwMSwxMCArNjAxLDEwIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0TmVlZHNMYXlvdXQKICAgICBtX25lZWRzTGF5b3V0ID0gZmxhZzsKIH0KIAotUmVmUHRyPFJh
bmdlSW1wbD4gU2VsZWN0aW9uQ29udHJvbGxlcjo6dG9SYW5nZSgpIGNvbnN0CitQYXNzUmVmUHRy
PFJhbmdlSW1wbD4gU2VsZWN0aW9uQ29udHJvbGxlcjo6dG9SYW5nZSgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzTm9uZSgpKQotICAgICAgICByZXR1cm4gUmVmUHRyPFJhbmdlSW1wbD4oKTsKKyAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiB1cGRhdGVkIGxheW91
dCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAogICAgIC8vIGluIHRoZSBjb3Vyc2Ugb2Yg
cnVubmluZyBlZGl0IGNvbW1hbmRzIHdoaWNoIG1vZGlmeSB0aGUgRE9NLgpAQCAtNjQ3LDE2ICs2
NDcsMTYgQEAgUmVmUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uQ29udHJvbGxlcjo6dAogICAgIH0K
IAogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICBSZWZQdHI8UmFuZ2VJbXBsPiByZXN1
bHQobmV3IFJhbmdlSW1wbChzLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKSkpOworICAgIFBhc3NSZWZQ
dHI8UmFuZ2VJbXBsPiByZXN1bHQobmV3IFJhbmdlSW1wbChzLm5vZGUoKS0+Z2V0RG9jdW1lbnQo
KSkpOwogICAgIHJlc3VsdC0+c2V0U3RhcnQocy5ub2RlKCksIHMub2Zmc2V0KCksIGV4Y2VwdGlv
bkNvZGUpOwogICAgIGlmIChleGNlcHRpb25Db2RlKSB7CiAgICAgICAgIEVSUk9SKCJFeGNlcHRp
b24gc2V0dGluZyBSYW5nZSBzdGFydCBmcm9tIFNlbGVjdGlvbkNvbnRyb2xsZXI6ICVkIiwgZXhj
ZXB0aW9uQ29kZSk7Ci0gICAgICAgIHJldHVybiBSZWZQdHI8UmFuZ2VJbXBsPigpOworICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgcmVzdWx0LT5zZXRFbmQoZS5ub2RlKCksIGUub2Zmc2V0
KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIGlmIChleGNlcHRpb25Db2RlKSB7CiAgICAgICAgIEVS
Uk9SKCJFeGNlcHRpb24gc2V0dGluZyBSYW5nZSBlbmQgZnJvbSBTZWxlY3Rpb25Db250cm9sbGVy
OiAlZCIsIGV4Y2VwdGlvbkNvZGUpOwotICAgICAgICByZXR1cm4gUmVmUHRyPFJhbmdlSW1wbD4o
KTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC1wIC11IC1yMS40NyBraHRtbC9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuaAotLS0ga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmgJNiBEZWMgMjAwNSAwNDoyOToyNCAtMDAwMAkxLjQ3CisrKyBraHRtbC9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuaAkzMSBEZWMgMjAwNSAwMDoyNjo0MSAtMDAwMApAQCAtMjcsNiAr
MjcsNyBAQAogI2RlZmluZSBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9ICiAKICNpbmNsdWRlIDxx
cmVjdC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlICJ4bWwv
ZG9tX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidGV4dF9ncmFudWxhcml0eS5oIgogI2luY2x1ZGUg
Im1pc2Mvc2hhcmVkLmgiCkBAIC0xMDUsNyArMTA2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNS
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gUkFOR0U7IH0KICAgICBib29sIGlzQ2Fy
ZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSAhPSBOT05FOyB9CiAKLSAgICBSZWZQ
dHI8RE9NOjpSYW5nZUltcGw+IHRvUmFuZ2UoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPERPTTo6
UmFuZ2VJbXBsPiB0b1JhbmdlKCkgY29uc3Q7CiAKICAgICB2b2lkIGRlYnVnUG9zaXRpb24oKSBj
b25zdDsKICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoa2h0bWw6OlJlbmRlck9iamVjdCAqciwgYm9v
bCBzZWxlY3RlZCkgY29uc3Q7CkluZGV4OiBraHRtbC9lZGl0aW5nL2FwcGVuZF9ub2RlX2NvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvYXBwZW5kX25vZGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZm
IC1wIC11IC1yMS40IGtodG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFuZC5jcHAKLS0tIGto
dG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDEg
LTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuY3BwCTMxIERl
YyAyMDA1IDAwOjI2OjQxIC0wMDAwCkBAIC0zOSwxOSArMzksNyBAQCBBcHBlbmROb2RlQ29tbWFu
ZDo6QXBwZW5kTm9kZUNvbW1hbmQoRG9jCiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1f
YXBwZW5kQ2hpbGQoYXBwZW5kQ2hpbGQpLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSkKIHsKICAg
ICBBU1NFUlQobV9hcHBlbmRDaGlsZCk7Ci0gICAgbV9hcHBlbmRDaGlsZC0+cmVmKCk7Ci0KLSAg
ICBBU1NFUlQobV9wYXJlbnROb2RlKTsKLSAgICBtX3BhcmVudE5vZGUtPnJlZigpOwotfQotCi1B
cHBlbmROb2RlQ29tbWFuZDo6fkFwcGVuZE5vZGVDb21tYW5kKCkKLXsKLSAgICBBU1NFUlQobV9h
cHBlbmRDaGlsZCk7Ci0gICAgbV9hcHBlbmRDaGlsZC0+ZGVyZWYoKTsKLQogICAgIEFTU0VSVCht
X3BhcmVudE5vZGUpOwotICAgIG1fcGFyZW50Tm9kZS0+ZGVyZWYoKTsKIH0KIAogdm9pZCBBcHBl
bmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCkBAIC02MCw3ICs0OCw3IEBAIHZvaWQgQXBwZW5kTm9k
ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIEFTU0VSVChtX3BhcmVudE5vZGUpOwogCiAgICAgaW50
IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIG1fcGFyZW50Tm9kZS0+YXBwZW5kQ2hpbGQobV9hcHBl
bmRDaGlsZCwgZXhjZXB0aW9uQ29kZSk7CisgICAgbV9wYXJlbnROb2RlLT5hcHBlbmRDaGlsZCht
X2FwcGVuZENoaWxkLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9u
Q29kZSA9PSAwKTsKIH0KIApAQCAtNzEsNyArNTksNyBAQCB2b2lkIEFwcGVuZE5vZGVDb21tYW5k
Ojpkb1VuYXBwbHkoKQogICAgIEFTU0VSVChzdGF0ZSgpID09IEFwcGxpZWQpOwogCiAgICAgaW50
IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIG1fcGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobV9hcHBl
bmRDaGlsZCwgZXhjZXB0aW9uQ29kZSk7CisgICAgbV9wYXJlbnROb2RlLT5yZW1vdmVDaGlsZCht
X2FwcGVuZENoaWxkLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9u
Q29kZSA9PSAwKTsKIH0KIApJbmRleDoga2h0bWwvZWRpdGluZy9hcHBlbmRfbm9kZV9jb21tYW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9h
cHBlbmRfbm9kZV9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtodG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFuZC5oCi0tLSBraHRtbC9lZGl0
aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuaAkxMiBNYXkgMjAwNSAwNDowMDoxOSAtMDAwMAkxLjEK
KysrIGtodG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFuZC5oCTMxIERlYyAyMDA1IDAwOjI2
OjQxIC0wMDAwCkBAIC0zOCwxNyArMzgsMTcgQEAgY2xhc3MgQXBwZW5kTm9kZUNvbW1hbmQgOiBw
dWJsaWMgRWRpdENvbQogewogcHVibGljOgogICAgIEFwcGVuZE5vZGVDb21tYW5kKERPTTo6RG9j
dW1lbnRJbXBsICosIERPTTo6Tm9kZUltcGwgKmFwcGVuZENoaWxkLCBET006Ok5vZGVJbXBsICpw
YXJlbnROb2RlKTsKLSAgICB2aXJ0dWFsIH5BcHBlbmROb2RlQ29tbWFuZCgpOworICAgIHZpcnR1
YWwgfkFwcGVuZE5vZGVDb21tYW5kKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgp
OwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIERPTTo6Tm9kZUltcGwgKmFw
cGVuZENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9hcHBlbmRDaGlsZDsgfQotICAgIERPTTo6Tm9k
ZUltcGwgKnBhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0KKyAgICBE
T006Ok5vZGVJbXBsICphcHBlbmRDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwZW5kQ2hpbGQu
Z2V0KCk7IH0KKyAgICBET006Ok5vZGVJbXBsICpwYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnROb2RlLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9h
cHBlbmRDaGlsZDsKLSAgICBET006Ok5vZGVJbXBsICptX3BhcmVudE5vZGU7ICAgIAorICAgIFJl
ZlB0cjxET006Ok5vZGVJbXBsPiBtX2FwcGVuZENoaWxkOworICAgIFJlZlB0cjxET006Ok5vZGVJ
bXBsPiBtX3BhcmVudE5vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBraHRtbApJbmRleDoga2h0
bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRpZmYgLXAgLXUgLXIxLjIyIGtodG1sL2VkaXRpbmcv
YXBwbHlfc3R5bGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29t
bWFuZC5jcHAJMjIgRGVjIDIwMDUgMDQ6MTE6MzYgLTAwMDAJMS4yMgorKysga2h0bWwvZWRpdGlu
Zy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkzMSBEZWMgMjAwNSAwMDoyNjo0MiAtMDAwMApAQCAt
OTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTGVnYWN5U3R5bGVzKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VzTGVnYWN5U3R5bGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbml0
KENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICosIGNvbnN0IFBvc2l0aW9uICYpOworICAgIHZvaWQg
aW5pdChQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb25JbXBsPiwgY29uc3QgUG9zaXRpb24g
Jik7CiAgICAgYm9vbCBjaGVja0ZvckxlZ2FjeUhUTUxTdHlsZUNoYW5nZShjb25zdCBDU1NQcm9w
ZXJ0eSAqKTsKICAgICBzdGF0aWMgYm9vbCBjdXJyZW50bHlIYXNTdHlsZShjb25zdCBQb3NpdGlv
biAmLCBjb25zdCBDU1NQcm9wZXJ0eSAqKTsKICAgICAKQEAgLTExNywxMyArMTE3LDExIEBAIFN0
eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShDU1NTdHlsZURlY2xhcmEKICAgICBpbml0KHN0eWxlLCBw
b3NpdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVDaGFuZ2U6OmluaXQoQ1NTU3R5bGVEZWNsYXJhdGlv
bkltcGwgKnN0eWxlLCBjb25zdCBQb3NpdGlvbiAmcG9zaXRpb24pCit2b2lkIFN0eWxlQ2hhbmdl
Ojppbml0KFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGw+IHN0eWxlLCBjb25zdCBQ
b3NpdGlvbiAmcG9zaXRpb24pCiB7Ci0gICAgc3R5bGUtPnJlZigpOwogICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+IG11dGFibGVTdHlsZSA9IHN0eWxlLT5tYWtlTXV0
YWJsZSgpOwotICAgIHN0eWxlLT5kZXJlZigpOwogICAgIAotICAgIFFTdHJpbmcgc3R5bGVUZXh0
KCIiKTsKKyAgICBET01TdHJpbmcgc3R5bGVUZXh0KCIiKTsKIAogICAgIFFWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7CiAgICAgZm9yIChRVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtdXRhYmxlU3R5bGUtPnZhbHVlc0l0ZXJhdG9yKCk7IGl0
ICE9IGVuZDsgKytpdCkgewpAQCAtMTQzLDE0ICsxNDEsMTMgQEAgdm9pZCBTdHlsZUNoYW5nZTo6
aW5pdChDU1NTdHlsZURlY2xhcmF0aQogICAgICAgICBpZiAocHJvcGVydHktPmlkKCkgPT0gQ1NT
X1BST1BfX0tIVE1MX1RFWFRfREVDT1JBVElPTlNfSU5fRUZGRUNUKSB7CiAgICAgICAgICAgICAv
LyB3ZSBoYXZlIHRvIHNwZWNpYWwtY2FzZSB0ZXh0IGRlY29yYXRpb25zCiAgICAgICAgICAgICBD
U1NQcm9wZXJ0eSBhbHRlcmVkUHJvcGVydHkgPSBDU1NQcm9wZXJ0eShDU1NfUFJPUF9URVhUX0RF
Q09SQVRJT04sIHByb3BlcnR5LT52YWx1ZSgpLCBwcm9wZXJ0eS0+aXNJbXBvcnRhbnQoKSk7Ci0g
ICAgICAgICAgICBzdHlsZVRleHQgKz0gYWx0ZXJlZFByb3BlcnR5LmNzc1RleHQoKS5xc3RyaW5n
KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZVRleHQgKz0gcHJvcGVydHkt
PmNzc1RleHQoKS5xc3RyaW5nKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHN0eWxlVGV4dCAr
PSBhbHRlcmVkUHJvcGVydHkuY3NzVGV4dCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHN0eWxlVGV4dCArPSBwcm9wZXJ0eS0+Y3NzVGV4dCgpOwogICAgIH0KIAogICAgIC8vIFNhdmUg
dGhlIHJlc3VsdCBmb3IgbGF0ZXIKLSAgICBtX2Nzc1N0eWxlID0gc3R5bGVUZXh0LnN0cmlwV2hp
dGVTcGFjZSgpOworICAgIG1fY3NzU3R5bGUgPSBzdHlsZVRleHQucXN0cmluZygpLnN0cmlwV2hp
dGVTcGFjZSgpOwogfQogCiBTdHlsZUNoYW5nZTo6RUxlZ2FjeUhUTUxTdHlsZXMgU3R5bGVDaGFu
Z2U6OnN0eWxlTW9kZUZvclBhcnNlTW9kZShib29sIGlzUXVpcmtzTW9kZSkKQEAgLTg3Niw3ICs4
NzMsNyBAQCBzdGF0aWMgaW50IG1heFJhbmdlT2Zmc2V0KE5vZGVJbXBsICpuKQogICAgIHJldHVy
biAxOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBjb25zdCBQb3NpdGlvbiAmc3RhcnQs
IGNvbnN0IFBvc2l0aW9uICZlbmQpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxp
bmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4gc3R5bGUs
IGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3QgUG9zaXRpb24gJmVuZCkKIHsKICAgICBBU1NF
UlQoc3RhcnQuaXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChlbmQuaXNOb3ROdWxsKCkpOwpAQCAt
OTA1LDEyICs5MDIsMTIgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5
bAogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgTm9kZUltcGwgKnByZXYgPSBlbGVtLT50
cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcigpOwogICAgICAgICAgICAgTm9kZUltcGwgKm5l
eHQgPSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0gICAgICAgICAgICBpZiAoaXNIVE1MU3R5
bGVOb2RlKHN0eWxlLCBlbGVtKSkgeworICAgICAgICAgICAgaWYgKGlzSFRNTFN0eWxlTm9kZShz
dHlsZS5nZXQoKSwgZWxlbSkpIHsKICAgICAgICAgICAgICAgICByZW1vdmVIVE1MU3R5bGVOb2Rl
KGVsZW0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlSFRNTEZvbnRTdHlsZShzdHlsZSwgZWxlbSk7Ci0gICAgICAgICAgICAgICAgcmVt
b3ZlQ1NTU3R5bGUoc3R5bGUsIGVsZW0pOworICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxGb250
U3R5bGUoc3R5bGUuZ2V0KCksIGVsZW0pOworICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0eWxl
KHN0eWxlLmdldCgpLCBlbGVtKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghZWxl
bS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHMubm9kZSgpID09IGVsZW0p
IHsKQEAgLTkzMiwxMSArOTI5LDYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5s
aW5lU3R5bAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgIH0K
LQotCi0gICAgaWYgKHRleHREZWNvcmF0aW9uU3BlY2lhbFByb3BlcnR5KSB7Ci0gICAgICAgIHN0
eWxlLT5kZXJlZigpOwotICAgIH0KICAgICAKICAgICBBU1NFUlQocy5ub2RlKCktPmluRG9jdW1l
bnQoKSk7CiAgICAgQVNTRVJUKGUubm9kZSgpLT5pbkRvY3VtZW50KCkpOwpJbmRleDoga2h0bWwv
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5
bGVfY29tbWFuZC5oCi0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuaAkyMSBE
ZWMgMjAwNSAyMjo1MToxMCAtMDAwMAkxLjQKKysrIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5oCTMxIERlYyAyMDA1IDAwOjI2OjQyIC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBACiAj
ZGVmaW5lIF9fYXBwbHlfc3R5bGVfY29tbWFuZF9oX18KIAogI2luY2x1ZGUgImNvbXBvc2l0ZV9l
ZGl0X2NvbW1hbmQuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9QYXNzUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBET00gewogICAgIGNsYXNzIEhUTUxFbGVtZW50SW1wbDsKQEAgLTU1LDcgKzU2LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUhUTUxGb250U3R5bGUoRE9NOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbkltcGwgKiwgRE9NOjpIVE1MRWxlbWVudEltcGwgKik7CiAgICAgdm9pZCBy
ZW1vdmVDU1NTdHlsZShET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqLCBET006
OkhUTUxFbGVtZW50SW1wbCAqKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrU3R5bGUoRE9NOjpDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKiwgY29uc3QgRE9NOjpQb3NpdGlvbiAmc3RhcnQs
IGNvbnN0IERPTTo6UG9zaXRpb24gJmVuZCk7Ci0gICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShE
T006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqLCBjb25zdCBET006OlBvc2l0aW9u
ICZzdGFydCwgY29uc3QgRE9NOjpQb3NpdGlvbiAmZW5kKTsKKyAgICB2b2lkIHJlbW92ZUlubGlu
ZVN0eWxlKFBhc3NSZWZQdHI8RE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+LCBj
b25zdCBET006OlBvc2l0aW9uICZzdGFydCwgY29uc3QgRE9NOjpQb3NpdGlvbiAmZW5kKTsKICAg
ICBib29sIG5vZGVGdWxseVNlbGVjdGVkKERPTTo6Tm9kZUltcGwgKiwgY29uc3QgRE9NOjpQb3Np
dGlvbiAmc3RhcnQsIGNvbnN0IERPTTo6UG9zaXRpb24gJmVuZCkgY29uc3Q7CiAgICAgYm9vbCBu
b2RlRnVsbHlVbnNlbGVjdGVkKERPTTo6Tm9kZUltcGwgKm5vZGUsIGNvbnN0IERPTTo6UG9zaXRp
b24gJnN0YXJ0LCBjb25zdCBET006OlBvc2l0aW9uICZlbmQpIGNvbnN0OwogICAgIERPTTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpleHRyYWN0VGV4dERlY29yYXRpb25TdHlsZShE
T006Ok5vZGVJbXBsICpub2RlKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRf
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMgpkaWZmIC1wIC11IC1yMS4yMiBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1h
bmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCTIyIERl
YyAyMDA1IDA0OjExOjM2IC0wMDAwCTEuMjIKKysrIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2Vk
aXRfY29tbWFuZC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDMgLTAwMDAKQEAgLTM4MCw3ICszODAs
NyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAKICAgICBpbnQg
cmVtb3ZlZCA9IDA7CiAgICAgSW5saW5lVGV4dEJveCAqcHJldkJveCA9IDA7Ci0gICAgRE9NU3Ry
aW5nSW1wbCAqc3RyID0gMDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nSW1wbD4gc3RyOwogCiAgICAg
Ly8gVGhpcyBsb29wIHN0cnVjdHVyZSB3b3JrcyB0byBwcm9jZXNzIGFsbCBnYXBzIHByZWNlZGlu
ZyBhIGJveCwKICAgICAvLyBhbmQgYWxzbyB3aWxsIGxvb2sgYXQgdGhlIGdhcCBhZnRlciB0aGUg
bGFzdCBib3guCkBAIC0zOTYsMTAgKzM5Niw4IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OmRlbGV0ZUluc2lnbmkKICAgICAgICAgaWYgKGluZGljZXNJbnRlcnNlY3QgJiYgZ2FwTGVuID4g
MCkgewogICAgICAgICAgICAgZ2FwU3RhcnQgPSBrTWF4KGdhcFN0YXJ0LCBzdGFydCk7CiAgICAg
ICAgICAgICBnYXBFbmQgPSBrTWluKGdhcEVuZCwgZW5kKTsKLSAgICAgICAgICAgIGlmICghc3Ry
KSB7CisgICAgICAgICAgICBpZiAoIXN0cikKICAgICAgICAgICAgICAgICBzdHIgPSB0ZXh0Tm9k
ZS0+c3RyaW5nKCktPnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgICAgICAgICAg
ICAgIHN0ci0+cmVmKCk7Ci0gICAgICAgICAgICB9ICAgIAogICAgICAgICAgICAgLy8gcmVtb3Zl
IHRleHQgaW4gdGhlIGdhcAogICAgICAgICAgICAgc3RyLT5yZW1vdmUoZ2FwU3RhcnQgLSBzdGFy
dCAtIHJlbW92ZWQsIGdhcExlbik7CiAgICAgICAgICAgICByZW1vdmVkICs9IGdhcExlbjsKQEAg
LTQxMyw3ICs0MTEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25p
CiAgICAgaWYgKHN0cikgewogICAgICAgICAvLyBSZXBsYWNlIHRoZSB0ZXh0IGJldHdlZW4gc3Rh
cnQgYW5kIGVuZCB3aXRoIG91ciBwcnVuZWQgdmVyc2lvbi4KICAgICAgICAgaWYgKHN0ci0+bCA+
IDApIHsKLSAgICAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHRleHROb2RlLCBzdGFydCwgZW5k
IC0gc3RhcnQsIHN0cik7CisgICAgICAgICAgICByZXBsYWNlVGV4dEluTm9kZSh0ZXh0Tm9kZSwg
c3RhcnQsIGVuZCAtIHN0YXJ0LCBzdHIuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgd2UgYXJlIG5vdCBnb2luZyB0byBkZWxldGUg
YWxsIG9mIHRoZSB0ZXh0IGluIHRoZSBub2RlLgpAQCAtNDIyLDcgKzQyMCw2IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICAgICAgICAgIEFTU0VSVChzdGFy
dCA+IDAgfHwgKHVuc2lnbmVkKWVuZCAtIHN0YXJ0IDwgdGV4dE5vZGUtPmxlbmd0aCgpKTsKICAg
ICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0Tm9kZSwgc3RhcnQsIGVuZCAtIHN0YXJ0
KTsKICAgICAgICAgfQotICAgICAgICBzdHItPmRlcmVmKCk7CiAgICAgfQogfQogCkluZGV4OiBr
aHRtbC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3Rl
eHRfbm9kZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUg
LXIxLjUga2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0t
IGtodG1sL2VkaXRpbmcvZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTIxIE5vdiAy
MDA1IDAxOjIwOjAyIC0wMDAwCTEuNQorKysga2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0
X25vZGVfY29tbWFuZC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDMgLTAwMDAKQEAgLTQyLDE0ICs0
Miw2IEBAIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OkRlbGV0ZUZyb21UZXgKICAgICBBU1NF
UlQobV9vZmZzZXQgPj0gMCk7CiAgICAgQVNTRVJUKG1fb2Zmc2V0IDwgKGludCltX25vZGUtPmxl
bmd0aCgpKTsKICAgICBBU1NFUlQobV9jb3VudCA+PSAwKTsKLSAgICAKLSAgICBtX25vZGUtPnJl
ZigpOwotfQotCi1EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjp+RGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKG1fbm9kZSk7Ci0gICAgbV9ub2RlLT5kZXJlZigpOwog
fQogCiB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQpJbmRleDoga2h0
bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX2Zyb21fdGV4dF9u
b2RlX2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIg
a2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5oCi0tLSBraHRtbC9l
ZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmgJMTYgU2VwIDIwMDUgMjI6NDI6
MDYgLTAwMDAJMS4yCisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21t
YW5kLmgJMzEgRGVjIDIwMDUgMDA6MjY6NDMgLTAwMDAKQEAgLTQwLDE3ICs0MCwxNyBAQCBjbGFz
cyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kIDogcHVibGljCiB7CiBwdWJsaWM6CiAgICAgRGVs
ZXRlRnJvbVRleHROb2RlQ29tbWFuZChET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIERPTTo6
VGV4dEltcGwgKm5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCk7Ci0gICAgdmlydHVhbCB+RGVs
ZXRlRnJvbVRleHROb2RlQ29tbWFuZCgpOworICAgIHZpcnR1YWwgfkRlbGV0ZUZyb21UZXh0Tm9k
ZUNvbW1hbmQoKSB7IH0KIAkKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1
YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIERPTTo6VGV4dEltcGwgKm5vZGUoKSBjb25zdCB7
IHJldHVybiBtX25vZGU7IH0KKyAgICBET006OlRleHRJbXBsICpub2RlKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlLmdldCgpOyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CiAgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQogCiBwcml2
YXRlOgotICAgIERPTTo6VGV4dEltcGwgKm1fbm9kZTsKKyAgICBSZWZQdHI8RE9NOjpUZXh0SW1w
bD4gbV9ub2RlOwogICAgIGludCBtX29mZnNldDsKICAgICBpbnQgbV9jb3VudDsKICAgICBET006
OkRPTVN0cmluZyBtX3RleHQ7CkluZGV4OiBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25f
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjI0CmRpZmYgLXAgLXUgLXIxLjI0IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CTIyIERlYyAyMDA1IDA0OjExOjM2IC0wMDAwCTEuMjQKKysrIGtodG1sL2VkaXRpbmcvZGVsZXRl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcAkzMSBEZWMgMjAwNSAwMDoyNjo0NCAtMDAwMApAQCAtMjA0
LDExICsyMDQsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVQCiAg
ICAgLy8gSGFuZGxlIHNldHRpbmcgc3RhcnQgYW5kIGVuZCBibG9ja3MgYW5kIHRoZSBzdGFydCBu
b2RlLgogICAgIC8vCiAgICAgbV9zdGFydEJsb2NrID0gbV9kb3duc3RyZWFtU3RhcnQubm9kZSgp
LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Ci0gICAgbV9zdGFydEJsb2NrLT5yZWYoKTsK
ICAgICBtX2VuZEJsb2NrID0gbV91cHN0cmVhbUVuZC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxv
d0VsZW1lbnQoKTsKLSAgICBtX2VuZEJsb2NrLT5yZWYoKTsKICAgICBtX3N0YXJ0Tm9kZSA9IG1f
dXBzdHJlYW1TdGFydC5ub2RlKCk7Ci0gICAgbV9zdGFydE5vZGUtPnJlZigpOwogCiAgICAgLy8K
ICAgICAvLyBIYW5kbGUgZGV0ZWN0aW5nIGlmIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIHNlbGVj
dGlvbiBlbmQgaXMgaXRzZWxmIGZ1bGx5IHNlbGVjdGVkLgpAQCAtMjI3LDkgKzIyNCw5IEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVAKICAgICBkZWJ1Z1Bvc2l0aW9u
KCJtX2Rvd25zdHJlYW1FbmQgICAgICAiLCBtX2Rvd25zdHJlYW1FbmQpOwogICAgIGRlYnVnUG9z
aXRpb24oIm1fbGVhZGluZ1doaXRlc3BhY2UgICIsIG1fbGVhZGluZ1doaXRlc3BhY2UpOwogICAg
IGRlYnVnUG9zaXRpb24oIm1fdHJhaWxpbmdXaGl0ZXNwYWNlICIsIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlKTsKLSAgICBkZWJ1Z05vZGUoICAgICJtX3N0YXJ0QmxvY2sgICAgICAgICAiLCBtX3N0YXJ0
QmxvY2spOwotICAgIGRlYnVnTm9kZSggICAgIm1fZW5kQmxvY2sgICAgICAgICAgICIsIG1fZW5k
QmxvY2spOyAgICAKLSAgICBkZWJ1Z05vZGUoICAgICJtX3N0YXJ0Tm9kZSAgICAgICAgICAiLCBt
X3N0YXJ0Tm9kZSk7ICAgIAorICAgIGRlYnVnTm9kZSggICAgIm1fc3RhcnRCbG9jayAgICAgICAg
ICIsIG1fc3RhcnRCbG9jay5nZXQoKSk7CisgICAgZGVidWdOb2RlKCAgICAibV9lbmRCbG9jayAg
ICAgICAgICAgIiwgbV9lbmRCbG9jay5nZXQoKSk7ICAgIAorICAgIGRlYnVnTm9kZSggICAgIm1f
c3RhcnROb2RlICAgICAgICAgICIsIG1fc3RhcnROb2RlLmdldCgpKTsgICAgCiB9CiAKIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0UGxhY2Vob2xkZXJGb3JBbmNlc3RvckJsb2Nr
Q29udGVudCgpCkBAIC0yNzIsMjAgKzI2OSwxNCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OnNhdmVUeXBpbmdTCiAgICAgLy8gRmlndXJlIG91dCB0aGUgdHlwaW5nIHN0eWxlIGluIGVm
ZmVjdCBiZWZvcmUgdGhlIGRlbGV0ZSBpcyBkb25lLgogICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5
cGluZyBzdHlsZS4KICAgICAvLyBTZWUgdGhpcyBidWc6IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5
PiBJbXBsZW1lbnRhdGlvbiBvZiB0eXBpbmcgc3R5bGUgbmVlZHMgaW1wcm92ZW1lbnQKLSAgICBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpjb21wdXRlZFN0eWxlID0gcG9zaXRpb25C
ZWZvcmVUYWJTcGFuKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSkuY29tcHV0ZWRTdHlsZSgp
OwotICAgIGNvbXB1dGVkU3R5bGUtPnJlZigpOworICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb25JbXBsPiBjb21wdXRlZFN0eWxlID0gcG9zaXRpb25CZWZvcmVUYWJTcGFuKG1f
c2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSkuY29tcHV0ZWRTdHlsZSgpOwogICAgIG1fdHlwaW5n
U3R5bGUgPSBjb21wdXRlZFN0eWxlLT5jb3B5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKCk7Ci0gICAg
bV90eXBpbmdTdHlsZS0+cmVmKCk7Ci0gICAgY29tcHV0ZWRTdHlsZS0+ZGVyZWYoKTsKICAgICAK
ICAgICAvLyBJZiB3ZSdyZSBkZWxldGluZyBpbnRvIGEgTWFpbCBibG9ja3F1b3RlLCBzYXZlIHRo
ZSBzdHlsZSBhdCBlbmQoKSBpbnN0ZWFkIG9mIHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1c2UgdGhp
cyBsYXRlciBpbiBjb21wdXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQgdXAgb3V0
c2lkZSBvZiBhIE1haWwgYmxvY2txdW90ZQogICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUo
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKSkpIHsKICAgICAgICAgY29tcHV0ZWRT
dHlsZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuY29tcHV0ZWRTdHlsZSgpOwotICAgICAg
ICBjb21wdXRlZFN0eWxlLT5yZWYoKTsKICAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0
eWxlID0gY29tcHV0ZWRTdHlsZS0+Y29weUluaGVyaXRhYmxlUHJvcGVydGllcygpOwotICAgICAg
ICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUtPnJlZigpOwotICAgICAgICBjb21wdXRlZFN0
eWxlLT5kZXJlZigpOwogICAgIH0gZWxzZQogICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3Rl
U3R5bGUgPSAwOwogfQpAQCAtMzEyLDE2ICszMDMsNiBAQCBib29sIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZVNwZWNpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OnNldFN0YXJ0Tm9kZShOb2RlSW1wbCAqbm9kZSkKLXsKLSAgICBOb2Rl
SW1wbCAqb2xkID0gbV9zdGFydE5vZGU7Ci0gICAgbV9zdGFydE5vZGUgPSBub2RlOwotICAgIGlm
IChtX3N0YXJ0Tm9kZSkKLSAgICAgICAgbV9zdGFydE5vZGUtPnJlZigpOwotICAgIGlmIChvbGQp
Ci0gICAgICAgIG9sZC0+ZGVyZWYoKTsKLX0KLQogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKIHsKICAgICBpbnQgc3RhcnRPZmZzZXQgPSBtX3Vwc3Ry
ZWFtU3RhcnQub2Zmc2V0KCk7CkBAIC0zNDMsMTMgKzMyNCwxMyBAQCB2b2lkIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgLy8gZW5kIG9mIGEgYmxvY2sgb3RoZXIgdGhh
biB0aGUgYmxvY2sgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIHN0YXJ0LCB0aGVuIGRvIG5vdCBk
ZWxldGUgdGhlIAogICAgIC8vIHN0YXJ0IGJsb2NrLCBvdGhlcndpc2UgZGVsZXRlIHRoZSBzdGFy
dCBibG9jay4KICAgICBpZiAoc3RhcnRPZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0
YXJ0Tm9kZS0+aGFzVGFnTmFtZShiclRhZykpIHsKLSAgICAgICAgc2V0U3RhcnROb2RlKG1fc3Rh
cnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOworICAgICAgICBtX3N0YXJ0Tm9kZSA9IG1fc3Rh
cnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAg
ICB9CiAgICAgaWYgKG1fc3RhcnRCbG9jayAhPSBtX2VuZEJsb2NrICYmIGlzU3RhcnRPZkJsb2Nr
KFZpc2libGVQb3NpdGlvbihtX3Vwc3RyZWFtU3RhcnQsIG1fc2VsZWN0aW9uVG9EZWxldGUuc3Rh
cnRBZmZpbml0eSgpKSkpIHsKLSAgICAgICAgaWYgKCFtX3N0YXJ0QmxvY2stPmlzQW5jZXN0b3Io
bV9lbmRCbG9jaykgJiYgIWlzU3RhcnRPZkJsb2NrKHZpc2libGVFbmQpICYmIGVuZEF0RW5kT2ZC
bG9jaykgeworICAgICAgICBpZiAoIW1fc3RhcnRCbG9jay0+aXNBbmNlc3RvcihtX2VuZEJsb2Nr
LmdldCgpKSAmJiAhaXNTdGFydE9mQmxvY2sodmlzaWJsZUVuZCkgJiYgZW5kQXRFbmRPZkJsb2Nr
KSB7CiAgICAgICAgICAgICAvLyBEZWxldGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgYmxvY2ss
IGJ1dCBub3QgdGhlIGJsb2NrIGl0c2VsZi4KLSAgICAgICAgICAgIHNldFN0YXJ0Tm9kZShtX3N0
YXJ0QmxvY2stPmZpcnN0Q2hpbGQoKSk7CisgICAgICAgICAgICBtX3N0YXJ0Tm9kZSA9IG1fc3Rh
cnRCbG9jay0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzYyLDEzICszNDMsMTMgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICAvLyBBbHNvLCBiZWZvcmUgbW92aW5nIG9uLCBk
ZWxldGUgYW55IGluc2lnbmlmaWNhbnQgdGV4dCB0aGF0IG1heSBiZSBwcmVzZW50IGluIGEgdGV4
dCBub2RlLgogICAgICAgICBpZiAobV9zdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAg
ICAgICAgLy8gRGVsZXRlIGFueSBpbnNpZ25pZmljYW50IHRleHQgZnJvbSB0aGlzIG5vZGUuCi0g
ICAgICAgICAgICBUZXh0SW1wbCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG1fc3Rh
cnROb2RlKTsKKyAgICAgICAgICAgIFRleHRJbXBsICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dElt
cGwgKj4obV9zdGFydE5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHRleHQtPmxlbmd0aCgp
ID4gKHVuc2lnbmVkKW1fc3RhcnROb2RlLT5jYXJldE1heE9mZnNldCgpKQogICAgICAgICAgICAg
ICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBtX3N0YXJ0Tm9kZS0+Y2FyZXRNYXhPZmZzZXQo
KSwgdGV4dC0+bGVuZ3RoKCkgLSBtX3N0YXJ0Tm9kZS0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIHNoaWZ0IHRoZSBzdGFydCBub2RlIHRvIHRoZSBu
ZXh0Ci0gICAgICAgIHNldFN0YXJ0Tm9kZShtX3N0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
KTsKKyAgICAgICAgbV9zdGFydE5vZGUgPSBtX3N0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OwogICAgICAgICBzdGFydE9mZnNldCA9IDA7CiAgICAgfQogCkBAIC0zNzksMjQgKzM2MCwyNCBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgaWYgKG1fc3Rh
cnROb2RlID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpIHsKICAgICAgICAgLy8gVGhlIHNlbGVj
dGlvbiB0byBkZWxldGUgaXMgYWxsIGluIG9uZSBub2RlLgogICAgICAgICBpZiAoIW1fc3RhcnRO
b2RlLT5yZW5kZXJlcigpIHx8IAotICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID09IDAgJiYgbV9k
b3duc3RyZWFtRW5kLm9mZnNldCgpID49IG1heERlZXBPZmZzZXQobV9zdGFydE5vZGUpKSkgewor
ICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID09IDAgJiYgbV9kb3duc3RyZWFtRW5kLm9mZnNldCgp
ID49IG1heERlZXBPZmZzZXQobV9zdGFydE5vZGUuZ2V0KCkpKSkgewogICAgICAgICAgICAgLy8g
anVzdCBkZWxldGUKLSAgICAgICAgICAgIHJlbW92ZUZ1bGx5U2VsZWN0ZWROb2RlKG1fc3RhcnRO
b2RlKTsKKyAgICAgICAgICAgIHJlbW92ZUZ1bGx5U2VsZWN0ZWROb2RlKG1fc3RhcnROb2RlLmdl
dCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChtX2Rvd25zdHJlYW1FbmQub2Zmc2V0KCkgLSBzdGFy
dE9mZnNldCA+IDApIHsKICAgICAgICAgICAgIGlmIChtX3N0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0
cmltbWVkCi0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0
SW1wbCAqPihtX3N0YXJ0Tm9kZSk7CisgICAgICAgICAgICAgICAgVGV4dEltcGwgKnRleHQgPSBz
dGF0aWNfY2FzdDxUZXh0SW1wbCAqPihtX3N0YXJ0Tm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQu
b2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbV90cmFpbGluZ1doaXRl
c3BhY2VWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICByZW1vdmVDaGlsZHJlbkluUmFuZ2UobV9zdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25z
dHJlYW1FbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5n
ZShtX3N0YXJ0Tm9kZS5nZXQoKSwgc3RhcnRPZmZzZXQsIG1fZG93bnN0cmVhbUVuZC5vZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IG1fdXBzdHJlYW1TdGFydDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLy8g
VGhlIHNlbGVjdGlvbiB0byBkZWxldGUgc3BhbnMgbW9yZSB0aGFuIG9uZSBub2RlLgotICAgICAg
ICBOb2RlSW1wbCAqbm9kZSA9IG1fc3RhcnROb2RlOworICAgICAgICBOb2RlSW1wbCAqbm9kZSA9
IG1fc3RhcnROb2RlLmdldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4g
MCkgewogICAgICAgICAgICAgaWYgKG1fc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKQEAgLTYx
NCwxMSArNTk1LDExIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlRW4K
ICAgICBpZiAobV9lbmRpbmdQb3NpdGlvbi5ub2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9lbmRpbmdQb3NpdGlvbiA9IFBvc2l0aW9uKG1fc3RhcnRCbG9jaywg
MCk7CisgICAgbV9lbmRpbmdQb3NpdGlvbiA9IFBvc2l0aW9uKG1fc3RhcnRCbG9jay5nZXQoKSwg
MCk7CiAgICAgaWYgKG1fZW5kaW5nUG9zaXRpb24ubm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fZW5kaW5nUG9zaXRpb24gPSBQb3NpdGlvbihtX2VuZEJsb2Nr
LCAwKTsKKyAgICBtX2VuZGluZ1Bvc2l0aW9uID0gUG9zaXRpb24obV9lbmRCbG9jay5nZXQoKSwg
MCk7CiAgICAgaWYgKG1fZW5kaW5nUG9zaXRpb24ubm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNjM1LDI1ICs2MTYsMTUgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpjYWxjdWxhdGVUeQogICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5cGluZyBzdHlsZS4K
ICAgICAvLyBTZWUgdGhpcyBidWc6IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5PiBJbXBsZW1lbnRh
dGlvbiBvZiB0eXBpbmcgc3R5bGUgbmVlZHMgaW1wcm92ZW1lbnQKICAgICAKLSAgICBpZiAobV9k
ZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlKSB7Ci0gICAgICAgIC8vIElmIHdlIGRlbGV0ZWQgaW50
byBhIGJsb2NrcXVvdGUsIGJ1dCBhcmUgbm93IG5vIGxvbmdlciBpbiBhIGJsb2NrcXVvdGUsIHVz
ZSB0aGUgYWx0ZXJuYXRlIHR5cGluZyBzdHlsZQotICAgICAgICBpZiAoIW5lYXJlc3RNYWlsQmxv
Y2txdW90ZShtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqb2xkU3R5bGUgPSBtX3R5cGluZ1N0eWxlOwotICAgICAg
ICAgICAgbV90eXBpbmdTdHlsZSA9IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKLSAgICAg
ICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7Ci0gICAgICAgICAgICBvbGRT
dHlsZS0+ZGVyZWYoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fZGVsZXRlSW50
b0Jsb2NrcXVvdGVTdHlsZS0+ZGVyZWYoKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2Nr
cXVvdGVTdHlsZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uSW1wbCBlbmRpbmdTdHlsZShtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKSk7
Ci0gICAgZW5kaW5nU3R5bGUuZGlmZihtX3R5cGluZ1N0eWxlKTsKLSAgICBpZiAoIW1fdHlwaW5n
U3R5bGUtPmxlbmd0aCgpKSB7Ci0gICAgICAgIG1fdHlwaW5nU3R5bGUtPmRlcmVmKCk7CisgICAg
Ly8gSWYgd2UgZGVsZXRlZCBpbnRvIGEgYmxvY2txdW90ZSwgYnV0IGFyZSBub3cgbm8gbG9uZ2Vy
IGluIGEgYmxvY2txdW90ZSwgdXNlIHRoZSBhbHRlcm5hdGUgdHlwaW5nIHN0eWxlCisgICAgaWYg
KG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSAmJiAhbmVhcmVzdE1haWxCbG9ja3F1b3RlKG1f
ZW5kaW5nUG9zaXRpb24ubm9kZSgpKSkKKyAgICAgICAgbV90eXBpbmdTdHlsZSA9IG1fZGVsZXRl
SW50b0Jsb2NrcXVvdGVTdHlsZTsKKyAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSAw
OworICAgIAorICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsPiBlbmRp
bmdTdHlsZSA9IG5ldyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsKG1fZW5kaW5nUG9z
aXRpb24ubm9kZSgpKTsKKyAgICBlbmRpbmdTdHlsZS0+ZGlmZihtX3R5cGluZ1N0eWxlLmdldCgp
KTsKKyAgICBpZiAoIW1fdHlwaW5nU3R5bGUtPmxlbmd0aCgpKQogICAgICAgICBtX3R5cGluZ1N0
eWxlID0gMDsKLSAgICB9CiAgICAgaWYgKGluc2VydGVkUGxhY2Vob2xkZXIgJiYgbV90eXBpbmdT
dHlsZSkgewogICAgICAgICAvLyBBcHBseSBzdHlsZSB0byB0aGUgcGxhY2Vob2xkZXIuIFRoaXMg
bWFrZXMgc3VyZSB0aGF0IHRoZSBzaW5nbGUgbGluZSBpbiB0aGUKICAgICAgICAgLy8gcGFyYWdy
YXBoIGhhcyB0aGUgcmlnaHQgaGVpZ2h0LCBhbmQgdGhhdCB0aGUgcGFyYWdyYXBoIHRha2VzIG9u
IHRoZSBzdHlsZQpAQCAtNjYyLDE1ICs2MzMsMTMgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpjYWxjdWxhdGVUeQogICAgICAgICAvLyBpcyBub3QgcmV0YWluZWQgdW50aWwgdGhlIG5l
eHQgdHlwaW5nIGFjdGlvbi4KIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9u
Q29udHJvbGxlcihQb3NpdGlvbihpbnNlcnRlZFBsYWNlaG9sZGVyLCAwKSwgRE9XTlNUUkVBTSkp
OwotICAgICAgICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5bGUsIEVkaXRBY3Rpb25VbnNwZWNpZmll
ZCk7Ci0KLSAgICAgICAgbV90eXBpbmdTdHlsZS0+ZGVyZWYoKTsKKyAgICAgICAgYXBwbHlTdHls
ZShtX3R5cGluZ1N0eWxlLmdldCgpLCBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwogICAgICAgICBt
X3R5cGluZ1N0eWxlID0gMDsKICAgICB9CiAgICAgLy8gU2V0IG1fdHlwaW5nU3R5bGUgYXMgdGhl
IHR5cGluZyBzdHlsZS4KICAgICAvLyBJdCdzIHBlcmZlY3RseSBPSyBmb3IgbV90eXBpbmdTdHls
ZSB0byBiZSBudWxsLgotICAgIGRvY3VtZW50KCktPnBhcnQoKS0+c2V0VHlwaW5nU3R5bGUobV90
eXBpbmdTdHlsZSk7Ci0gICAgc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZSk7CisgICAgZG9j
dW1lbnQoKS0+cGFydCgpLT5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpKTsKKyAg
ICBzZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpKTsKIH0KIAogdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKQEAgLTY4MywyNyArNjUyLDYg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaQogICAgIG1fZW5kaW5n
UG9zaXRpb24uY2xlYXIoKTsKICAgICBtX2xlYWRpbmdXaGl0ZXNwYWNlLmNsZWFyKCk7CiAgICAg
bV90cmFpbGluZ1doaXRlc3BhY2UuY2xlYXIoKTsKLQotICAgIGlmIChtX3N0YXJ0QmxvY2spIHsK
LSAgICAgICAgbV9zdGFydEJsb2NrLT5kZXJlZigpOwotICAgICAgICBtX3N0YXJ0QmxvY2sgPSAw
OwotICAgIH0KLSAgICBpZiAobV9lbmRCbG9jaykgewotICAgICAgICBtX2VuZEJsb2NrLT5kZXJl
ZigpOwotICAgICAgICBtX2VuZEJsb2NrID0gMDsKLSAgICB9Ci0gICAgaWYgKG1fc3RhcnROb2Rl
KSB7Ci0gICAgICAgIG1fc3RhcnROb2RlLT5kZXJlZigpOwotICAgICAgICBtX3N0YXJ0Tm9kZSA9
IDA7Ci0gICAgfQotICAgIGlmIChtX3R5cGluZ1N0eWxlKSB7Ci0gICAgICAgIG1fdHlwaW5nU3R5
bGUtPmRlcmVmKCk7Ci0gICAgICAgIG1fdHlwaW5nU3R5bGUgPSAwOwotICAgIH0KLSAgICBpZiAo
bV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlKSB7Ci0gICAgICAgIG1fZGVsZXRlSW50b0Jsb2Nr
cXVvdGVTdHlsZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxl
ID0gMDsKLSAgICB9CiB9CiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgp
CkluZGV4OiBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVj
dGlvbl9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41
IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmgKLS0tIGtodG1sL2VkaXRp
bmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmgJMjQgU2VwIDIwMDUgMDE6MTg6NTUgLTAwMDAJ
MS41CisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5oCTMxIERlYyAy
MDA1IDAwOjI2OjQ0IC0wMDAwCkBAIC01Myw4ICs1Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
YWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKERPTTo6Tm9kZUltcGwgKmluc2VydGVkUGxh
Y2Vob2xkZXIpOwogICAgIHZvaWQgY2xlYXJUcmFuc2llbnRTdGF0ZSgpOwogCi0gICAgdm9pZCBz
ZXRTdGFydE5vZGUoRE9NOjpOb2RlSW1wbCAqKTsKLQogICAgIGJvb2wgbV9oYXNTZWxlY3Rpb25U
b0RlbGV0ZTsKICAgICBib29sIG1fc21hcnREZWxldGU7CiAgICAgYm9vbCBtX21lcmdlQmxvY2tz
QWZ0ZXJEZWxldGU7CkBAIC02OSwxMSArNjcsMTEgQEAgcHJpdmF0ZToKICAgICBET006OlBvc2l0
aW9uIG1fZW5kaW5nUG9zaXRpb247CiAgICAgRE9NOjpQb3NpdGlvbiBtX2xlYWRpbmdXaGl0ZXNw
YWNlOwogICAgIERPTTo6UG9zaXRpb24gbV90cmFpbGluZ1doaXRlc3BhY2U7Ci0gICAgRE9NOjpO
b2RlSW1wbCAqbV9zdGFydEJsb2NrOwotICAgIERPTTo6Tm9kZUltcGwgKm1fZW5kQmxvY2s7Ci0g
ICAgRE9NOjpOb2RlSW1wbCAqbV9zdGFydE5vZGU7Ci0gICAgRE9NOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkltcGwgKm1fdHlwaW5nU3R5bGU7Ci0gICAgRE9NOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkltcGwgKm1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKKyAgICBSZWZQdHI8
RE9NOjpOb2RlSW1wbD4gbV9zdGFydEJsb2NrOworICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBt
X2VuZEJsb2NrOworICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBtX3N0YXJ0Tm9kZTsKKyAgICBS
ZWZQdHI8RE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+IG1fdHlwaW5nU3R5bGU7
CisgICAgUmVmUHRyPERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBtX2RlbGV0
ZUludG9CbG9ja3F1b3RlU3R5bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBraHRtbApJbmRleDog
a2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNApkaWZmIC1wIC11IC1yMS4xNCBraHRtbC9lZGl0aW5nL2VkaXRfY29tbWFu
ZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmNwcAkyMiBEZWMgMjAwNSAwNDox
MTozNiAtMDAwMAkxLjE0CisrKyBraHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5jcHAJMzEgRGVj
IDIwMDUgMDA6MjY6NDQgLTAwMDAKQEAgLTU5LDIwICs1OSw2IEBAIEVkaXRDb21tYW5kUHRyOjpF
ZGl0Q29tbWFuZFB0cihFZGl0Q29tbWEKIHsKIH0KIAotRWRpdENvbW1hbmRQdHI6OkVkaXRDb21t
YW5kUHRyKGNvbnN0IEVkaXRDb21tYW5kUHRyICZvKSA6IFJlZlB0cjxFZGl0Q29tbWFuZD4obykK
LXsKLX0KLQotRWRpdENvbW1hbmRQdHI6On5FZGl0Q29tbWFuZFB0cigpCi17Ci19Ci0KLUVkaXRD
b21tYW5kUHRyICZFZGl0Q29tbWFuZFB0cjo6b3BlcmF0b3I9KGNvbnN0IEVkaXRDb21tYW5kUHRy
ICZjKQotewotICAgIHN0YXRpY19jYXN0PFJlZlB0cjxFZGl0Q29tbWFuZD4gJj4oKnRoaXMpID0g
YzsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIGJvb2wgRWRpdENvbW1hbmRQdHI6OmlzQ29tcG9z
aXRlU3RlcCgpIGNvbnN0CiB7CiAgICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoZmFsc2UpOyAg
ICAgICAgCkBAIC0yMDIsMjEgKzE4OCwxNiBAQCBFZGl0Q29tbWFuZFB0ciAmRWRpdENvbW1hbmRQ
dHI6OmVtcHR5Q29tCiB9CiAKIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudEltcGwg
KmRvY3VtZW50KSAKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpLCBtX3N0YXRlKE5vdEFwcGxp
ZWQpLCBtX3R5cGluZ1N0eWxlKDApLCBtX3BhcmVudCgwKQorICAgIDogbV9kb2N1bWVudChkb2N1
bWVudCksIG1fc3RhdGUoTm90QXBwbGllZCksIG1fcGFyZW50KDApCiB7CiAgICAgQVNTRVJUKG1f
ZG9jdW1lbnQpOwogICAgIEFTU0VSVChtX2RvY3VtZW50LT5wYXJ0KCkpOwotICAgIG1fZG9jdW1l
bnQtPnJlZigpOwogICAgIG1fc3RhcnRpbmdTZWxlY3Rpb24gPSBtX2RvY3VtZW50LT5wYXJ0KCkt
PnNlbGVjdGlvbigpOwogICAgIG1fZW5kaW5nU2VsZWN0aW9uID0gbV9zdGFydGluZ1NlbGVjdGlv
bjsKIH0KIAogRWRpdENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpCiB7Ci0gICAgQVNTRVJUKG1fZG9j
dW1lbnQpOwotICAgIG1fZG9jdW1lbnQtPmRlcmVmKCk7Ci0gICAgaWYgKG1fdHlwaW5nU3R5bGUp
Ci0gICAgICAgIG1fdHlwaW5nU3R5bGUtPmRlcmVmKCk7CiB9CiAKIHZvaWQgRWRpdENvbW1hbmQ6
OmFwcGx5KCkKQEAgLTMzNSwyNSArMzE2LDEyIEBAIHZvaWQgRWRpdENvbW1hbmQ6OnNldEVuZGlu
Z1NlbGVjdGlvbihjb24KICAgICAgICAgY21kLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7CiB9CiAK
LXZvaWQgRWRpdENvbW1hbmQ6OmFzc2lnblR5cGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uSW1wbCAqc3R5bGUpCi17Ci0gICAgaWYgKG1fdHlwaW5nU3R5bGUgPT0gc3R5bGUpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25J
bXBsICpvbGQgPSBtX3R5cGluZ1N0eWxlOwotICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKLSAg
ICBpZiAobV90eXBpbmdTdHlsZSkKLSAgICAgICAgbV90eXBpbmdTdHlsZS0+cmVmKCk7Ci0gICAg
aWYgKG9sZCkKLSAgICAgICAgb2xkLT5kZXJlZigpOwotfQotCiB2b2lkIEVkaXRDb21tYW5kOjpz
ZXRUeXBpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKQogewog
ICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5cGluZyBzdHlsZS4KICAgICAvLyBTZWUgdGhpcyBidWc6
IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5PiBJbXBsZW1lbnRhdGlvbiBvZiB0eXBpbmcgc3R5bGUg
bmVlZHMgaW1wcm92ZW1lbnQKICAgICBmb3IgKEVkaXRDb21tYW5kICpjbWQgPSB0aGlzOyBjbWQ7
IGNtZCA9IGNtZC0+bV9wYXJlbnQpCi0gICAgICAgIGNtZC0+YXNzaWduVHlwaW5nU3R5bGUoc3R5
bGUpOworICAgICAgICBjbWQtPm1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKIH0KIAogYm9vbCBFZGl0
Q29tbWFuZDo6cHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdApAQCAtMzczLDEwICszNDEsOCBA
QCBib29sIEVkaXRDb21tYW5kOjppc1R5cGluZ0NvbW1hbmQoKSBjb25zCiAKIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbCAqRWRpdENvbW1hbmQ6OnN0eWxlQXRQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiAmcG9zKQogewotICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKmNv
bXB1dGVkU3R5bGUgPSBwb3NpdGlvbkJlZm9yZVRhYlNwYW4ocG9zKS5jb21wdXRlZFN0eWxlKCk7
Ci0gICAgY29tcHV0ZWRTdHlsZS0+cmVmKCk7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbkltcGw+IGNvbXB1dGVkU3R5bGUgPSBwb3NpdGlvbkJlZm9yZVRhYlNwYW4ocG9z
KS5jb21wdXRlZFN0eWxlKCk7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpz
dHlsZSA9IGNvbXB1dGVkU3R5bGUtPmNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKLSAgICBj
b21wdXRlZFN0eWxlLT5kZXJlZigpOwogIAogICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5cGluZyBz
dHlsZS4KICAgICAvLyBTZWUgdGhpcyBidWc6IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5PiBJbXBs
ZW1lbnRhdGlvbiBvZiB0eXBpbmcgc3R5bGUgbmVlZHMgaW1wcm92ZW1lbnQKSW5kZXg6IGtodG1s
L2VkaXRpbmcvZWRpdF9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41CmRpZmYgLXAgLXUgLXIxLjUga2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuaAotLS0ga2h0
bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuaAkyMiBEZWMgMjAwNSAwNDoxMTozNiAtMDAwMAkxLjUK
KysrIGtodG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmgJMzEgRGVjIDIwMDUgMDA6MjY6NDQgLTAw
MDAKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVk
aXRpbmdBY3Rpb24oKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRE9NOjpEb2N1bWVudEltcGwgKiBj
b25zdCBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICB2aXJ0dWFs
IERPTTo6RG9jdW1lbnRJbXBsICogY29uc3QgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Rv
Y3VtZW50LmdldCgpOyB9CiAKICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHN0YXJ0aW5nU2VsZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGluZ1NlbGVjdGlvbjsgfQogICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIgZW5kaW5nU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRpbmdTZWxl
Y3Rpb247IH0KQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RW5kaW5nU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCk7CiAgICAgdm9pZCBzZXRFbmRpbmdTZWxl
Y3Rpb24oY29uc3QgRE9NOjpQb3NpdGlvbiAmcCwgRUFmZmluaXR5IGFmZmluaXR5KTsKIAotICAg
IERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0eXBpbmdTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwaW5nU3R5bGU7IH07CisgICAgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkltcGwgKnR5cGluZ1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV90eXBpbmdTdHlsZS5n
ZXQoKTsgfTsKICAgICB2b2lkIHNldFR5cGluZ1N0eWxlKERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25JbXBsICopOwogICAgIAogICAgIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25JbXBsICpzdHlsZUF0UG9zaXRpb24oY29uc3QgRE9NOjpQb3NpdGlvbiAmcG9zKTsKQEAgLTkw
LDE1ICs5MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXlvdXQoKSBjb25zdDsKICAg
ICAKIHByaXZhdGU6Ci0gICAgdm9pZCBhc3NpZ25UeXBpbmdTdHlsZShET006OkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbCAqKTsKLQogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNUeXBp
bmdTdHlsZSgpIGNvbnN0OwogCi0gICAgRE9NOjpEb2N1bWVudEltcGwgKm1fZG9jdW1lbnQ7Cisg
ICAgUmVmUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBtX2RvY3VtZW50OwogICAgIEVDb21tYW5kU3Rh
dGUgbV9zdGF0ZTsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyIG1fc3RhcnRpbmdTZWxlY3Rpb247
CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBtX2VuZGluZ1NlbGVjdGlvbjsKLSAgICBET006OkNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqbV90eXBpbmdTdHlsZTsKKyAgICBSZWZQdHI8
RE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+IG1fdHlwaW5nU3R5bGU7CiAgICAg
RWRpdENvbW1hbmQgKm1fcGFyZW50OwogfTsKIApAQCAtMTA3LDEwICsxMDUsNiBAQCBjbGFzcyBF
ZGl0Q29tbWFuZFB0ciA6IHB1YmxpYyBSZWZQdHI8RWRpCiBwdWJsaWM6CiAgICAgRWRpdENvbW1h
bmRQdHIoKTsKICAgICBFZGl0Q29tbWFuZFB0cihFZGl0Q29tbWFuZCAqKTsKLSAgICBFZGl0Q29t
bWFuZFB0cihjb25zdCBFZGl0Q29tbWFuZFB0ciAmKTsKLSAgICB+RWRpdENvbW1hbmRQdHIoKTsK
LQotICAgIEVkaXRDb21tYW5kUHRyICZvcGVyYXRvcj0oY29uc3QgRWRpdENvbW1hbmRQdHIgJik7
CiAKICAgICBib29sIGlzQ29tcG9zaXRlU3RlcCgpIGNvbnN0OwogCkluZGV4OiBraHRtbC9lZGl0
aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga2h0
bWwvZWRpdGluZy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAxOjIw
OjAzIC0wMDAwCTEuNQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29t
bWFuZC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDQgLTAwMDAKQEAgLTQzLDE2ICs0Myw5IEBAIElu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXgKICAgICBBU1NFUlQobV9vZmZz
ZXQgPj0gMCk7CiAgICAgQVNTRVJUKCF0ZXh0LmlzRW1wdHkoKSk7CiAgICAgCi0gICAgbV9ub2Rl
LT5yZWYoKTsKICAgICBtX3RleHQgPSB0ZXh0LmNvcHkoKTsgLy8gbWFrZSBhIGNvcHkgdG8gZW5z
dXJlIHRoYXQgdGhlIHN0cmluZyBuZXZlciBjaGFuZ2VzCiB9CiAKLUluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6On5JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKCkKLXsKLSAgICBpZiAobV9ub2Rl
KQotICAgICAgICBtX25vZGUtPmRlcmVmKCk7Ci19Ci0KIHZvaWQgSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CkluZGV4OiBraHRtbC9l
ZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfaW50b190ZXh0X25vZGVf
Y29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBraHRt
bC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmgKLS0tIGtodG1sL2VkaXRp
bmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuaAkxNiBTZXAgMjAwNSAyMjo0MjowNiAt
MDAwMAkxLjIKKysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQu
aAkzMSBEZWMgMjAwNSAwMDoyNjo0NCAtMDAwMApAQCAtNDEsMTcgKzQxLDE3IEBAIGNsYXNzIElu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMKIHsKIHB1YmxpYzoKICAgICBJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kKERPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgRE9NOjpUZXh0
SW1wbCAqLCBpbnQsIGNvbnN0IERPTTo6RE9NU3RyaW5nICYpOwotICAgIHZpcnR1YWwgfkluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQoKTsKKyAgICB2aXJ0dWFsIH5JbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kKCkgeyB9CiAJCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBET006OlRleHRJbXBsICpub2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlOyB9CisgICAgRE9NOjpUZXh0SW1wbCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZS5nZXQoKTsgfQogICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQogICAgIERPTTo6RE9NU3RyaW5nIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0K
IAogcHJpdmF0ZToKLSAgICBET006OlRleHRJbXBsICptX25vZGU7CisgICAgUmVmUHRyPERPTTo6
VGV4dEltcGw+IG1fbm9kZTsKICAgICBpbnQgbV9vZmZzZXQ7CiAgICAgRE9NOjpET01TdHJpbmcg
bV90ZXh0OwogfTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQKZGlmZiAtcCAtdSAtcjEuNCBraHRtbC9lZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21t
YW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9pbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZC5jcHAJ
MjEgTm92IDIwMDUgMDE6MjA6MDMgLTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9u
b2RlX2JlZm9yZV9jb21tYW5kLmNwcAkzMSBEZWMgMjAwNSAwMDoyNjo0NSAtMDAwMApAQCAtMzks
MTkgKzM5LDcgQEAgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Okluc2VydE5vZGVCZWZvcgogICAg
IDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX2luc2VydENoaWxkKGluc2VydENoaWxkKSwgbV9y
ZWZDaGlsZChyZWZDaGlsZCkKIHsKICAgICBBU1NFUlQobV9pbnNlcnRDaGlsZCk7Ci0gICAgbV9p
bnNlcnRDaGlsZC0+cmVmKCk7Ci0KLSAgICBBU1NFUlQobV9yZWZDaGlsZCk7Ci0gICAgbV9yZWZD
aGlsZC0+cmVmKCk7Ci19Ci0KLUluc2VydE5vZGVCZWZvcmVDb21tYW5kOjp+SW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQoKQotewotICAgIEFTU0VSVChtX2luc2VydENoaWxkKTsKLSAgICBtX2luc2Vy
dENoaWxkLT5kZXJlZigpOwotCiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwotICAgIG1fcmVmQ2hp
bGQtPmRlcmVmKCk7CiB9CiAKIHZvaWQgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvQXBwbHko
KQpAQCAtNjEsNyArNDksNyBAQCB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb0FwcGx5
KCkKICAgICBBU1NFUlQobV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpKTsKIAogICAgIGludCBleGNl
cHRpb25Db2RlID0gMDsKLSAgICBtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9y
ZShtX2luc2VydENoaWxkLCBtX3JlZkNoaWxkLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX3JlZkNo
aWxkLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShtX2luc2VydENoaWxkLmdldCgpLCBtX3Jl
ZkNoaWxkLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9
PSAwKTsKIH0KIApAQCAtNzIsNyArNjAsNyBAQCB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5k
Ojpkb1VuYXBwbHkoCiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKSk7CiAKICAg
ICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5y
ZW1vdmVDaGlsZChtX2luc2VydENoaWxkLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX3JlZkNoaWxk
LT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG1faW5zZXJ0Q2hpbGQuZ2V0KCksIGV4Y2VwdGlv
bkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogfQogCkluZGV4OiBraHRt
bC9lZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfbm9kZV9iZWZvcmVfY29t
bWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBraHRtbC9l
ZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmgKLS0tIGtodG1sL2VkaXRpbmcvaW5z
ZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmQuaAkxMyBNYXkgMjAwNSAwODozNzoxNSAtMDAwMAkxLjEK
KysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmQuaAkzMSBEZWMgMjAw
NSAwMDoyNjo0NSAtMDAwMApAQCAtMzQsMTcgKzM0LDE3IEBAIGNsYXNzIEluc2VydE5vZGVCZWZv
cmVDb21tYW5kIDogcHVibGljIEUKIHsKIHB1YmxpYzoKICAgICBJbnNlcnROb2RlQmVmb3JlQ29t
bWFuZChET006OkRvY3VtZW50SW1wbCAqLCBET006Ok5vZGVJbXBsICppbnNlcnRDaGlsZCwgRE9N
OjpOb2RlSW1wbCAqcmVmQ2hpbGQpOwotICAgIHZpcnR1YWwgfkluc2VydE5vZGVCZWZvcmVDb21t
YW5kKCk7CisgICAgdmlydHVhbCB+SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoKSB7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwog
Ci0gICAgRE9NOjpOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2luc2Vy
dENoaWxkOyB9Ci0gICAgRE9NOjpOb2RlSW1wbCAqcmVmQ2hpbGQoKSBjb25zdCB7IHJldHVybiBt
X3JlZkNoaWxkOyB9CisgICAgRE9NOjpOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQoKSBjb25zdCB7IHJl
dHVybiBtX2luc2VydENoaWxkLmdldCgpOyB9CisgICAgRE9NOjpOb2RlSW1wbCAqcmVmQ2hpbGQo
KSBjb25zdCB7IHJldHVybiBtX3JlZkNoaWxkLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9N
OjpOb2RlSW1wbCAqbV9pbnNlcnRDaGlsZDsKLSAgICBET006Ok5vZGVJbXBsICptX3JlZkNoaWxk
OyAKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9pbnNlcnRDaGlsZDsKKyAgICBSZWZQdHI8
RE9NOjpOb2RlSW1wbD4gbV9yZWZDaGlsZDsgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBraHRtbApJ
bmRleDoga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2lu
c2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjExCmRpZmYgLXAgLXUgLXIxLjExIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9z
ZXBhcmF0b3JfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9z
ZXBhcmF0b3JfY29tbWFuZC5jcHAJMjIgRGVjIDIwMDUgMDQ6MTE6MzYgLTAwMDAJMS4xMQorKysg
a2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAkzMSBE
ZWMgMjAwNSAwMDoyNjo0NSAtMDAwMApAQCAtNTIsMTUgKzUyLDEzIEBAIHVzaW5nIERPTTo6VGV4
dEltcGw7CiBuYW1lc3BhY2Uga2h0bWwgewogCiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kKERvY3VtZW50SW1wbCAqZG9jdW1l
bnQpIAotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3N0eWxlKDApCisg
ICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKIHsKIH0KIAogSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZDo6fkluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQoKSAK
IHsKICAgICBkZXJlZk5vZGVzSW5MaXN0KGNsb25lZE5vZGVzKTsKLSAgICBpZiAobV9zdHlsZSkK
LSAgICAgICAgbV9zdHlsZS0+ZGVyZWYoKTsKIH0KIAogYm9vbCBJbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JDb21tYW5kOjpwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0CkBAIC04NSwxMCArODMs
NyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNhCiAgICAgaWYgKCFp
c1N0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJs
ZVBvcykpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAobV9zdHlsZSkKLSAgICAgICAg
bV9zdHlsZS0+ZGVyZWYoKTsKICAgICBtX3N0eWxlID0gc3R5bGVBdFBvc2l0aW9uKHBvcyk7Ci0g
ICAgbV9zdHlsZS0+cmVmKCk7CiB9CiAKIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6YXBwbHlTdHlsZUFmdGVySW5zZXJ0aW9uKCkKQEAgLTk5LDEwICs5NCw5IEBAIHZvaWQg
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6YXAKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbCBlbmRpbmdTdHlsZShlbmRpbmdTZWxl
Y3Rpb24oKS5zdGFydCgpLm5vZGUoKSk7Ci0gICAgZW5kaW5nU3R5bGUuZGlmZihtX3N0eWxlKTsK
LSAgICBpZiAobV9zdHlsZS0+bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIGFwcGx5U3R5bGUobV9z
dHlsZSk7Ci0gICAgfQorICAgIGVuZGluZ1N0eWxlLmRpZmYobV9zdHlsZS5nZXQoKSk7CisgICAg
aWYgKG1fc3R5bGUtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgYXBwbHlTdHlsZShtX3N0eWxlLmdl
dCgpKTsKIH0KIAogdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5
KCkKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcv
aW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2Vw
YXJhdG9yX2NvbW1hbmQuaAotLS0ga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFy
YXRvcl9jb21tYW5kLmgJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9l
ZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuaAkzMSBEZWMgMjAwNSAw
MDoyNjo0NSAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCBwcml2YXRlOgogCiAgICAgUVB0ckxpc3Q8
RE9NOjpOb2RlSW1wbD4gYW5jZXN0b3JzOwogICAgIFFQdHJMaXN0PERPTTo6Tm9kZUltcGw+IGNs
b25lZE5vZGVzOwotICAgIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICptX3N0
eWxlOworICAgIFJlZlB0cjxET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4gbV9z
dHlsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGtodG1sCkluZGV4OiBraHRtbC9lZGl0aW5nL2pv
aW5fdGV4dF9ub2Rlc19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rlc19jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQga2h0bWwvZWRpdGluZy9qb2luX3Rl
eHRfbm9kZXNfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2Nv
bW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAxOjIwOjAzIC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGlu
Zy9qb2luX3RleHRfbm9kZXNfY29tbWFuZC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDUgLTAwMDAK
QEAgLTQ0LDE3ICs0NCw2IEBAIEpvaW5UZXh0Tm9kZXNDb21tYW5kOjpKb2luVGV4dE5vZGVzQ29t
bWEKICAgICBBU1NFUlQobV90ZXh0MS0+bmV4dFNpYmxpbmcoKSA9PSBtX3RleHQyKTsKICAgICBB
U1NFUlQobV90ZXh0MS0+bGVuZ3RoKCkgPiAwKTsKICAgICBBU1NFUlQobV90ZXh0Mi0+bGVuZ3Ro
KCkgPiAwKTsKLQotICAgIG1fdGV4dDEtPnJlZigpOwotICAgIG1fdGV4dDItPnJlZigpOwotfQot
Ci1Kb2luVGV4dE5vZGVzQ29tbWFuZDo6fkpvaW5UZXh0Tm9kZXNDb21tYW5kKCkKLXsKLSAgICBB
U1NFUlQobV90ZXh0MSk7Ci0gICAgbV90ZXh0MS0+ZGVyZWYoKTsKLSAgICBBU1NFUlQobV90ZXh0
Mik7Ci0gICAgbV90ZXh0Mi0+ZGVyZWYoKTsKIH0KIAogdm9pZCBKb2luVGV4dE5vZGVzQ29tbWFu
ZDo6ZG9BcHBseSgpCkBAIC02Nyw3ICs1Niw3IEBAIHZvaWQgSm9pblRleHROb2Rlc0NvbW1hbmQ6
OmRvQXBwbHkoKQogICAgIG1fdGV4dDItPmluc2VydERhdGEoMCwgbV90ZXh0MS0+ZGF0YSgpLCBl
eGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIAotICAgIG1f
dGV4dDItPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobV90ZXh0MSwgZXhjZXB0aW9uQ29kZSk7
CisgICAgbV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChtX3RleHQxLmdldCgpLCBl
eGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIAogICAgIG1f
b2Zmc2V0ID0gbV90ZXh0MS0+bGVuZ3RoKCk7CkBAIC04Myw3ICs3Miw3IEBAIHZvaWQgSm9pblRl
eHROb2Rlc0NvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgbV90ZXh0Mi0+ZGVsZXRlRGF0YSgwLCBt
X29mZnNldCwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7
CiAKLSAgICBtX3RleHQyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShtX3RleHQxLCBtX3Rl
eHQyLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX3RleHQyLT5wYXJlbnROb2RlKCktPmluc2VydEJl
Zm9yZShtX3RleHQxLmdldCgpLCBtX3RleHQyLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgCiAgICAgQVNTRVJUKG1fdGV4dDIt
PnByZXZpb3VzU2libGluZygpLT5pc1RleHROb2RlKCkpOwpJbmRleDoga2h0bWwvZWRpdGluZy9q
b2luX3RleHRfbm9kZXNfY29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2h0bWwvZWRpdGluZy9qb2luX3RleHRf
bm9kZXNfY29tbWFuZC5oCi0tLSBraHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rlc19jb21tYW5k
LmgJMTYgU2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJMS4yCisrKyBraHRtbC9lZGl0aW5nL2pvaW5f
dGV4dF9ub2Rlc19jb21tYW5kLmgJMzEgRGVjIDIwMDUgMDA6MjY6NDUgLTAwMDAKQEAgLTM4LDE3
ICszOCwxNyBAQCBjbGFzcyBKb2luVGV4dE5vZGVzQ29tbWFuZCA6IHB1YmxpYyBFZGl0CiB7CiBw
dWJsaWM6CiAgICAgSm9pblRleHROb2Rlc0NvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKiwgRE9N
OjpUZXh0SW1wbCAqLCBET006OlRleHRJbXBsICopOwotICAgIHZpcnR1YWwgfkpvaW5UZXh0Tm9k
ZXNDb21tYW5kKCk7CisgICAgdmlydHVhbCB+Sm9pblRleHROb2Rlc0NvbW1hbmQoKSB7IH0KIAkK
ICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHko
KTsKIAotICAgIERPTTo6VGV4dEltcGwgKmZpcnN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dDE7IH0KLSAgICBET006OlRleHRJbXBsICpzZWNvbmROb2RlKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0MjsgfQorICAgIERPTTo6VGV4dEltcGwgKmZpcnN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dDEuZ2V0KCk7IH0KKyAgICBET006OlRleHRJbXBsICpzZWNvbmROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0Mi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIERPTTo6VGV4dEltcGwgKm1f
dGV4dDE7Ci0gICAgRE9NOjpUZXh0SW1wbCAqbV90ZXh0MjsKKyAgICBSZWZQdHI8RE9NOjpUZXh0
SW1wbD4gbV90ZXh0MTsKKyAgICBSZWZQdHI8RE9NOjpUZXh0SW1wbD4gbV90ZXh0MjsKICAgICB1
bnNpZ25lZCBtX29mZnNldDsKIH07CiAKSW5kZXg6IGtodG1sL2VkaXRpbmcvanNlZGl0aW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pz
ZWRpdGluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzcKZGlmZiAtcCAtdSAtcjEuMzcg
a2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2pzZWRpdGluZy5j
cHAJMjMgRGVjIDIwMDUgMTg6NDQ6MTQgLTAwMDAJMS4zNworKysga2h0bWwvZWRpdGluZy9qc2Vk
aXRpbmcuY3BwCTMxIERlYyAyMDA1IDAwOjI2OjQ1IC0wMDAwCkBAIC0xNDUsMTEgKzE0NSw5IEBA
IG5hbWVzcGFjZSB7CiAKIGJvb2wgZXhlY1N0eWxlQ2hhbmdlKEtIVE1MUGFydCAqcGFydCwgaW50
IHByb3BlcnR5SUQsIGNvbnN0IERPTVN0cmluZyAmcHJvcGVydHlWYWx1ZSkKIHsKLSAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uSW1wbDsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBs
PiBzdHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CiAgICAgc3R5bGUt
PnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpOwotICAgIHN0eWxlLT5yZWYo
KTsKLSAgICBwYXJ0LT5hcHBseVN0eWxlKHN0eWxlKTsKLSAgICBzdHlsZS0+ZGVyZWYoKTsKKyAg
ICBwYXJ0LT5hcHBseVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTYwLDIyICsxNTgsMTcgQEAgYm9vbCBleGVjU3R5bGVDaGFuZ2UoS0hUTUxQYXJ0ICpwYXJ0
LCBpbgogCiBLSFRNTFBhcnQ6OlRyaVN0YXRlIHN0YXRlU3R5bGUoS0hUTUxQYXJ0ICpwYXJ0LCBp
bnQgcHJvcGVydHlJRCwgY29uc3QgY2hhciAqZGVzaXJlZFZhbHVlKQogewotICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25JbXBsOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+IHN0
eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKICAgICBzdHlsZS0+c2V0
UHJvcGVydHkocHJvcGVydHlJRCwgZGVzaXJlZFZhbHVlKTsKLSAgICBzdHlsZS0+cmVmKCk7Ci0g
ICAgS0hUTUxQYXJ0OjpUcmlTdGF0ZSBzdGF0ZSA9IHBhcnQtPnNlbGVjdGlvbkhhc1N0eWxlKHN0
eWxlKTsKLSAgICBzdHlsZS0+ZGVyZWYoKTsKKyAgICBLSFRNTFBhcnQ6OlRyaVN0YXRlIHN0YXRl
ID0gcGFydC0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpOwogICAgIHJldHVybiBzdGF0
ZTsKIH0KIAogYm9vbCBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKEtIVE1MUGFydCAqcGFydCwgaW50
IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIgKmRlc2lyZWRWYWx1ZSkKIHsKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uSW1wbDsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBzdHls
ZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CiAgICAgc3R5bGUtPnNldFBy
b3BlcnR5KHByb3BlcnR5SUQsIGRlc2lyZWRWYWx1ZSk7Ci0gICAgc3R5bGUtPnJlZigpOwotICAg
IGJvb2wgaGFzU3R5bGUgPSBwYXJ0LT5zZWxlY3Rpb25TdGFydEhhc1N0eWxlKHN0eWxlKTsKLSAg
ICBzdHlsZS0+ZGVyZWYoKTsKLSAgICByZXR1cm4gaGFzU3R5bGU7CisgICAgcmV0dXJuIHBhcnQt
PnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoc3R5bGUuZ2V0KCkpOwogfQogCiBET01TdHJpbmcgdmFs
dWVTdHlsZShLSFRNTFBhcnQgKnBhcnQsIGludCBwcm9wZXJ0eUlEKQpJbmRleDoga2h0bWwvZWRp
dGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VkaXRpbmcvbWFya3VwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC1w
IC11IC1yMS40NSBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvbWFy
a3VwLmNwcAkzMCBEZWMgMjAwNSAxNDo1MTozMSAtMDAwMAkxLjQ1CisrKyBraHRtbC9lZGl0aW5n
L21hcmt1cC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDYgLTAwMDAKQEAgLTM1MywyMCArMzUzLDE1
IEBAIFFTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlSW1wbCAqcmEKIAogICAgIC8vIGNh
bGN1bGF0ZSB0aGUgImRlZmF1bHQgc3R5bGUiIGZvciB0aGlzIG1hcmt1cAogICAgIFBvc2l0aW9u
IHBvcyhkb2MtPmRvY3VtZW50RWxlbWVudCgpLCAwKTsKLSAgICBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb25JbXBsICpjb21wdXRlZFN0eWxlID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKLSAgICBj
b21wdXRlZFN0eWxlLT5yZWYoKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwg
KmRlZmF1bHRTdHlsZSA9IGNvbXB1dGVkU3R5bGUtPmNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMo
KTsKLSAgICBjb21wdXRlZFN0eWxlLT5kZXJlZigpOwotICAgIGRlZmF1bHRTdHlsZS0+cmVmKCk7
CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGw+IGNvbXB1dGVkU3R5
bGUgPSBwb3MuY29tcHV0ZWRTdHlsZSgpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkltcGw+IGRlZmF1bHRTdHlsZSA9IGNvbXB1dGVkU3R5bGUtPmNvcHlJbmhlcml0YWJs
ZVByb3BlcnRpZXMoKTsKICAgICAKICAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gcmFuZ2UtPnN0
YXJ0Tm9kZSgpOwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQocmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVFbmQocmFuZ2UtPmVuZFBvc2l0aW9uKCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAg
IGlmICghaW5TYW1lQmxvY2sodmlzaWJsZVN0YXJ0LCB2aXNpYmxlU3RhcnQubmV4dCgpKSkgewot
ICAgICAgICBpZiAodmlzaWJsZVN0YXJ0ID09IHZpc2libGVFbmQucHJldmlvdXMoKSkgewotICAg
ICAgICAgICAgZGVmYXVsdFN0eWxlLT5kZXJlZigpOworICAgICAgICBpZiAodmlzaWJsZVN0YXJ0
ID09IHZpc2libGVFbmQucHJldmlvdXMoKSkKICAgICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5n
ZU5ld2xpbmVTdHJpbmc7Ci0gICAgICAgIH0KICAgICAgICAgbWFya3Vwcy5hcHBlbmQoaW50ZXJj
aGFuZ2VOZXdsaW5lU3RyaW5nKTsKICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2
ZXJzZU5leHROb2RlKCk7CiAgICAgfQpAQCAtMzgzLDcgKzM3OCw3IEBAIFFTdHJpbmcgY3JlYXRl
TWFya3VwKGNvbnN0IFJhbmdlSW1wbCAqcmEKICAgICAgICAgCiAgICAgICAgIC8vIEFkZCB0aGUg
bm9kZSB0byB0aGUgbWFya3VwLgogICAgICAgICBpZiAobi0+cmVuZGVyZXIoKSkgewotICAgICAg
ICAgICAgbWFya3Vwcy5hcHBlbmQoc3RhcnRNYXJrdXAobiwgcmFuZ2UsIGFubm90YXRlLCBkZWZh
dWx0U3R5bGUpKTsKKyAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKHN0YXJ0TWFya3VwKG4sIHJh
bmdlLCBhbm5vdGF0ZSwgZGVmYXVsdFN0eWxlLmdldCgpKSk7CiAgICAgICAgICAgICBpZiAobm9k
ZXMpIHsKICAgICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKG4pOwogICAgICAgICAgICAgfQpA
QCAtNDE1LDcgKzQxMCw3IEBAIFFTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlSW1wbCAq
cmEKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuZXh0UGFyZW50ID0gbmV4dC0+
cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gIT0gbmV4dFBhcmVu
dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZUltcGwgKnBhcmVudCA9
IG4tPnBhcmVudCgpOyBwYXJlbnQgIT0gMCAmJiBwYXJlbnQgIT0gbmV4dFBhcmVudDsgcGFyZW50
ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKHBhcmVudCwgcmFuZ2UsIGFubm90YXRlLCBk
ZWZhdWx0U3R5bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5w
cmVwZW5kKHN0YXJ0TWFya3VwKHBhcmVudCwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUu
Z2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQo
ZW5kTWFya3VwKHBhcmVudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBl
bmQocGFyZW50KTsKQEAgLTQ1Myw3ICs0NDgsNyBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25z
dCBSYW5nZUltcGwgKnJhCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1h
cmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUpKTsKKyAgICAgICAg
ICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90YXRl
LCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsKICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1h
cmt1cChhbmNlc3RvcikpOwogICAgICAgICAgICAgaWYgKG5vZGVzKSB7CiAgICAgICAgICAgICAg
ICAgbm9kZXMtPmFwcGVuZChhbmNlc3Rvcik7CkBAIC00NzIsNyArNDY3LDcgQEAgUVN0cmluZyBj
cmVhdGVNYXJrdXAoY29uc3QgUmFuZ2VJbXBsICpyYQogICAgIC8vIFJldGFpbiB0aGUgTWFpbCBx
dW90ZSBsZXZlbCBieSBpbmNsdWRpbmcgYWxsIGFuY2VzdG9yIG1haWwgYmxvY2sgcXVvdGVzLgog
ICAgIGZvciAoTm9kZUltcGwgKmFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3JCbG9jazsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoaXNN
YWlsQmxvY2txdW90ZShhbmNlc3RvcikpIHsKLSAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChz
dGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUpKTsKKyAg
ICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFu
bm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsKICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5k
KGVuZE1hcmt1cChhbmNlc3RvcikpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDgyLDIyICs0Nzcs
MjEgQEAgUVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2VJbXBsICpyYQogICAgIFFTdHJp
bmcgb3BlblRhZyA9IFFTdHJpbmcoIjxzcGFuIGNsYXNzPVwiIikgKyBBcHBsZVN0eWxlU3BhbkNs
YXNzICsgIlwiIHN0eWxlPVwiIiArIGRlZmF1bHRTdHlsZS0+Y3NzVGV4dCgpLnFzdHJpbmcoKSAr
ICJcIj4iOwogICAgIG1hcmt1cHMucHJlcGVuZChvcGVuVGFnKTsKICAgICBtYXJrdXBzLmFwcGVu
ZCgiPC9zcGFuPiIpOwotICAgIGRlZmF1bHRTdHlsZS0+ZGVyZWYoKTsKIAogICAgIHJldHVybiBt
YXJrdXBzLmpvaW4oIiIpOwogfQogCi1Eb2N1bWVudEZyYWdtZW50SW1wbCAqY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKERvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFFTdHJpbmcgJm1hcmt1
cCwgY29uc3QgUVN0cmluZyAmYmFzZVVSTCkKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudElt
cGw+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25z
dCBRU3RyaW5nICZtYXJrdXAsIGNvbnN0IFFTdHJpbmcgJmJhc2VVUkwpCiB7CiAgICAgQVNTRVJU
KGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICAvLyBG
SVhNRTogV2hhdCBpZiB0aGUgZG9jdW1lbnQgZWxlbWVudCBpcyBub3QgYW4gSFRNTCBlbGVtZW50
PwogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpOwogCi0gICAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKmZyYWdtZW50ID0gZWxlbWVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1h
cmt1cCk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50SW1wbD4gZnJhZ21lbnQgPSBl
bGVtZW50LT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKICAgICBBU1NFUlQoZnJh
Z21lbnQpOwogCiAgICAgaWYgKCFiYXNlVVJMLmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9IGRvY3Vt
ZW50LT5iYXNlVVJMKCkpCi0gICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudCwgYmFzZVVSTCk7
CisgICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7CiAKICAgICBy
ZXR1cm4gZnJhZ21lbnQ7CiB9CkBAIC01NTIsMTMgKzU0NiwxMiBAQCBzdGF0aWMgdm9pZCBjcmVh
dGVQYXJhZ3JhcGhDb250ZW50c0Zyb21TCiAgICAgfQogfQogCi1ET006OkRvY3VtZW50RnJhZ21l
bnRJbXBsICpjcmVhdGVGcmFnbWVudEZyb21UZXh0KERPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVu
dCwgY29uc3QgUVN0cmluZyAmdGV4dCkKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudEltcGw+
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgUVN0
cmluZyAmdGV4dCkKIHsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGRvY3VtZW50LT5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7Ci0gICAgZnJhZ21lbnQtPnJlZigpOworICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudEltcGw+IGZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKTsKICAgICAKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIFFTdHJp
bmcgc3RyaW5nID0gdGV4dDsKQEAgLTU3Miw1OSArNTY1LDQzIEBAIERPTTo6RG9jdW1lbnRGcmFn
bWVudEltcGwgKmNyZWF0ZUZyYWdtZW4KICAgICAgICAgICAgIGxpc3QucG9wX2Zyb250KCk7CiAK
ICAgICAgICAgICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICAgICAgICAgIEVsZW1lbnRJ
bXBsICplbGVtZW50OworICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnRJbXBsPiBlbGVtZW50Owog
ICAgICAgICAgICAgaWYgKHMuaXNFbXB0eSgpICYmIGxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gRm9yIGxhc3QgbGluZSwgdXNlIHRoZSAibWFnaWMgQlIiIHJhdGhlciB0aGFu
IGEgUC4KICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnRO
Uyh4aHRtbE5hbWVzcGFjZVVSSSwgImJyIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+
cmVmKCk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwg
QXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUpOyAgICAgICAgICAgIAogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBlbGVtZW50ID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1l
bnQoZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQtPnJlZigpOwotICAgICAgICAg
ICAgICAgIGNyZWF0ZVBhcmFncmFwaENvbnRlbnRzRnJvbVN0cmluZyhkb2N1bWVudCwgZWxlbWVu
dCwgcyk7CisgICAgICAgICAgICAgICAgY3JlYXRlUGFyYWdyYXBoQ29udGVudHNGcm9tU3RyaW5n
KGRvY3VtZW50LCBlbGVtZW50LmdldCgpLCBzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGZyYWdtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAg
ICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LmdldCgpLCBleGNlcHRpb25Db2RlKTsK
ICAgICAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwotICAgICAgICAgICAgZWxl
bWVudC0+ZGVyZWYoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBUcmljayB0byBn
ZXQgdGhlIGZyYWdtZW50IGJhY2sgdG8gdGhlIGZsb2F0aW5nIHN0YXRlLCB3aXRoIDAKLSAgICAv
LyByZWZzIGJ1dCBub3QgZGVzdHJveWVkLgotICAgIGZyYWdtZW50LT5zZXRQYXJlbnQoZG9jdW1l
bnQpOwotICAgIGZyYWdtZW50LT5kZXJlZigpOwogICAgIGZyYWdtZW50LT5zZXRQYXJlbnQoMCk7
Ci0gICAgCiAgICAgcmV0dXJuIGZyYWdtZW50OwogfQogCi1ET006OkRvY3VtZW50RnJhZ21lbnRJ
bXBsICpjcmVhdGVGcmFnbWVudEZyb21Ob2RlTGlzdChET006OkRvY3VtZW50SW1wbCAqZG9jdW1l
bnQsIGNvbnN0IFFQdHJMaXN0PERPTTo6Tm9kZUltcGw+ICZub2RlTGlzdCkKK1Bhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudEltcGw+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVMaXN0KERvY3VtZW50
SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFFQdHJMaXN0PE5vZGVJbXBsPiAmbm9kZUxpc3QpCiB7CiAg
ICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgRG9jdW1lbnRG
cmFnbWVudEltcGwgKmZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKLSAgICBmcmFnbWVudC0+cmVmKCk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
SW1wbD4gZnJhZ21lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAg
IAotICAgIEVsZW1lbnRJbXBsICplbGVtZW50OworICAgIFJlZlB0cjxFbGVtZW50SW1wbD4gZWxl
bWVudDsKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAgICAgZm9yIChRUHRyTGlzdEl0ZXJh
dG9yPE5vZGVJbXBsPiBpKG5vZGVMaXN0KTsgaS5jdXJyZW50KCk7ICsraSkgewogICAgICAgICBl
bGVtZW50ID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQpOwotICAgICAg
ICBlbGVtZW50LT5yZWYoKTsKICAgICAgICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQoaS5jdXJyZW50
KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsK
LSAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQsIGV4Y2VwdGlvbkNvZGUpOwor
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVudC5nZXQoKSwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwotICAgICAgICBlbGVtZW50
LT5kZXJlZigpOwogICAgIH0KICAgICAKLSAgICAvLyBUcmljayB0byBnZXQgdGhlIGZyYWdtZW50
IGJhY2sgdG8gdGhlIGZsb2F0aW5nIHN0YXRlLCB3aXRoIDAKLSAgICAvLyByZWZzIGJ1dCBub3Qg
ZGVzdHJveWVkLgotICAgIGZyYWdtZW50LT5zZXRQYXJlbnQoZG9jdW1lbnQpOwotICAgIGZyYWdt
ZW50LT5kZXJlZigpOwogICAgIGZyYWdtZW50LT5zZXRQYXJlbnQoMCk7Ci0gICAgCiAgICAgcmV0
dXJuIGZyYWdtZW50OwogfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtodG1sL2VkaXRpbmcvbWFy
a3VwLmgKLS0tIGtodG1sL2VkaXRpbmcvbWFya3VwLmgJMzAgTm92IDIwMDUgMDI6MDY6MzMgLTAw
MDAJMS4yCisrKyBraHRtbC9lZGl0aW5nL21hcmt1cC5oCTMxIERlYyAyMDA1IDAwOjI2OjQ2IC0w
MDAwCkBAIC0yOCwxNCArMjgsMTUgQEAKIAogI2luY2x1ZGUgPHhtbC9kb21fZG9jaW1wbC5oPgog
I2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2UuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKIGVudW0gRUNoaWxkcmVuT25seSB7IEluY2x1
ZGVOb2RlLCBDaGlsZHJlbk9ubHkgfTsKIAotRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFFT
dHJpbmcgJnRleHQpOwotRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKERPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgUVN0cmluZyAmbWFy
a3VwLCBjb25zdCBRU3RyaW5nICZiYXNlVVJMKTsKLURPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwg
KmNyZWF0ZUZyYWdtZW50RnJvbU5vZGVMaXN0KERPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwg
Y29uc3QgUVB0ckxpc3Q8RE9NOjpOb2RlSW1wbD4gJm5vZGVMaXN0KTsKK1Bhc3NSZWZQdHI8RE9N
OjpEb2N1bWVudEZyYWdtZW50SW1wbD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChET006OkRvY3Vt
ZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFFTdHJpbmcgJnRleHQpOworUGFzc1JlZlB0cjxET006
OkRvY3VtZW50RnJhZ21lbnRJbXBsPiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRE9NOjpEb2N1
bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBRU3RyaW5nICZtYXJrdXAsIGNvbnN0IFFTdHJpbmcg
JmJhc2VVUkwpOworUGFzc1JlZlB0cjxET006OkRvY3VtZW50RnJhZ21lbnRJbXBsPiBjcmVhdGVG
cmFnbWVudEZyb21Ob2RlTGlzdChET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFFQ
dHJMaXN0PERPTTo6Tm9kZUltcGw+ICZub2RlTGlzdCk7CiAKIFFTdHJpbmcgY3JlYXRlTWFya3Vw
KGNvbnN0IERPTTo6UmFuZ2VJbXBsICpyYW5nZSwKICAgICBRUHRyTGlzdDxET006Ok5vZGVJbXBs
PiAqbm9kZXMgPSAwLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9IERvTm90QW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSk7CkluZGV4OiBraHRtbC9lZGl0aW5nL21lcmdlX2lkZW50aWNhbF9lbGVtZW50
c19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lZGl0aW5nL21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQga2h0bWwvZWRpdGluZy9tZXJnZV9pZGVu
dGljYWxfZWxlbWVudHNfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvbWVyZ2VfaWRlbnRp
Y2FsX2VsZW1lbnRzX2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAxOjIwOjA0IC0wMDAwCTEuNAor
Kysga2h0bWwvZWRpdGluZy9tZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5jcHAJMzEg
RGVjIDIwMDUgMDA6MjY6NDYgLTAwMDAKQEAgLTM3LDI0ICszNywxMCBAQCB1c2luZyBET006OkVs
ZW1lbnRJbXBsOwogbmFtZXNwYWNlIGtodG1sIHsKIAogTWVyZ2VJZGVudGljYWxFbGVtZW50c0Nv
bW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKERPTTo6RG9jdW1lbnRJbXBsICpk
b2N1bWVudCwgRE9NOjpFbGVtZW50SW1wbCAqZmlyc3QsIERPTTo6RWxlbWVudEltcGwgKnNlY29u
ZCkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9lbGVtZW50MShmaXJzdCksIG1fZWxl
bWVudDIoc2Vjb25kKSwgbV9hdENoaWxkKDApCisgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCks
IG1fZWxlbWVudDEoZmlyc3QpLCBtX2VsZW1lbnQyKHNlY29uZCkKIHsKICAgICBBU1NFUlQobV9l
bGVtZW50MSk7CiAgICAgQVNTRVJUKG1fZWxlbWVudDIpOwotCi0gICAgbV9lbGVtZW50MS0+cmVm
KCk7Ci0gICAgbV9lbGVtZW50Mi0+cmVmKCk7Ci19Ci0KLU1lcmdlSWRlbnRpY2FsRWxlbWVudHND
b21tYW5kOjp+TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoKQotewotICAgIGlmIChtX2F0
Q2hpbGQpCi0gICAgICAgIG1fYXRDaGlsZC0+ZGVyZWYoKTsKLQotICAgIEFTU0VSVChtX2VsZW1l
bnQxKTsKLSAgICBtX2VsZW1lbnQxLT5kZXJlZigpOwotICAgIEFTU0VSVChtX2VsZW1lbnQyKTsK
LSAgICBtX2VsZW1lbnQyLT5kZXJlZigpOwogfQogCiB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVu
dHNDb21tYW5kOjpkb0FwcGx5KCkKQEAgLTY1LDE3ICs1MSwxNSBAQCB2b2lkIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kOjpkb0FwCiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAK
LSAgICBpZiAoIW1fYXRDaGlsZCkgeworICAgIGlmICghbV9hdENoaWxkKQogICAgICAgICBtX2F0
Q2hpbGQgPSBtX2VsZW1lbnQyLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIG1fYXRDaGlsZC0+cmVm
KCk7Ci0gICAgfQogCiAgICAgd2hpbGUgKG1fZWxlbWVudDEtPmxhc3RDaGlsZCgpKSB7CiAgICAg
ICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLT5sYXN0Q2hpbGQoKSwgbV9l
bGVtZW50Mi0+Zmlyc3RDaGlsZCgpLCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgQVNTRVJUKGV4
Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgfQogCi0gICAgbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgp
LT5yZW1vdmVDaGlsZChtX2VsZW1lbnQxLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX2VsZW1lbnQy
LT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG1fZWxlbWVudDEuZ2V0KCksIGV4Y2VwdGlvbkNv
ZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogfQogCkBAIC04Niw3ICs3MCw3
IEBAIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmRvVW4KIAogICAgIGludCBl
eGNlcHRpb25Db2RlID0gMDsKIAotICAgIG1fZWxlbWVudDItPnBhcmVudCgpLT5pbnNlcnRCZWZv
cmUobV9lbGVtZW50MSwgbV9lbGVtZW50MiwgZXhjZXB0aW9uQ29kZSk7CisgICAgbV9lbGVtZW50
Mi0+cGFyZW50KCktPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLmdldCgpLCBtX2VsZW1lbnQyLmdl
dCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIAog
ICAgIHdoaWxlIChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCkgIT0gbV9hdENoaWxkKSB7CkluZGV4
OiBraHRtbC9lZGl0aW5nL21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9tZXJnZV9pZGVu
dGljYWxfZWxlbWVudHNfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBraHRtbC9lZGl0aW5nL21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5k
LmgKLS0tIGtodG1sL2VkaXRpbmcvbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuaAky
NCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvbWVyZ2VfaWRl
bnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuaAkzMSBEZWMgMjAwNSAwMDoyNjo0NiAtMDAwMApAQCAt
MzQsMTUgKzM0LDE1IEBAIGNsYXNzIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kIDogcHUK
IHsKIHB1YmxpYzoKICAgICBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChET006OkRvY3Vt
ZW50SW1wbCAqLCBET006OkVsZW1lbnRJbXBsICpmaXJzdCwgRE9NOjpFbGVtZW50SW1wbCAqc2Vj
b25kKTsKLSAgICB2aXJ0dWFsIH5NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZCgpOworICAg
IHZpcnR1YWwgfk1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKCkgeyB9CiAJCiAgICAgdmly
dHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKIHBy
aXZhdGU6Ci0gICAgRE9NOjpFbGVtZW50SW1wbCAqbV9lbGVtZW50MTsKLSAgICBET006OkVsZW1l
bnRJbXBsICptX2VsZW1lbnQyOwotICAgIERPTTo6Tm9kZUltcGwgKm1fYXRDaGlsZDsKKyAgICBS
ZWZQdHI8RE9NOjpFbGVtZW50SW1wbD4gbV9lbGVtZW50MTsKKyAgICBSZWZQdHI8RE9NOjpFbGVt
ZW50SW1wbD4gbV9lbGVtZW50MjsKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9hdENoaWxk
OwogfTsKIAogfSAvLyBuYW1lc3BhY2Uga2h0bWwKSW5kZXg6IGtodG1sL2VkaXRpbmcvbW92ZV9z
ZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYga2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlv
bl9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAkyMSBOb3YgMjAwNSAwMToyMDowNCAtMDAwMAkxLjYKKysrIGtodG1sL2VkaXRpbmcvbW92ZV9z
ZWxlY3Rpb25fY29tbWFuZC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDYgLTAwMDAKQEAgLTQyLDEz
ICs0MiwxMCBAQCBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6TW92ZVNlbGVjdGlvbkNvbW1hCiAgICAg
OiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fZnJhZ21lbnQoZnJhZ21lbnQpLCBt
X3Bvc2l0aW9uKHBvc2l0aW9uKSwgbV9zbWFydE1vdmUoc21hcnRNb3ZlKQogewogICAgIEFTU0VS
VChtX2ZyYWdtZW50KTsKLSAgICBtX2ZyYWdtZW50LT5yZWYoKTsKIH0KIAogTW92ZVNlbGVjdGlv
bkNvbW1hbmQ6On5Nb3ZlU2VsZWN0aW9uQ29tbWFuZCgpCiB7Ci0gICAgQVNTRVJUKG1fZnJhZ21l
bnQpOwotICAgIG1fZnJhZ21lbnQtPmRlcmVmKCk7CiB9CiAKIHZvaWQgTW92ZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQpAQCAtODQsNyArODEsNyBAQCB2b2lkIE1vdmVTZWxlY3Rpb25Db21t
YW5kOjpkb0FwcGx5KCkKICAgICAgICAgcG9zID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsK
IAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0QWZm
aW5pdHkoKSk7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZChkb2N1bWVudCgpLCBtX2ZyYWdtZW50LCB0cnVlLCBtX3NtYXJ0TW92ZSkpOworICAgIEVk
aXRDb21tYW5kUHRyIGNtZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQoKSwg
bV9mcmFnbWVudC5nZXQoKSwgdHJ1ZSwgbV9zbWFydE1vdmUpKTsKICAgICBhcHBseUNvbW1hbmRU
b0NvbXBvc2l0ZShjbWQpOwogfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9u
X2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmgK
LS0tIGtodG1sL2VkaXRpbmcvbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5oCTI0IE1heSAyMDA1IDA3
OjIxOjQ3IC0wMDAwCTEuMQorKysga2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5k
LmgJMzEgRGVjIDIwMDUgMDA6MjY6NDYgLTAwMDAKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Q7CiAgICAgCiBwcml2
YXRlOgotICAgIERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKm1fZnJhZ21lbnQ7CisgICAgUmVm
UHRyPERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGw+IG1fZnJhZ21lbnQ7CiAgICAgRE9NOjpQb3Np
dGlvbiBtX3Bvc2l0aW9uOwogICAgIGJvb2wgbV9zbWFydE1vdmU7CiB9OwpJbmRleDoga2h0bWwv
ZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNl
X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBr
aHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9l
ZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAxOjIw
OjA0IC0wMDAwCTEuNgorKysga2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21t
YW5kLmNwcAkzMSBEZWMgMjAwNSAwMDoyNjo0NiAtMDAwMApAQCAtNDUsMTAgKzQ1LDYgQEAgUmVi
YWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQ6OlJlYmFsYW5jZVdoaQogewogfQogCi1SZWJhbGFuY2VX
aGl0ZXNwYWNlQ29tbWFuZDo6flJlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5kKCkKLXsKLX0KLQog
c3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShjb25zdCBRQ2hhciAmYykKIHsKICAgICBy
ZXR1cm4gYy51bmljb2RlKCkgPT0gMHhhMCB8fCBpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShjKTsK
SW5kZXg6IGtodG1sL2VkaXRpbmcvcmViYWxhbmNlX3doaXRlc3BhY2VfY29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmViYWxhbmNl
X3doaXRlc3BhY2VfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAt
dSAtcjEuMiBraHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuaAotLS0g
a2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmgJMTYgU2VwIDIwMDUg
MjI6NDI6MDcgLTAwMDAJMS4yCisrKyBraHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNl
X2NvbW1hbmQuaAkzMSBEZWMgMjAwNSAwMDoyNjo0NiAtMDAwMApAQCAtMzUsNyArMzUsNyBAQCBj
bGFzcyBSZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZCA6IHB1YmxpCiB7CiBwdWJsaWM6CiAgICAg
UmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKiwgY29uc3QgRE9N
OjpQb3NpdGlvbiAmKTsKLSAgICB2aXJ0dWFsIH5SZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZCgp
OworICAgIHZpcnR1YWwgflJlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5kKCkgeyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKSW5k
ZXg6IGtodG1sL2VkaXRpbmcvcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9jc3Nf
cHJvcGVydHlfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11
IC1yMS40IGtodG1sL2VkaXRpbmcvcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmNwcAotLS0g
a2h0bWwvZWRpdGluZy9yZW1vdmVfY3NzX3Byb3BlcnR5X2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1
IDAxOjIwOjA0IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGluZy9yZW1vdmVfY3NzX3Byb3BlcnR5
X2NvbW1hbmQuY3BwCTMxIERlYyAyMDA1IDAwOjI2OjQ3IC0wMDAwCkBAIC00MCwxMyArNDAsNiBA
QCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OlJlbW92ZUNTU1Byb3BlCiAgICAgOiBFZGl0Q29t
bWFuZChkb2N1bWVudCksIG1fZGVjbChkZWNsLT5tYWtlTXV0YWJsZSgpKSwgbV9wcm9wZXJ0eShw
cm9wZXJ0eSksIG1faW1wb3J0YW50KGZhbHNlKQogewogICAgIEFTU0VSVChtX2RlY2wpOwotICAg
IG1fZGVjbC0+cmVmKCk7Ci19Ci0KLVJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6flJlbW92ZUNT
U1Byb3BlcnR5Q29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKG1fZGVjbCk7Ci0gICAgbV9kZWNsLT5k
ZXJlZigpOwogfQogCiB2b2lkIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6ZG9BcHBseSgpCklu
ZGV4OiBraHRtbC9lZGl0aW5nL3JlbW92ZV9jc3NfcHJvcGVydHlfY29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX2Nzc19w
cm9wZXJ0eV9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtodG1sL2VkaXRpbmcvcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmgKLS0tIGtodG1s
L2VkaXRpbmcvcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmgJMjQgTWF5IDIwMDUgMDc6MjE6
NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL3JlbW92ZV9jc3NfcHJvcGVydHlfY29tbWFu
ZC5oCTMxIERlYyAyMDA1IDAwOjI2OjQ3IC0wMDAwCkBAIC00MCwxNiArNDAsMTYgQEAgY2xhc3Mg
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kIDogcHVibGljIAogewogcHVibGljOgogICAgIFJlbW92
ZUNTU1Byb3BlcnR5Q29tbWFuZChET006OkRvY3VtZW50SW1wbCAqLCBET006OkNTU1N0eWxlRGVj
bGFyYXRpb25JbXBsICosIGludCBwcm9wZXJ0eSk7Ci0gICAgdmlydHVhbCB+UmVtb3ZlQ1NTUHJv
cGVydHlDb21tYW5kKCk7CisgICAgdmlydHVhbCB+UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKCkg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1Vu
YXBwbHkoKTsKIAotICAgIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHls
ZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZWNsOyB9CisgICAgRE9NOjpDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2RlY2wuZ2V0KCk7IH0KICAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnR5OyB9CiAgICAgCiBwcml2YXRlOgotICAgIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25JbXBsICptX2RlY2w7CisgICAgUmVmUHRyPERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25JbXBsPiBtX2RlY2w7CiAgICAgaW50IG1fcHJvcGVydHk7CiAgICAgRE9NOjpET01TdHJp
bmcgbV9vbGRWYWx1ZTsKICAgICBib29sIG1faW1wb3J0YW50OwpJbmRleDoga2h0bWwvZWRpdGlu
Zy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29t
bWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtodG1s
L2VkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0
aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAkyMSBOb3YgMjAwNSAwMToyMDow
NCAtMDAwMAkxLjYKKysrIGtodG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1h
bmQuY3BwCTMxIERlYyAyMDA1IDAwOjI2OjQ3IC0wMDAwCkBAIC00MSwxMyArNDEsNiBAQCBSZW1v
dmVOb2RlQXR0cmlidXRlQ29tbWFuZDo6UmVtb3ZlTm9kZUF0CiAgICAgOiBFZGl0Q29tbWFuZChk
b2N1bWVudCksIG1fZWxlbWVudChlbGVtZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKQogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+cmVmKCk7Ci19Ci0KLVJlbW92
ZU5vZGVBdHRyaWJ1dGVDb21tYW5kOjp+UmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQoKQotewot
ICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZGVyZWYoKTsKIH0KIAogdm9p
ZCBSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZDo6ZG9BcHBseSgpCkluZGV4OiBraHRtbC9lZGl0
aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29t
bWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBraHRtbC9l
ZGl0aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmgKLS0tIGtodG1sL2VkaXRpbmcv
cmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuaAkxOCBKdWwgMjAwNSAyMTo0NDoxOCAtMDAw
MAkxLjIKKysrIGtodG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuaAkz
MSBEZWMgMjAwNSAwMDoyNjo0NyAtMDAwMApAQCAtMzcsMTYgKzM3LDE2IEBAIGNsYXNzIFJlbW92
ZU5vZGVBdHRyaWJ1dGVDb21tYW5kIDogcHVibGkKIHsKIHB1YmxpYzoKICAgICBSZW1vdmVOb2Rl
QXR0cmlidXRlQ29tbWFuZChET006OkRvY3VtZW50SW1wbCAqLCBET006OkVsZW1lbnRJbXBsICos
IGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKLSAgICB2aXJ0dWFsIH5SZW1v
dmVOb2RlQXR0cmlidXRlQ29tbWFuZCgpOworICAgIHZpcnR1YWwgflJlbW92ZU5vZGVBdHRyaWJ1
dGVDb21tYW5kKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1
YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIERPTTo6RWxlbWVudEltcGwgKmVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBET006OkVsZW1lbnRJbXBsICplbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CiAgICAgY29uc3QgRE9NOjpRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZTsgfQogICAg
IAogcHJpdmF0ZToKLSAgICBET006OkVsZW1lbnRJbXBsICptX2VsZW1lbnQ7CisgICAgUmVmUHRy
PERPTTo6RWxlbWVudEltcGw+IG1fZWxlbWVudDsKICAgICBET006OlF1YWxpZmllZE5hbWUgbV9h
dHRyaWJ1dGU7CiAgICAgRE9NOjpET01TdHJpbmcgbV9vbGRWYWx1ZTsKIH07CkluZGV4OiBraHRt
bC9lZGl0aW5nL3JlbW92ZV9ub2RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFuZC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGtodG1sL2VkaXRpbmcvcmVt
b3ZlX25vZGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFu
ZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDUgLTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL3Jl
bW92ZV9ub2RlX2NvbW1hbmQuY3BwCTMxIERlYyAyMDA1IDAwOjI2OjQ3IC0wMDAwCkBAIC0zNiwz
MCArMzYsOSBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogbmFtZXNwYWNlIGtodG1sIHsKIAogUmVt
b3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKERvY3VtZW50SW1wbCAqZG9jdW1lbnQs
IE5vZGVJbXBsICpyZW1vdmVDaGlsZCkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9w
YXJlbnQoMCksIG1fcmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpLCBtX3JlZkNoaWxkKDApCisgICAg
OiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fcmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpLCBtX3Bh
cmVudChtX3JlbW92ZUNoaWxkLT5wYXJlbnROb2RlKCkpLCBtX3JlZkNoaWxkKG1fcmVtb3ZlQ2hp
bGQtPm5leHRTaWJsaW5nKCkpCiB7Ci0gICAgQVNTRVJUKG1fcmVtb3ZlQ2hpbGQpOwotICAgIG1f
cmVtb3ZlQ2hpbGQtPnJlZigpOwotCi0gICAgbV9wYXJlbnQgPSBtX3JlbW92ZUNoaWxkLT5wYXJl
bnROb2RlKCk7CiAgICAgQVNTRVJUKG1fcGFyZW50KTsKLSAgICBtX3BhcmVudC0+cmVmKCk7Ci0g
ICAgCi0gICAgbV9yZWZDaGlsZCA9IG1fcmVtb3ZlQ2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAg
aWYgKG1fcmVmQ2hpbGQpCi0gICAgICAgIG1fcmVmQ2hpbGQtPnJlZigpOwotfQotCi1SZW1vdmVO
b2RlQ29tbWFuZDo6flJlbW92ZU5vZGVDb21tYW5kKCkKLXsKLSAgICBBU1NFUlQobV9wYXJlbnQp
OwotICAgIG1fcGFyZW50LT5kZXJlZigpOwotCi0gICAgQVNTRVJUKG1fcmVtb3ZlQ2hpbGQpOwot
ICAgIG1fcmVtb3ZlQ2hpbGQtPmRlcmVmKCk7Ci0KLSAgICBpZiAobV9yZWZDaGlsZCkKLSAgICAg
ICAgbV9yZWZDaGlsZC0+ZGVyZWYoKTsKIH0KIAogdm9pZCBSZW1vdmVOb2RlQ29tbWFuZDo6ZG9B
cHBseSgpCkBAIC02OCw3ICs0Nyw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvQXBwbHko
KQogICAgIEFTU0VSVChtX3JlbW92ZUNoaWxkKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0g
MDsKLSAgICBtX3BhcmVudC0+cmVtb3ZlQ2hpbGQobV9yZW1vdmVDaGlsZCwgZXhjZXB0aW9uQ29k
ZSk7CisgICAgbV9wYXJlbnQtPnJlbW92ZUNoaWxkKG1fcmVtb3ZlQ2hpbGQuZ2V0KCksIGV4Y2Vw
dGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogfQogCkBAIC03OCw3
ICs1Nyw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgQVNTRVJU
KG1fcmVtb3ZlQ2hpbGQpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIG1fcGFy
ZW50LT5pbnNlcnRCZWZvcmUobV9yZW1vdmVDaGlsZCwgbV9yZWZDaGlsZCwgZXhjZXB0aW9uQ29k
ZSk7CisgICAgbV9wYXJlbnQtPmluc2VydEJlZm9yZShtX3JlbW92ZUNoaWxkLmdldCgpLCBtX3Jl
ZkNoaWxkLmdldCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9
PSAwKTsKIH0KIApJbmRleDoga2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9jb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVf
bm9kZV9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtodG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFuZC5oCi0tLSBraHRtbC9lZGl0aW5nL3Jl
bW92ZV9ub2RlX2NvbW1hbmQuaAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGto
dG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFuZC5oCTMxIERlYyAyMDA1IDAwOjI2OjQ3IC0w
MDAwCkBAIC0zNCwxNyArMzQsMTcgQEAgY2xhc3MgUmVtb3ZlTm9kZUNvbW1hbmQgOiBwdWJsaWMg
RWRpdENvbQogewogcHVibGljOgogICAgIFJlbW92ZU5vZGVDb21tYW5kKERPTTo6RG9jdW1lbnRJ
bXBsICosIERPTTo6Tm9kZUltcGwgKik7Ci0gICAgdmlydHVhbCB+UmVtb3ZlTm9kZUNvbW1hbmQo
KTsKKyAgICB2aXJ0dWFsIH5SZW1vdmVOb2RlQ29tbWFuZCgpIHsgfQogCQogICAgIHZpcnR1YWwg
dm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAgRE9N
OjpOb2RlSW1wbCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlQ2hpbGQ7IH0KKyAgICBE
T006Ok5vZGVJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVDaGlsZC5nZXQoKTsg
fQogCiBwcml2YXRlOgotICAgIERPTTo6Tm9kZUltcGwgKm1fcGFyZW50OyAgICAKLSAgICBET006
Ok5vZGVJbXBsICptX3JlbW92ZUNoaWxkOwotICAgIERPTTo6Tm9kZUltcGwgKm1fcmVmQ2hpbGQ7
ICAgIAorICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBtX3JlbW92ZUNoaWxkOworICAgIFJlZlB0
cjxET006Ok5vZGVJbXBsPiBtX3BhcmVudDsKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9y
ZWZDaGlsZDsgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBraHRtbApJbmRleDoga2h0bWwvZWRp
dGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVf
cHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
CmRpZmYgLXAgLXUgLXIxLjQga2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2No
aWxkcmVuX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3ByZXNlcnZp
bmdfY2hpbGRyZW5fY29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDUgLTAwMDAJMS40Cisr
KyBraHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFuZC5j
cHAJMzEgRGVjIDIwMDUgMDA6MjY6NDcgLTAwMDAKQEAgLTM5LDEzICszOSw2IEBAIFJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW0KICAgICA6IENvbXBvc2l0ZUVkaXRDb21t
YW5kKGRvY3VtZW50KSwgbV9ub2RlKG5vZGUpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7Ci0gICAg
bV9ub2RlLT5yZWYoKTsKLX0KLQotUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6
On5SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKG1f
bm9kZSk7Ci0gICAgbV9ub2RlLT5kZXJlZigpOwogfQogCiB2b2lkIFJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW5Db21tYW5kOjpkb0FwcGx5KCkKSW5kZXg6IGtodG1sL2VkaXRpbmcvcmVtb3Zl
X25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2No
aWxkcmVuX2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQu
aAotLS0ga2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1h
bmQuaAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvcmVt
b3ZlX25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmgJMzEgRGVjIDIwMDUgMDA6MjY6
NDcgLTAwMDAKQEAgLTM0LDE0ICszNCwxNCBAQCBjbGFzcyBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuCiB7CiBwdWJsaWM6CiAgICAgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bkNvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKiwgRE9NOjpOb2RlSW1wbCAqKTsKLSAgICB2aXJ0
dWFsIH5SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZCgpOworICAgIHZpcnR1YWwg
flJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKCkgeyB9CiAJCiAgICAgdmlydHVh
bCB2b2lkIGRvQXBwbHkoKTsKIAotICAgIERPTTo6Tm9kZUltcGwgKm5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX25vZGU7IH0KKyAgICBET006Ok5vZGVJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9ub2RlOwor
ICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBtX25vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBr
aHRtbApJbmRleDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxh
Y2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRpZmYg
LXAgLXUgLXIxLjIyIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAK
LS0tIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjIgRGVjIDIw
MDUgMDQ6MTE6MzcgLTAwMDAJMS4yMgorKysga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlv
bl9jb21tYW5kLmNwcAkzMSBEZWMgMjAwNSAwMDoyNjo0OCAtMDAwMApAQCAtNzQsMTAgKzc0LDcg
QEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgICAgICBtX3R5
cGUgPSBFbXB0eUZyYWdtZW50OwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgbV9kb2N1
bWVudC0+cmVmKCk7Ci0gICAgbV9mcmFnbWVudC0+cmVmKCk7Ci0KKyAgICAKICAgICBOb2RlSW1w
bCAqZmlyc3RDaGlsZCA9IG1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICBOb2RlSW1wbCAq
bGFzdENoaWxkID0gbV9mcmFnbWVudC0+bGFzdENoaWxkKCk7CiAKQEAgLTEwOSwxMiArMTA2LDEw
IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpc0ludGVyY2hhbmdlQ29udmVydGVkU3Bh
Y2VTcGFuKG5vZGUpKSB7Ci0gICAgICAgICAgICBOb2RlSW1wbCAqbiA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8Tm9kZUltcGw+IG4gPSAwOwogICAgICAgICAgICAgd2hpbGUgKChuID0gbm9kZS0+
Zmlyc3RDaGlsZCgpKSkgewotICAgICAgICAgICAgICAgIG4tPnJlZigpOwogICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGUobik7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShuLCBu
b2RlKTsKLSAgICAgICAgICAgICAgICBuLT5kZXJlZigpOworICAgICAgICAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUobi5nZXQoKSwgbm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZW1vdmVOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKG4pCkBAIC0xMjgsMjYgKzEyMywxOCBA
QCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50CiAgICAgaWYgKG5ld2xp
bmVBdEVuZE5vZGUpCiAgICAgICAgIHJlbW92ZU5vZGUobmV3bGluZUF0RW5kTm9kZSk7CiAgICAg
Ci0gICAgTm9kZUltcGwgKmhvbGRlciA9IGluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmluZygp
OwotICAgIGlmIChob2xkZXIpCi0gICAgICAgIGhvbGRlci0+cmVmKCk7Ci0gICAgaWYgKCFtX21h
dGNoU3R5bGUpIHsKLSAgICAgICAgY29tcHV0ZVN0eWxlc1VzaW5nVGVzdFJlbmRlcmluZyhob2xk
ZXIpOwotICAgIH0KLSAgICByZW1vdmVVbnJlbmRlcmVkTm9kZXNVc2luZ1Rlc3RSZW5kZXJpbmco
aG9sZGVyKTsKLSAgICBtX2hhc01vcmVUaGFuT25lQmxvY2sgPSBjb3VudFJlbmRlcmVkQmxvY2tz
KGhvbGRlcikgPiAxOwotICAgIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhv
bGRlcik7CisgICAgUGFzc1JlZlB0cjxOb2RlSW1wbD4gaG9sZGVyID0gaW5zZXJ0RnJhZ21lbnRG
b3JUZXN0UmVuZGVyaW5nKCk7CisgICAgaWYgKCFtX21hdGNoU3R5bGUpCisgICAgICAgIGNvbXB1
dGVTdHlsZXNVc2luZ1Rlc3RSZW5kZXJpbmcoaG9sZGVyLmdldCgpKTsKKyAgICByZW1vdmVVbnJl
bmRlcmVkTm9kZXNVc2luZ1Rlc3RSZW5kZXJpbmcoaG9sZGVyLmdldCgpKTsKKyAgICBtX2hhc01v
cmVUaGFuT25lQmxvY2sgPSBjb3VudFJlbmRlcmVkQmxvY2tzKGhvbGRlci5nZXQoKSkgPiAxOwor
ICAgIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAg
ICAgcmVtb3ZlTm9kZShob2xkZXIpOwotICAgIGhvbGRlci0+ZGVyZWYoKTsKICAgICByZW1vdmVT
dHlsZU5vZGVzKCk7CiB9CiAKIFJlcGxhY2VtZW50RnJhZ21lbnQ6On5SZXBsYWNlbWVudEZyYWdt
ZW50KCkKIHsKLSAgICBpZiAobV9kb2N1bWVudCkKLSAgICAgICAgbV9kb2N1bWVudC0+ZGVyZWYo
KTsKLSAgICBpZiAobV9mcmFnbWVudCkKLSAgICAgICAgbV9mcmFnbWVudC0+ZGVyZWYoKTsKIH0K
IAogTm9kZUltcGwgKlJlcGxhY2VtZW50RnJhZ21lbnQ6OmZpcnN0Q2hpbGQoKSBjb25zdCAKQEAg
LTIwOSw3ICsxOTYsNyBAQCBOb2RlSW1wbCAqUmVwbGFjZW1lbnRGcmFnbWVudDo6ZW5jbG9zaW5n
CiB7CiAgICAgd2hpbGUgKG5vZGUgJiYgIWlzUHJvYmFibHlCbG9jayhub2RlKSkKICAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsgICAgCi0gICAgcmV0dXJuIG5vZGUgPyBub2RlIDog
bV9mcmFnbWVudDsKKyAgICByZXR1cm4gbm9kZSA/IG5vZGUgOiBtX2ZyYWdtZW50LmdldCgpOwog
fQogCiB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oTm9kZUltcGwgKm5vZGUpCkBAIC0yMTcsMjggKzIwNCwyNCBAQCB2b2lkIFJlcGxhY2VtZW50
RnJhZ21lbnQ6OnJlbW92ZU5vZGVQcmVzCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAKLSAgICB3aGlsZSAoTm9kZUltcGwgKm4gPSBub2RlLT5maXJzdENoaWxkKCkpIHsKLSAgICAg
ICAgbi0+cmVmKCk7CisgICAgd2hpbGUgKFJlZlB0cjxOb2RlSW1wbD4gbiA9IG5vZGUtPmZpcnN0
Q2hpbGQoKSkgewogICAgICAgICByZW1vdmVOb2RlKG4pOwotICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKG4sIG5vZGUpOwotICAgICAgICBuLT5kZXJlZigpOworICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKG4uZ2V0KCksIG5vZGUpOwogICAgIH0KICAgICByZW1vdmVOb2RlKG5vZGUpOwogfQogCi12
b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGUoTm9kZUltcGwgKm5vZGUpCit2b2lk
IFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlSW1wbD4gbm9k
ZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisgICAgCiAg
ICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVu
dCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICAKICAgICBpbnQgZXhjZXB0aW9uQ29k
ZSA9IDA7Ci0gICAgbm9kZS0+cmVmKCk7Ci0gICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlLCBl
eGNlcHRpb25Db2RlKTsKLSAgICBub2RlLT5kZXJlZigpOworICAgIHBhcmVudC0+cmVtb3ZlQ2hp
bGQobm9kZS5nZXQoKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUg
PT0gMCk7CiB9CiAKQEAgLTI1NiwyMiArMjM5LDIwIEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVu
dDo6aW5zZXJ0Tm9kZUJlZm8KICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIH0KIAot
Tm9kZUltcGwgKlJlcGxhY2VtZW50RnJhZ21lbnQ6Omluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRl
cmluZygpCitQYXNzUmVmUHRyPE5vZGVJbXBsPiBSZXBsYWNlbWVudEZyYWdtZW50OjppbnNlcnRG
cmFnbWVudEZvclRlc3RSZW5kZXJpbmcoKQogewogICAgIE5vZGVJbXBsICpib2R5ID0gbV9kb2N1
bWVudC0+Ym9keSgpOwogICAgIGlmICghYm9keSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBF
bGVtZW50SW1wbCAqaG9sZGVyID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQobV9kb2N1
bWVudCk7Ci0gICAgaG9sZGVyLT5yZWYoKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnRJbXBsPiBo
b2xkZXIgPSBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChtX2RvY3VtZW50LmdldCgpKTsK
ICAgICAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgaG9sZGVyLT5hcHBlbmRDaGls
ZChtX2ZyYWdtZW50LCBleGNlcHRpb25Db2RlKTsKKyAgICBob2xkZXItPmFwcGVuZENoaWxkKG1f
ZnJhZ21lbnQuZ2V0KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2Rl
ID09IDApOwogICAgIAotICAgIGJvZHktPmFwcGVuZENoaWxkKGhvbGRlciwgZXhjZXB0aW9uQ29k
ZSk7CisgICAgYm9keS0+YXBwZW5kQ2hpbGQoaG9sZGVyLmdldCgpLCBleGNlcHRpb25Db2RlKTsK
ICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKLSAgICBob2xkZXItPmRlcmVmKCk7CiAg
ICAgCiAgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAgICAgCkBAIC0yODQsMTMgKzI2NSwxMSBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6
OnJlc3RvcmVUZXN0UmVuCiAgICAgICAgIHJldHVybjsKIAogICAgIGludCBleGNlcHRpb25Db2Rl
ID0gMDsKLSAgICB3aGlsZSAoTm9kZUltcGwgKm5vZGUgPSBob2xkZXItPmZpcnN0Q2hpbGQoKSkg
ewotICAgICAgICBub2RlLT5yZWYoKTsKLSAgICAgICAgaG9sZGVyLT5yZW1vdmVDaGlsZChub2Rl
LCBleGNlcHRpb25Db2RlKTsKKyAgICB3aGlsZSAoUmVmUHRyPE5vZGVJbXBsPiBub2RlID0gaG9s
ZGVyLT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgaG9sZGVyLT5yZW1vdmVDaGlsZChub2RlLmdl
dCgpLCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7
Ci0gICAgICAgIG1fZnJhZ21lbnQtPmFwcGVuZENoaWxkKG5vZGUsIGV4Y2VwdGlvbkNvZGUpOwor
ICAgICAgICBtX2ZyYWdtZW50LT5hcHBlbmRDaGlsZChub2RlLmdldCgpLCBleGNlcHRpb25Db2Rl
KTsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7Ci0gICAgICAgIG5vZGUtPmRl
cmVmKCk7CiAgICAgfQogfQogCkBAIC0zMTksOCArMjk4LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6Zml4dXBOb2RlUwogICAgICAgICAvLyBUaGUgZGVzaXJlZFN0eWxlIGRlY2xh
cmF0aW9uIHRlbGxzIHdoYXQgc3R5bGUgdGhpcyBub2RlIHdhbnRzIHRvIGJlLgogICAgICAgICAv
LyBDb21wYXJlIHRoYXQgdG8gdGhlIHN0eWxlIHRoYXQgaXQgaXMgcmlnaHQgbm93IGluIHRoZSBk
b2N1bWVudC4KICAgICAgICAgUG9zaXRpb24gcG9zKG5vZGUsIDApOwotICAgICAgICBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpjdXJyZW50U3R5bGUgPSBwb3MuY29tcHV0ZWRTdHls
ZSgpOwotICAgICAgICBjdXJyZW50U3R5bGUtPnJlZigpOworICAgICAgICBSZWZQdHI8Q1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbD4gY3VycmVudFN0eWxlID0gcG9zLmNvbXB1dGVkU3R5
bGUoKTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgdGhlIHNwZWNpYWwgIm1hdGNoIG5lYXJlc3Qg
YmxvY2txdW90ZSBjb2xvciIgcHJvcGVydHkgYW5kIHJlc29sdmUgdG8gdGhlIGNvcnJlY3QKICAg
ICAgICAgLy8gY29sb3IgaWYgbmVjZXNzYXJ5LgpAQCAtMzI4LDExICszMDYsOSBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpmaXh1cE5vZGVTCiAgICAgICAgIGlmIChtYXRjaENvbG9y
Q2hlY2sgPT0gbWF0Y2hOZWFyZXN0QmxvY2txdW90ZUNvbG9yU3RyaW5nKCkpIHsKICAgICAgICAg
ICAgIE5vZGVJbXBsICpibG9ja3F1b3RlID0gbmVhcmVzdE1haWxCbG9ja3F1b3RlKG5vZGUpOwog
ICAgICAgICAgICAgUG9zaXRpb24gcG9zKGJsb2NrcXVvdGUgPyBibG9ja3F1b3RlIDogbm9kZS0+
Z2V0RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIDApOwotICAgICAgICAgICAgQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUgPSBwb3MuY29tcHV0ZWRTdHlsZSgpOwot
ICAgICAgICAgICAgc3R5bGUtPnJlZigpOworICAgICAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbkltcGw+IHN0eWxlID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKICAgICAg
ICAgICAgIERPTVN0cmluZyBkZXNpcmVkQ29sb3IgPSBkZXNpcmVkU3R5bGUtPmdldFByb3BlcnR5
VmFsdWUoQ1NTX1BST1BfQ09MT1IpOwogICAgICAgICAgICAgRE9NU3RyaW5nIG5lYXJlc3RDb2xv
ciA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKENTU19QUk9QX0NPTE9SKTsKLSAgICAgICAgICAg
IHN0eWxlLT5kZXJlZigpOwogICAgICAgICAgICAgaWYgKGRlc2lyZWRDb2xvciAhPSBuZWFyZXN0
Q29sb3IpCiAgICAgICAgICAgICAgICAgZGVzaXJlZFN0eWxlLT5zZXRQcm9wZXJ0eShDU1NfUFJP
UF9DT0xPUiwgbmVhcmVzdENvbG9yKTsKICAgICAgICAgfQpAQCAtMzQ5LDggKzMyNSw2IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwTm9kZVMKICAgICAgICAgLy8gZnJvbSB0
aGUgZGVzaXJlZCBieSB0aGUgc3R5bGVzIHJlbWFpbmluZyBpbiB0aGUgZGVzaXJlZFN0eWxlIGRl
Y2xhcmF0aW9uLgogICAgICAgICBpZiAoZGVzaXJlZFN0eWxlLT5sZW5ndGgoKSA+IDApCiAJICAg
IGFwcGx5U3R5bGUoZGVzaXJlZFN0eWxlLCBQb3NpdGlvbihub2RlLCAwKSwgUG9zaXRpb24obm9k
ZSwgbm9kZS0+bWF4RGVlcE9mZnNldCgpKSk7Ci0KLSAgICAgICAgY3VycmVudFN0eWxlLT5kZXJl
ZigpOwogICAgIH0KIH0KIApAQCAtMzU5LDIwICszMzMsMTYgQEAgc3RhdGljIHZvaWQgY29tcHV0
ZUFuZFN0b3JlTm9kZURlc2lyZWRTdAogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aW5Eb2N1bWVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbkltcGwgKmNvbXB1dGVkU3R5bGUgPSBQb3NpdGlvbihub2RlLCAwKS5jb21wdXRlZFN0
eWxlKCk7Ci0gICAgY29tcHV0ZWRTdHlsZS0+cmVmKCk7CisgICAgUmVmUHRyPENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbkltcGw+IGNvbXB1dGVkU3R5bGUgPSBQb3NpdGlvbihub2RlLCAwKS5j
b21wdXRlZFN0eWxlKCk7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHls
ZSA9IGNvbXB1dGVkU3R5bGUtPmNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKICAgICBsaXN0
LmFwcGVuZChOb2RlRGVzaXJlZFN0eWxlKG5vZGUsIHN0eWxlKSk7Ci0gICAgY29tcHV0ZWRTdHls
ZS0+ZGVyZWYoKTsKIAogICAgIC8vIEluIGVpdGhlciBvZiB0aGUgY29sb3ItbWF0Y2hpbmcgdGVz
dHMgYmVsb3csIHNldCB0aGUgY29sb3IgdG8gYSBwc2V1ZG8tY29sb3IgdGhhdCB3aWxsCiAgICAg
Ly8gbWFrZSB0aGUgY29udGVudCB0YWtlIG9uIHRoZSBjb2xvciBvZiB0aGUgbmVhcmVzdC1lbmNs
b3NpbmcgYmxvY2txdW90ZSAoaWYgYW55KSBhZnRlcgogICAgIC8vIGJlaW5nIHBhc3RlZCBpbi4K
ICAgICBpZiAoTm9kZUltcGwgKmJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUobm9k
ZSkpIHsKLSAgICAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbCAqYmxvY2txdW90
ZVN0eWxlID0gUG9zaXRpb24oYmxvY2txdW90ZSwgMCkuY29tcHV0ZWRTdHlsZSgpOwotICAgICAg
ICBibG9ja3F1b3RlU3R5bGUtPnJlZigpOworICAgICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uSW1wbD4gYmxvY2txdW90ZVN0eWxlID0gUG9zaXRpb24oYmxvY2txdW90ZSwg
MCkuY29tcHV0ZWRTdHlsZSgpOwogICAgICAgICBib29sIG1hdGNoID0gKGJsb2NrcXVvdGVTdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUF9DT0xPUikgPT0gc3R5bGUtPmdldFByb3BlcnR5
VmFsdWUoQ1NTX1BST1BfQ09MT1IpKTsKLSAgICAgICAgYmxvY2txdW90ZVN0eWxlLT5kZXJlZigp
OwogICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NfUFJPUF9fS0hUTUxfTUFUQ0hfTkVBUkVTVF9NQUlMX0JMT0NLUVVPVEVfQ09MT1IsIG1hdGNo
TmVhcmVzdEJsb2NrcXVvdGVDb2xvclN0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTM4MCwxMyArMzUwLDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVBbmRTdG9yZU5vZGVEZXNpcmVk
U3QKICAgICB9CiAgICAgTm9kZUltcGwgKmRvY3VtZW50RWxlbWVudCA9IG5vZGUtPmdldERvY3Vt
ZW50KCkgPyBub2RlLT5nZXREb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7CiAgICAg
aWYgKGRvY3VtZW50RWxlbWVudCkgewotICAgICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b25JbXBsICpkb2N1bWVudFN0eWxlID0gUG9zaXRpb24oZG9jdW1lbnRFbGVtZW50LCAwKS5jb21w
dXRlZFN0eWxlKCk7Ci0gICAgICAgIGRvY3VtZW50U3R5bGUtPnJlZigpOworICAgICAgICBSZWZQ
dHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbD4gZG9jdW1lbnRTdHlsZSA9IFBvc2l0
aW9uKGRvY3VtZW50RWxlbWVudCwgMCkuY29tcHV0ZWRTdHlsZSgpOwogICAgICAgICBib29sIG1h
dGNoID0gKGRvY3VtZW50U3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTX1BST1BfQ09MT1IpID09
IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKENTU19QUk9QX0NPTE9SKSk7Ci0gICAgICAgIGRvY3Vt
ZW50U3R5bGUtPmRlcmVmKCk7Ci0gICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICBpZiAobWF0
Y2gpCiAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfX0tIVE1MX01BVENI
X05FQVJFU1RfTUFJTF9CTE9DS1FVT1RFX0NPTE9SLCBtYXRjaE5lYXJlc3RCbG9ja3F1b3RlQ29s
b3JTdHJpbmcoKSk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTQ4Niw1NyArNDUzLDExIEBA
IHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlU3R5bGVOb2QKIE5vZGVEZXNpcmVkU3R5
bGU6Ok5vZGVEZXNpcmVkU3R5bGUoTm9kZUltcGwgKm5vZGUsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uSW1wbCAqc3R5bGUpIAogICAgIDogbV9ub2RlKG5vZGUpLCBtX3N0eWxlKHN0eWxlKQog
ewotICAgIGlmIChtX25vZGUpCi0gICAgICAgIG1fbm9kZS0+cmVmKCk7Ci0gICAgaWYgKG1fc3R5
bGUpCi0gICAgICAgIG1fc3R5bGUtPnJlZigpOwotfQotCi1Ob2RlRGVzaXJlZFN0eWxlOjpOb2Rl
RGVzaXJlZFN0eWxlKGNvbnN0IE5vZGVEZXNpcmVkU3R5bGUgJm90aGVyKQotICAgIDogbV9ub2Rl
KG90aGVyLm5vZGUoKSksIG1fc3R5bGUob3RoZXIuc3R5bGUoKSkKLXsKLSAgICBpZiAobV9ub2Rl
KQotICAgICAgICBtX25vZGUtPnJlZigpOwotICAgIGlmIChtX3N0eWxlKQotICAgICAgICBtX3N0
eWxlLT5yZWYoKTsKLX0KLQotTm9kZURlc2lyZWRTdHlsZTo6fk5vZGVEZXNpcmVkU3R5bGUoKQot
ewotICAgIGlmIChtX25vZGUpCi0gICAgICAgIG1fbm9kZS0+ZGVyZWYoKTsKLSAgICBpZiAobV9z
dHlsZSkKLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYoKTsKLX0KLQotTm9kZURlc2lyZWRTdHlsZSAm
Tm9kZURlc2lyZWRTdHlsZTo6b3BlcmF0b3I9KGNvbnN0IE5vZGVEZXNpcmVkU3R5bGUgJm90aGVy
KQotewotICAgIE5vZGVJbXBsICpvbGROb2RlID0gbV9ub2RlOwotICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uSW1wbCAqb2xkU3R5bGUgPSBtX3N0eWxlOwotCi0gICAgbV9ub2RlID0gb3Ro
ZXIubm9kZSgpOwotICAgIG1fc3R5bGUgPSBvdGhlci5zdHlsZSgpOwotICAgIAotICAgIGlmICht
X25vZGUpCi0gICAgICAgIG1fbm9kZS0+cmVmKCk7Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAg
IG1fc3R5bGUtPnJlZigpOwotICAgIAotICAgIGlmIChvbGROb2RlKQotICAgICAgICBvbGROb2Rl
LT5kZXJlZigpOwotICAgIGlmIChvbGRTdHlsZSkKLSAgICAgICAgb2xkU3R5bGUtPmRlcmVmKCk7
Ci0gICAgICAgIAotICAgIHJldHVybiAqdGhpczsKIH0KIAogUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50SW1wbCAqZG9jdW1lbnQsIERvY3Vt
ZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBz
bWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSkgCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFu
ZChkb2N1bWVudCksIAogICAgICAgbV9mcmFnbWVudChkb2N1bWVudCwgZnJhZ21lbnQsIG1hdGNo
U3R5bGUpLAotICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCgwKSwKLSAgICAgIG1fbGFzdE5vZGVJ
bnNlcnRlZCgwKSwKLSAgICAgIG1fbGFzdFRvcE5vZGVJbnNlcnRlZCgwKSwKLSAgICAgIG1faW5z
ZXJ0aW9uU3R5bGUoMCksCiAgICAgICBtX3NlbGVjdFJlcGxhY2VtZW50KHNlbGVjdFJlcGxhY2Vt
ZW50KSwgCiAgICAgICBtX3NtYXJ0UmVwbGFjZShzbWFydFJlcGxhY2UpLAogICAgICAgbV9tYXRj
aFN0eWxlKG1hdGNoU3R5bGUpCkBAIC01NDUsMTQgKzQ2Niw2IEBAIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpSZXBsYWNlU2VsZWN0aW8KIAogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6On5SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZCgpCiB7Ci0gICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQpCi0g
ICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmRlcmVmKCk7Ci0gICAgaWYgKG1fbGFzdE5vZGVJ
bnNlcnRlZCkKLSAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVkLT5kZXJlZigpOwotICAgIGlmICht
X2xhc3RUb3BOb2RlSW5zZXJ0ZWQpCi0gICAgICAgIG1fbGFzdFRvcE5vZGVJbnNlcnRlZC0+ZGVy
ZWYoKTsKLSAgICBpZiAobV9pbnNlcnRpb25TdHlsZSkKLSAgICAgICAgbV9pbnNlcnRpb25TdHls
ZS0+ZGVyZWYoKTsKIH0KIAogc3RhdGljIGludCBtYXhSYW5nZU9mZnNldChOb2RlSW1wbCAqbikK
QEAgLTU4OSwxMCArNTAyLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24o
KTsKICAgICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwogICAgIAotICAgIGlm
IChtX21hdGNoU3R5bGUpIHsKKyAgICBpZiAobV9tYXRjaFN0eWxlKQogICAgICAgICBtX2luc2Vy
dGlvblN0eWxlID0gc3R5bGVBdFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKTsKLSAgICAgICAg
bV9pbnNlcnRpb25TdHlsZS0+cmVmKCk7Ci0gICAgfQogICAgIAogICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlU3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5zdGFydEFmZmluaXR5
KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKHNlbGVjdGlvbi5lbmQoKSwgc2Vs
ZWN0aW9uLmVuZEFmZmluaXR5KCkpOwpAQCAtNzU5LDcgKzY3MCw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyB1cGRhdGUgaW5zZXJ0aW9uIHBv
aW50IHRvIGJlIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgYmxvY2sgaW5zZXJ0ZWQKICAgICAgICAg
aWYgKG1fbGFzdE5vZGVJbnNlcnRlZCkgewogICAgICAgICAgICAgdXBkYXRlTGF5b3V0KCk7Ci0g
ICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBQb3NpdGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQsIG1f
bGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CisgICAgICAgICAgICBpbnNlcnRp
b25Qb3MgPSBQb3NpdGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCksIG1fbGFzdE5vZGVJbnNl
cnRlZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03ODks
MjMgKzcwMCwyMyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgICAgICB9CiAgICAgICAgIHVwZGF0ZUxheW91dCgp
OwotICAgICAgICBpbnNlcnRpb25Qb3MgPSBQb3NpdGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQsIG1f
bGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CisgICAgICAgIGluc2VydGlvblBv
cyA9IFBvc2l0aW9uKG1fbGFzdE5vZGVJbnNlcnRlZC5nZXQoKSwgbV9sYXN0Tm9kZUluc2VydGVk
LT5jYXJldE1heE9mZnNldCgpKTsKICAgICB9CiAKICAgICAvLyBzdGVwIDMgOiBoYW5kbGUgInNt
YXJ0IHJlcGxhY2UiIHdoaXRlc3BhY2UKICAgICBpZiAoYWRkVHJhaWxpbmdTcGFjZSAmJiBtX2xh
c3ROb2RlSW5zZXJ0ZWQpIHsKICAgICAgICAgdXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgIFBvc2l0
aW9uIHBvcyhtX2xhc3ROb2RlSW5zZXJ0ZWQsIG1fbGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhP
ZmZzZXQoKSk7CisgICAgICAgIFBvc2l0aW9uIHBvcyhtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCks
IG1fbGFzdE5vZGVJbnNlcnRlZC0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgIGJvb2wgbmVl
ZHNUcmFpbGluZ1NwYWNlID0gcG9zLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFV
TFRfQUZGSU5JVFksIHRydWUpLmlzTnVsbCgpOwogICAgICAgICBpZiAobmVlZHNUcmFpbGluZ1Nw
YWNlKSB7CiAgICAgICAgICAgICBpZiAobV9sYXN0Tm9kZUluc2VydGVkLT5pc1RleHROb2RlKCkp
IHsKLSAgICAgICAgICAgICAgICBUZXh0SW1wbCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHRJbXBs
ICo+KG1fbGFzdE5vZGVJbnNlcnRlZCk7CisgICAgICAgICAgICAgICAgVGV4dEltcGwgKnRleHQg
PSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5ndGgoKSwgbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBQ
b3NpdGlvbih0ZXh0LCB0ZXh0LT5sZW5ndGgoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGRvY3VtZW50KCktPmNy
ZWF0ZUVkaXRpbmdUZXh0Tm9kZShub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgIGluc2VydE5vZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZSwgbV9sYXN0
Tm9kZUluc2VydGVkKTsKKyAgICAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXJBbmRVcGRhdGVO
b2Rlc0luc2VydGVkKG5vZGUsIG1fbGFzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uUG9zID0gUG9zaXRpb24obm9kZSwgMSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTgxMywxNSArNzI0LDE1IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogCiAgICAgaWYgKGFkZExlYWRpbmdTcGFjZSAmJiBtX2ZpcnN0Tm9kZUlu
c2VydGVkKSB7CiAgICAgICAgIHVwZGF0ZUxheW91dCgpOwotICAgICAgICBQb3NpdGlvbiBwb3Mo
bV9maXJzdE5vZGVJbnNlcnRlZCwgMCk7CisgICAgICAgIFBvc2l0aW9uIHBvcyhtX2ZpcnN0Tm9k
ZUluc2VydGVkLmdldCgpLCAwKTsKICAgICAgICAgYm9vbCBuZWVkc0xlYWRpbmdTcGFjZSA9IHBv
cy5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlz
TnVsbCgpOwogICAgICAgICBpZiAobmVlZHNMZWFkaW5nU3BhY2UpIHsKICAgICAgICAgICAgIGlm
IChtX2ZpcnN0Tm9kZUluc2VydGVkLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBU
ZXh0SW1wbCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG1fZmlyc3ROb2RlSW5zZXJ0
ZWQpOworICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dElt
cGwgKj4obV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0
VGV4dEludG9Ob2RlKHRleHQsIDAsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gZG9jdW1lbnQo
KS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZUFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZSwg
bV9maXJzdE5vZGVJbnNlcnRlZCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZUFu
ZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZSwgbV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC04MzksNyArNzUwLDcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICBib29sIGluc2Vy
dFBhcmFncmFwaCA9IGZhbHNlOwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbnNl
cnRpb25Qb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogCi0gICAgICAgICAgICBpZiAoc3RhcnRC
bG9jayA9PSBlbmRCbG9jayAmJiAhaXNQcm9iYWJseUJsb2NrKG1fbGFzdFRvcE5vZGVJbnNlcnRl
ZCkpIHsKKyAgICAgICAgICAgIGlmIChzdGFydEJsb2NrID09IGVuZEJsb2NrICYmICFpc1Byb2Jh
Ymx5QmxvY2sobV9sYXN0VG9wTm9kZUluc2VydGVkLmdldCgpKSkgewogICAgICAgICAgICAgICAg
IGluc2VydFBhcmFncmFwaCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBlbmQtb2YtZG9jdW1lbnQgY2FzZS4KQEAgLTg2NSwyMyArNzc2LDIz
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGVsc2Ugewog
ICAgICAgICBpZiAobV9sYXN0Tm9kZUluc2VydGVkICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+aGFz
VGFnTmFtZShiclRhZykgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSB7CiAgICAgICAg
ICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MoUG9z
aXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAxKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcG9zKFBvc2l0aW9uKG1fbGFzdE5vZGVJbnNlcnRlZC5nZXQoKSwgMSks
IERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGlzRW5kT2ZCbG9jayhwb3MpKSB7CiAgICAg
ICAgICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQtPnRyYXZlcnNl
TmV4dE5vZGUoKTsKICAgICAgICAgICAgICAgICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYm
IG5leHQtPmhhc1RhZ05hbWUoYnJUYWcpICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWhhc1RyYWlsaW5nQlIpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gSW5zZXJ0IGFuICJleHRyYSIgQlIgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suIAotICAg
ICAgICAgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1
bWVudCgpKSwgbV9sYXN0Tm9kZUluc2VydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIG1fbGFzdE5vZGVJbnNl
cnRlZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKG1vdmVOb2Rlc0FmdGVyRW5kICYmICFpc0xhc3RWaXNpYmxlUG9zaXRp
b25JblNwZWNpYWxFbGVtZW50KFBvc2l0aW9uKG1fbGFzdE5vZGVJbnNlcnRlZCwgbWF4UmFuZ2VP
ZmZzZXQobV9sYXN0Tm9kZUluc2VydGVkKSkpKSB7CisgICAgICAgIGlmIChtb3ZlTm9kZXNBZnRl
ckVuZCAmJiAhaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5TcGVjaWFsRWxlbWVudChQb3NpdGlvbiht
X2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCksIG1heFJhbmdlT2Zmc2V0KG1fbGFzdE5vZGVJbnNlcnRl
ZC5nZXQoKSkpKSkgewogICAgICAgICAgICAgdXBkYXRlTGF5b3V0KCk7CiAgICAgICAgICAgICBR
VmFsdWVMaXN0PE5vZGVEZXNpcmVkU3R5bGU+IHN0eWxlczsKICAgICAgICAgICAgIFFQdHJMaXN0
PE5vZGVJbXBsPiBibG9ja3M7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGJleW9uZEVu
ZE5vZGU7Ci0gICAgICAgICAgICBOb2RlSW1wbCAqcmVmTm9kZSA9IG1fbGFzdE5vZGVJbnNlcnRl
ZDsKKyAgICAgICAgICAgIE5vZGVJbXBsICpyZWZOb2RlID0gbV9sYXN0Tm9kZUluc2VydGVkLmdl
dCgpOwogICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJP
YmplY3QgKnJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICAvLyBT
dG9wIGF0IHRoZSBmaXJzdCB0YWJsZSBvciBibG9jay4KQEAgLTk0OCwxMSArODU5LDkgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y29tcGxldGVIVAogICAgIFBvc2l0aW9uIHN0YXJ0
OwogICAgIFBvc2l0aW9uIGVuZDsKIAotICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkICYmIG1f
Zmlyc3ROb2RlSW5zZXJ0ZWQtPmluRG9jdW1lbnQoKSAmJgotICAgICAgICBtX2xhc3ROb2RlSW5z
ZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5pbkRvY3VtZW50KCkpIHsKLQorICAgIGlmICht
X2ZpcnN0Tm9kZUluc2VydGVkICYmIG1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmluRG9jdW1lbnQoKSAm
JiBtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5pbkRvY3VtZW50KCkp
IHsKICAgICAgICAgLy8gRmluZCB0aGUgbGFzdCBsZWFmLgotICAgICAgICBOb2RlSW1wbCAqbGFz
dExlYWYgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQ7CisgICAgICAgIE5vZGVJbXBsICpsYXN0TGVhZiA9
IG1fbGFzdE5vZGVJbnNlcnRlZC5nZXQoKTsKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAg
ICAgIE5vZGVJbXBsICpuZXh0Q2hpbGQgPSBsYXN0TGVhZi0+bGFzdENoaWxkKCk7CiAgICAgICAg
ICAgICBpZiAoIW5leHRDaGlsZCkKQEAgLTk2MSw3ICs4NzAsNyBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjb21wbGV0ZUhUCiAgICAgICAgIH0KICAgICAKICAgICAgICAgLy8gRmlu
ZCB0aGUgZmlyc3QgbGVhZi4KLSAgICAgICAgTm9kZUltcGwgKmZpcnN0TGVhZiA9IG1fZmlyc3RO
b2RlSW5zZXJ0ZWQ7CisgICAgICAgIE5vZGVJbXBsICpmaXJzdExlYWYgPSBtX2ZpcnN0Tm9kZUlu
c2VydGVkLmdldCgpOwogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgTm9kZUltcGwg
Km5leHRDaGlsZCA9IGZpcnN0TGVhZi0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaWYgKCFu
ZXh0Q2hpbGQpCkBAIC05NzYsMTQgKzg4NSwxNCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpjb21wbGV0ZUhUCiAKICAgICAgICAgaWYgKG1fbWF0Y2hTdHlsZSkgewogICAgICAgICAg
ICAgYXNzZXJ0KG1faW5zZXJ0aW9uU3R5bGUpOwotICAgICAgICAgICAgYXBwbHlTdHlsZShtX2lu
c2VydGlvblN0eWxlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGFwcGx5U3R5bGUobV9pbnNl
cnRpb25TdHlsZS5nZXQoKSwgc3RhcnQsIGVuZCk7CiAgICAgICAgIH0gICAgCiAgICAgICAgIAog
ICAgICAgICBpZiAobGFzdFBvc2l0aW9uVG9TZWxlY3QuaXNOb3ROdWxsKCkpCiAgICAgICAgICAg
ICBlbmQgPSBsYXN0UG9zaXRpb25Ub1NlbGVjdDsKLSAgICB9IGVsc2UgaWYgKGxhc3RQb3NpdGlv
blRvU2VsZWN0LmlzTm90TnVsbCgpKSB7CisgICAgfSBlbHNlIGlmIChsYXN0UG9zaXRpb25Ub1Nl
bGVjdC5pc05vdE51bGwoKSkKICAgICAgICAgc3RhcnQgPSBlbmQgPSBsYXN0UG9zaXRpb25Ub1Nl
bGVjdDsKLSAgICB9IGVsc2UKKyAgICBlbHNlCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAobV9zZWxlY3RSZXBsYWNlbWVudCkKQEAgLTEwMjIsMjcgKzkzMSwxNCBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjp1cGRhdGVOb2RlCiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyB1cGRhdGUgbV9sYXN0VG9wTm9kZUluc2VydGVkCi0gICAgbm9kZS0+
cmVmKCk7Ci0gICAgaWYgKG1fbGFzdFRvcE5vZGVJbnNlcnRlZCkKLSAgICAgICAgbV9sYXN0VG9w
Tm9kZUluc2VydGVkLT5kZXJlZigpOwogICAgIG1fbGFzdFRvcE5vZGVJbnNlcnRlZCA9IG5vZGU7
Ci0gICAgCi0gICAgLy8gdXBkYXRlIG1fZmlyc3ROb2RlSW5zZXJ0ZWQKLSAgICBpZiAoIW1fZmly
c3ROb2RlSW5zZXJ0ZWQpIHsKKyAgICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQpCiAgICAgICAg
IG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBub2RlOwotICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVk
LT5yZWYoKTsKLSAgICB9CiAgICAgCiAgICAgaWYgKG5vZGUgPT0gbV9sYXN0Tm9kZUluc2VydGVk
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8gdXBkYXRlIG1fbGFzdE5vZGVJbnNlcnRl
ZAotICAgIE5vZGVJbXBsICpvbGQgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQ7CiAgICAgbV9sYXN0Tm9k
ZUluc2VydGVkID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBtX2xhc3ROb2RlSW5zZXJ0
ZWQtPnJlZigpOwotICAgIGlmIChvbGQpCi0gICAgICAgIG9sZC0+ZGVyZWYoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2Uga2h0bWwKSW5kZXg6IGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25f
Y29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Vk
aXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjMKZGlmZiAtcCAtdSAtcjEuMyBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1h
bmQuaAotLS0ga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmgJMTMgRGVj
IDIwMDUgMDE6Mjg6NTkgLTAwMDAJMS4zCisrKyBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0
aW9uX2NvbW1hbmQuaAkzMSBEZWMgMjAwNSAwMDoyNjo0OCAtMDAwMApAQCAtMjcsNiArMjcsNyBA
QAogI2RlZmluZSBfX3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJj
b21wb3NpdGVfZWRpdF9jb21tYW5kLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvUGFzc1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgRE9NIHsKICAgICBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbDsKQEAg
LTM4LDE3ICszOSwxMyBAQCBjbGFzcyBOb2RlRGVzaXJlZFN0eWxlCiB7CiBwdWJsaWM6CiAgICAg
Tm9kZURlc2lyZWRTdHlsZShET006Ok5vZGVJbXBsICosIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25JbXBsICopOwotICAgIE5vZGVEZXNpcmVkU3R5bGUoY29uc3QgTm9kZURlc2lyZWRT
dHlsZSAmKTsKLSAgICB+Tm9kZURlc2lyZWRTdHlsZSgpOwogICAgIAotICAgIERPTTo6Tm9kZUlt
cGwgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBET006OkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9Ci0K
LSAgICBOb2RlRGVzaXJlZFN0eWxlICZvcGVyYXRvcj0oY29uc3QgTm9kZURlc2lyZWRTdHlsZSAm
KTsKKyAgICBET006Ok5vZGVJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgp
OyB9CisgICAgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIERPTTo6Tm9kZUlt
cGwgKm1fbm9kZTsKLSAgICBET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqbV9z
dHlsZTsKKyAgICBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gbV9ub2RlOworICAgIFJlZlB0cjxET006
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4gbV9zdHlsZTsKIH07CiAKIC8vIC0tLSBS
ZXBsYWNlbWVudEZyYWdtZW50IGhlbHBlciBjbGFzcwpAQCAtNjEsNyArNTgsNyBAQCBwdWJsaWM6
CiAKICAgICBlbnVtIEVGcmFnbWVudFR5cGUgeyBFbXB0eUZyYWdtZW50LCBTaW5nbGVUZXh0Tm9k
ZUZyYWdtZW50LCBUcmVlRnJhZ21lbnQgfTsKIAotICAgIERPTTo6RG9jdW1lbnRGcmFnbWVudElt
cGwgKnJvb3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50OyB9CisgICAgRE9NOjpEb2N1bWVu
dEZyYWdtZW50SW1wbCAqcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnQuZ2V0KCk7IH0K
ICAgICBET006Ok5vZGVJbXBsICpmaXJzdENoaWxkKCkgY29uc3Q7CiAgICAgRE9NOjpOb2RlSW1w
bCAqbGFzdENoaWxkKCkgY29uc3Q7CiAKQEAgLTg2LDcgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUoY29uc3QgRE9NOjpOb2RlSW1wbCAq
KTsKICAgICBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFuKGNvbnN0
IERPTTo6Tm9kZUltcGwgKik7CiAKLSAgICBET006Ok5vZGVJbXBsICppbnNlcnRGcmFnbWVudEZv
clRlc3RSZW5kZXJpbmcoKTsKKyAgICBQYXNzUmVmUHRyPERPTTo6Tm9kZUltcGw+IGluc2VydEZy
YWdtZW50Rm9yVGVzdFJlbmRlcmluZygpOwogICAgIHZvaWQgcmVzdG9yZVRlc3RSZW5kZXJpbmdO
b2Rlc1RvRnJhZ21lbnQoRE9NOjpOb2RlSW1wbCAqKTsKICAgICB2b2lkIGNvbXB1dGVTdHlsZXNV
c2luZ1Rlc3RSZW5kZXJpbmcoRE9NOjpOb2RlSW1wbCAqKTsKICAgICB2b2lkIHJlbW92ZVVucmVu
ZGVyZWROb2Rlc1VzaW5nVGVzdFJlbmRlcmluZyhET006Ok5vZGVJbXBsICopOwpAQCAtOTUsMTMg
KzkyLDEzIEBAIHByaXZhdGU6CiAKICAgICAvLyBBIGNvdXBsZSBzaW1wbGUgRE9NIGhlbHBlcnMK
ICAgICBET006Ok5vZGVJbXBsICplbmNsb3NpbmdCbG9jayhET006Ok5vZGVJbXBsICopIGNvbnN0
OwotICAgIHZvaWQgcmVtb3ZlTm9kZShET006Ok5vZGVJbXBsICopOworICAgIHZvaWQgcmVtb3Zl
Tm9kZShQYXNzUmVmUHRyPERPTTo6Tm9kZUltcGw+KTsKICAgICB2b2lkIHJlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW4oRE9NOjpOb2RlSW1wbCAqKTsKICAgICB2b2lkIGluc2VydE5vZGVCZWZv
cmUoRE9NOjpOb2RlSW1wbCAqbm9kZSwgRE9NOjpOb2RlSW1wbCAqcmVmTm9kZSk7CiAKICAgICBF
RnJhZ21lbnRUeXBlIG1fdHlwZTsKLSAgICBET006OkRvY3VtZW50SW1wbCAqbV9kb2N1bWVudDsK
LSAgICBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICptX2ZyYWdtZW50OworICAgIFJlZlB0cjxE
T006OkRvY3VtZW50SW1wbD4gbV9kb2N1bWVudDsKKyAgICBSZWZQdHI8RE9NOjpEb2N1bWVudEZy
YWdtZW50SW1wbD4gbV9mcmFnbWVudDsKICAgICBRVmFsdWVMaXN0PE5vZGVEZXNpcmVkU3R5bGU+
IG1fc3R5bGVzOwogICAgIGJvb2wgbV9tYXRjaFN0eWxlOwogICAgIGJvb2wgbV9oYXNJbnRlcmNo
YW5nZU5ld2xpbmVBdFN0YXJ0OwpAQCAtMTMwLDEwICsxMjcsMTAgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlbW92ZUxpbmVQbGFjZWhvbGRlcklmTmVlZGVkKERPTTo6Tm9kZUltcGwgKik7CiAKICAg
ICBSZXBsYWNlbWVudEZyYWdtZW50IG1fZnJhZ21lbnQ7Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9m
aXJzdE5vZGVJbnNlcnRlZDsKLSAgICBET006Ok5vZGVJbXBsICptX2xhc3ROb2RlSW5zZXJ0ZWQ7
Ci0gICAgRE9NOjpOb2RlSW1wbCAqbV9sYXN0VG9wTm9kZUluc2VydGVkOwotICAgIERPTTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICptX2luc2VydGlvblN0eWxlOworICAgIFJlZlB0
cjxET006Ok5vZGVJbXBsPiBtX2ZpcnN0Tm9kZUluc2VydGVkOworICAgIFJlZlB0cjxET006Ok5v
ZGVJbXBsPiBtX2xhc3ROb2RlSW5zZXJ0ZWQ7CisgICAgUmVmUHRyPERPTTo6Tm9kZUltcGw+IG1f
bGFzdFRvcE5vZGVJbnNlcnRlZDsKKyAgICBSZWZQdHI8RE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkltcGw+IG1faW5zZXJ0aW9uU3R5bGU7CiAgICAgYm9vbCBtX3NlbGVjdFJlcGxhY2Vt
ZW50OwogICAgIGJvb2wgbV9zbWFydFJlcGxhY2U7CiAgICAgYm9vbCBtX21hdGNoU3R5bGU7Cklu
ZGV4OiBraHRtbC9lZGl0aW5nL3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NldF9ub2RlX2F0
dHJpYnV0ZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUg
LXIxLjYga2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAKLS0tIGto
dG1sL2VkaXRpbmcvc2V0X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAx
OjIwOjA1IC0wMDAwCTEuNgorKysga2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29t
bWFuZC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDggLTAwMDAKQEAgLTQzLDE2ICs0Myw5IEBAIFNl
dE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpTZXROb2RlQXR0cmlidXQKICAgICA6IEVkaXRDb21tYW5k
KGRvY3VtZW50KSwgbV9lbGVtZW50KGVsZW1lbnQpLCBtX2F0dHJpYnV0ZShhdHRyaWJ1dGUpLCBt
X3ZhbHVlKHZhbHVlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+
cmVmKCk7CiAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKIH0KIAotU2V0Tm9kZUF0dHJp
YnV0ZUNvbW1hbmQ6On5TZXROb2RlQXR0cmlidXRlQ29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKG1f
ZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50LT5kZXJlZigpOwotfQotCiB2b2lkIFNldE5vZGVBdHRy
aWJ1dGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKSW5kZXg6
IGtodG1sL2VkaXRpbmcvc2V0X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NldF9ub2RlX2F0dHJpYnV0
ZV9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGto
dG1sL2VkaXRpbmcvc2V0X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuaAotLS0ga2h0bWwvZWRpdGlu
Zy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5oCTE4IEp1bCAyMDA1IDIxOjQ0OjE4IC0wMDAw
CTEuMgorKysga2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5oCTMxIERl
YyAyMDA1IDAwOjI2OjQ4IC0wMDAwCkBAIC0zNywxNyArMzcsMTcgQEAgY2xhc3MgU2V0Tm9kZUF0
dHJpYnV0ZUNvbW1hbmQgOiBwdWJsaWMgRQogewogcHVibGljOgogICAgIFNldE5vZGVBdHRyaWJ1
dGVDb21tYW5kKERPTTo6RG9jdW1lbnRJbXBsICosIERPTTo6RWxlbWVudEltcGwgKiwgY29uc3Qg
RE9NOjpRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZ2YWx1
ZSk7Ci0gICAgdmlydHVhbCB+U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQoKTsKKyAgICB2aXJ0dWFs
IH5TZXROb2RlQXR0cmlidXRlQ29tbWFuZCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBw
bHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBET006OkVsZW1lbnRJ
bXBsICplbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgRE9NOjpFbGVt
ZW50SW1wbCAqZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAg
IGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGU7IH0KICAgICBET006OkRPTVN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgRE9NOjpFbGVtZW50SW1wbCAqbV9lbGVtZW50
OworICAgIFJlZlB0cjxET006OkVsZW1lbnRJbXBsPiBtX2VsZW1lbnQ7CiAgICAgRE9NOjpRdWFs
aWZpZWROYW1lIG1fYXR0cmlidXRlOwogICAgIERPTTo6RE9NU3RyaW5nIG1fdmFsdWU7CiAgICAg
RE9NOjpET01TdHJpbmcgbV9vbGRWYWx1ZTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvc3BsaXRfZWxl
bWVudF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGtodG1sL2VkaXRpbmcvc3BsaXRfZWxlbWVudF9jb21t
YW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwCTIxIE5v
diAyMDA1IDAxOjIwOjA1IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGluZy9zcGxpdF9lbGVtZW50
X2NvbW1hbmQuY3BwCTMxIERlYyAyMDA1IDAwOjI2OjQ4IC0wMDAwCkBAIC0zNywyNCArMzcsMTAg
QEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKIG5hbWVzcGFjZSBraHRtbCB7CiAKIFNwbGl0RWxlbWVu
dENvbW1hbmQ6OlNwbGl0RWxlbWVudENvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50
LCBET006OkVsZW1lbnRJbXBsICplbGVtZW50LCBET006Ok5vZGVJbXBsICphdENoaWxkKQotICAg
IDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX2VsZW1lbnQxKDApLCBtX2VsZW1lbnQyKGVsZW1l
bnQpLCBtX2F0Q2hpbGQoYXRDaGlsZCkKKyAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9l
bGVtZW50MihlbGVtZW50KSwgbV9hdENoaWxkKGF0Q2hpbGQpCiB7CiAgICAgQVNTRVJUKG1fZWxl
bWVudDIpOwogICAgIEFTU0VSVChtX2F0Q2hpbGQpOwotCi0gICAgbV9lbGVtZW50Mi0+cmVmKCk7
Ci0gICAgbV9hdENoaWxkLT5yZWYoKTsKLX0KLQotU3BsaXRFbGVtZW50Q29tbWFuZDo6flNwbGl0
RWxlbWVudENvbW1hbmQoKQotewotICAgIGlmIChtX2VsZW1lbnQxKQotICAgICAgICBtX2VsZW1l
bnQxLT5kZXJlZigpOwotCi0gICAgQVNTRVJUKG1fZWxlbWVudDIpOwotICAgIG1fZWxlbWVudDIt
PmRlcmVmKCk7Ci0gICAgQVNTRVJUKG1fYXRDaGlsZCk7Ci0gICAgbV9hdENoaWxkLT5kZXJlZigp
OwogfQogCiB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQpAQCAtNjksMTAgKzU1
LDkgQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gaWYg
cmVhcHBseWluZywgdGhpcyBvYmplY3Qgd2lsbCBhbHJlYWR5IGV4aXN0LgogICAgICAgICBtX2Vs
ZW1lbnQxID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obV9lbGVtZW50Mi0+Y2xvbmVOb2Rl
KGZhbHNlKSk7CiAgICAgICAgIEFTU0VSVChtX2VsZW1lbnQxKTsKLSAgICAgICAgbV9lbGVtZW50
MS0+cmVmKCk7CiAgICAgfQogCi0gICAgbV9lbGVtZW50Mi0+cGFyZW50KCktPmluc2VydEJlZm9y
ZShtX2VsZW1lbnQxLCBtX2VsZW1lbnQyLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX2VsZW1lbnQy
LT5wYXJlbnQoKS0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEuZ2V0KCksIG1fZWxlbWVudDIuZ2V0
KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAg
IAogICAgIHdoaWxlIChtX2VsZW1lbnQyLT5maXJzdENoaWxkKCkgIT0gbV9hdENoaWxkKSB7CkBA
IC05OCw3ICs4Myw3IEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkKICAg
ICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgfQogCi0gICAgbV9lbGVtZW50
Mi0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChtX2VsZW1lbnQxLCBleGNlcHRpb25Db2RlKTsK
KyAgICBtX2VsZW1lbnQyLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG1fZWxlbWVudDEuZ2V0
KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogfQog
CkluZGV4OiBraHRtbC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc3BsaXRfZWxlbWVudF9j
b21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtodG1s
L2VkaXRpbmcvc3BsaXRfZWxlbWVudF9jb21tYW5kLmgKLS0tIGtodG1sL2VkaXRpbmcvc3BsaXRf
ZWxlbWVudF9jb21tYW5kLmgJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRt
bC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5oCTMxIERlYyAyMDA1IDAwOjI2OjQ4IC0w
MDAwCkBAIC0zNCwxNSArMzQsMTUgQEAgY2xhc3MgU3BsaXRFbGVtZW50Q29tbWFuZCA6IHB1Ymxp
YyBFZGl0QwogewogcHVibGljOgogICAgIFNwbGl0RWxlbWVudENvbW1hbmQoRE9NOjpEb2N1bWVu
dEltcGwgKiwgRE9NOjpFbGVtZW50SW1wbCAqZWxlbWVudCwgRE9NOjpOb2RlSW1wbCAqYXRDaGls
ZCk7Ci0gICAgdmlydHVhbCB+U3BsaXRFbGVtZW50Q29tbWFuZCgpOworICAgIHZpcnR1YWwgflNw
bGl0RWxlbWVudENvbW1hbmQoKSB7IH0KIAkKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAogcHJpdmF0ZToKLSAgICBET006OkVsZW1l
bnRJbXBsICptX2VsZW1lbnQxOwotICAgIERPTTo6RWxlbWVudEltcGwgKm1fZWxlbWVudDI7Ci0g
ICAgRE9NOjpOb2RlSW1wbCAqbV9hdENoaWxkOworICAgIFJlZlB0cjxET006OkVsZW1lbnRJbXBs
PiBtX2VsZW1lbnQxOworICAgIFJlZlB0cjxET006OkVsZW1lbnRJbXBsPiBtX2VsZW1lbnQyOwor
ICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBtX2F0Q2hpbGQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBraHRtbApJbmRleDoga2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxp
dF90ZXh0X25vZGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1w
IC11IC1yMS42IGtodG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwCi0tLSBr
aHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb21tYW5kLmNwcAkyMSBOb3YgMjAwNSAwMToy
MDowNSAtMDAwMAkxLjYKKysrIGtodG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQu
Y3BwCTMxIERlYyAyMDA1IDAwOjI2OjQ4IC0wMDAwCkBAIC0zOCwyMSArMzgsMTAgQEAgdXNpbmcg
RE9NOjpOb2RlSW1wbDsKIG5hbWVzcGFjZSBraHRtbCB7CiAKIFNwbGl0VGV4dE5vZGVDb21tYW5k
OjpTcGxpdFRleHROb2RlQ29tbWFuZChEb2N1bWVudEltcGwgKmRvY3VtZW50LCBUZXh0SW1wbCAq
dGV4dCwgaW50IG9mZnNldCkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV90ZXh0MSgw
KSwgbV90ZXh0Mih0ZXh0KSwgbV9vZmZzZXQob2Zmc2V0KQorICAgIDogRWRpdENvbW1hbmQoZG9j
dW1lbnQpLCBtX3RleHQyKHRleHQpLCBtX29mZnNldChvZmZzZXQpCiB7CiAgICAgQVNTRVJUKG1f
dGV4dDIpOwogICAgIEFTU0VSVChtX3RleHQyLT5sZW5ndGgoKSA+IDApOwotCi0gICAgbV90ZXh0
Mi0+cmVmKCk7Ci19Ci0KLVNwbGl0VGV4dE5vZGVDb21tYW5kOjp+U3BsaXRUZXh0Tm9kZUNvbW1h
bmQoKQotewotICAgIGlmIChtX3RleHQxKQotICAgICAgICBtX3RleHQxLT5kZXJlZigpOwotCi0g
ICAgQVNTRVJUKG1fdGV4dDIpOwotICAgIG1fdGV4dDItPmRlcmVmKCk7CiB9CiAKIHZvaWQgU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQpAQCAtNzIsMTQgKzYxLDEzIEBAIHZvaWQgU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBtX3RleHQxID0gZG9jdW1lbnQo
KS0+Y3JlYXRlVGV4dE5vZGUobV90ZXh0Mi0+c3Vic3RyaW5nRGF0YSgwLCBtX29mZnNldCwgZXhj
ZXB0aW9uQ29kZSkpOwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAg
ICAgQVNTRVJUKG1fdGV4dDEpOwotICAgICAgICBtX3RleHQxLT5yZWYoKTsKICAgICB9CiAKLSAg
ICBkb2N1bWVudCgpLT5jb3B5TWFya2VycyhtX3RleHQyLCAwLCBtX29mZnNldCwgbV90ZXh0MSwg
MCk7CisgICAgZG9jdW1lbnQoKS0+Y29weU1hcmtlcnMobV90ZXh0Mi5nZXQoKSwgMCwgbV9vZmZz
ZXQsIG1fdGV4dDEuZ2V0KCksIDApOwogICAgIG1fdGV4dDItPmRlbGV0ZURhdGEoMCwgbV9vZmZz
ZXQsIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogCi0g
ICAgbV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUobV90ZXh0MSwgbV90ZXh0Miwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgbV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUo
bV90ZXh0MS5nZXQoKSwgbV90ZXh0Mi5nZXQoKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJU
KGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgICAgIAogICAgIEFTU0VSVChtX3RleHQyLT5wcmV2
aW91c1NpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsKQEAgLTk2LDkgKzg0LDkgQEAgdm9pZCBTcGxp
dFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICBtX3RleHQyLT5pbnNlcnREYXRhKDAs
IG1fdGV4dDEtPmRhdGEoKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNv
ZGUgPT0gMCk7CiAKLSAgICBkb2N1bWVudCgpLT5jb3B5TWFya2VycyhtX3RleHQxLCAwLCBtX29m
ZnNldCwgbV90ZXh0MiwgMCk7CisgICAgZG9jdW1lbnQoKS0+Y29weU1hcmtlcnMobV90ZXh0MS5n
ZXQoKSwgMCwgbV9vZmZzZXQsIG1fdGV4dDIuZ2V0KCksIDApOwogCi0gICAgbV90ZXh0Mi0+cGFy
ZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChtX3RleHQxLCBleGNlcHRpb25Db2RlKTsKKyAgICBtX3Rl
eHQyLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG1fdGV4dDEuZ2V0KCksIGV4Y2VwdGlvbkNv
ZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgbV9vZmZzZXQgPSBt
X3RleHQxLT5sZW5ndGgoKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2Nv
bW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0
aW5nL3NwbGl0X3RleHRfbm9kZV9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpk
aWZmIC1wIC11IC1yMS4yIGtodG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuaAot
LS0ga2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5oCTE2IFNlcCAyMDA1IDIy
OjQyOjA3IC0wMDAwCTEuMgorKysga2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFu
ZC5oCTMxIERlYyAyMDA1IDAwOjI2OjQ4IC0wMDAwCkBAIC0zOCwxNyArMzgsMTcgQEAgY2xhc3Mg
U3BsaXRUZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdAogewogcHVibGljOgogICAgIFNwbGl0
VGV4dE5vZGVDb21tYW5kKERPTTo6RG9jdW1lbnRJbXBsICosIERPTTo6VGV4dEltcGwgKiwgaW50
KTsKLSAgICB2aXJ0dWFsIH5TcGxpdFRleHROb2RlQ29tbWFuZCgpOworICAgIHZpcnR1YWwgflNw
bGl0VGV4dE5vZGVDb21tYW5kKCkgeyB9CiAJCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBET006OlRleHRJbXBsICpub2Rl
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0MjsgfQorICAgIERPTTo6VGV4dEltcGwgKm5vZGUoKSBj
b25zdCB7IHJldHVybiBtX3RleHQyLmdldCgpOyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NOjpUZXh0SW1wbCAqbV90ZXh0
MTsKLSAgICBET006OlRleHRJbXBsICptX3RleHQyOworICAgIFJlZlB0cjxET006OlRleHRJbXBs
PiBtX3RleHQxOworICAgIFJlZlB0cjxET006OlRleHRJbXBsPiBtX3RleHQyOwogICAgIHVuc2ln
bmVkIG1fb2Zmc2V0OwogfTsKIApJbmRleDoga2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVf
Y29udGFpbmluZ19lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBraHRtbC9lZGl0aW5n
L3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnQuY3BwCi0tLSBraHRtbC9lZGl0aW5n
L3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnQuY3BwCTIxIE5vdiAyMDA1IDAxOjIw
OjA1IC0wMDAwCTEuNQorKysga2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29udGFpbmlu
Z19lbGVtZW50LmNwcAkzMSBEZWMgMjAwNSAwMDoyNjo0OCAtMDAwMApAQCAtNDQsMTQgKzQ0LDYg
QEAgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6UwogewogICAgIEFTU0VS
VChtX3RleHQpOwogICAgIEFTU0VSVChtX3RleHQtPmxlbmd0aCgpID4gMCk7Ci0KLSAgICBtX3Rl
eHQtPnJlZigpOwotfQotCi1TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjp+
U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKG1f
dGV4dCk7Ci0gICAgbV90ZXh0LT5kZXJlZigpOwogfQogCiB2b2lkIFNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQpAQCAtNTksNyArNTEsNyBAQCB2b2lkIFNw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hCiAgICAgQVNTRVJUKG1fdGV4dCk7CiAg
ICAgQVNTRVJUKG1fb2Zmc2V0ID4gMCk7CiAKLSAgICBzcGxpdFRleHROb2RlKG1fdGV4dCwgbV9v
ZmZzZXQpOworICAgIHNwbGl0VGV4dE5vZGUobV90ZXh0LmdldCgpLCBtX29mZnNldCk7CiAgICAg
CiAgICAgTm9kZUltcGwgKnBhcmVudE5vZGUgPSBtX3RleHQtPnBhcmVudE5vZGUoKTsKICAgICBp
ZiAoIXBhcmVudE5vZGUtPnJlbmRlcmVyKCkgfHwgIXBhcmVudE5vZGUtPnJlbmRlcmVyKCktPmlz
SW5saW5lKCkpIHsKQEAgLTY3LDcgKzU5LDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29udGFpbmlu
Z0VsZW1lbnRDb21tYQogICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+Zmlyc3RDaGls
ZCgpOwogICAgIH0KIAotICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihwYXJlbnROb2RlKSwgbV90ZXh0KTsKKyAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwgKj4ocGFyZW50Tm9kZSksIG1fdGV4dC5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIGtodG1sCkluZGV4OiBraHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5n
X2VsZW1lbnRfY29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudF9jb21tYW5k
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtodG1sL2VkaXRp
bmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudF9jb21tYW5kLmgKLS0tIGtodG1s
L2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudF9jb21tYW5kLmgJMTYg
U2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJMS4yCisrKyBraHRtbC9lZGl0aW5nL3NwbGl0X3RleHRf
bm9kZV9jb250YWluaW5nX2VsZW1lbnRfY29tbWFuZC5oCTMxIERlYyAyMDA1IDAwOjI2OjQ4IC0w
MDAwCkBAIC0zNCwxMiArMzQsMTIgQEAgY2xhc3MgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q29tbQogewogcHVibGljOgogICAgIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKiwgRE9NOjpUZXh0SW1wbCAqLCBpbnQpOwotICAgIHZp
cnR1YWwgflNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQoKTsKKyAgICB2aXJ0
dWFsIH5TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKCkgeyB9CiAJCiAgICAg
dmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAogcHJpdmF0ZToKLSAgICBET006OlRleHRJbXBsICpt
X3RleHQ7CisgICAgUmVmUHRyPERPTTo6VGV4dEltcGw+IG1fdGV4dDsKICAgICBpbnQgbV9vZmZz
ZXQ7CiB9OwogCkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9w
b3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjYKZGlmZiAtcCAtdSAtcjEuNjYg
a2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNp
YmxlX3Bvc2l0aW9uLmNwcAkyIERlYyAyMDA1IDA5OjAwOjI5IC0wMDAwCTEuNjYKKysrIGtodG1s
L2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NDkgLTAwMDAK
QEAgLTM4NywxMSArMzg3LDExIEBAIHZvaWQgVmlzaWJsZVBvc2l0aW9uOjpzaG93VHJlZSgpIGNv
bnN0CiB9CiAjZW5kaWYKIAotUmVmUHRyPFJhbmdlSW1wbD4gbWFrZVJhbmdlKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZW5kKQorUGFzc1JlZlB0
cjxSYW5nZUltcGw+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnN0YXJ0LCBjb25z
dCBWaXNpYmxlUG9zaXRpb24gJmVuZCkKIHsKICAgICBQb3NpdGlvbiBzID0gc3RhcnQucG9zaXRp
b24oKTsKICAgICBQb3NpdGlvbiBlID0gZW5kLnBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFJlZlB0
cjxSYW5nZUltcGw+KG5ldyBSYW5nZUltcGwocy5ub2RlKCktPmdldERvY3VtZW50KCksIHMubm9k
ZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSkpOworICAgIHJldHVybiBuZXcg
UmFuZ2VJbXBsKHMubm9kZSgpLT5nZXREb2N1bWVudCgpLCBzLm5vZGUoKSwgcy5vZmZzZXQoKSwg
ZS5ub2RlKCksIGUub2Zmc2V0KCkpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxl
UG9zaXRpb24oY29uc3QgUmFuZ2VJbXBsICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCkluZGV4OiBr
aHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zNApkaWZmIC1wIC11IC1yMS4zNCBraHRtbC9lZGl0aW5nL3Zpc2libGVf
cG9zaXRpb24uaAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgJMSBEZWMgMjAw
NSAxMDozMjoxNCAtMDAwMAkxLjM0CisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24u
aAkzMSBEZWMgMjAwNSAwMDoyNjo0OSAtMDAwMApAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBL
SFRNTF9FRElUSU5HX1ZJU0lCTEVfUE9TSVRJT05fSAogI2RlZmluZSBLSFRNTF9FRElUSU5HX1ZJ
U0lCTEVfUE9TSVRJT05fSAogCi0jaW5jbHVkZSA8cXN0cmluZy5oPgorI2luY2x1ZGUgPHFzdHJp
bmcuaD4gLy8gZm9yIFFDaGFyCisjaW5jbHVkZSA8a3htbGNvcmUvUGFzc1JlZlB0ci5oPgogCiAj
aW5jbHVkZSAieG1sL2RvbV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInRleHRfYWZmaW5pdHkuaCIK
QEAgLTEyOCw3ICsxMjksNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQ
b3NpCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotUmVmUHRyPERPTTo6UmFuZ2VJbXBsPiBt
YWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZlbmQpOworUGFzc1JlZlB0cjxET006OlJhbmdlSW1wbD4gbWFrZVJhbmdlKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZW5kKTsKIGJvb2wg
c2V0U3RhcnQoRE9NOjpSYW5nZUltcGwgKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZzdGFydCk7
CiBib29sIHNldEVuZChET006OlJhbmdlSW1wbCAqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnN0
YXJ0KTsKIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBET006OlJh
bmdlSW1wbCAqLCBFQWZmaW5pdHkpOwpJbmRleDoga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcv
dmlzaWJsZV90ZXh0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC1wIC11IC1y
MS40NSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvdmlz
aWJsZV90ZXh0LmNwcAkyOCBEZWMgMjAwNSAxODoyMTo1MCAtMDAwMAkxLjQ1CisrKyBraHRtbC9l
ZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMzEgRGVjIDIwMDUgMDA6MjY6NTAgLTAwMDAKQEAgLTQ1
OSw3ICs0NTksNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihRQ2hhciBjCiAg
ICAgbV9sYXN0Q2hhcmFjdGVyID0gYzsKIH0KIAotUmVmUHRyPFJhbmdlSW1wbD4gVGV4dEl0ZXJh
dG9yOjpyYW5nZSgpIGNvbnN0CitQYXNzUmVmUHRyPFJhbmdlSW1wbD4gVGV4dEl0ZXJhdG9yOjpy
YW5nZSgpIGNvbnN0CiB7CiAgICAgLy8gdXNlIHRoZSBjdXJyZW50IHJ1biBpbmZvcm1hdGlvbiwg
aWYgd2UgaGF2ZSBpdAogICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkgewpAQCAtNDY5LDE2ICs0Njks
MTQgQEAgUmVmUHRyPFJhbmdlSW1wbD4gVGV4dEl0ZXJhdG9yOjpyYW5nZSgpIAogICAgICAgICAg
ICAgbV9wb3NpdGlvbkVuZE9mZnNldCArPSBpbmRleDsKICAgICAgICAgICAgIG1fcG9zaXRpb25P
ZmZzZXRCYXNlTm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFJlZlB0cjxSYW5n
ZUltcGw+KG5ldyBSYW5nZUltcGwobV9wb3NpdGlvbk5vZGUtPmdldERvY3VtZW50KCksCi0gICAg
ICAgICAgICBtX3Bvc2l0aW9uTm9kZSwgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0LCBtX3Bvc2l0aW9u
Tm9kZSwgbV9wb3NpdGlvbkVuZE9mZnNldCkpOworICAgICAgICByZXR1cm4gbmV3IFJhbmdlSW1w
bChtX3Bvc2l0aW9uTm9kZS0+Z2V0RG9jdW1lbnQoKSwgbV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRp
b25TdGFydE9mZnNldCwgbV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRpb25FbmRPZmZzZXQpOwogICAg
IH0KIAogICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIHRoZSBlbmQgb2YgdGhlIG92ZXJhbGwgcmFu
Z2Ugd2Ugd2VyZSBnaXZlbgogICAgIGlmIChtX2VuZENvbnRhaW5lcikKLSAgICAgICAgcmV0dXJu
IFJlZlB0cjxSYW5nZUltcGw+KG5ldyBSYW5nZUltcGwobV9lbmRDb250YWluZXItPmdldERvY3Vt
ZW50KCksIAotICAgICAgICAgICAgbV9lbmRDb250YWluZXIsIG1fZW5kT2Zmc2V0LCBtX2VuZENv
bnRhaW5lciwgbV9lbmRPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSYW5nZUltcGwobV9l
bmRDb250YWluZXItPmdldERvY3VtZW50KCksIG1fZW5kQ29udGFpbmVyLCBtX2VuZE9mZnNldCwg
bV9lbmRDb250YWluZXIsIG1fZW5kT2Zmc2V0KTsKICAgICAgICAgCi0gICAgcmV0dXJuIFJlZlB0
cjxSYW5nZUltcGw+KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoKSA6IG1fcG9zaXRp
b25Ob2RlKDApCkBAIC03MTIsMTMgKzcxMCwxMiBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OmVtCiAgICAgfQogfQogCi1SZWZQdHI8UmFuZ2VJbXBsPiBTaW1wbGlmaWVk
QmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CitQYXNzUmVmUHRyPFJhbmdlSW1w
bD4gU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAogewotICAg
IGlmIChtX3Bvc2l0aW9uTm9kZSkgewotICAgICAgICByZXR1cm4gUmVmUHRyPFJhbmdlSW1wbD4o
bmV3IFJhbmdlSW1wbChtX3Bvc2l0aW9uTm9kZS0+Z2V0RG9jdW1lbnQoKSwgbV9wb3NpdGlvbk5v
ZGUsIG1fcG9zaXRpb25TdGFydE9mZnNldCwgbV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRpb25FbmRP
ZmZzZXQpKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gUmVmUHRyPFJhbmdlSW1wbD4o
bmV3IFJhbmdlSW1wbChtX3N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQoKSwgbV9zdGFydE5vZGUsIG1f
c3RhcnRPZmZzZXQsIG1fc3RhcnROb2RlLCBtX3N0YXJ0T2Zmc2V0KSk7Ci0gICAgfQorICAgIGlm
IChtX3Bvc2l0aW9uTm9kZSkKKyAgICAgICAgcmV0dXJuIG5ldyBSYW5nZUltcGwobV9wb3NpdGlv
bk5vZGUtPmdldERvY3VtZW50KCksIG1fcG9zaXRpb25Ob2RlLCBtX3Bvc2l0aW9uU3RhcnRPZmZz
ZXQsIG1fcG9zaXRpb25Ob2RlLCBtX3Bvc2l0aW9uRW5kT2Zmc2V0KTsKKyAgICAKKyAgICByZXR1
cm4gbmV3IFJhbmdlSW1wbChtX3N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQoKSwgbV9zdGFydE5vZGUs
IG1fc3RhcnRPZmZzZXQsIG1fc3RhcnROb2RlLCBtX3N0YXJ0T2Zmc2V0KTsKIH0KIAogQ2hhcmFj
dGVySXRlcmF0b3I6OkNoYXJhY3Rlckl0ZXJhdG9yKCkKQEAgLTczNCw5ICs3MzEsOSBAQCBDaGFy
YWN0ZXJJdGVyYXRvcjo6Q2hhcmFjdGVySXRlcmF0b3IoY29uCiAgICAgfQogfQogCi1SZWZQdHI8
UmFuZ2VJbXBsPiBDaGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAorUGFzc1JlZlB0cjxS
YW5nZUltcGw+IENoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRy
PFJhbmdlSW1wbD4gciA9IG1fdGV4dEl0ZXJhdG9yLnJhbmdlKCk7CisgICAgUGFzc1JlZlB0cjxS
YW5nZUltcGw+IHIgPSBtX3RleHRJdGVyYXRvci5yYW5nZSgpOwogICAgIGlmICghbV90ZXh0SXRl
cmF0b3IuYXRFbmQoKSkgewogICAgICAgICBpZiAobV90ZXh0SXRlcmF0b3IubGVuZ3RoKCkgPD0g
MSkgewogICAgICAgICAgICAgYXNzZXJ0KG1fcnVuT2Zmc2V0ID09IDApOwpAQCAtMTA3MCw3ICsx
MDY3LDcgQEAgUVN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2VJbXBsICpyKQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5nZUltcGw+IGZpbmRQbGFpblRleHQoY29uc3QgUmFu
Z2VJbXBsICpyLCBjb25zdCBRU3RyaW5nICZzLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZVNlbnNp
dGl2ZSkKK1Bhc3NSZWZQdHI8UmFuZ2VJbXBsPiBmaW5kUGxhaW5UZXh0KGNvbnN0IFJhbmdlSW1w
bCAqciwgY29uc3QgUVN0cmluZyAmcywgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VTZW5zaXRpdmUp
CiB7CiAgICAgLy8gRklYTUU6IENhbiB3ZSBkbyBCb3llci1Nb29yZSBvciBlcXVpdmFsZW50IGlu
c3RlYWQgZm9yIHNwZWVkPwogCkBAIC0xMDgwLDcgKzEwNzcsNyBAQCBSZWZQdHI8UmFuZ2VJbXBs
PiBmaW5kUGxhaW5UZXh0KGNvbnN0IFJhCiAgICAgICAgIGludCBleGNlcHRpb24gPSAwOwogICAg
ICAgICBSYW5nZUltcGwgKnJlc3VsdCA9IHItPmNsb25lUmFuZ2UoZXhjZXB0aW9uKTsKICAgICAg
ICAgcmVzdWx0LT5jb2xsYXBzZShmb3J3YXJkLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4g
UmVmUHRyPFJhbmdlSW1wbD4ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKICAgICBDaXJjdWxhclNlYXJjaEJ1ZmZlciBidWZmZXIocywgY2FzZVNlbnNpdGl2ZSk7CkBA
IC0xMTM4LDcgKzExMzUsNyBAQCBkb25lOgogICAgICAgICBpdC5hZHZhbmNlKGJ1ZmZlci5sZW5n
dGgoKSAtIDEpOwogICAgICAgICByZXN1bHQtPnNldEVuZChpdC5yYW5nZSgpLT5lbmRDb250YWlu
ZXIoZXhjZXB0aW9uKSwgaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIGV4Y2VwdGlv
bik7CiAgICAgfQotICAgIHJldHVybiBSZWZQdHI8UmFuZ2VJbXBsPihyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIH0KSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNp
YmxlX3RleHQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC1wIC11IC1yMS4xOCBr
aHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5oCi0tLSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4
dC5oCTEgRGVjIDIwMDUgMTA6MzI6MTUgLTAwMDAJMS4xOAorKysga2h0bWwvZWRpdGluZy92aXNp
YmxlX3RleHQuaAkzMSBEZWMgMjAwNSAwMDoyNjo1MCAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCBp
bmxpbmUgYm9vbCBpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShjb25zCiB9CiAKIFFTdHJpbmcgcGxh
aW5UZXh0KGNvbnN0IERPTTo6UmFuZ2VJbXBsICopOwotUmVmUHRyPERPTTo6UmFuZ2VJbXBsPiBm
aW5kUGxhaW5UZXh0KGNvbnN0IERPTTo6UmFuZ2VJbXBsICosIGNvbnN0IFFTdHJpbmcgJiwgYm9v
bCBmb3J3YXJkLCBib29sIGNhc2VTZW5zaXRpdmUpOworUGFzc1JlZlB0cjxET006OlJhbmdlSW1w
bD4gZmluZFBsYWluVGV4dChjb25zdCBET006OlJhbmdlSW1wbCAqLCBjb25zdCBRU3RyaW5nICYs
IGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKIAogLy8gSXRlcmF0ZXMgdGhyb3Vn
aCB0aGUgRE9NIHJhbmdlLCByZXR1cm5pbmcgYWxsIHRoZSB0ZXh0LCBhbmQgMC1sZW5ndGggYm91
bmRhcmllcwogLy8gYXQgcG9pbnRzIHdoZXJlIHJlcGxhY2VkIGVsZW1lbnRzIGJyZWFrIHVwIHRo
ZSB0ZXh0IGZsb3cuICBUaGUgdGV4dCBjb21lcyBiYWNrIGluCkBAIC03MSw3ICs3MSw3IEBAIHB1
YmxpYzoKICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0TGVuZ3RoOyB9CiAg
ICAgY29uc3QgUUNoYXIgKmNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaGFyYWN0
ZXJzOyB9CiAgICAgCi0gICAgUmVmUHRyPERPTTo6UmFuZ2VJbXBsPiByYW5nZSgpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8RE9NOjpSYW5nZUltcGw+IHJhbmdlKCkgY29uc3Q7CiAgICAgIAogICAg
IHN0YXRpYyBpbnQgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb25zdCBET006OlJhbmdlSW1w
bCAqcik7CiAgICAgc3RhdGljIERPTTo6UmFuZ2VJbXBsICpUZXh0SXRlcmF0b3I6OnJhbmdlRnJv
bUxvY2F0aW9uQW5kTGVuZ3RoKERPTTo6RG9jdW1lbnRJbXBsICpkb2MsIGludCByYW5nZUxvY2F0
aW9uLCBpbnQgcmFuZ2VMZW5ndGgpOwpAQCAtMTM2LDcgKzEzNiw3IEBAIHB1YmxpYzoKICAgICBp
bnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0TGVuZ3RoOyB9CiAgICAgY29uc3QgUUNo
YXIgKmNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaGFyYWN0ZXJzOyB9CiAgICAg
Ci0gICAgUmVmUHRyPERPTTo6UmFuZ2VJbXBsPiByYW5nZSgpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8RE9NOjpSYW5nZUltcGw+IHJhbmdlKCkgY29uc3Q7CiAgICAgICAgIAogcHJpdmF0ZToKICAg
ICB2b2lkIGV4aXROb2RlKCk7CkBAIC0xODksNyArMTg5LDcgQEAgcHVibGljOgogICAgIFFTdHJp
bmcgc3RyaW5nKGludCBudW1DaGFycyk7CiAgICAgCiAgICAgaW50IGNoYXJhY3Rlck9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgUmVmUHRyPERPTTo6UmFuZ2VJbXBsPiBy
YW5nZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8RE9NOjpSYW5nZUltcGw+IHJhbmdlKCkgY29u
c3Q7CiAgICAgICAgIAogcHJpdmF0ZToKICAgICBpbnQgbV9vZmZzZXQ7CkBAIC0yMTMsNyArMjEz
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFFDaGFyICpjaGFyYWN0ZXJzKCkgY29uc3Q7CiAgICAg
CiAgICAgLy8gUmFuZ2Ugb2YgdGhlIHRleHQgd2UncmUgY3VycmVudGx5IHJldHVybmluZwotICAg
IFJlZlB0cjxET006OlJhbmdlSW1wbD4gcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9
CisgICAgUGFzc1JlZlB0cjxET006OlJhbmdlSW1wbD4gcmFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X3JhbmdlOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gdGV4dCBmcm9tIHRoZSBwcmV2aW91cyBjaHVu
ayBmcm9tIHRoZSB0ZXh0SXRlcmF0b3IKQEAgLTIyNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogICAg
IC8vIERpZCB3ZSBoYXZlIHRvIGxvb2sgYWhlYWQgaW4gdGhlIHRleHRJdGVyYXRvciB0byBjb25m
aXJtIHRoZSBjdXJyZW50IGNodW5rPwogICAgIGJvb2wgbV9kaWRMb29rQWhlYWQ7CiAKLSAgICBS
ZWZQdHI8RE9NOjpSYW5nZUltcGw+IG1fcmFuZ2U7CisgICAgUGFzc1JlZlB0cjxET006OlJhbmdl
SW1wbD4gbV9yYW5nZTsKIAogICAgIFRleHRJdGVyYXRvciBtX3RleHRJdGVyYXRvcjsKIH07Cklu
ZGV4OiBraHRtbC9lZGl0aW5nL3dyYXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3dy
YXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS40CmRpZmYgLXAgLXUgLXIxLjQga2h0bWwvZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1
bW15X3NwYW5fY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvd3JhcF9jb250ZW50c19pbl9k
dW1teV9zcGFuX2NvbW1hbmQuY3BwCTIxIE5vdiAyMDA1IDAxOjIwOjA2IC0wMDAwCTEuNAorKysg
a2h0bWwvZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5jcHAJMzEg
RGVjIDIwMDUgMDA6MjY6NTAgLTAwMDAKQEAgLTM3LDIwICszNyw5IEBAIHVzaW5nIERPTTo6RWxl
bWVudEltcGw7CiBuYW1lc3BhY2Uga2h0bWwgewogCiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNv
bW1hbmQ6OldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZChET006OkRvY3VtZW50SW1wbCAq
ZG9jdW1lbnQsIERPTTo6RWxlbWVudEltcGwgKmVsZW1lbnQpCi0gICAgOiBFZGl0Q29tbWFuZChk
b2N1bWVudCksIG1fZWxlbWVudChlbGVtZW50KSwgbV9kdW1teVNwYW4oMCkKKyAgICA6IEVkaXRD
b21tYW5kKGRvY3VtZW50KSwgbV9lbGVtZW50KGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKG1fZWxl
bWVudCk7Ci0KLSAgICBtX2VsZW1lbnQtPnJlZigpOwotfQotCi1XcmFwQ29udGVudHNJbkR1bW15
U3BhbkNvbW1hbmQ6On5XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQoKQotewotICAgIGlm
IChtX2R1bW15U3BhbikKLSAgICAgICAgbV9kdW1teVNwYW4tPmRlcmVmKCk7Ci0KLSAgICBBU1NF
UlQobV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQtPmRlcmVmKCk7CiB9CiAKIHZvaWQgV3JhcENv
bnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpkb0FwcGx5KCkKQEAgLTU5LDE3ICs0OCwxNSBAQCB2
b2lkIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9BCiAKICAgICBpbnQgZXhjZXB0
aW9uQ29kZSA9IDA7CiAKLSAgICBpZiAoIW1fZHVtbXlTcGFuKSB7CisgICAgaWYgKCFtX2R1bW15
U3BhbikKICAgICAgICAgbV9kdW1teVNwYW4gPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3Vt
ZW50KCkpOwotICAgICAgICBtX2R1bW15U3Bhbi0+cmVmKCk7Ci0gICAgfQotCisgCiAgICAgd2hp
bGUgKG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIG1fZHVtbXlTcGFuLT5hcHBl
bmRDaGlsZChtX2VsZW1lbnQtPmZpcnN0Q2hpbGQoKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAg
IEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIH0KIAotICAgIG1fZWxlbWVudC0+YXBw
ZW5kQ2hpbGQobV9kdW1teVNwYW4sIGV4Y2VwdGlvbkNvZGUpOworICAgIG1fZWxlbWVudC0+YXBw
ZW5kQ2hpbGQobV9kdW1teVNwYW4uZ2V0KCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChl
eGNlcHRpb25Db2RlID09IDApOwogfQogCkBAIC04OCw3ICs3NSw3IEBAIHZvaWQgV3JhcENvbnRl
bnRzSW5EdW1teVNwYW5Db21tYW5kOjpkb1UKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUg
PT0gMCk7CiAgICAgfQogCi0gICAgbV9lbGVtZW50LT5yZW1vdmVDaGlsZChtX2R1bW15U3Bhbiwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgbV9lbGVtZW50LT5yZW1vdmVDaGlsZChtX2R1bW15U3Bhbi5n
ZXQoKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiB9
CiAKSW5kZXg6IGtodG1sL2VkaXRpbmcvd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1h
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3dyYXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtodG1sL2VkaXRpbmcvd3JhcF9jb250ZW50c19pbl9k
dW1teV9zcGFuX2NvbW1hbmQuaAotLS0ga2h0bWwvZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1
bW15X3NwYW5fY29tbWFuZC5oCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysga2h0
bWwvZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5oCTMxIERlYyAy
MDA1IDAwOjI2OjUwIC0wMDAwCkBAIC0zNCwxNCArMzQsMTQgQEAgY2xhc3MgV3JhcENvbnRlbnRz
SW5EdW1teVNwYW5Db21tYW5kIDogcAogewogcHVibGljOgogICAgIFdyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZChET006OkRvY3VtZW50SW1wbCAqLCBET006OkVsZW1lbnRJbXBsICopOwot
ICAgIHZpcnR1YWwgfldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZCgpOworICAgIHZpcnR1
YWwgfldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZCgpIHsgfQogCQogICAgIHZpcnR1YWwg
dm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCiBwcml2YXRl
OgotICAgIERPTTo6RWxlbWVudEltcGwgKm1fZWxlbWVudDsKLSAgICBET006OkVsZW1lbnRJbXBs
ICptX2R1bW15U3BhbjsKKyAgICBSZWZQdHI8RE9NOjpFbGVtZW50SW1wbD4gbV9lbGVtZW50Owor
ICAgIFJlZlB0cjxET006OkVsZW1lbnRJbXBsPiBtX2R1bW15U3BhbjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIGtodG1sCkluZGV4OiBrd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NSFRNTC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z
MgpkaWZmIC1wIC11IC1yMS4zMiBrd3EvRE9NSFRNTC5tbQotLS0ga3dxL0RPTUhUTUwubW0JMjIg
RGVjIDIwMDUgMDE6MjU6MTMgLTAwMDAJMS4zMgorKysga3dxL0RPTUhUTUwubW0JMzEgRGVjIDIw
MDUgMDA6MjY6NTMgLTAwMDAKQEAgLTU1MiwxMyArNTUyLDEzIEBAIHVzaW5nIERPTTo6Tm9kZUlt
cGw7CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfY3JlYXRlRG9jdW1lbnRGcmFnbWVudFdp
dGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5T
U3RyaW5nICopYmFzZVVSTFN0cmluZwogewotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChbc2VsZiBfZG9jdW1lbnRJbXBsXSwgUVN0
cmluZzo6ZnJvbU5TU3RyaW5nKG1hcmt1cFN0cmluZyksIFFTdHJpbmc6OmZyb21OU1N0cmluZyhi
YXNlVVJMU3RyaW5nKSk7Ci0gICAgcmV0dXJuIFtET01Eb2N1bWVudEZyYWdtZW50IF9kb2N1bWVu
dEZyYWdtZW50V2l0aEltcGw6ZnJhZ21lbnRdOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudEltcGw+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKFtzZWxmIF9kb2N1
bWVudEltcGxdLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcobWFya3VwU3RyaW5nKSwgUVN0cmluZzo6
ZnJvbU5TU3RyaW5nKGJhc2VVUkxTdHJpbmcpKTsKKyAgICByZXR1cm4gW0RPTURvY3VtZW50RnJh
Z21lbnQgX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1wbDpmcmFnbWVudC5nZXQoKV07CiB9CiAKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfY3JlYXRlRG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihO
U1N0cmluZyAqKXRleHQKIHsKLSAgICByZXR1cm4gW0RPTURvY3VtZW50RnJhZ21lbnQgX2RvY3Vt
ZW50RnJhZ21lbnRXaXRoSW1wbDpjcmVhdGVGcmFnbWVudEZyb21UZXh0KFtzZWxmIF9kb2N1bWVu
dEltcGxdLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcodGV4dCkpXTsKKyAgICByZXR1cm4gW0RPTURv
Y3VtZW50RnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1wbDpjcmVhdGVGcmFnbWVudEZy
b21UZXh0KFtzZWxmIF9kb2N1bWVudEltcGxdLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcodGV4dCkp
LmdldCgpXTsKIH0KIAogQGVuZApJbmRleDoga3dxL1dlYkNvcmVCcmlkZ2UubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNDQ2CmRpZmYgLXAgLXUgLXIxLjQ0NiBrd3EvV2ViQ29yZUJyaWRn
ZS5tbQotLS0ga3dxL1dlYkNvcmVCcmlkZ2UubW0JMjYgRGVjIDIwMDUgMjE6NDY6MTcgLTAwMDAJ
MS40NDYKKysrIGt3cS9XZWJDb3JlQnJpZGdlLm1tCTMxIERlYyAyMDA1IDAwOjI2OjU1IC0wMDAw
CkBAIC0xODgxLDggKzE4ODEsOCBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVs
ZW1lbnRGCiAgICAgaWYgKCFfcGFydCB8fCAhX3BhcnQtPnhtbERvY0ltcGwoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoX3BhcnQtPnhtbERvY0ltcGwoKSwgUVN0cmluZzo6ZnJvbU5TU3Ry
aW5nKG1hcmt1cFN0cmluZyksIFFTdHJpbmc6OmZyb21OU1N0cmluZyhiYXNlVVJMU3RyaW5nKSk7
Ci0gICAgcmV0dXJuIFtET01Eb2N1bWVudEZyYWdtZW50IF9kb2N1bWVudEZyYWdtZW50V2l0aElt
cGw6ZnJhZ21lbnRdOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudEltcGw+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKF9wYXJ0LT54bWxEb2NJbXBsKCksIFFTdHJp
bmc6OmZyb21OU1N0cmluZyhtYXJrdXBTdHJpbmcpLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcoYmFz
ZVVSTFN0cmluZykpOworICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBfZG9jdW1lbnRG
cmFnbWVudFdpdGhJbXBsOmZyYWdtZW50LmdldCgpXTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKWRvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CkBAIC0xODkw
LDcgKzE4OTAsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAg
ICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpIHx8ICF0ZXh0KQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICByZXR1cm4gW0RPTURvY3VtZW50RnJhZ21lbnQgX2RvY3VtZW50RnJhZ21l
bnRXaXRoSW1wbDpjcmVhdGVGcmFnbWVudEZyb21UZXh0KF9wYXJ0LT54bWxEb2NJbXBsKCksIFFT
dHJpbmc6OmZyb21OU1N0cmluZyh0ZXh0KSldOworICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFn
bWVudCBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbXBsOmNyZWF0ZUZyYWdtZW50RnJvbVRleHQoX3Bh
cnQtPnhtbERvY0ltcGwoKSwgUVN0cmluZzo6ZnJvbU5TU3RyaW5nKHRleHQpKS5nZXQoKV07CiB9
CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilkb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQ
YXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXMKQEAgLTE5MDYsNyArMTkwNiw3IEBAIHN0YXRpYyBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAgICAgbm9kZUxpc3QuYXBwZW5k
KFtub2RlIF9ub2RlSW1wbF0pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gW0RPTURvY3VtZW50
RnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1wbDpjcmVhdGVGcmFnbWVudEZyb21Ob2Rl
TGlzdChfcGFydC0+eG1sRG9jSW1wbCgpLCBub2RlTGlzdCldOworICAgIHJldHVybiBbRE9NRG9j
dW1lbnRGcmFnbWVudCBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbXBsOmNyZWF0ZUZyYWdtZW50RnJv
bU5vZGVMaXN0KF9wYXJ0LT54bWxEb2NJbXBsKCksIG5vZGVMaXN0KS5nZXQoKV07CiB9CiAKIC0g
KHZvaWQpcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAq
KWZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0
UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlCg==
</data>
<flag name="review"
          id="1150"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>