<?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>137512</bug_id>
          
          <creation_ts>2014-10-07 22:04:11 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for RenderBlock objects</short_desc>
          <delta_ts>2014-10-08 16:35:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1040209</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-07 22:04:11 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for RenderBlock objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040216</commentid>
    <comment_count>1</comment_count>
      <attachid>239455</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-07 22:51:52 -0700</bug_when>
    <thetext>Created attachment 239455
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040220</commentid>
    <comment_count>2</comment_count>
      <attachid>239458</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-07 23:13:26 -0700</bug_when>
    <thetext>Created attachment 239458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040311</commentid>
    <comment_count>3</comment_count>
      <attachid>239458</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-08 09:26:01 -0700</bug_when>
    <thetext>Comment on attachment 239458
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:200
&gt;  static inline RenderObject* lastChildConsideringContinuation(RenderObject* renderer)

This function dereferences the renderer, so it should eventually change to take a RenderObject&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:207
&gt; +    if (!is&lt;RenderInline&gt;(*current) &amp;&amp; !is&lt;RenderBlock&gt;(*current))
&gt;          return renderer;

Really seems like this code should just use renderer, not current. In fact, I see you did that for the endOfContinuations function below.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:209
&gt; +    while (current) {

Would be nicer as a for loop.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:274
&gt; +    RenderObject* current = &amp;renderer;
&gt; +    while (current) {

This should be a for loop.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:293
&gt; +    while (currentContainer) {

Should be a for loop.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:296
&gt; +            current = currentContainer-&gt;firstChild();
&gt; +            while (current) {

Should be a for loop.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:340
&gt; +        RenderElement* firstParent = startOfContinuations(*m_renderer-&gt;firstChildSlow())-&gt;parent();

Might even consider auto* instead of RenderElement* so we get the most specific type (which, I suppose, is RenderElement).

&gt; Source/WebCore/bindings/objc/DOMUIKitExtensions.mm:213
&gt; +        &amp;&amp; (is&lt;RenderBlock&gt;(*renderer) &amp;&amp; downcast&lt;RenderBlock&gt;(*renderer).inlineElementContinuation() == nil)

The use of nil here is incorrect, since inlineElementContinuation() does not return an Objective-C object pointer. This should be ! just as with any other WebCore code, or nullptr if for some reason we need to use ==.

&gt; Source/WebCore/rendering/RenderBlock.cpp:338
&gt; +    while (current) {

Should be a for loop.

&gt; Source/WebCore/rendering/RenderBlock.cpp:448
&gt; +    while (current &amp;&amp; current-&gt;isDescendantOf(fromBlock) &amp;&amp; current != fromBlock) {

Would be nicer logically to make this a for loop, but might be hard to fit it all on one line.

&gt; Source/WebCore/rendering/RenderBlock.cpp:449
&gt; +        RenderBlock&amp; currentBlock = downcast&lt;RenderBlock&gt;(*current);

Not clear to me why this is a safe cast.

&gt; Source/WebCore/rendering/RenderBlock.cpp:790
&gt; +        RenderBlock* nextBlock = downcast&lt;RenderBlock&gt;(next);
&gt; +        RenderBlock* prevBlock = downcast&lt;RenderBlock&gt;(prev);

Should be references, since we null check both of these in the if just above.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3045
&gt; +        firstLineBlock = downcast&lt;RenderBlock&gt;(parentBlock);

Could use *parentBlock since we know it’s not null. But then we’d have to do &amp; outside the downcast.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3129
&gt; +        firstLetterBlock = downcast&lt;RenderBlock&gt;(parentBlock);

Could use *parentBlock since we know it’s not null. But then we’d have to do &amp; outside the downcast.

&gt; Source/WebCore/rendering/RenderInline.cpp:469
&gt; +    RenderBlock* post = downcast&lt;RenderBlock&gt;(pre-&gt;createAnonymousBoxWithSameTypeAs(block));

Since createAnonymousBoxWithSameTypeAs won’t return null, this should be a reference.

&gt; Source/WebCore/rendering/RenderInline.cpp:856
&gt; +    RenderBlock* containingBlock = this-&gt;containingBlock();

Code below seems to assume this is non-null. So I think we should use a reference.

&gt; Source/WebCore/rendering/RenderObject.cpp:723
&gt; +    auto renderer = parent();

I think the parent should be named parent, not renderer, since this is also a renderer.

&gt; Source/WebCore/rendering/RenderObject.cpp:1712
&gt; +    current = parent()-&gt;firstChild();
&gt; +    while (current) {

This should be a for loop.

&gt; Source/WebCore/rendering/RenderRuby.cpp:78
&gt; +    return isRubyBeforeBlock(child) ? downcast&lt;RenderBlock&gt;(child) : nullptr;

Should probably use &amp;downcast&lt;RenderBlock&gt;(*child) since we checked for null already.

&gt; Source/WebCore/rendering/RenderRuby.cpp:84
&gt; +    return isRubyAfterBlock(child) ? downcast&lt;RenderBlock&gt;(child) : nullptr;

Should probably use &amp;downcast&lt;RenderBlock&gt;(*child) since we checked for null already.

&gt; Source/WebCore/rendering/RenderRubyBase.cpp:95
&gt; +            toBlock = downcast&lt;RenderBlock&gt;(lastChild);

Should probably use &amp;downcast&lt;RenderBlock&gt;(*lastChild) since we checked for null already.

&gt; Source/WebCore/rendering/RenderRubyBase.cpp:122
&gt; +        RenderBlock* anonBlockHere = downcast&lt;RenderBlock&gt;(firstChildHere);
&gt; +        RenderBlock* anonBlockThere = downcast&lt;RenderBlock&gt;(lastChildThere);

Ditto.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:1882
&gt;      while (renderBox != plugInRenderer) {

Should be a for loop.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:129
&gt; +    RenderBlock* container = is&lt;RenderBlock&gt;(*layoutRoot) ? downcast&lt;RenderBlock&gt;(layoutRoot) : layoutRoot-&gt;containingBlock();

Could be &amp;downcast&lt;RenderBlock&gt;(&amp;layoutRoot).

&gt; Source/WebCore/rendering/TextAutosizer.cpp:214
&gt; +            RenderBlock* descendantBlock = downcast&lt;RenderBlock&gt;(descendant);

Could be &amp;downcast&lt;RenderBlock&gt;(*descendant)

&gt; Source/WebCore/rendering/TextAutosizer.cpp:499
&gt; +            RenderBlock* descendantBlock = downcast&lt;RenderBlock&gt;(descendant);

Ditto.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:546
&gt; +        return downcast&lt;RenderBlock&gt;(firstNode);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040370</commentid>
    <comment_count>4</comment_count>
      <attachid>239458</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-08 12:04:53 -0700</bug_when>
    <thetext>Comment on attachment 239458
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:449
&gt;&gt; +        RenderBlock&amp; currentBlock = downcast&lt;RenderBlock&gt;(*current);
&gt; 
&gt; Not clear to me why this is a safe cast.

Hmm. me neither.

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:3045
&gt;&gt; +        firstLineBlock = downcast&lt;RenderBlock&gt;(parentBlock);
&gt; 
&gt; Could use *parentBlock since we know it’s not null. But then we’d have to do &amp; outside the downcast.

Could you clarify why this would be better? I would understand for is&lt;&gt;() because it would avoid the null check, but why is it better for downcast&lt;&gt;()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040389</commentid>
    <comment_count>5</comment_count>
      <attachid>239488</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-08 12:36:25 -0700</bug_when>
    <thetext>Created attachment 239488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040390</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-08 12:39:35 -0700</bug_when>
    <thetext>Attachment 239488 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlock.cpp:445:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040392</commentid>
    <comment_count>7</comment_count>
      <attachid>239458</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-08 13:00:55 -0700</bug_when>
    <thetext>Comment on attachment 239458
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:3045
&gt;&gt;&gt; +        firstLineBlock = downcast&lt;RenderBlock&gt;(parentBlock);
&gt;&gt; 
&gt;&gt; Could use *parentBlock since we know it’s not null. But then we’d have to do &amp; outside the downcast.
&gt; 
&gt; Could you clarify why this would be better? I would understand for is&lt;&gt;() because it would avoid the null check, but why is it better for downcast&lt;&gt;()?

Maybe it’s not. I think I was confused because in the general case, a typecast might have to do extra work to properly handle a null pointer, but as I realized when you were talking to me about this before, that’s only when multiple inheritance is involved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040419</commentid>
    <comment_count>8</comment_count>
      <attachid>239496</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-08 14:51:40 -0700</bug_when>
    <thetext>Created attachment 239496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040420</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-08 14:54:06 -0700</bug_when>
    <thetext>Attachment 239496 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlock.cpp:445:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040429</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-08 15:48:06 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 239458 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=239458&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:449
&gt; &gt;&gt; +        RenderBlock&amp; currentBlock = downcast&lt;RenderBlock&gt;(*current);
&gt; &gt; 
&gt; &gt; Not clear to me why this is a safe cast.
&gt; 
&gt; Hmm. me neither.

dhyatt found out this is actually dead code so I&apos;ll just remove the method before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040430</commentid>
    <comment_count>11</comment_count>
      <attachid>239499</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-08 15:49:16 -0700</bug_when>
    <thetext>Created attachment 239499
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040432</commentid>
    <comment_count>12</comment_count>
      <attachid>239499</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-08 16:35:10 -0700</bug_when>
    <thetext>Comment on attachment 239499
Patch

Clearing flags on attachment: 239499

Committed r174480: &lt;http://trac.webkit.org/changeset/174480&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040433</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-08 16:35:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239455</attachid>
            <date>2014-10-07 22:51:52 -0700</date>
            <delta_ts>2014-10-07 23:13:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137512-20141007225154.patch</filename>
            <type>text/plain</type>
            <size>120736</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFhZTViYTczNzk5ZDU3
MGIzYjdkYjZkMTEyMDQwZTQ5NDZjNGZjNi4uYzJjN2FiY2Y2M2IwNTI2ZjRiZGJjMmVmNWVkM2Iz
NjVmMzgzOWZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNC0xMC0wNyAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQmxvY2sgb2JqZWN0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NTEyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBm
b3IgUmVuZGVyQmxvY2sgb2JqZWN0cyBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIHN1cnJvdW5k
aW5nIGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Omxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RhcnRPZkNvbnRpbnVhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5kT2ZDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkQmVmb3JlQ29uc2lk
ZXJpbmdDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29u
dGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnJlbmRlclBhcmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVVJ
S2l0RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBjb250YWluc09ubHlJbmxpbmVP
YmplY3RzXSk6CisgICAgICAgICgtW0RPTU5vZGUgaXNTZWxlY3RhYmxlQmxvY2tdKToKKyAgICAg
ICAgKC1bRE9NSFRNTEVsZW1lbnQgc3RydWN0dXJhbENvbXBsZXhpdHlDb250cmlidXRpb25dKToK
KyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnZhbHVlRm9yR3JpZFRyYWNrTGlzdCk6CisgICAgICAgICogZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnNob3VsZFJl
cHJlc2VudE5vZGVPZmZzZXRaZXJvKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRhaW5pbmdCbG9ja0ZvckFic29sdXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzcGxpdEJsb2Nrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjYW5NZXJnZUFub255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhbk1lcmdlQ29udGlndW91c0Fub255bW91c0Jsb2Nrcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpibG9ja0JlZm9yZVdpdGhpblNlbGVjdGlvblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6aXND
aGlsZEhpdFRlc3RDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZp
cnN0TGluZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdExldHRlckJsb2NrKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklubGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmspOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc01hcmdpbkFmdGVyUXVpcmspOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjptYXJnaW5C
ZWZvcmVFc3RpbWF0ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93OjphZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrRmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdo
dEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rp
c3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVsYXRlSW5GbG93UG9zaXRpb25PZmZz
ZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRU
byk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkcmVu
VG8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQ
YXJlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVTdHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENv
bnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJlbnRPZkZpcnN0TGlu
ZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFy
a2VyUmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6
cG9zaXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6
Om1heFBhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVOb25GaXhlZEhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNoZWNrQmxvY2tQb3NpdGlvbmVkT2JqZWN0c05lZWRM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3Np
dGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255
bW91c1dyYXBwZXJzRm9ySW5saW5lc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJSdWJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1YnlCZWZvcmVCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpydWJ5QWZ0ZXJCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjptb3Zl
SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVC
bG9ja0NoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92
ZXJsYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90SW5D
bHVzdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KToKKwogMjAxNC0x
MC0wOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgU2FmYXJpIDgg
b24gT1NYIDEwLjEwIGRvZXMgbm90IHJ1biBXZWJHTCBpbiBSZXRpbmEgSGlEUEkgbW9kZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBmMjlkYWMzNTA0OWQyNWUyYTU3NjMyZmI4MGNkMDVjMTYyMmVjMDY4Li41MTg3
YTk1Y2ZkNDJjYzUxZDFmZmZiMWI5ZTBjY2E2ZGMwYWZiOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTkgQEAKIDIwMTQtMTAtMDcgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9i
amVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NzUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9iamVjdHMgYW5kIGNsZWFu
IHVwIHRoZSAKKyAgICAgICAgc3Vycm91bmRpbmcgY29kZS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZSk6CisKKzIwMTQtMTAtMDcgIENocmlzdG9waGUg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIFtXSzJdIFVzZSBpczw+KCkgLyBk
b3duY2FzdDw+KCkgZm9yIERyYXdpbmdBcmVhIHN1YmNsYXNzZXMKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQ5NwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAppbmRleCBlZjMyMThmNGFlM2YzMjQyYmZhMzY3ZDY3OWU4NTI1MjBkNTU1YjJmLi5iZThiODNm
MTFkOGFjYWE2MjMyMThkYzUwMjEyYjY1ZjE0ZTM1NDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
QEAgLTE4NiwxMiArMTg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJzdENo
aWxkSW5Db250aW51YXRpb24oUmVuZGVySW5saW5lJiByZW5kZXJlcikKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRl
cmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGlubGluZSBS
ZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKQogewotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVy
LT5maXJzdENoaWxkU2xvdygpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRl
cmVyLmZpcnN0Q2hpbGRTbG93KCk7CiAKLSAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxpbmVX
aXRoQ29udGludWF0aW9uKHJlbmRlcmVyKSkKLSAgICAgICAgZmlyc3RDaGlsZCA9IGZpcnN0Q2hp
bGRJbkNvbnRpbnVhdGlvbih0b1JlbmRlcklubGluZSgqcmVuZGVyZXIpKTsKKyAgICBpZiAoIWZp
cnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKCZyZW5kZXJlcikpCisgICAgICAg
IGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkSW5Db250aW51YXRpb24oZG93bmNhc3Q8UmVuZGVySW5s
aW5lPihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiB9CkBAIC0yMDAsMjMg
KzIwMCwyMyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZENvbnNpZGVy
aW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZAogc3RhdGljIGlubGluZSBSZW5kZXJP
YmplY3QqIGxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENo
aWxkU2xvdygpOwotICAgIFJlbmRlck9iamVjdCogcHJldjsKLSAgICBSZW5kZXJPYmplY3QqIGN1
ciA9IHJlbmRlcmVyOworICAgIFJlbmRlck9iamVjdCogcHJldmlvdXM7CisgICAgUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50ID0gcmVuZGVyZXI7CiAKLSAgICBpZiAoIWN1ci0+aXNSZW5kZXJJbmxpbmUo
KSAmJiAhY3VyLT5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KCpj
dXJyZW50KSAmJiAhaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50KSkKICAgICAgICAgcmV0dXJuIHJl
bmRlcmVyOwogCi0gICAgd2hpbGUgKGN1cikgewotICAgICAgICBwcmV2ID0gY3VyOworICAgIHdo
aWxlIChjdXJyZW50KSB7CisgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKIAotICAgICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiBsYyA9IGN1ci0+bGFzdENoaWxkU2xvdygpKQotICAgICAgICAgICAg
bGFzdENoaWxkID0gbGM7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIG5ld0xhc3RDaGlsZCA9
IGN1cnJlbnQtPmxhc3RDaGlsZFNsb3coKSkKKyAgICAgICAgICAgIGxhc3RDaGlsZCA9IG5ld0xh
c3RDaGlsZDsKIAotICAgICAgICBpZiAoY3VyLT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAg
ICAgICBjdXIgPSB0b1JlbmRlcklubGluZShjdXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHByZXYsIGN1ciB8fCAhdG9SZW5kZXJJbmxp
bmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4o
KmN1cnJlbnQpKSB7CisgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVySW5saW5l
PigqY3VycmVudCkuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChwcmV2aW91cywgY3VycmVudCB8fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigq
cHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBj
dXIgPSB0b1JlbmRlckJsb2NrKGN1ciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKKyAg
ICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpLmlubGlu
ZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4gbGFzdENoaWxkOwpA
QCAtMjI3LDcgKzIyNyw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkID0g
Zmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKG1fcmVuZGVyZXIpOworICAgIFJlbmRl
ck9iamVjdCogZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbigq
bV9yZW5kZXJlcik7CiAKICAgICAvLyBJZiBhbiBvYmplY3QgY2FuJ3QgaGF2ZSBjaGlsZHJlbiwg
dGhlbiBpdCBpcyB1c2luZyB0aGlzIG1ldGhvZCB0byBoZWxwCiAgICAgLy8gY2FsY3VsYXRlIHNv
bWUgaW50ZXJuYWwgcHJvcGVydHkgKGxpa2UgaXRzIGRlc2NyaXB0aW9uKS4KQEAgLTI1Miw2MiAr
MjUyLDYxIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
Omxhc3RDaGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUobGFzdENoaWxkKTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZD
b250aW51YXRpb25zKFJlbmRlck9iamVjdCogcikKK3N0YXRpYyBpbmxpbmUgUmVuZGVySW5saW5l
KiBzdGFydE9mQ29udGludWF0aW9ucyhSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIGlm
IChyLT5pc0lubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRvUmVu
ZGVySW5saW5lKHItPm5vZGUoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKHJlbmRlcmVyLmlzSW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihyZW5kZXJlci5ub2RlKCktPnJlbmRlcmVyKCkpOwogCiAgICAgLy8gQmxvY2tzIHdp
dGggYSBwcmV2aW91cyBjb250aW51YXRpb24gYWx3YXlzIGhhdmUgYSBuZXh0IGNvbnRpbnVhdGlv
bgotICAgIGlmIChyLT5pc1JlbmRlckJsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhyKS0+aW5saW5l
RWxlbWVudENvbnRpbnVhdGlvbigpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUodG9S
ZW5kZXJCbG9jayhyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5lbGVtZW50KCktPnJl
bmRlcmVyKCkpOworICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpICYmIGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5saW5lPihkb3duY2FzdDxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+ZWxlbWVudCgpLT5yZW5kZXJl
cigpKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9i
amVjdCogZW5kT2ZDb250aW51YXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMg
aW5saW5lIFJlbmRlck9iamVjdCogZW5kT2ZDb250aW51YXRpb25zKFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gcmVuZGVyZXI7Ci0gICAgUmVuZGVy
T2JqZWN0KiBjdXIgPSByZW5kZXJlcjsKLQotICAgIGlmICghY3VyLT5pc1JlbmRlcklubGluZSgp
ICYmICFjdXItPmlzUmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIWlzPFJlbmRlcklubGluZT4ocmVu
ZGVyZXIpICYmICFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gcmVu
ZGVyZXI7CiAKLSAgICB3aGlsZSAoY3VyKSB7Ci0gICAgICAgIHByZXYgPSBjdXI7Ci0gICAgICAg
IGlmIChjdXItPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgICAgIGN1ciA9IHRvUmVuZGVy
SW5saW5lKGN1ciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICAgICAgICAgIEFT
U0VSVChjdXIgfHwgIXRvUmVuZGVySW5saW5lKHByZXYpLT5jb250aW51YXRpb24oKSk7CisgICAg
UmVuZGVyT2JqZWN0KiBwcmV2aW91cyA9ICZyZW5kZXJlcjsKKyAgICBSZW5kZXJPYmplY3QqIGN1
cnJlbnQgPSAmcmVuZGVyZXI7CisgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgcHJldmlv
dXMgPSBjdXJyZW50OworICAgICAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsK
KyAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KS5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudCB8
fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAg
ICAgICAgfSBlbHNlIAotICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJCbG9jayhjdXIpLT5pbmxp
bmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHByZXY7CisgICAgcmV0dXJuIHByZXZpb3VzOwogfQogCiAKLXN0YXRp
YyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9u
cyhSZW5kZXJJbmxpbmUqIHIsIFJlbmRlck9iamVjdCogY2hpbGQpCitzdGF0aWMgaW5saW5lIFJl
bmRlck9iamVjdCogY2hpbGRCZWZvcmVDb25zaWRlcmluZ0NvbnRpbnVhdGlvbnMoUmVuZGVySW5s
aW5lKiByZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKLSAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY3VyQ29udGFpbmVyID0gcjsKLSAgICBSZW5kZXJPYmplY3QqIGN1ciA9IG51bGxw
dHI7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY3VycmVudENvbnRhaW5lciA9IHJlbmRlcmVyOworICAgIFJlbmRlck9iamVjdCog
Y3VycmVudCA9IG51bGxwdHI7CisgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91cyA9IG51bGxwdHI7
CiAKLSAgICB3aGlsZSAoY3VyQ29udGFpbmVyKSB7Ci0gICAgICAgIGlmIChjdXJDb250YWluZXIt
PmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgICAgIGN1ciA9IGN1ckNvbnRhaW5lci0+Zmly
c3RDaGlsZCgpOwotICAgICAgICAgICAgd2hpbGUgKGN1cikgewotICAgICAgICAgICAgICAgIGlm
IChjdXIgPT0gY2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwotICAgICAg
ICAgICAgICAgIHByZXYgPSBjdXI7Ci0gICAgICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0U2li
bGluZygpOworICAgIHdoaWxlIChjdXJyZW50Q29udGFpbmVyKSB7CisgICAgICAgIGlmIChpczxS
ZW5kZXJJbmxpbmU+KCpjdXJyZW50Q29udGFpbmVyKSkgeworICAgICAgICAgICAgY3VycmVudCA9
IGN1cnJlbnRDb250YWluZXItPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJy
ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gY2hpbGQpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGN1
cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGN1ckNvbnRhaW5lciA9IHRvUmVuZGVySW5s
aW5lKGN1ckNvbnRhaW5lciktPmNvbnRpbnVhdGlvbigpOwotICAgICAgICB9IGVsc2UgaWYgKGN1
ckNvbnRhaW5lci0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgICAgICBpZiAoY3VyQ29udGFp
bmVyID09IGNoaWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OworICAgICAgICAgICAg
Y3VycmVudENvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oKmN1cnJlbnRDb250YWlu
ZXIpLmNvbnRpbnVhdGlvbigpOworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckJsb2NrPigq
Y3VycmVudENvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Q29udGFpbmVyID09
IGNoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKIAotICAgICAgICAgICAg
cHJldiA9IGN1ckNvbnRhaW5lcjsKLSAgICAgICAgICAgIGN1ckNvbnRhaW5lciA9IHRvUmVuZGVy
QmxvY2soY3VyQ29udGFpbmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgICAg
ICAgICAgcHJldmlvdXMgPSBjdXJyZW50Q29udGFpbmVyOworICAgICAgICAgICAgY3VycmVudENv
bnRhaW5lciA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudENvbnRhaW5lcikuaW5saW5l
RWxlbWVudENvbnRpbnVhdGlvbigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMzIsMTUgKzMz
MSwxNSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpw
cmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgIC8vIENhc2UgMTogVGhlIG5vZGUgaXMgYSBibG9j
ayBhbmQgaXMgYW4gaW5saW5lJ3MgY29udGludWF0aW9uLiBJbiB0aGF0IGNhc2UsIHRoZSBpbmxp
bmUncwogICAgIC8vIGxhc3QgY2hpbGQgaXMgb3VyIHByZXZpb3VzIHNpYmxpbmcgKG9yIGZ1cnRo
ZXIgYmFjayBpbiB0aGUgY29udGludWF0aW9uIGNoYWluKQogICAgIFJlbmRlcklubGluZSogc3Rh
cnRPZkNvbnRzOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKHN0YXJ0
T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXIpKSkKKyAgICBpZiAoaXM8
UmVuZGVyQm94PigqbV9yZW5kZXJlcikgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51
YXRpb25zKCptX3JlbmRlcmVyKSkpCiAgICAgICAgIHByZXZpb3VzU2libGluZyA9IGNoaWxkQmVm
b3JlQ29uc2lkZXJpbmdDb250aW51YXRpb25zKHN0YXJ0T2ZDb250cywgbV9yZW5kZXJlcik7CiAK
ICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2YgdGhlIGVuZCBvZiBhIGNv
bnRpbnVhdGlvbiAtIHNraXAgYWxsIHRoZSB3YXkgdG8gYmVmb3JlCiAgICAgLy8gdGhlIHBhcmVu
dCBvZiB0aGUgc3RhcnQsIHNpbmNlIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB3aWxsIGJlIGxpbmtl
ZCB1cCB2aWEgdGhlIGNvbnRpbnVhdGlvbi4KICAgICBlbHNlIGlmIChtX3JlbmRlcmVyLT5pc0Fu
b255bW91c0Jsb2NrKCkgJiYgZmlyc3RDaGlsZElzSW5saW5lQ29udGludWF0aW9uKG1fcmVuZGVy
ZXIpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RQYXJlbnQgPSBzdGFydE9mQ29udGlu
dWF0aW9ucyhtX3JlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CisgICAgICAg
IFJlbmRlckVsZW1lbnQqIGZpcnN0UGFyZW50ID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKm1fcmVu
ZGVyZXItPmZpcnN0Q2hpbGRTbG93KCkpLT5wYXJlbnQoKTsKICAgICAgICAgd2hpbGUgKGZpcnN0
Q2hpbGRJc0lubGluZUNvbnRpbnVhdGlvbihmaXJzdFBhcmVudCkpCi0gICAgICAgICAgICBmaXJz
dFBhcmVudCA9IHN0YXJ0T2ZDb250aW51YXRpb25zKGZpcnN0UGFyZW50LT5maXJzdENoaWxkU2xv
dygpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250aW51
YXRpb25zKCpmaXJzdFBhcmVudC0+Zmlyc3RDaGlsZFNsb3coKSktPnBhcmVudCgpOwogICAgICAg
ICBwcmV2aW91c1NpYmxpbmcgPSBmaXJzdFBhcmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAg
fQogCkBAIC0zNTAsNyArMzQ5LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKIAogICAgIC8vIENhc2UgNDog
VGhpcyBub2RlIGhhcyBubyBwcmV2aW91cyBzaWJsaW5ncywgYnV0IGl0cyBwYXJlbnQgaXMgYW4g
aW5saW5lLAogICAgIC8vIGFuZCBpcyBhbm90aGVyIG5vZGUncyBpbmxpbmUgY29udGludXRhdGlv
bi4gRm9sbG93IHRoZSBjb250aW51YXRpb24gY2hhaW4uCi0gICAgZWxzZSBpZiAobV9yZW5kZXJl
ci0+cGFyZW50KCktPmlzUmVuZGVySW5saW5lKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZD
b250aW51YXRpb25zKG1fcmVuZGVyZXItPnBhcmVudCgpKSkpCisgICAgZWxzZSBpZiAoaXM8UmVu
ZGVySW5saW5lPigqbV9yZW5kZXJlci0+cGFyZW50KCkpICYmIChzdGFydE9mQ29udHMgPSBzdGFy
dE9mQ29udGludWF0aW9ucygqbV9yZW5kZXJlci0+cGFyZW50KCkpKSkKICAgICAgICAgcHJldmlv
dXNTaWJsaW5nID0gY2hpbGRCZWZvcmVDb25zaWRlcmluZ0NvbnRpbnVhdGlvbnMoc3RhcnRPZkNv
bnRzLCBtX3JlbmRlcmVyLT5wYXJlbnQoKS0+Zmlyc3RDaGlsZCgpKTsKIAogICAgIGlmICghcHJl
dmlvdXNTaWJsaW5nKQpAQCAtMzc1LDE1ICszNzQsMTUgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdAogICAgIC8vIENh
c2UgMTogbm9kZSBpcyBhIGJsb2NrIGFuZCBoYXMgYW4gaW5saW5lIGNvbnRpbnVhdGlvbi4gTmV4
dCBzaWJsaW5nIGlzIHRoZSBpbmxpbmUgY29udGludWF0aW9uJ3MKICAgICAvLyBmaXJzdCBjaGls
ZC4KICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUNvbnRpbnVhdGlvbjsKLSAgICBpZiAobV9yZW5k
ZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIChpbmxpbmVDb250aW51YXRpb24gPSB0b1JlbmRlckJs
b2NrKG1fcmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpKQotICAgICAgICBu
ZXh0U2libGluZyA9IGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihpbmxpbmVDb250
aW51YXRpb24pOworICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKm1fcmVuZGVyZXIpICYmIChpbmxp
bmVDb250aW51YXRpb24gPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm1fcmVuZGVyZXIpLmlubGlu
ZUVsZW1lbnRDb250aW51YXRpb24oKSkpCisgICAgICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGls
ZENvbnNpZGVyaW5nQ29udGludWF0aW9uKCppbmxpbmVDb250aW51YXRpb24pOwogCiAgICAgLy8g
Q2FzZSAyOiBBbm9ueW1vdXMgYmxvY2sgcGFyZW50IG9mIHRoZSBzdGFydCBvZiBhIGNvbnRpbnVh
dGlvbiAtIHNraXAgYWxsIHRoZSB3YXkgdG8KICAgICAvLyBhZnRlciB0aGUgcGFyZW50IG9mIHRo
ZSBlbmQsIHNpbmNlIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB3aWxsIGJlIGxpbmtlZCB1cCB2aWEg
dGhlIGNvbnRpbnVhdGlvbi4KICAgICBlbHNlIGlmIChtX3JlbmRlcmVyLT5pc0Fub255bW91c0Js
b2NrKCkgJiYgbGFzdENoaWxkSGFzQ29udGludWF0aW9uKG1fcmVuZGVyZXIpKSB7Ci0gICAgICAg
IFJlbmRlckVsZW1lbnQqIGxhc3RQYXJlbnQgPSBlbmRPZkNvbnRpbnVhdGlvbnModG9SZW5kZXJC
bG9jayhtX3JlbmRlcmVyKS0+bGFzdENoaWxkKCkpLT5wYXJlbnQoKTsKKyAgICAgICAgUmVuZGVy
RWxlbWVudCogbGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucygqZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KCptX3JlbmRlcmVyKS5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOwogICAgICAgICB3aGls
ZSAobGFzdENoaWxkSGFzQ29udGludWF0aW9uKGxhc3RQYXJlbnQpKQotICAgICAgICAgICAgbGFz
dFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucyhsYXN0UGFyZW50LT5sYXN0Q2hpbGQoKSktPnBh
cmVudCgpOworICAgICAgICAgICAgbGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucygqbGFz
dFBhcmVudC0+bGFzdENoaWxkKCkpLT5wYXJlbnQoKTsKICAgICAgICAgbmV4dFNpYmxpbmcgPSBs
YXN0UGFyZW50LT5uZXh0U2libGluZygpOwogICAgIH0KIApAQCAtMzk0LDE1ICszOTMsMTUgQEAg
QWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bmV4dFNpYmxp
bmcoKSBjb25zdAogICAgIC8vIENhc2UgNDogbm9kZSBpcyBhbiBpbmxpbmUgd2l0aCBhIGNvbnRp
bnVhdGlvbi4gTmV4dCBzaWJsaW5nIGlzIHRoZSBuZXh0IHNpYmxpbmcgb2YgdGhlIGVuZCAKICAg
ICAvLyBvZiB0aGUgY29udGludWF0aW9uIGNoYWluLgogICAgIGVsc2UgaWYgKGlzSW5saW5lV2l0
aENvbnRpbnVhdGlvbihtX3JlbmRlcmVyKSkKLSAgICAgICAgbmV4dFNpYmxpbmcgPSBlbmRPZkNv
bnRpbnVhdGlvbnMobV9yZW5kZXJlciktPm5leHRTaWJsaW5nKCk7CisgICAgICAgIG5leHRTaWJs
aW5nID0gZW5kT2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyKS0+bmV4dFNpYmxpbmcoKTsKIAog
ICAgIC8vIENhc2UgNTogbm9kZSBoYXMgbm8gbmV4dCBzaWJsaW5nLCBhbmQgaXRzIHBhcmVudCBp
cyBhbiBpbmxpbmUgd2l0aCBhIGNvbnRpbnVhdGlvbi4KICAgICBlbHNlIGlmIChpc0lubGluZVdp
dGhDb250aW51YXRpb24obV9yZW5kZXJlci0+cGFyZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gY29u
dGludWF0aW9uID0gdG9SZW5kZXJJbmxpbmUobV9yZW5kZXJlci0+cGFyZW50KCkpLT5jb250aW51
YXRpb24oKTsKKyAgICAgICAgYXV0byYgY29udGludWF0aW9uID0gKmRvd25jYXN0PFJlbmRlcklu
bGluZT4oKm1fcmVuZGVyZXItPnBhcmVudCgpKS5jb250aW51YXRpb24oKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIENhc2UgNWE6IGNvbnRpbnVhdGlvbiBpcyBhIGJsb2NrIC0gaW4gdGhpcyBjYXNl
IHRoZSBibG9jayBpdHNlbGYgaXMgdGhlIG5leHQgc2libGluZy4KLSAgICAgICAgaWYgKGNvbnRp
bnVhdGlvbi0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBjb250
aW51YXRpb247CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4oY29udGludWF0aW9uKSkKKyAg
ICAgICAgICAgIG5leHRTaWJsaW5nID0gJmNvbnRpbnVhdGlvbjsKICAgICAgICAgLy8gQ2FzZSA1
YjogY29udGludWF0aW9uIGlzIGFuIGlubGluZSAtIGluIHRoaXMgY2FzZSB0aGUgaW5saW5lJ3Mg
Zmlyc3QgY2hpbGQgaXMgdGhlIG5leHQgc2libGluZwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBuZXh0U2libGluZyA9IGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihjb250aW51
YXRpb24pOwpAQCAtNDE0LDEzICs0MTMsMTIgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdAogICAgIHJldHVybiBheE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKG5leHRTaWJsaW5nKTsKIH0KIAotc3RhdGljIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CitzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlcikKIHsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIGlmIChyZW5kZXJl
ci0+aXNSZW5kZXJJbmxpbmUoKSAmJiAhcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkKLSAgICAgICAg
cmV0dXJuIHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKS0+Y29udGludWF0aW9uKCk7Ci0gICAgaWYg
KHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJsb2Nr
KHJlbmRlcmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgIGlmIChpczxSZW5k
ZXJJbmxpbmU+KHJlbmRlcmVyKSAmJiAhcmVuZGVyZXIuaXNSZXBsYWNlZCgpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5saW5lPihyZW5kZXJlcikuY29udGludWF0aW9uKCk7Cisg
ICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KICAgICAKQEAgLTQzNSwxMiArNDMzLDEyIEBAIFJlbmRlck9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cmVuZGVyUGFyZW50T2JqZWN0KCkgY29u
c3QKICAgICAvLyBpcyB0aGUgc3RhcnQgb2YgdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4KICAgICBS
ZW5kZXJJbmxpbmUqIHN0YXJ0T2ZDb250cyA9IG51bGxwdHI7CiAgICAgUmVuZGVyT2JqZWN0KiBm
aXJzdENoaWxkID0gbnVsbHB0cjsKLSAgICBpZiAobV9yZW5kZXJlci0+aXNSZW5kZXJCbG9jaygp
ICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyKSkpCisg
ICAgaWYgKGlzPFJlbmRlckJsb2NrPigqbV9yZW5kZXJlcikgJiYgKHN0YXJ0T2ZDb250cyA9IHN0
YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyKSkpCiAgICAgICAgIHBhcmVudCA9IHN0YXJ0
T2ZDb250czsKIAogICAgIC8vIENhc2UgMjogbm9kZSdzIHBhcmVudCBpcyBhbiBpbmxpbmUgd2hp
Y2ggaXMgc29tZSBub2RlJ3MgY29udGludWF0aW9uOyBwYXJlbnQgaXMgCiAgICAgLy8gdGhlIGVh
cmxpZXN0IG5vZGUgaW4gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4KLSAgICBlbHNlIGlmIChwYXJl
bnQgJiYgcGFyZW50LT5pc1JlbmRlcklubGluZSgpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9m
Q29udGludWF0aW9ucyhwYXJlbnQpKSkKKyAgICBlbHNlIGlmIChpczxSZW5kZXJJbmxpbmU+KHBh
cmVudCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKCpwYXJlbnQpKSkK
ICAgICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOwogICAgIAogICAgIC8vIENhc2UgMzogVGhl
IGZpcnN0IHNpYmxpbmcgaXMgdGhlIGJlZ2lubmluZyBvZiBhIGNvbnRpbnVhdGlvbiBjaGFpbi4g
RmluZCB0aGUgb3JpZ2luIG9mIHRoYXQgY29udGludWF0aW9uLgpAQCAtNDQ4LDcgKzQ0Niw3IEBA
IFJlbmRlck9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cmVuZGVyUGFyZW50T2Jq
ZWN0KCkgY29uc3QKICAgICAgICAgLy8gR2V0IHRoZSBub2RlJ3MgcmVuZGVyZXIgYW5kIGZvbGxv
dyB0aGF0IGNvbnRpbnVhdGlvbiBjaGFpbiB1bnRpbCB0aGUgZmlyc3QgY2hpbGQgaXMgZm91bmQK
ICAgICAgICAgUmVuZGVyT2JqZWN0KiBub2RlUmVuZGVyRmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQt
Pm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgd2hpbGUgKG5vZGVSZW5kZXJGaXJzdENoaWxk
ICE9IGZpcnN0Q2hpbGQpIHsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjb250c1Rl
c3QgPSBub2RlUmVuZGVyRmlyc3RDaGlsZDsgY29udHNUZXN0OyBjb250c1Rlc3QgPSBuZXh0Q29u
dGludWF0aW9uKGNvbnRzVGVzdCkpIHsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
b250c1Rlc3QgPSBub2RlUmVuZGVyRmlyc3RDaGlsZDsgY29udHNUZXN0OyBjb250c1Rlc3QgPSBu
ZXh0Q29udGludWF0aW9uKCpjb250c1Rlc3QpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRz
VGVzdCA9PSBmaXJzdENoaWxkKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG5vZGVS
ZW5kZXJGaXJzdENoaWxkLT5wYXJlbnQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC01NjYsMjUgKzU2NCwyMyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
bmNob3JFbGVtZW50KCkgY29uc3QKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAKLSAgICBSZW5kZXJPYmplY3QqIGN1cnJSZW5kZXJlcjsKKyAgICBSZW5kZXJP
YmplY3QqIGN1cnJlbnRSZW5kZXJlcjsKICAgICAKICAgICAvLyBTZWFyY2ggdXAgdGhlIHJlbmRl
ciB0cmVlIGZvciBhIFJlbmRlck9iamVjdCB3aXRoIGEgRE9NIG5vZGUuICBEZWZlciB0byBhbiBl
YXJsaWVyIGNvbnRpbnVhdGlvbiwgdGhvdWdoLgotICAgIGZvciAoY3VyclJlbmRlcmVyID0gbV9y
ZW5kZXJlcjsgY3VyclJlbmRlcmVyICYmICFjdXJyUmVuZGVyZXItPm5vZGUoKTsgY3VyclJlbmRl
cmVyID0gY3VyclJlbmRlcmVyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3VyclJlbmRlcmVy
LT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogY29udGlu
dWF0aW9uID0gdG9SZW5kZXJCbG9jayhjdXJyUmVuZGVyZXIpLT5jb250aW51YXRpb24oKTsKLSAg
ICAgICAgICAgIGlmIChjb250aW51YXRpb24pCisgICAgZm9yIChjdXJyZW50UmVuZGVyZXIgPSBt
X3JlbmRlcmVyOyBjdXJyZW50UmVuZGVyZXIgJiYgIWN1cnJlbnRSZW5kZXJlci0+bm9kZSgpOyBj
dXJyZW50UmVuZGVyZXIgPSBjdXJyZW50UmVuZGVyZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlm
IChjdXJyZW50UmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSkgeworICAgICAgICAgICAgaWYg
KFJlbmRlck9iamVjdCogY29udGludWF0aW9uID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJy
ZW50UmVuZGVyZXIpLmNvbnRpbnVhdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBjYWNo
ZS0+Z2V0T3JDcmVhdGUoY29udGludWF0aW9uKS0+YW5jaG9yRWxlbWVudCgpOwogICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIC8vIGJhaWwgaWYgbm9uZSBmb3VuZAotICAgIGlmICghY3VyclJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWN1cnJlbnRSZW5kZXJlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gc2VhcmNoIHVwIHRoZSBET00gdHJl
ZSBmb3IgYW4gYW5jaG9yIGVsZW1lbnQKICAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhhdCBh
bnkgbm9uLWltYWdlIHdpdGggYW4gYW5jaG9yIGlzIGFuIEhUTUxBbmNob3JFbGVtZW50Ci0gICAg
Tm9kZSogbm9kZSA9IGN1cnJSZW5kZXJlci0+bm9kZSgpOwotICAgIGZvciAoIDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGN1cnJlbnRS
ZW5kZXJlci0+bm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAg
ICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpIHx8IChub2RlLT5yZW5kZXJlcigp
ICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5kZXJlcigpKS0+aXNBbmNob3IoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgfQpAQCAtMTY3
NywxNCArMTY3MywxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVl
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgICAgICByZXR1cm47CiAgICAgRWxlbWVudCYgZWxl
bWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpOwogCi0gICAgaWYg
KCFtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3hN
b2RlbE9iamVjdD4oKm1fcmVuZGVyZXIpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVy
KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJC
b3hNb2RlbE9iamVjdD4oKm1fcmVuZGVyZXIpOwogCiAgICAgLy8gRklYTUU6IERvIHdlIHdhbnQg
dG8gZG8gYW55dGhpbmcgaGVyZSBmb3IgQVJJQSB0ZXh0Ym94ZXM/Ci0gICAgaWYgKHJlbmRlcmVy
LT5pc1RleHRGaWVsZCgpICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlm
IChyZW5kZXJlci5pc1RleHRGaWVsZCgpICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQp
KQogICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KS5zZXRWYWx1ZShz
dHJpbmcpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHRBcmVhKCkgJiYgaXM8SFRNTFRl
eHRBcmVhRWxlbWVudD4oZWxlbWVudCkpCisgICAgZWxzZSBpZiAocmVuZGVyZXIuaXNUZXh0QXJl
YSgpICYmIGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICBkb3duY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KS5zZXRWYWx1ZShzdHJpbmcpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9u
cy5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1t
CmluZGV4IGM1NWRiMDE3NzMyYmExMDgwMDBkMTI4YmZhYjU1NTRiM2JlOWRkNTguLjcyYTkyYzEz
NGE4NjE4OWMyYTdjZjQ0MTI2MzEzODVmNTFiYjk3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCkBAIC0yMDcsMTcgKzIwNywx
NyBAQCAtIChOU0FycmF5ICopYm9yZGVyUmFkaWkKIAogLSAoQk9PTCljb250YWluc09ubHlJbmxp
bmVPYmplY3RzCiB7Ci0gICAgUmVuZGVyT2JqZWN0ICogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5y
ZW5kZXJlcigpOwotICAgIHJldHVybiAgKHJlbmRlcmVyICYmCi0gICAgICAgICAgICAgcmVuZGVy
ZXItPmNoaWxkcmVuSW5saW5lKCkgJiYKLSAgICAgICAgICAgICAocmVuZGVyZXItPmlzUmVuZGVy
QmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVh
dGlvbigpID09IG5pbCkgJiYKLSAgICAgICAgICAgICAhcmVuZGVyZXItPmlzVGFibGUoKSk7Cisg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CisgICAg
cmV0dXJuIHJlbmRlcmVyCisgICAgICAgICYmIHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpCisg
ICAgICAgICYmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgPT0gbmlsKQorICAg
ICAgICAmJiAhcmVuZGVyZXItPmlzVGFibGUoKTsKIH0KIAogLSAoQk9PTClpc1NlbGVjdGFibGVC
bG9jawogewotICAgIFJlbmRlck9iamVjdCAqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVy
ZXIoKTsKLSAgICByZXR1cm4gKHJlbmRlcmVyICYmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zs
b3coKSB8fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKHJlbmRl
cmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpICE9IG5pbCkpKTsKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVu
ZGVyZXIgJiYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSB8fCAoaXM8UmVuZGVyQmxv
Y2s+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5l
RWxlbWVudENvbnRpbnVhdGlvbigpICE9IG5pbCkpOwogfQogCiAtIChET01SYW5nZSAqKXJhbmdl
T2ZDb250YWluaW5nUGFyYWdyYXBoCkBAIC0zNDQsMTIgKzM0NCwxMiBAQCAtIChpbnQpc3RydWN0
dXJhbENvbXBsZXhpdHlDb250cmlidXRpb24KICAgICAgICAgICAgIHJlc3VsdCA9IElOVF9NQVg7
CiAgICAgICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
cmVzdWx0ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zs
b3coKSB8fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKHJlbmRl
cmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpICE9IDApKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpIHx8IChpczxSZW5kZXJCbG9jaz4o
KnJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCkpKSB7CiAgICAgICAgICAgICBCT09MIG5vQ29zdCA9IE5POwotICAg
ICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVy
Qm94ICZhc0JveCA9IHJlbmRlcmVyLT5lbmNsb3NpbmdCb3goKTsKLSAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QgKnBhcmVudCA9IGFzQm94LnBhcmVudCgpOwotICAgICAgICAgICAgICAgIFJl
bmRlckJveCAqcGFyZW50UmVuZGVyQm94ID0gKHBhcmVudCAmJiBwYXJlbnQtPmlzQm94KCkpID8g
dG9SZW5kZXJCb3gocGFyZW50KSA6IDA7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94Pigq
cmVuZGVyZXIpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94JiBhc0JveCA9IHJlbmRlcmVy
LT5lbmNsb3NpbmdCb3goKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9
IGFzQm94LnBhcmVudCgpOworICAgICAgICAgICAgICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVy
Qm94ID0gaXM8UmVuZGVyQm94PihwYXJlbnQpID8gZG93bmNhc3Q8UmVuZGVyQm94PihwYXJlbnQp
IDogbnVsbHB0cjsKICAgICAgICAgICAgICAgICBpZiAocGFyZW50UmVuZGVyQm94ICYmIGFzQm94
LndpZHRoKCkgPT0gcGFyZW50UmVuZGVyQm94LT53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIG5vQ29zdCA9IFlFUzsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGNlNWVlNmU0ZWU3
Y2NjYzJjYjQ4YmNkYzliZmEyZTFhOTA4YmMwODcuLmRhMjNkMTNkYTZlYTQ2OTkwOTE0OTc1Y2E1
N2JmNGEyZWMwZjZjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBzdGF0aWMgUGFzc1Jl
ZjxDU1NWYWx1ZT4gdmFsdWVGb3JHcmlkVHJhY2tMaXN0KEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBkaXJlY3RpbwogewogICAgIGNvbnN0IFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXpl
cyA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gc3R5bGUtPmdyaWRDb2x1bW5zKCkgOiBzdHls
ZS0+Z3JpZFJvd3MoKTsKICAgICBjb25zdCBPcmRlcmVkTmFtZWRHcmlkTGluZXNNYXAmIG9yZGVy
ZWROYW1lZEdyaWRMaW5lcyA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gc3R5bGUtPm9yZGVy
ZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUtPm9yZGVyZWROYW1lZEdyaWRSb3dMaW5l
cygpOwotICAgIGJvb2wgaXNSZW5kZXJHcmlkID0gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzUmVu
ZGVyR3JpZCgpOworICAgIGJvb2wgaXNSZW5kZXJHcmlkID0gaXM8UmVuZGVyR3JpZD4ocmVuZGVy
ZXIpOwogCiAgICAgLy8gSGFuZGxlIHRoZSAnbm9uZScgY2FzZS4KICAgICBib29sIHRyYWNrTGlz
dElzRW1wdHkgPSB0cmFja1NpemVzLmlzRW1wdHkoKTsKQEAgLTEwMTUsNyArMTAxNSw3IEBAIHN0
YXRpYyBQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3QoR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGRpcmVjdGlvCiAgICAgICAgIC8vIEZvciBncmlkcyB3ZSBzaG91bGQgY29u
c2lkZXIgZXZlcnkgbGlzdGVkIHRyYWNrLCB3aGV0aGVyIGltcGxpY2l0bHkgb3IgZXhwbGljaXRs
eSBjcmVhdGVkLiBJZiB3ZSBkb24ndCBoYXZlCiAgICAgICAgIC8vIGFueSBleHBsaWNpdCB0cmFj
ayBhbmQgdGhlcmUgYXJlIG5vIGNoaWxkcmVuIHRoZW4gdGhlcmUgYXJlIG5vIGltcGxpY2l0IHRy
YWNrcy4gV2UgY2Fubm90IHNpbXBseSBjaGVjayB0aGUKICAgICAgICAgLy8gbnVtYmVyIG9mIHJv
d3MvY29sdW1ucyBpbiBvdXIgaW50ZXJuYWwgZ3JpZCByZXByZXNlbnRhdGlvbiBiZWNhdXNlIGl0
J3MgYWx3YXlzIGF0IGxlYXN0IDF4MSAoc2VlIHIxNDMzMzEpLgotICAgICAgICB0cmFja0xpc3RJ
c0VtcHR5ID0gIXRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5maXJzdENoaWxkKCk7CisgICAgICAg
IHRyYWNrTGlzdElzRW1wdHkgPSAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuZmly
c3RDaGlsZCgpOwogICAgIH0KIAogICAgIGlmICh0cmFja0xpc3RJc0VtcHR5KSB7CkBAIC0xMDI1
LDcgKzEwMjUsNyBAQCBzdGF0aWMgUGFzc1JlZjxDU1NWYWx1ZT4gdmFsdWVGb3JHcmlkVHJhY2tM
aXN0KEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3RpbwogCiAgICAgYXV0byBsaXN0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGlmIChpc1JlbmRlckdy
aWQpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiB0cmFja1Bvc2l0aW9ucyA9
IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gdG9SZW5kZXJHcmlkKHJlbmRlcmVyKS0+Y29sdW1u
UG9zaXRpb25zKCkgOiB0b1JlbmRlckdyaWQocmVuZGVyZXIpLT5yb3dQb3NpdGlvbnMoKTsKKyAg
ICAgICAgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiB0cmFja1Bvc2l0aW9ucyA9IGRpcmVjdGlv
biA9PSBGb3JDb2x1bW5zID8gZG93bmNhc3Q8UmVuZGVyR3JpZD4oKnJlbmRlcmVyKS5jb2x1bW5Q
b3NpdGlvbnMoKSA6IGRvd25jYXN0PFJlbmRlckdyaWQ+KCpyZW5kZXJlcikucm93UG9zaXRpb25z
KCk7CiAgICAgICAgIC8vIFRoZXJlIGFyZSBhdCBsZWFzdCAjdHJhY2tzICsgMSBncmlkIGxpbmVz
ICh0cmFja1Bvc2l0aW9ucykuIEFwYXJ0IGZyb20gdGhhdCwgdGhlIGdyaWQgY29udGFpbmVyIGNh
biBnZW5lcmF0ZSBpbXBsaWNpdCBncmlkIHRyYWNrcywKICAgICAgICAgLy8gc28gd2UnbGwgaGF2
ZSBtb3JlIHRyYWNrUG9zaXRpb25zIHRoYW4gdHJhY2tTaXplcyBhcyB0aGUgbGF0dGVyIG9ubHkg
Y29udGFpbiB0aGUgZXhwbGljaXQgZ3JpZC4KICAgICAgICAgQVNTRVJUKHRyYWNrUG9zaXRpb25z
LnNpemUoKSAtIDEgPj0gdHJhY2tTaXplcy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAzNDY0YzI3NTUyOTQ2ZWQyOTg4
NzI5Yjc1ZjBmOGJkMzQ5MjhmZmJiLi41ODQ5NDhhMzk1NDFhNWUwYjc5NjUzYTVlYWQ4MDA3ODY5
N2FhOTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcApAQCAtNTUsMTAgKzU1LDEwIEBACiAjaW5jbHVkZSAiUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2Nr
Rmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCi0j
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVk
ZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIlNldE5vZGVBdHRyaWJ1dGVDb21tYW5k
LmgiCiAjaW5jbHVkZSAiU3BsaXRFbGVtZW50Q29tbWFuZC5oIgpAQCAtOTI5LDIxICs5MjksMjEg
QEAgUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0QmxvY2tQbGFj
ZWhvbGRlcihjb25zdCBQb3NpdGlvbiYgcG8KIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OmFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChFbGVtZW50KiBjb250YWluZXIp
CiB7CiAgICAgaWYgKCFjb250YWluZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29udGFpbmVyLT5y
ZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1JlbmRlckJsb2Nr
RmxvdygpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4o
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBhcHBlbmQg
dGhlIHBsYWNlaG9sZGVyIHRvIG1ha2Ugc3VyZSBpdCBmb2xsb3dzCiAgICAgLy8gYW55IHVucmVu
ZGVyZWQgYmxvY2tzCi0gICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5k
ZXJlcik7Ci0gICAgaWYgKGJsb2NrLT5oZWlnaHQoKSA9PSAwIHx8IChibG9jay0+aXNMaXN0SXRl
bSgpICYmIGJsb2NrLT5pc0VtcHR5KCkpKQorICAgIFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpOworICAgIGlmICghYmxvY2tG
bG93LmhlaWdodCgpIHx8IChibG9ja0Zsb3cuaXNMaXN0SXRlbSgpICYmIGJsb2NrRmxvdy5pc0Vt
cHR5KCkpKQogICAgICAgICByZXR1cm4gYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihjb250YWluZXIp
OwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIC8vIEFzc3VtZXMg
dGhhdCB0aGUgcG9zaXRpb24gaXMgYXQgYSBwbGFjZWhvbGRlciBhbmQgZG9lcyB0aGUgcmVtb3Zh
bCB3aXRob3V0IG11Y2ggY2hlY2tpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKaW5kZXggNzI1YTgwMmM3NzY2ZTM3ODk2ODBmOTRiODI1M2I4ZGI1ZDU0M2FhNy4uNmJl
OTcyM2NiZGQxYTU1NjdjYWE0MDRiODlkZGE4ZjhmMmUyMmI1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtOTYzLDcgKzk2Myw3IEBAIGJvb2wgVGV4dEl0ZXJh
dG9yOjpzaG91bGRSZXByZXNlbnROb2RlT2Zmc2V0WmVybygpCiAgICAgLy8gQWRkaXRpb25hbGx5
LCBpZiB0aGUgcmFuZ2Ugd2UgYXJlIGl0ZXJhdGluZyBvdmVyIGNvbnRhaW5zIGh1Z2Ugc2VjdGlv
bnMgb2YgdW5yZW5kZXJlZCBjb250ZW50LCAKICAgICAvLyB3ZSB3b3VsZCBjcmVhdGUgVmlzaWJs
ZVBvc2l0aW9ucyBvbiBldmVyeSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2l0aG91dCB0aGlzIGNo
ZWNrLgogICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcigpIHx8IG1fbm9kZS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRQotICAgICAgICB8fCAobV9ub2RlLT5yZW5k
ZXJlcigpLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICF0b1JlbmRlckJsb2NrKG1fbm9kZS0+cmVu
ZGVyZXIoKSktPmhlaWdodCgpICYmICFtX25vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpKQorICAg
ICAgICB8fCAoaXM8UmVuZGVyQmxvY2tGbG93PigqbV9ub2RlLT5yZW5kZXJlcigpKSAmJiAhZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqbV9ub2RlLT5yZW5kZXJlcigpKS5oZWlnaHQoKSAmJiAh
aXM8SFRNTEJvZHlFbGVtZW50PigqbV9ub2RlKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIFRoZSBzdGFydFBvcy5pc05vdE51bGwoKSBjaGVjayBpcyBuZWVkZWQgYmVjYXVzZSB0
aGUgc3RhcnQgY291bGQgYmUgYmVmb3JlIHRoZSBib2R5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQppbmRleCBkZDk0M2ViNDQwZDQxNjI4YzY1NTdlMjkzMzFiNDJiNWEzMjUzMTE0Li4y
YWM0Y2ZkYzMzOTE4NmQ3OGM2YWQ5NGVjOTFiMmQwZTc5ZTM5ZWQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2lvcy9GcmFtZUlPUy5tbQpAQCAtNTUyLDExICs1NTIsMTEgQEAgaW50IEZyYW1lOjpwcmVmZXJy
ZWRIZWlnaHQoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBib2R5LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRl
cmVyLT5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVy
QmxvY2socmVuZGVyZXIpOwotICAgIHJldHVybiBibG9jay0+aGVpZ2h0KCkgKyBibG9jay0+bWFy
Z2luVG9wKCkgKyBibG9jay0+bWFyZ2luQm90dG9tKCk7CisgICAgUmVuZGVyQmxvY2smIGJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcik7CisgICAgcmV0dXJuIGJsb2NrLmhl
aWdodCgpICsgYmxvY2subWFyZ2luVG9wKCkgKyBibG9jay5tYXJnaW5Cb3R0b20oKTsKIH0KIAog
aW50IEZyYW1lOjppbm5lckxpbmVIZWlnaHQoRE9NTm9kZSogZG9tTm9kZSkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2Fj
aGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENh
Y2hlcy5oCmluZGV4IGZlYzUyZjdiMTQ0ODBkMzFhNGZhOWFjMjRmMmRjZDQ2ZjA2Zjg4NTYuLjU5
ODM5ZTZiZWI1YWQzY2RkYzM3ZmNhMDk3YmJkNDI2Njg4MmE4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaApA
QCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxv
Y2tGb3JGaXhlZFBvc2l0aW9uKFJlbmRlckVsZW1lbnQqIHBhcmVudAogICAgIHdoaWxlIChvYmpl
Y3QgJiYgIW9iamVjdC0+Y2FuQ29udGFpbkZpeGVkUG9zaXRpb25PYmplY3RzKCkpCiAgICAgICAg
IG9iamVjdCA9IG9iamVjdC0+cGFyZW50KCk7CiAgICAgQVNTRVJUKCFvYmplY3QgfHwgIW9iamVj
dC0+aXNBbm9ueW1vdXNCbG9jaygpKTsKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvYmplY3Qp
OworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4ob2JqZWN0KTsKIH0KIAogc3RhdGlj
IGlubGluZSBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yQWJzb2x1dGVQb3NpdGlvbihS
ZW5kZXJFbGVtZW50KiBwYXJlbnQpCkBAIC01NywxMyArNTcsMTMgQEAgc3RhdGljIGlubGluZSBS
ZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yQWJzb2x1dGVQb3NpdGlvbihSZW5kZXJFbGVt
ZW50KiBwYXIKICAgICAvLyBub3QgdGhlIGlubGluZSBpdHNlbGYsIHRvIGF2b2lkIGhhdmluZyBh
IHBvc2l0aW9uZWQgb2JqZWN0cyBsaXN0IGluIGFsbCBSZW5kZXJJbmxpbmVzCiAgICAgLy8gYW5k
IHVzZSBSZW5kZXJCbG9jayogYXMgUmVuZGVyRWxlbWVudDo6Y29udGFpbmluZ0Jsb2NrJ3MgcmV0
dXJuIHR5cGUuCiAgICAgLy8gVXNlIFJlbmRlckJsb2NrOjpjb250YWluZXIoKSB0byBvYnRhaW4g
dGhlIGlubGluZS4KLSAgICBpZiAob2JqZWN0ICYmICFvYmplY3QtPmlzUmVuZGVyQmxvY2soKSkK
KyAgICBpZiAob2JqZWN0ICYmICFpczxSZW5kZXJCbG9jaz4oKm9iamVjdCkpCiAgICAgICAgIG9i
amVjdCA9IG9iamVjdC0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICB3aGlsZSAob2JqZWN0ICYm
IG9iamVjdC0+aXNBbm9ueW1vdXNCbG9jaygpKQogICAgICAgICBvYmplY3QgPSBvYmplY3QtPmNv
bnRhaW5pbmdCbG9jaygpOwogCi0gICAgcmV0dXJuIHRvUmVuZGVyQmxvY2sob2JqZWN0KTsKKyAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KG9iamVjdCk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9ja0Zvck9iamVjdEluRmxvdyhSZW5kZXJFbGVt
ZW50KiBwYXJlbnQpCkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sq
IGNvbnRhaW5pbmdCbG9ja0Zvck9iamVjdEluRmxvdyhSZW5kZXJFbGVtZW50KiBwYXJlbnQpCiAg
ICAgUmVuZGVyRWxlbWVudCogb2JqZWN0ID0gcGFyZW50OwogICAgIHdoaWxlIChvYmplY3QgJiYg
aXNOb25SZW5kZXJCbG9ja0lubGluZSgqb2JqZWN0KSkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0
LT5wYXJlbnQoKTsKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvYmplY3QpOworICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJCbG9jaz4ob2JqZWN0KTsKIH0KIAogY2xhc3MgTG9naWNhbFNlbGVj
dGlvbk9mZnNldENhY2hlcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAppbmRleCBlMTJlYmI1MzAxMjQ4ZjlkNTM0YjAzZGM0YWI2N2FlOTIyZTAwMDBmLi4yMzdlMzU4
NjlkYmI1Zjc5M2I5MDI0YzNlMjMwN2Y4NTcxMWQ3ZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTI3MiwxNyArMjcyLDE3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUmIG5ld1N0CiAgICAgICAgIGVsc2UgaWYgKG9sZFN0eWxlLT5wb3NpdGlvbigpID09IFN0YXRp
Y1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICAvLyBSZW1vdmUgb3VyIGFic29sdXRlbHkgcG9zaXRp
b25lZCBkZXNjZW5kYW50cyBmcm9tIHRoZWlyIGN1cnJlbnQgY29udGFpbmluZyBibG9jay4KICAg
ICAgICAgICAgIC8vIFRoZXkgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIG91ciBwb3NpdGlvbmVkIG9i
amVjdHMgbGlzdCBkdXJpbmcgbGF5b3V0LgotICAgICAgICAgICAgYXV0byBjYiA9IHBhcmVudCgp
OwotICAgICAgICAgICAgd2hpbGUgKGNiICYmIChjYi0+c3R5bGUoKS5wb3NpdGlvbigpID09IFN0
YXRpY1Bvc2l0aW9uIHx8IChjYi0+aXNJbmxpbmUoKSAmJiAhY2ItPmlzUmVwbGFjZWQoKSkpICYm
ICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ItPnN0eWxlKCku
cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGNiLT5pc0lubGluZSgpICYmICFjYi0+
aXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5pbmdC
bG9jaygpOworICAgICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2sgPSBwYXJlbnQoKTsKKyAg
ICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYgKGNvbnRhaW5pbmdCbG9jay0+c3R5
bGUoKS5wb3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uIHx8IChjb250YWluaW5nQmxvY2stPmlz
SW5saW5lKCkgJiYgIWNvbnRhaW5pbmdCbG9jay0+aXNSZXBsYWNlZCgpKSkgJiYgIWNvbnRhaW5p
bmdCbG9jay0+aXNSZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGFpbmlu
Z0Jsb2NrLT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBjb250YWlu
aW5nQmxvY2stPmlzSW5saW5lKCkgJiYgIWNvbnRhaW5pbmdCbG9jay0+aXNSZXBsYWNlZCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+
Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYiA9IGNiLT5wYXJlbnQoKTsKKyAgICAgICAgICAg
ICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPnBhcmVudCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2ItPmlzUmVuZGVyQmxvY2so
KSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNiKS0+cmVtb3ZlUG9zaXRpb25lZE9i
amVjdHModGhpcywgTmV3Q29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KCpjb250YWluaW5nQmxvY2spLnJlbW92ZVBvc2l0aW9uZWRPYmplY3RzKHRoaXMs
IE5ld0NvbnRhaW5pbmdCbG9jayk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzMiwxOSArMzMy
LDE5IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3JlKFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQpCiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxk
LT5wYXJlbnQoKSA9PSB0aGlzKQogICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIFJlbmRlckJs
b2NrKiBjdXJyID0gdG9SZW5kZXJCbG9jayhjb250aW51YXRpb24oKSk7CisgICAgUmVuZGVyQmxv
Y2sqIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGludWF0aW9uKCkpOwogICAg
IFJlbmRlckJsb2NrKiBuZXh0VG9MYXN0ID0gdGhpczsKICAgICBSZW5kZXJCbG9jayogbGFzdCA9
IHRoaXM7Ci0gICAgd2hpbGUgKGN1cnIpIHsKLSAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSA9PSBjdXJyKSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+Zmly
c3RDaGlsZCgpID09IGJlZm9yZUNoaWxkKQorICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAg
IGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gY3VycmVudCkgewor
ICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSBiZWZvcmVDaGlsZCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgICAgIHJldHVybiBjdXJyOworICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBuZXh0VG9MYXN0
ID0gbGFzdDsKLSAgICAgICAgbGFzdCA9IGN1cnI7Ci0gICAgICAgIGN1cnIgPSB0b1JlbmRlckJs
b2NrKGN1cnItPmNvbnRpbnVhdGlvbigpKTsKKyAgICAgICAgbGFzdCA9IGN1cnJlbnQ7CisgICAg
ICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY3VycmVudC0+Y29udGludWF0aW9u
KCkpOwogICAgIH0KIAogICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQo
KSkKQEAgLTQ0MSwxNiArNDQxLDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNwbGl0QmxvY2tzKFJl
bmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLAogICAgIC8vIFdlIGhh
dmUgYmVlbiByZXBhcmVudGVkIGFuZCBhcmUgbm93IHVuZGVyIHRoZSBmcm9tQmxvY2suICBXZSBu
ZWVkCiAgICAgLy8gdG8gd2FsayB1cCBvdXIgYmxvY2sgcGFyZW50IGNoYWluIHVudGlsIHdlIGhp
dCB0aGUgY29udGFpbmluZyBhbm9ueW1vdXMgY29sdW1ucyBibG9jay4KICAgICAvLyBPbmNlIHdl
IGhpdCB0aGUgYW5vbnltb3VzIGNvbHVtbnMgYmxvY2sgd2UncmUgZG9uZS4KLSAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogY3VyciA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocGFyZW50KCkpOwor
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9k
ZWxPYmplY3Q+KHBhcmVudCgpKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3VyckNoaWxk
ID0gdGhpczsKICAgICBSZW5kZXJPYmplY3QqIGN1cnJDaGlsZE5leHRTaWJsaW5nID0gY3VyckNo
aWxkLT5uZXh0U2libGluZygpOwogCi0gICAgd2hpbGUgKGN1cnIgJiYgY3Vyci0+aXNEZXNjZW5k
YW50T2YoZnJvbUJsb2NrKSAmJiBjdXJyICE9IGZyb21CbG9jaykgewotICAgICAgICBSZW5kZXJC
bG9jayogYmxvY2tDdXJyID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKKyAgICB3aGlsZSAoY3VycmVu
dCAmJiBjdXJyZW50LT5pc0Rlc2NlbmRhbnRPZihmcm9tQmxvY2spICYmIGN1cnJlbnQgIT0gZnJv
bUJsb2NrKSB7CisgICAgICAgIFJlbmRlckJsb2NrJiBjdXJyZW50QmxvY2sgPSBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKmN1cnJlbnQpOwogICAgICAgICAKICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3
IGNsb25lLgogICAgICAgICBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IGNsb25lQ2hpbGQgPSBXVEY6
Om1vdmUoY2xvbmVCbG9jayk7Ci0gICAgICAgIGNsb25lQmxvY2sgPSBibG9ja0N1cnItPmNsb25l
KCk7CisgICAgICAgIGNsb25lQmxvY2sgPSBjdXJyZW50QmxvY2suY2xvbmUoKTsKIAogICAgICAg
ICAvLyBJbnNlcnQgb3VyIGNoaWxkIGNsb25lIGFzIHRoZSBmaXJzdCBjaGlsZC4KICAgICAgICAg
Y2xvbmVCbG9jay0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihjbG9uZUNoaWxkLmxlYWtQ
dHIoKSwgMCk7CkBAIC00NTksMjAgKzQ1OSwyMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpzcGxpdEJs
b2NrcyhSZW5kZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJCbG9jayogdG9CbG9jaywKICAgICAg
ICAgLy8gYW5vbnltb3VzIGJsb2NrcyBwb3NzaWJseSBhcyB3ZSB3YWxrIHVwIHRoZSBibG9jayBj
aGFpbi4gIFdoZW4gd2Ugc3BsaXQgYW4KICAgICAgICAgLy8gYW5vbnltb3VzIGJsb2NrLCB0aGVy
ZSdzIG5vIG5lZWQgdG8gZG8gYW55IGNvbnRpbnVhdGlvbiBob29rdXAsIHNpbmNlIHdlIGhhdmVu
J3QKICAgICAgICAgLy8gYWN0dWFsbHkgc3BsaXQgYSByZWFsIGVsZW1lbnQuCi0gICAgICAgIGlm
ICghYmxvY2tDdXJyLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIG9sZENvbnQg
PSBibG9ja0N1cnItPmNvbnRpbnVhdGlvbigpOwotICAgICAgICAgICAgYmxvY2tDdXJyLT5zZXRD
b250aW51YXRpb24oY2xvbmVCbG9jay5nZXQoKSk7CisgICAgICAgIGlmICghY3VycmVudEJsb2Nr
LmlzQW5vbnltb3VzQmxvY2soKSkgeworICAgICAgICAgICAgb2xkQ29udCA9IGN1cnJlbnRCbG9j
ay5jb250aW51YXRpb24oKTsKKyAgICAgICAgICAgIGN1cnJlbnRCbG9jay5zZXRDb250aW51YXRp
b24oY2xvbmVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICBjbG9uZUJsb2NrLT5zZXRDb250aW51
YXRpb24ob2xkQ29udCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byB0
YWtlIGFsbCBvZiB0aGUgY2hpbGRyZW4gc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY2hpbGQKICAg
ICAgICAgLy8gKmFmdGVyKiBjdXJyQ2hpbGQgYW5kIGFwcGVuZCB0aGVtIGFsbCB0byB0aGUgY2xv
bmUuCi0gICAgICAgIGJsb2NrQ3Vyci0+bW92ZUNoaWxkcmVuVG8oY2xvbmVCbG9jay5nZXQoKSwg
Y3VyckNoaWxkTmV4dFNpYmxpbmcsIDAsIHRydWUpOworICAgICAgICBjdXJyZW50QmxvY2subW92
ZUNoaWxkcmVuVG8oY2xvbmVCbG9jay5nZXQoKSwgY3VyckNoaWxkTmV4dFNpYmxpbmcsIDAsIHRy
dWUpOwogCiAgICAgICAgIC8vIEtlZXAgd2Fsa2luZyB1cCB0aGUgY2hhaW4uCi0gICAgICAgIGN1
cnJDaGlsZCA9IGN1cnI7CisgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJlbnQ7CiAgICAgICAgIGN1
cnJDaGlsZE5leHRTaWJsaW5nID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICBj
dXJyID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjdXJyLT5wYXJlbnQoKSk7CisgICAgICAgIGN1
cnJlbnQgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1cnJlbnQtPnBhcmVudCgpKTsKICAgICB9
CiAKICAgICAvLyBOb3cgd2UgYXJlIGF0IHRoZSBjb2x1bW5zIGJsb2NrIGxldmVsLiBXZSBuZWVk
IHRvIHB1dCB0aGUgY2xvbmUgaW50byB0aGUgdG9CbG9jay4KQEAgLTU1OSw3ICs1NTksNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iagogICAgICAgICBSZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQg
PSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IGxhc3RDaGls
ZCgpOwogCiAgICAgICAgIGlmIChhZnRlckNoaWxkICYmIGFmdGVyQ2hpbGQtPmlzQW5vbnltb3Vz
QmxvY2soKSkgewotICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhhZnRlckNoaWxkKS0+YWRkQ2hp
bGQobmV3Q2hpbGQpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCphZnRlckNo
aWxkKS5hZGRDaGlsZChuZXdDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtNTc2LDggKzU3Niw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqCiAKICAgICBSZW5k
ZXJCb3g6OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CiAgCi0gICAgaWYgKG1hZGVC
b3hlc05vbklubGluZSAmJiBwYXJlbnQoKSAmJiBpc0Fub255bW91c0Jsb2NrKCkgJiYgcGFyZW50
KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPnJl
bW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CisgICAgaWYgKG1hZGVCb3hlc05vbklu
bGluZSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpICYmIGlzQW5vbnltb3VzQmxvY2soKSkK
KyAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkucmVtb3ZlTGVmdG92ZXJB
bm9ueW1vdXNCbG9jayh0aGlzKTsKICAgICAvLyB0aGlzIG9iamVjdCBtYXkgYmUgZGVhZCBoZXJl
CiB9CiAKQEAgLTcyMiwxMSArNzIyLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUxlZnRv
dmVyQW5vbnltb3VzQmxvY2soUmVuZGVyQmxvY2sqIGNoaWxkKQogICAgIGNoaWxkLT5kZXN0cm95
KCk7CiB9CiAKLXN0YXRpYyBib29sIGNhbk1lcmdlQW5vbnltb3VzQmxvY2soUmVuZGVyQmxvY2sq
IGFub255bW91c0Jsb2NrKQorc3RhdGljIGJvb2wgY2FuTWVyZ2VBbm9ueW1vdXNCbG9jayhSZW5k
ZXJCbG9jayYgYW5vbnltb3VzQmxvY2spCiB7Ci0gICAgaWYgKGFub255bW91c0Jsb2NrLT5iZWlu
Z0Rlc3Ryb3llZCgpIHx8IGFub255bW91c0Jsb2NrLT5jb250aW51YXRpb24oKSkKKyAgICBpZiAo
YW5vbnltb3VzQmxvY2suYmVpbmdEZXN0cm95ZWQoKSB8fCBhbm9ueW1vdXNCbG9jay5jb250aW51
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhbm9ueW1vdXNCbG9jay0+
aXNSdWJ5UnVuKCkgfHwgYW5vbnltb3VzQmxvY2stPmlzUnVieUJhc2UoKSkKKyAgICBpZiAoYW5v
bnltb3VzQmxvY2suaXNSdWJ5UnVuKCkgfHwgYW5vbnltb3VzQmxvY2suaXNSdWJ5QmFzZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03MzksMjQgKzcz
OSwyNCBAQCBzdGF0aWMgYm9vbCBjYW5NZXJnZUNvbnRpZ3VvdXNBbm9ueW1vdXNCbG9ja3MoUmVu
ZGVyT2JqZWN0JiBvbGRDaGlsZCwgUmVuZGVyT2JqZQogICAgIGlmIChwcmV2aW91cykgewogICAg
ICAgICBpZiAoIXByZXZpb3VzLT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBwcmV2aW91c0Fub255bW91c0Jsb2NrID0g
dG9SZW5kZXJCbG9jayhwcmV2aW91cyk7CisgICAgICAgIFJlbmRlckJsb2NrJiBwcmV2aW91c0Fu
b255bW91c0Jsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwcmV2aW91cyk7CiAgICAgICAg
IGlmICghY2FuTWVyZ2VBbm9ueW1vdXNCbG9jayhwcmV2aW91c0Fub255bW91c0Jsb2NrKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKG5leHQpIHsKICAgICAgICAg
aWYgKCFuZXh0LT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIFJlbmRlckJsb2NrKiBuZXh0QW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2Nr
KG5leHQpOworICAgICAgICBSZW5kZXJCbG9jayYgbmV4dEFub255bW91c0Jsb2NrID0gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KCpuZXh0KTsKICAgICAgICAgaWYgKCFjYW5NZXJnZUFub255bW91c0Js
b2NrKG5leHRBbm9ueW1vdXNCbG9jaykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZUFub255
bW91c0JveENoaWxkKFJlbmRlckJsb2NrKiBwYXJlbnQsIFJlbmRlckJsb2NrKiBjaGlsZCkKK3Zv
aWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2smIHBh
cmVudCwgUmVuZGVyQmxvY2sqIGNoaWxkKQogewotICAgIHBhcmVudC0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgcGFyZW50LT5zZXRDaGlsZHJlbklubGluZShjaGls
ZC0+Y2hpbGRyZW5JbmxpbmUoKSk7CisgICAgcGFyZW50LnNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpOworICAgIHBhcmVudC5zZXRDaGlsZHJlbklubGluZShjaGlsZC0+Y2hpbGRy
ZW5JbmxpbmUoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGNoaWxkLT5uZXh0
U2libGluZygpOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogY2hpbGRGbG93VGhyZWFkID0gY2hp
bGQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTc2NCw4ICs3NjQsOCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpjb2xsYXBzZUFub255bW91c0JveENoaWxkKFJlbmRlckJsb2NrKiBwYXJl
bnQsIFJlbmRlckJsb2NrKiBjaAogICAgIGlmIChjaGlsZEZsb3dUaHJlYWQgJiYgY2hpbGRGbG93
VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQogICAgICAgICB0b1JlbmRlck5hbWVk
Rmxvd1RocmVhZChjaGlsZEZsb3dUaHJlYWQpLT5yZW1vdmVGbG93Q2hpbGRJbmZvKGNoaWxkKTsK
IAotICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY2hpbGQsIGNoaWxkLT5oYXNMYXll
cigpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4pOwotICAgIGNoaWxkLT5t
b3ZlQWxsQ2hpbGRyZW5UbyhwYXJlbnQsIG5leHRTaWJsaW5nLCBjaGlsZC0+aGFzTGF5ZXIoKSk7
CisgICAgcGFyZW50LnJlbW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBjaGlsZC0+aGFzTGF5ZXIo
KSA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKKyAgICBjaGlsZC0+bW92
ZUFsbENoaWxkcmVuVG8oJnBhcmVudCwgbmV4dFNpYmxpbmcsIGNoaWxkLT5oYXNMYXllcigpKTsK
ICAgICAvLyBEZWxldGUgdGhlIG5vdy1lbXB0eSBibG9jaydzIGxpbmVzIGFuZCBudWtlIGl0Lgog
ICAgIGNoaWxkLT5kZWxldGVMaW5lcygpOwogICAgIGNoaWxkLT5kZXN0cm95KCk7CkBAIC03ODYs
OCArNzg2LDggQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZWN0JiBvbGRDaGlsZCkKICAgICBib29sIGNhbk1lcmdlQW5vbnltb3VzQmxvY2tzID0gY2Fu
TWVyZ2VDb250aWd1b3VzQW5vbnltb3VzQmxvY2tzKG9sZENoaWxkLCBwcmV2LCBuZXh0KTsKICAg
ICBpZiAoY2FuTWVyZ2VBbm9ueW1vdXNCbG9ja3MgJiYgcHJldiAmJiBuZXh0KSB7CiAgICAgICAg
IHByZXYtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBSZW5k
ZXJCbG9jayogbmV4dEJsb2NrID0gdG9SZW5kZXJCbG9jayhuZXh0KTsKLSAgICAgICAgUmVuZGVy
QmxvY2sqIHByZXZCbG9jayA9IHRvUmVuZGVyQmxvY2socHJldik7CisgICAgICAgIFJlbmRlckJs
b2NrKiBuZXh0QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4obmV4dCk7CisgICAgICAgIFJl
bmRlckJsb2NrKiBwcmV2QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocHJldik7CiAgICAg
ICAgCiAgICAgICAgIGlmIChwcmV2LT5jaGlsZHJlbklubGluZSgpICE9IG5leHQtPmNoaWxkcmVu
SW5saW5lKCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBpbmxpbmVDaGlsZHJlbkJsb2Nr
ID0gcHJldi0+Y2hpbGRyZW5JbmxpbmUoKSA/IHByZXZCbG9jayA6IG5leHRCbG9jazsKQEAgLTgz
NiwxNyArODM2LDE3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCYgb2xkQ2hpbGQpCiAgICAgICAgIC8vIFRoZSByZW1vdmFsIGhhcyBrbm9ja2Vk
IHVzIGRvd24gdG8gY29udGFpbmluZyBvbmx5IGEgc2luZ2xlIGFub255bW91cwogICAgICAgICAv
LyBib3guICBXZSBjYW4gZ28gYWhlYWQgYW5kIHB1bGwgdGhlIGNvbnRlbnQgcmlnaHQgYmFjayB1
cCBpbnRvIG91cgogICAgICAgICAvLyBib3guCi0gICAgICAgIGNvbGxhcHNlQW5vbnltb3VzQm94
Q2hpbGQodGhpcywgdG9SZW5kZXJCbG9jayhjaGlsZCkpOworICAgICAgICBjb2xsYXBzZUFub255
bW91c0JveENoaWxkKCp0aGlzLCBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpKTsKICAgICAg
ICAgbmV4dFNpYmxpbmcgPSBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoKChwcmV2ICYmIHByZXYt
PmlzQW5vbnltb3VzQmxvY2soKSkgfHwgKG5leHQgJiYgbmV4dC0+aXNBbm9ueW1vdXNCbG9jaygp
KSkgJiYgY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkpIHsKICAgICAgICAgLy8gSXQn
cyBwb3NzaWJsZSB0aGF0IHRoZSByZW1vdmFsIGhhcyBrbm9ja2VkIHVzIGRvd24gdG8gYSBzaW5n
bGUgYW5vbnltb3VzCiAgICAgICAgIC8vIGJsb2NrIHdpdGggcHNldWRvLXN0eWxlIGVsZW1lbnQg
c2libGluZ3MgKGUuZy4gZmlyc3QtbGV0dGVyKS4gSWYgdGhlc2UKICAgICAgICAgLy8gYXJlIGZs
b2F0aW5nLCB0aGVuIHdlIG5lZWQgdG8gcHVsbCB0aGUgY29udGVudCB1cCBhbHNvLgotICAgICAg
ICBSZW5kZXJCbG9jayogYW5vbkJsb2NrID0gdG9SZW5kZXJCbG9jaygocHJldiAmJiBwcmV2LT5p
c0Fub255bW91c0Jsb2NrKCkpID8gcHJldiA6IG5leHQpOworICAgICAgICBSZW5kZXJCbG9jayog
YW5vbkJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KChwcmV2ICYmIHByZXYtPmlzQW5vbnlt
b3VzQmxvY2soKSkgPyBwcmV2IDogbmV4dCk7CiAgICAgICAgIGlmICgoYW5vbkJsb2NrLT5wcmV2
aW91c1NpYmxpbmcoKSB8fCBhbm9uQmxvY2stPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAm
JiAoIWFub25CbG9jay0+cHJldmlvdXNTaWJsaW5nKCkgfHwgKGFub25CbG9jay0+cHJldmlvdXNT
aWJsaW5nKCktPnN0eWxlKCkuc3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8gJiYgYW5vbkJsb2NrLT5w
cmV2aW91c1NpYmxpbmcoKS0+aXNGbG9hdGluZygpICYmICFhbm9uQmxvY2stPnByZXZpb3VzU2li
bGluZygpLT5wcmV2aW91c1NpYmxpbmcoKSkpCiAgICAgICAgICAgICAmJiAoIWFub25CbG9jay0+
bmV4dFNpYmxpbmcoKSB8fCAoYW5vbkJsb2NrLT5uZXh0U2libGluZygpLT5zdHlsZSgpLnN0eWxl
VHlwZSgpICE9IE5PUFNFVURPICYmIGFub25CbG9jay0+bmV4dFNpYmxpbmcoKS0+aXNGbG9hdGlu
ZygpICYmICFhbm9uQmxvY2stPm5leHRTaWJsaW5nKCktPm5leHRTaWJsaW5nKCkpKSkgewotICAg
ICAgICAgICAgY29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCh0aGlzLCBhbm9uQmxvY2spOworICAg
ICAgICAgICAgY29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCgqdGhpcywgYW5vbkJsb2NrKTsKICAg
ICAgICAgICAgIG5leHRTaWJsaW5nID0gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KQEAgLTg2
NCwyMyArODY0LDIzIEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCYgb2xkQ2hpbGQpCiAgICAgICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0ln
bm9yaW5nQW5vbnltb3VzID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAo
Y29udGFpbmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMgJiYgY29udGFpbmluZ0Jsb2NrSWdub3Jp
bmdBbm9ueW1vdXMtPmlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAgICAgICAgICBjb250YWlu
aW5nQmxvY2tJZ25vcmluZ0Fub255bW91cyA9IGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5vbnlt
b3VzLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
dXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPnByZXZpb3VzSW5QcmVPcmRlcihjb250YWlu
aW5nQmxvY2tJZ25vcmluZ0Fub255bW91cykpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3Vyci0+
dmlydHVhbENvbnRpbnVhdGlvbigpICE9IHRoaXMpCisgICAgICAgICAgICBmb3IgKFJlbmRlck9i
amVjdCogY3VycmVudCA9IHRoaXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wcmV2aW91
c0luUHJlT3JkZXIoY29udGFpbmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGN1cnJlbnQtPnZpcnR1YWxDb250aW51YXRpb24oKSAhPSB0aGlzKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIC8vIEZvdW5kIG91
ciBwcmV2aW91cyBjb250aW51YXRpb24uIFdlIGp1c3QgbmVlZCB0byBwb2ludCBpdCB0bwogICAg
ICAgICAgICAgICAgIC8vIHx0aGlzfCdzIG5leHQgY29udGludWF0aW9uLgogICAgICAgICAgICAg
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9uID0gY29udGludWF0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHRvUmVuZGVySW5saW5lKGN1cnIpLT5zZXRDb250aW51YXRpb24obmV4dENv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJCbG9j
aygpKQotICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGN1cnIpLT5zZXRDb250aW51
YXRpb24obmV4dENvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlcklu
bGluZT4oKmN1cnJlbnQpKQorICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KCpjdXJyZW50KS5zZXRDb250aW51YXRpb24obmV4dENvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50KSkKKyAgICAgICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5zZXRDb250aW51YXRpb24o
bmV4dENvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc2V0Q29udGludWF0aW9uKDApOworICAgICAgICAgICAg
c2V0Q29udGludWF0aW9uKG51bGxwdHIpOwogICAgICAgICAgICAgZGVzdHJveSgpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTc0MSwxMSArMTc0MSwxMSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxv
Y2s6OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGN1cnJlbnRDb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKICAgICBpZiAo
IWN1cnJlbnRDb250aW51YXRpb24gfHwgY3VycmVudENvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyQmxvY2sqIG5leHRDb250aW51YXRpb24gPSB0
b1JlbmRlckJsb2NrKGN1cnJlbnRDb250aW51YXRpb24pOwotICAgIGlmIChuZXh0Q29udGludWF0
aW9uLT5pc0Fub255bW91c0Jsb2NrKCkpCi0gICAgICAgIHJldHVybiBuZXh0Q29udGludWF0aW9u
LT5ibG9ja0VsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICByZXR1cm4gbmV4dENvbnRpbnVhdGlv
bjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVuZGVyQmxvY2smIG5leHRDb250aW51
YXRpb24gPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRDb250aW51YXRpb24pOworICAg
IGlmIChuZXh0Q29udGludWF0aW9uLmlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgcmV0dXJu
IG5leHRDb250aW51YXRpb24uYmxvY2tFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgcmV0dXJu
ICZuZXh0Q29udGludWF0aW9uOwogfQogICAgIAogc3RhdGljIENvbnRpbnVhdGlvbk91dGxpbmVU
YWJsZU1hcCogY29udGludWF0aW9uT3V0bGluZVRhYmxlKCkKQEAgLTIwNDIsNyArMjA0Miw3IEBA
IEdhcFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJv
b3RCbG9jaywgY29uc3QgTGF5b3V0UG9pCiAgICAgICAgICAgICBsYXN0TG9naWNhbFJpZ2h0ID0g
bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+bG9naWNhbEJvdHRv
bSgpLCBjYWNoZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25O
b25lKSB7CiAgICAgICAgICAgICAvLyBXZSBtdXN0IGJlIGEgYmxvY2sgdGhhdCBoYXMgc29tZSBz
ZWxlY3RlZCBvYmplY3QgaW5zaWRlIGl0LiAgR28gYWhlYWQgYW5kIHJlY3VyLgotICAgICAgICAg
ICAgcmVzdWx0LnVuaXRlKHRvUmVuZGVyQmxvY2soY3VyciktPnNlbGVjdGlvbkdhcHMocm9vdEJs
b2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRTaXplKG9mZnNldEZyb21Sb290
QmxvY2sud2lkdGgoKSArIGN1cnItPngoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKSAr
IGN1cnItPnkoKSksIAorICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGRvd25jYXN0PFJlbmRlckJs
b2NrPigqY3Vycikuc2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9z
aXRpb24sIExheW91dFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+eCgp
LCBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgY3Vyci0+eSgpKSwKICAgICAgICAgICAg
ICAgICBsYXN0TG9naWNhbFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBj
aGlsZENhY2hlLCBwYWludEluZm8pKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxNjIsMjkgKzIx
NjIsMjkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zm
c2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIExheW8KIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9j
azo6YmxvY2tCZWZvcmVXaXRoaW5TZWxlY3Rpb25Sb290KExheW91dFNpemUmIG9mZnNldCkgY29u
c3QKIHsKICAgICBpZiAoaXNTZWxlY3Rpb25Sb290KCkpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IFJlbmRlckVsZW1lbnQqIG9iamVjdCA9
IHRoaXM7CiAgICAgUmVuZGVyT2JqZWN0KiBzaWJsaW5nOwogICAgIGRvIHsKICAgICAgICAgc2li
bGluZyA9IG9iamVjdC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5n
ICYmICghc2libGluZy0+aXNSZW5kZXJCbG9jaygpIHx8IHRvUmVuZGVyQmxvY2soc2libGluZykt
PmlzU2VsZWN0aW9uUm9vdCgpKSkKKyAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgKCFpczxSZW5k
ZXJCbG9jaz4oKnNpYmxpbmcpIHx8IGRvd25jYXN0PFJlbmRlckJsb2NrPigqc2libGluZykuaXNT
ZWxlY3Rpb25Sb290KCkpKQogICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3Vz
U2libGluZygpOwogCi0gICAgICAgIG9mZnNldCAtPSBMYXlvdXRTaXplKHRvUmVuZGVyQmxvY2so
b2JqZWN0KS0+bG9naWNhbExlZnQoKSwgdG9SZW5kZXJCbG9jayhvYmplY3QpLT5sb2dpY2FsVG9w
KCkpOworICAgICAgICBvZmZzZXQgLT0gTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJCbG9jaz4o
Km9iamVjdCkubG9naWNhbExlZnQoKSwgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvYmplY3QpLmxv
Z2ljYWxUb3AoKSk7CiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+cGFyZW50KCk7Ci0gICAgfSB3
aGlsZSAoIXNpYmxpbmcgJiYgb2JqZWN0ICYmIG9iamVjdC0+aXNSZW5kZXJCbG9jaygpICYmICF0
b1JlbmRlckJsb2NrKG9iamVjdCktPmlzU2VsZWN0aW9uUm9vdCgpKTsKKyAgICB9IHdoaWxlICgh
c2libGluZyAmJiBpczxSZW5kZXJCbG9jaz4ob2JqZWN0KSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KCpvYmplY3QpLmlzU2VsZWN0aW9uUm9vdCgpKTsKIAogICAgIGlmICghc2libGluZykKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVuZGVyQmxv
Y2sqIGJlZm9yZUJsb2NrID0gdG9SZW5kZXJCbG9jayhzaWJsaW5nKTsKKyAgICBSZW5kZXJCbG9j
ayogYmVmb3JlQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oc2libGluZyk7CiAKICAgICBv
ZmZzZXQgKz0gTGF5b3V0U2l6ZShiZWZvcmVCbG9jay0+bG9naWNhbExlZnQoKSwgYmVmb3JlQmxv
Y2stPmxvZ2ljYWxUb3AoKSk7CiAKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gYmVmb3JlQmxv
Y2stPmxhc3RDaGlsZCgpOwotICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC0+aXNSZW5kZXJCbG9j
aygpKSB7Ci0gICAgICAgIGJlZm9yZUJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7CisgICAg
d2hpbGUgKGlzPFJlbmRlckJsb2NrPihjaGlsZCkpIHsKKyAgICAgICAgYmVmb3JlQmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpOwogICAgICAgICBvZmZzZXQgKz0gTGF5b3V0U2l6
ZShiZWZvcmVCbG9jay0+bG9naWNhbExlZnQoKSwgYmVmb3JlQmxvY2stPmxvZ2ljYWxUb3AoKSk7
CiAgICAgICAgIGNoaWxkID0gYmVmb3JlQmxvY2stPmxhc3RDaGlsZCgpOwogICAgIH0KQEAgLTI2
ODIsNyArMjY4Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoaWxkSGl0VGVzdENhbmRpZGF0
ZShjb25zdCBSZW5kZXJCb3gmIGJveCwgY29uc3QgUmVuZGVyUmVnCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoIXJlZ2lvbikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3Qg
UmVuZGVyQmxvY2smIGJsb2NrID0gYm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2so
Ym94KSA6ICpib3guY29udGFpbmluZ0Jsb2NrKCk7CisgICAgY29uc3QgUmVuZGVyQmxvY2smIGJs
b2NrID0gaXM8UmVuZGVyQmxvY2s+KGJveCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oYm94KSA6
ICpib3guY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgcmV0dXJuIGJsb2NrLnJlZ2lvbkF0QmxvY2tP
ZmZzZXQocG9pbnQueSgpKSA9PSByZWdpb247CiB9CiAKQEAgLTMwNDIsMTEgKzMwNDIsMTEgQEAg
UmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiAgICAgICAg
IGlmIChmaXJzdExpbmVCbG9jay0+aXNSZXBsYWNlZCgpIHx8IGZpcnN0TGluZUJsb2NrLT5pc0Zs
b2F0aW5nKCkKICAgICAgICAgICAgIHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9jay0+Zmly
c3RDaGlsZCgpICE9IGZpcnN0TGluZUJsb2NrIHx8ICFpc1JlbmRlckJsb2NrRmxvd09yUmVuZGVy
QnV0dG9uKCpwYXJlbnRCbG9jaykpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZmlyc3RM
aW5lQmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudEJsb2NrKTsKKyAgICAgICAgZmlyc3RMaW5l
QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocGFyZW50QmxvY2spOwogICAgIH0gCiAgICAg
CiAgICAgaWYgKCFoYXNQc2V1ZG8pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CkBAIC0zMTI1LDEx
ICszMTI1LDExIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIGZpbmRGaXJzdExldHRlckJs
b2NrKFJlbmRlckJsb2NrKiBzdGFydCkKICAgICAgICAgUmVuZGVyRWxlbWVudCogcGFyZW50Qmxv
Y2sgPSBmaXJzdExldHRlckJsb2NrLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKGZpcnN0TGV0dGVy
QmxvY2stPmlzUmVwbGFjZWQoKSB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0
Q2hpbGQoKSAhPSBmaXJzdExldHRlckJsb2NrCiAgICAgICAgICAgICB8fCAhaXNSZW5kZXJCbG9j
a0Zsb3dPclJlbmRlckJ1dHRvbigqcGFyZW50QmxvY2spKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIGZpcnN0TGV0dGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudEJsb2NrKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBmaXJzdExldHRlckJsb2NrID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHBhcmVudEJsb2NrKTsKICAgICB9IAogCi0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZp
cnN0TGV0dGVyU3R5bGUoUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJPYmpl
Y3QqIGN1cnJlbnRDaGlsZCkKQEAgLTM0MjEsOCArMzQyMSw4IEBAIGNvbnN0IFJlbmRlclN0eWxl
JiBSZW5kZXJCbG9jazo6b3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNvbnN0CiB2b2lkIFJlbmRl
ckJsb2NrOjpjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqKQogewogICAgIG1ha2VD
aGlsZHJlbk5vbklubGluZSgpOwotICAgIGlmIChpc0Fub255bW91c0Jsb2NrKCkgJiYgcGFyZW50
KCkgJiYgcGFyZW50KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgdG9SZW5kZXJCbG9jayhw
YXJlbnQoKSktPnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CisgICAgaWYgKGlz
QW5vbnltb3VzQmxvY2soKSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpKQorICAgICAgICBk
b3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Js
b2NrKHRoaXMpOwogICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVhZCBoZXJlCiB9CiAKQEAgLTM2NzEs
MTIgKzM2NzEsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmsoY29u
c3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSBz
YW1lIGRpcmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBpdHMK
ICAgICAvLyBtYXJnaW4gcXVpcmsuCiAgICAgaWYgKCFjaGlsZC5pc1dyaXRpbmdNb2RlUm9vdCgp
KQotICAgICAgICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhj
aGlsZCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVm
b3JlUXVpcmsoKTsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgOiBjaGlsZC5z
dHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCk7CiAgICAgCiAgICAgLy8gVGhlIGNoaWxkIGhh
cyBhIGRpZmZlcmVudCBkaXJlY3Rpb25hbGl0eS4gSWYgdGhlIGNoaWxkIGlzIHBhcmFsbGVsLCB0
aGVuIGl0J3MganVzdAogICAgIC8vIGZsaXBwZWQgcmVsYXRpdmUgdG8gdXMuIFdlIGNhbiB1c2Ug
dGhlIG9wcG9zaXRlIGVkZ2UuCiAgICAgaWYgKGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLmlz
UmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpLmhhc01hcmdpbkFmdGVyUXVpcmso
KSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpOworICAgICAgICByZXR1cm4g
aXM8UmVuZGVyQmxvY2s+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFz
TWFyZ2luQWZ0ZXJRdWlyaygpIDogY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCk7
CiAgICAgCiAgICAgLy8gVGhlIGNoaWxkIGlzIHBlcnBlbmRpY3VsYXIgdG8gdXMgYW5kIGJveCBz
aWRlcyBhcmUgbmV2ZXIgcXVpcmt5IGluIGh0bWwuY3NzLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNh
cmUgYWJvdXQKICAgICAvLyB3aGV0aGVyIG9yIG5vdCBhdXRob3JzIHNwZWNpZmllZCBxdWlya3kg
ZW1zLCBzaW5jZSB0aGV5J3JlIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KQEAgLTM2ODgsMTIg
KzM2ODgsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzTWFyZ2luQWZ0ZXJRdWlyayhjb25zdCBS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHNhbWUg
ZGlyZWN0aW9uYWxpdHkgYXMgd2UgZG8sIHRoZW4gd2UgY2FuIGp1c3QgcmV0dXJuIGl0cwogICAg
IC8vIG1hcmdpbiBxdWlyay4KICAgICBpZiAoIWNoaWxkLmlzV3JpdGluZ01vZGVSb290KCkpCi0g
ICAgICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxk
KS5oYXNNYXJnaW5BZnRlclF1aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhhc01hcmdpbkFmdGVyUXVp
cmsoKTsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oY2hpbGQpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCku
aGFzTWFyZ2luQWZ0ZXJRdWlyaygpOwogICAgIAogICAgIC8vIFRoZSBjaGlsZCBoYXMgYSBkaWZm
ZXJlbnQgZGlyZWN0aW9uYWxpdHkuIElmIHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdz
IGp1c3QKICAgICAvLyBmbGlwcGVkIHJlbGF0aXZlIHRvIHVzLiBXZSBjYW4gdXNlIHRoZSBvcHBv
c2l0ZSBlZGdlLgogICAgIGlmIChjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJs
b2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hp
bGQuc3R5bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpOworICAgICAgICByZXR1cm4gaXM8UmVu
ZGVyQmxvY2s+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFzTWFyZ2lu
QmVmb3JlUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKTsKICAg
ICAKICAgICAvLyBUaGUgY2hpbGQgaXMgcGVycGVuZGljdWxhciB0byB1cyBhbmQgYm94IHNpZGVz
IGFyZSBuZXZlciBxdWlya3kgaW4gaHRtbC5jc3MsIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSBh
Ym91dAogICAgIC8vIHdoZXRoZXIgb3Igbm90IGF1dGhvcnMgc3BlY2lmaWVkIHF1aXJreSBlbXMs
IHNpbmNlIHRoZXkncmUgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA2NDAwZGI2ZjU1OTI5NGE3Y2Y2MTE5YWY3MjRjOTdj
YTAyN2YyNGQyLi5hYTQyNWI3M2JjYjc3ZGViNDMzNWE5NmM1NWYwZWYwOGUyMWM2NjAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMTk1LDcgKzE5NSw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVu
dFJlbmRlcmVyQW5kRGlzcGxheShjb25zdCBSZW5kZXJPYmplY3QqLCBFRGlzcGxheSA9IEJMT0NL
KTsKICAgICBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgZGlzcGxh
eSA9IEJMT0NLKSBjb25zdCB7IHJldHVybiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVy
ZXJBbmREaXNwbGF5KHRoaXMsIGRpc3BsYXkpOyB9Ci0gICAgc3RhdGljIHZvaWQgY29sbGFwc2VB
bm9ueW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayogcGFyZW50LCBSZW5kZXJCbG9jayogY2hpbGQp
OworICAgIHN0YXRpYyB2b2lkIGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2sm
IHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoaWxkKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyQm94KiBj
cmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVu
dCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTUzMCw4ICs1MzAsNiBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZzsKIH07CiAKLVJFTkRFUl9P
QkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJCbG9jaywgaXNSZW5kZXJCbG9jaygpKQotCiBMYXlvdXRV
bml0IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spOwogTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rp
b25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
RnJvbVJvb3RCbG9jayk7CiBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3Rp
bmdFZGl0aW5nQm91bmRhcmllcyhSZW5kZXJCbG9jayYsIFJlbmRlckJveCYsIGNvbnN0IExheW91
dFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CmluZGV4IGQ4NWJkODIyNjA1MmQzMjc5YThlODQxNjlkOWQ1OGQyOWI5MDdmMjMuLmZmOTZkNTE2
OWUxY2Q3Mzk2NjRmNDA2OTgxZmQ4MTQ3MmViNGE4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0xMjE5LDEwICsxMjE5LDEwIEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93OjptYXJnaW5CZWZvcmVFc3RpbWF0ZUZvckNoaWxkKFJlbmRlckJveCYg
Y2hpbGQsIExheW91dFVuaXQmCiAgICAgLy8gTWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYmxvY2sg
bWFyZ2lucyBub3cgZm9yIHRoZSBncmFuZGNoaWxkIGJveCBzbyB0aGF0IHdlJ3JlIGxvb2tpbmcg
YXQgY3VycmVudCB2YWx1ZXMuCiAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPm5lZWRzTGF5b3V0KCkp
IHsKICAgICAgICAgZ3JhbmRjaGlsZEJveC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFy
Z2lucyh0aGlzKTsKLSAgICAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPmlzUmVuZGVyQmxvY2soKSkg
ewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGdyYW5kY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxv
Y2soZ3JhbmRjaGlsZEJveCk7Ci0gICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01h
cmdpbkJlZm9yZVF1aXJrKGdyYW5kY2hpbGRCb3gtPnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVp
cmsoKSk7Ci0gICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01hcmdpbkFmdGVyUXVp
cmsoZ3JhbmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOworICAgICAg
ICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpncmFuZGNoaWxkQm94KSkgeworICAgICAgICAgICAgUmVu
ZGVyQmxvY2smIGdyYW5kY2hpbGRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqZ3JhbmRj
aGlsZEJveCk7CisgICAgICAgICAgICBncmFuZGNoaWxkQmxvY2suc2V0SGFzTWFyZ2luQmVmb3Jl
UXVpcmsoZ3JhbmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKTsKKyAg
ICAgICAgICAgIGdyYW5kY2hpbGRCbG9jay5zZXRIYXNNYXJnaW5BZnRlclF1aXJrKGdyYW5kY2hp
bGRCb3gtPnN0eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTI3NCw4ICsxMjc0LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmVzdGlt
YXRlTG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IE0KICAgICAgICAg
Ly8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0
byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1
cnJlbnQgb25lLgogICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0
dGFibGVDaGlsZChjaGlsZCwgbG9naWNhbFRvcEVzdGltYXRlKTsKICAgICAgICAgCi0gICAgICAg
IGlmICghY2hpbGQuc2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hpbGQuaXNSZW5kZXJCbG9jaygpKQot
ICAgICAgICAgICAgbG9naWNhbFRvcEVzdGltYXRlICs9IHRvUmVuZGVyQmxvY2soY2hpbGQpLnBh
Z2luYXRpb25TdHJ1dCgpOworICAgICAgICBpZiAoIWNoaWxkLnNlbGZOZWVkc0xheW91dCgpICYm
IGlzPFJlbmRlckJsb2NrPihjaGlsZCkpCisgICAgICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUg
Kz0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKS5wYWdpbmF0aW9uU3RydXQoKTsKICAgICB9
CiAKICAgICByZXR1cm4gbG9naWNhbFRvcEVzdGltYXRlOwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gmIGNo
aWxkLCBMYXlvdXRVbml0IGxvZ2ljYWwKIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFk
anVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKExheW91dFVuaXQgbG9naWNhbFRvcEFmdGVyQ2xl
YXIsIExheW91dFVuaXQgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiwgUmVuZGVyQm94JiBjaGls
ZCwgYm9vbCBhdEJlZm9yZVNpZGVPZkJsb2NrKQogewotICAgIFJlbmRlckJsb2NrKiBjaGlsZFJl
bmRlckJsb2NrID0gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jaygmY2hpbGQp
IDogbnVsbHB0cjsKKyAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGlzPFJlbmRl
ckJsb2NrPihjaGlsZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7
CiAKICAgICBpZiAoZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiAhPSBsb2dpY2FsVG9wQWZ0ZXJD
bGVhcikgewogICAgICAgICAvLyBPdXIgZ3Vlc3MgcHJpb3IgdG8gcGFnaW5hdGlvbiBtb3ZlbWVu
dCB3YXMgd3JvbmcuIEJlZm9yZSB3ZSBhdHRlbXB0IHRvIHBhZ2luYXRlLCBsZXQncyB0cnkgYWdh
aW4gYXQgdGhlIG5ldwpAQCAtMjQ1Nyw3ICsyNDU3LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6
OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgcGFn
aW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRvd24gZnVydGhlci4KICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hpbGQgY2FuJ3QgYWxzbyBoYXZl
IGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcwogICAgICAgICAgICAgLy8gZXhjbHVzaXZl
IHdpdGggdGhlIGNhc2UgYWJvdmUuCi0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9j
ayA9IGNoaWxkQm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soJmNoaWxkQm94KSA6
IG51bGxwdHI7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IGlzPFJlbmRl
ckJsb2NrPihjaGlsZEJveCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkQm94KSA6IG51
bGxwdHI7CiAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0
aW9uU3RydXQoKSkgewogICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gY2hpbGRCbG9j
ay0+cGFnaW5hdGlvblN0cnV0KCk7CiAgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0UGFn
aW5hdGlvblN0cnV0KDApOwpAQCAtMjcyOSwxNiArMjcyOSwxNiBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9S
ZW1vdmUpCiAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKIAogICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dDsgbmV4dCA9IG5leHQt
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFuZXh0LT5pc1JlbmRlckJsb2NrRmxvdygp
IHx8IG5leHQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCB0b1JlbmRlckJs
b2NrKG5leHQpLT5hdm9pZHNGbG9hdHMoKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zs
b3c+KCpuZXh0KSB8fCBuZXh0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwg
ZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqbmV4dCkuYXZvaWRzRmxvYXRzKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBSZW5kZXJCbG9ja0Zsb3cqIG5leHRCbG9jayA9IHRv
UmVuZGVyQmxvY2tGbG93KG5leHQpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIG5leHRCbG9j
ayA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm5leHQpOwogICAgICAgICBmb3IgKGF1dG8g
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIFJlbmRlckJveCYgZmxvYXRpbmdCb3ggPSAoKml0KS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgICAgIGlmIChmbG9hdFRvUmVtb3ZlICYmICZmbG9hdGluZ0JveCAhPSBmbG9hdFRvUmVtb3Zl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5leHRCbG9jay0+
Y29udGFpbnNGbG9hdChmbG9hdGluZ0JveCkpCi0gICAgICAgICAgICAgICAgbmV4dEJsb2NrLT5t
YXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCZmbG9hdGluZ0JveCk7CisgICAg
ICAgICAgICBpZiAobmV4dEJsb2NrLmNvbnRhaW5zRmxvYXQoZmxvYXRpbmdCb3gpKQorICAgICAg
ICAgICAgICAgIG5leHRCbG9jay5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0
KCZmbG9hdGluZ0JveCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IGI4MmU3NTY4MDRj
M2JlZTEyYThiMWU2NjY2MTI2YWM2YTM1MDQzZTguLjFhMzlkZTc3NGE0M2I4YWMzZmM3YTIxZTZm
MDM5YTBjYmMwZTZkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xODk0LDggKzE4OTQsOCBAQCBib29sIFJlbmRlckJs
b2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQs
IEZsb2F0aW5nTwogCiAgICAgICAgICAgICBpZiAodXBkYXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGls
ZChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgZmxvYXRCb3gu
c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGZsb2F0
Qm94LmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGZsb2F0
Qm94KS5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBlbHNl
IGlmIChpczxSZW5kZXJCbG9jaz4oZmxvYXRCb3gpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPihmbG9hdEJveCkuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMp
OwogICAgICAgICAgICAgZmxvYXRCb3gubGF5b3V0SWZOZWVkZWQoKTsKIAogICAgICAgICAgICAg
Ly8gU2F2ZSB0aGUgb2xkIGxvZ2ljYWwgdG9wIGJlZm9yZSBjYWxsaW5nIHJlbW92ZVBsYWNlZE9i
amVjdCB3aGljaCB3aWxsIHNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApp
bmRleCBlMWRlNDIwNzZmMTNjMzRiNzg4NjA5NDVlNmE4MjFmYzFhNWY4Y2ViLi42OTIwODY3Nzkx
MGZmMzY1YmNkZDlkMjhhNGVhZGVkODQyNzc3MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcApAQCAtMjk0NywyMCArMjk0NywyMCBAQCBMYXlvdXRVbml0IFJlbmRlckJv
eDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0
KSBjbwogICAgICAgICBjYXNlIENhbGN1bGF0ZWQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1
dG8gY2IgPSBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDogY29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgICAgICAgICB3aGlsZSAoY2ItPmlzQW5vbnltb3VzKCkgJiYgIWNiLT5p
c1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgd2hpbGUgKGNiLT5pc0Fub255bW91cygpICYm
ICFpczxSZW5kZXJWaWV3PigqY2IpKSB7CiAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjYiktPmFkZFBlcmNl
bnRIZWlnaHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpKTsKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudChjb25zdF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGN1bGF0aW9uIGlzIG5vdCBwYXRjaGVkIGZv
ciBibG9jay1mbG93IHlldC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjUwMAogICAgICAgICAgICAgaWYgKGNiLT5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSAmJiBjYi0+c3R5bGUoKS5oZWlnaHQoKS5pc0F1dG8oKSAmJiAhKGNiLT5zdHls
ZSgpLnRvcCgpLmlzQXV0bygpIHx8IGNiLT5zdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgewog
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNiLT5pc1Jl
bmRlckJsb2NrKCkpOwotICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVu
ZGVyQmxvY2soY2IpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPigqY2IpOwogICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAgICAgICAgICAgICAgICBibG9jay0+Y29tcHV0
ZUxvZ2ljYWxIZWlnaHQoYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMp
OwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVk
VmFsdWVzLm1fZXh0ZW50IC0gYmxvY2stPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkg
LSBibG9jay0+c2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIExheW91
dFVuaXQgbmV3SGVpZ2h0ID0gYmxvY2stPmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9y
Qm94U2l6aW5nKG5ld0NvbnRlbnRIZWlnaHQpOworICAgICAgICAgICAgICAgIGJsb2NrLmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMp
OworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVk
VmFsdWVzLm1fZXh0ZW50IC0gYmxvY2suYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAt
IGJsb2NrLnNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IG5ld0hlaWdodCA9IGJsb2NrLmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94
U2l6aW5nKG5ld0NvbnRlbnRIZWlnaHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RD
b250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZyh2YWx1ZUZvckxlbmd0aChsb2dpY2Fs
SGVpZ2h0LCBuZXdIZWlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjk4
NCw3ICsyOTg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCkgY28KICAgICAgICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IHN0ZDo6bWF4KGF2YWlsYWJsZUhlaWdodCwgaW50cmlu
c2ljTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZUZvckxlbmd0aChsb2dpY2FsSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLSBib3JkZXJBbmRQYWRk
aW5nTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB0b1JlbmRlckJsb2NrKGNiKS0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29u
c3RfY2FzdDxSZW5kZXJCb3gmPigqdGhpcykpOworICAgICAgICAgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9jYXN0
PFJlbmRlckJveCY+KCp0aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRh
aW5pbmdCbG9jaygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMwMjMs
MTEgKzMwMjMsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWln
aHRVc2luZyhjb25zdCBMZW5ndGgmIGgsIEF2YWlsYWJsZUxvZ2kKIAogICAgIC8vIEZJWE1FOiBD
aGVjayBsb2dpY2FsVG9wL2xvZ2ljYWxCb3R0b20gaGVyZSB0byBjb3JyZWN0bHkgaGFuZGxlIHZl
cnRpY2FsIHdyaXRpbmctbW9kZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDY1MDAKLSAgICBpZiAoaXNSZW5kZXJCbG9jaygpICYmIGlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpICYmIHN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgIShzdHlsZSgpLnRv
cCgpLmlzQXV0bygpIHx8IHN0eWxlKCkuYm90dG9tKCkuaXNBdXRvKCkpKSB7Ci0gICAgICAgIFJl
bmRlckJsb2NrKiBibG9jayA9IGNvbnN0X2Nhc3Q8UmVuZGVyQmxvY2sqPih0b1JlbmRlckJsb2Nr
KHRoaXMpKTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCp0aGlzKSAmJiBpc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSAmJiBzdHlsZSgpLmhlaWdodCgpLmlzQXV0bygpICYmICEoc3R5bGUoKS50b3Ao
KS5pc0F1dG8oKSB8fCBzdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgeworICAgICAgICBSZW5k
ZXJCbG9jayYgYmxvY2sgPSBjb25zdF9jYXN0PFJlbmRlckJsb2NrJj4oZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KCp0aGlzKSk7CiAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21w
dXRlZFZhbHVlczsKLSAgICAgICAgYmxvY2stPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLT5s
b2dpY2FsSGVpZ2h0KCksIDAsIGNvbXB1dGVkVmFsdWVzKTsKLSAgICAgICAgTGF5b3V0VW5pdCBu
ZXdDb250ZW50SGVpZ2h0ID0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBibG9jay0+Ym9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrLT5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0
KCk7CisgICAgICAgIGJsb2NrLmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWln
aHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOworICAgICAgICBMYXlvdXRVbml0IG5ld0NvbnRlbnRI
ZWlnaHQgPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCAtIGJsb2NrLmJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCkgLSBibG9jay5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAg
IHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZyhuZXdDb250
ZW50SGVpZ2h0KTsKICAgICB9CiAKQEAgLTMwNzIsMzkgKzMwNzIsMzkgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3Qg
UmVuZGVyQm94TW8KICAgICBpZiAoY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgJiYg
Y29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVp
Z2h0Rm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsKIAotICAgIGlmIChjb250
YWluaW5nQmxvY2stPmlzQm94KCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqY29udGFpbmlu
Z0Jsb2NrKSkgewogICAgICAgICBib29sIGlzRml4ZWRQb3NpdGlvbiA9IHN0eWxlKCkucG9zaXRp
b24oKSA9PSBGaXhlZFBvc2l0aW9uOwogCiAgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGlmICghZmxvd1Ro
cmVhZCkgewotICAgICAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxv
Y2stPmlzUmVuZGVyVmlldygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclZpZXco
Y29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBpczxSZW5kZXJWaWV3PigqY29udGFp
bmluZ0Jsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVmlldz4o
KmNvbnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOwog
Ci0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goY29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50
TG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94Pigq
Y29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChpc0ZpeGVkUG9zaXRpb24gJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlck5hbWVk
Rmxvd1RocmVhZCgpKQorICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlck5h
bWVkRmxvd1RocmVhZD4oKmNvbnRhaW5pbmdCbG9jaykpCiAgICAgICAgICAgICByZXR1cm4gY29u
dGFpbmluZ0Jsb2NrLT52aWV3KCkuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAKLSAgICAgICAgaWYg
KCFjb250YWluaW5nQmxvY2stPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgIHJldHVybiB0
b1JlbmRlckJveCgqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAg
ICAgaWYgKCFpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2Fs
V2lkdGgoKTsKIAotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2Nr
KGNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8g
PSAwOworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IgPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveElu
Zm8gPSBudWxscHRyOwogICAgICAgICBpZiAoIXJlZ2lvbikgewogICAgICAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNoZWNrRm9yUGVycGVuZGlj
dWxhcldyaXRpbmdNb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dUaHJl
YWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24oKTsK
ICAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7Ci0gICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpOwotICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi0+cmVn
aW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOworICAgICAgICAgICAgICAgIExheW91dFVu
aXQgY2JQYWdlT2Zmc2V0ID0gY2Iub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwor
ICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi5yZWdpb25BdEJsb2Nr
T2Zmc2V0KGNiUGFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGNiUmVnaW9uKQotICAg
ICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdp
b24pOworICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5m
byhjYlJlZ2lvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYm
IGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2Nr
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJSZWdpb24q
IGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJl
Z2lvbik7Ci0gICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29u
dGFpbmluZ0Jsb2NrUmVnaW9uKTsKKyAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmlu
Z0Jsb2NrUmVnaW9uID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAg
ICAgICAgICAgYm94SW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2Nr
UmVnaW9uKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKGJveEluZm8pID8gc3RkOjptYXg8
TGF5b3V0VW5pdD4oMCwgY2ItPmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLT5sb2dpY2FsV2lk
dGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi0+Y2xpZW50TG9naWNhbFdpZHRo
KCk7CisgICAgICAgIHJldHVybiAoYm94SW5mbykgPyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBj
Yi5jbGllbnRMb2dpY2FsV2lkdGgoKSAtIChjYi5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxv
Z2ljYWxXaWR0aCgpKSkgOiBjYi5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICB9CiAKICAgICBB
U1NFUlQoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlcklubGluZSgpICYmIGNvbnRhaW5pbmdCbG9j
ay0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpOwpAQCAtMzEzMywzNyArMzEzMywzNyBAQCBMYXlvdXRV
bml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChj
b25zdCBSZW5kZXJCb3hNbwogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250
YWluaW5nQmxvY2ssIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0
CiB7CiAgICAgaWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlICYmIGNvbnRhaW5p
bmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQotICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9z
aXRpb25lZChjb250YWluaW5nQmxvY2ssIDAsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCBudWxs
cHRyLCBmYWxzZSk7CiAKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CiAgICAg
ICAgIGJvb2wgaXNGaXhlZFBvc2l0aW9uID0gc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9z
aXRpb247CiAKLSAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxvY2st
PmlzUmVuZGVyVmlldygpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVmlldyhjb250YWlu
aW5nQmxvY2spLT5jbGllbnRMb2dpY2FsSGVpZ2h0Rm9yRml4ZWRQb3NpdGlvbigpOworICAgICAg
ICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2sp
KQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxv
Y2spLmNsaWVudExvZ2ljYWxIZWlnaHRGb3JGaXhlZFBvc2l0aW9uKCk7CiAKLSAgICAgICAgY29u
c3QgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckJsb2NrKCkgPyB0
b1JlbmRlckJsb2NrKGNvbnRhaW5pbmdCbG9jaykgOiBjb250YWluaW5nQmxvY2stPmNvbnRhaW5p
bmdCbG9jaygpOworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSBpczxSZW5kZXJCbG9j
az4oKmNvbnRhaW5pbmdCbG9jaykgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Js
b2NrKSA6IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIExheW91
dFVuaXQgcmVzdWx0ID0gY2ItPmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAg
ICAgICAgaWYgKGZsb3dUaHJlYWQgJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckZsb3dUaHJl
YWQoKSAmJiBmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5p
bmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBpc0ZpeGVkUG9zaXRp
b24pCisgICAgICAgIGlmIChmbG93VGhyZWFkICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpjb250
YWluaW5nQmxvY2spICYmIGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0g
Y29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKSAmJiBpc0Zp
eGVkUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+dmll
dygpLmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZs
b3dUaHJlYWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVn
aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKmNv
bnRhaW5pbmdCbG9jaykuY29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIEFTU0VS
VChjb250YWluaW5nQmxvY2stPmlzUmVuZGVySW5saW5lKCkgJiYgY29udGFpbmluZ0Jsb2NrLT5p
c0luRmxvd1Bvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlcklubGluZT4oKmNvbnRh
aW5pbmdCbG9jaykgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7CiAK
LSAgICBjb25zdCBSZW5kZXJJbmxpbmUqIGZsb3cgPSB0b1JlbmRlcklubGluZShjb250YWluaW5n
QmxvY2spOwotICAgIElubGluZUZsb3dCb3gqIGZpcnN0ID0gZmxvdy0+Zmlyc3RMaW5lQm94KCk7
Ci0gICAgSW5saW5lRmxvd0JveCogbGFzdCA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CisgICAgY29u
c3QgUmVuZGVySW5saW5lJiBmbG93ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY29udGFpbmlu
Z0Jsb2NrKTsKKyAgICBJbmxpbmVGbG93Qm94KiBmaXJzdCA9IGZsb3cuZmlyc3RMaW5lQm94KCk7
CisgICAgSW5saW5lRmxvd0JveCogbGFzdCA9IGZsb3cubGFzdExpbmVCb3goKTsKIAogICAgIC8v
IElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGVtcHR5LCByZXR1cm4gYSBoZWlnaHQgb2YgMC4K
ICAgICBpZiAoIWZpcnN0IHx8ICFsYXN0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIExheW91
dFVuaXQgaGVpZ2h0UmVzdWx0OwotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBmbG93LT5s
aW5lc0JvdW5kaW5nQm94KCk7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGZsb3cubGlu
ZXNCb3VuZGluZ0JveCgpOwogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCiAgICAgICAgIGhlaWdodFJlc3VsdCA9IGJvdW5kaW5nQm94LmhlaWdodCgp
OwogICAgIGVsc2UKQEAgLTMxODAsMTMgKzMxODAsMTMgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlu
bGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJp
Z2gKICAgICAvLyBGSVhNRTogVGhlIHN0YXRpYyBkaXN0YW5jZSBjb21wdXRhdGlvbiBoYXMgbm90
IGJlZW4gcGF0Y2hlZCBmb3IgbWl4ZWQgd3JpdGluZyBtb2RlcyB5ZXQuCiAgICAgaWYgKGNoaWxk
LT5wYXJlbnQoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgTGF5b3V0
VW5pdCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlv
bigpIC0gY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgIGZvciAo
YXV0byBjdXJyID0gY2hpbGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxv
Y2s7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnItPmlz
Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSB0b1JlbmRlckJveChj
dXJyKS0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uICYmIHRvUmVu
ZGVyQm94KGN1cnIpLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5k
ZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAgICAgIGZvciAoYXV0byBjdXJyZW50ID0gY2hp
bGQtPnBhcmVudCgpOyBjdXJyZW50ICYmIGN1cnJlbnQgIT0gY29udGFpbmVyQmxvY2s7IGN1cnJl
bnQgPSBjdXJyZW50LT5jb250YWluZXIoKSkgeworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJv
eD4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gZG93bmNh
c3Q8UmVuZGVyQm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVnaW9uICYmIGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyQmxvY2smIGN1cnJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGN1cnJlbnRCbG9j
ay5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CisgICAgICAgICAgICAgICAgICAg
IFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjdXJyZW50QmxvY2sucmVuZGVyQm94UmVn
aW9uSW5mbyhyZWdpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94SW5mbykKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0
KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzE5NiwyNSArMzE5NiwyNSBAQCBzdGF0aWMgdm9p
ZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3Ro
JiBsb2dpY2FsUmlnaAogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlbmRlckJveCYgZW5jbG9zaW5n
Qm94ID0gY2hpbGQtPnBhcmVudCgpLT5lbmNsb3NpbmdCb3goKTsKICAgICAgICAgTGF5b3V0VW5p
dCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigp
ICsgY29udGFpbmVyTG9naWNhbFdpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxM
ZWZ0KCk7Ci0gICAgICAgIGZvciAoUmVuZGVyRWxlbWVudCogY3VyciA9ICZlbmNsb3NpbmdCb3g7
IGN1cnI7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnIt
PmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyciAhPSBjb250YWluZXJCbG9jaykK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gdG9SZW5kZXJCb3goY3Vycikt
PmxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0Jv
eCkKKyAgICAgICAgZm9yIChSZW5kZXJFbGVtZW50KiBjdXJyZW50ID0gJmVuY2xvc2luZ0JveDsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmNvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyQm94PigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dCAhPSBjb250YWluZXJCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24g
LT0gZG93bmNhc3Q8UmVuZGVyQm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSAmZW5jbG9zaW5nQm94KQogICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNQb3NpdGlvbiAtPSBlbmNsb3NpbmdCb3gubG9naWNhbFdpZHRoKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlZ2lvbiAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lv
bnMocmVnaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94
SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAgICAgICAgICAgICAg
aWYgKHJlZ2lvbiAmJiBpczxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiBjdXJyZW50QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKmN1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjdXJyZW50Qmxv
Y2suY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY3VycmVudEJsb2NrLnJlbmRlckJveFJl
Z2lvbkluZm8ocmVnaW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyICE9IGNvbnRhaW5lckJsb2NrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGNiLT5sb2dpY2FsV2lkdGgo
KSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRoKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0JveCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IGNvbnRhaW5lckJsb2NrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGN1cnJlbnRCbG9jay5sb2dp
Y2FsV2lkdGgoKSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdp
ZHRoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJmVuY2xvc2lu
Z0JveCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBlbmNs
b3NpbmdCb3gubG9naWNhbFdpZHRoKCkgLSBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChjdXJyID09IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gY29udGFpbmVyQmxvY2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgbG9naWNhbFJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CkBA
IC0zMzM4LDE0ICszMzM4LDE0IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1CiAgICAgLy8gQWRq
dXN0IGxvZ2ljYWxMZWZ0IGlmIHdlIG5lZWQgdG8gZm9yIHRoZSBmbGlwcGVkIHZlcnNpb24gb2Yg
b3VyIHdyaXRpbmcgbW9kZSBpbiByZWdpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb3RoZXIgdHlwZXMgb2Ygb2JqZWN0cyBhcyBjb250YWluZXJCbG9jaywgbm90IG9ubHkgUmVu
ZGVyQmxvY2suCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoZmxvd1RocmVhZCAmJiAhcmVnaW9uICYmIGlzV3Jp
dGluZ01vZGVSb290KCkgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluZXJC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250YWluZXJCbG9jay0+aXNSZW5k
ZXJCbG9jaygpKSB7CisgICAgaWYgKGZsb3dUaHJlYWQgJiYgIXJlZ2lvbiAmJiBpc1dyaXRpbmdN
b2RlUm9vdCgpICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxvY2st
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgaXM8UmVuZGVyQmxvY2s+KCpjb250YWluZXJC
bG9jaykpIHsKICAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrLT5jYW5IYXZlQm94SW5mb0lu
UmVnaW9uKCkpOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UG9zID0gY29tcHV0ZWRW
YWx1ZXMubV9wb3NpdGlvbjsKLSAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5k
ZXJCbG9jayhjb250YWluZXJCbG9jayk7Ci0gICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zmc2V0
ID0gY2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICAgICAgUmVuZGVy
UmVnaW9uKiBjYlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7
CisgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNl
dCA9IHJlbmRlckJsb2NrLm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAg
ICAgUmVuZGVyUmVnaW9uKiBjYlJlZ2lvbiA9IHJlbmRlckJsb2NrLnJlZ2lvbkF0QmxvY2tPZmZz
ZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7Ci0gICAgICAgICAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JS
ZWdpb24pOworICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRl
ckJsb2NrLnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJv
eEluZm8pIHsKICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSBib3hJbmZvLT5sb2dp
Y2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBs
b2dpY2FsTGVmdFBvczsKQEAgLTM2NTUsMTQgKzM2NTUsMTQgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXAKICAgICAvLyBBZGp1c3QgbG9naWNhbFRvcCBpZiB3ZSBuZWVkIHRvIGZvciBwZXJwZW5k
aWN1bGFyIHdyaXRpbmcgbW9kZXMgaW4gcmVnaW9ucy4KICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIG90aGVyIHR5cGVzIG9mIG9iamVjdHMgYXMgY29udGFpbmVyQmxvY2ssIG5vdCBvbmx5
IFJlbmRlckJsb2NrLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSAmJiBjb250YWluZXJCbG9jay0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgaWYgKGZsb3dUaHJl
YWQgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAmJiBpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5lckJsb2NrKSkg
ewogICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2stPmNhbkhhdmVCb3hJbmZvSW5SZWdpb24o
KSk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1f
cG9zaXRpb247Ci0gICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2so
Y29udGFpbmVyQmxvY2spOwotICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLT5v
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dpY2FsTGVmdCgpOwotICAgICAg
ICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdl
T2Zmc2V0KTsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlckJveCA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPigqY29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFn
ZU9mZnNldCA9IHJlbmRlckJveC5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBs
b2dpY2FsTGVmdCgpOworICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gcmVuZGVyQm94
LnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9u
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRl
ckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOworICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5m
byogYm94SW5mbyA9IHJlbmRlckJveC5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAg
ICAgICAgICAgIGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAgICAgbG9naWNhbFRvcFBvcyAr
PSBib3hJbmZvLT5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVz
Lm1fcG9zaXRpb24gPSBsb2dpY2FsVG9wUG9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYmFmZDg0YjI0ZjMxZjg5NDQwMWQ0
YmRiYzQ5MTM3MDNhNGMyYWI0OS4uNzNmM2VlNDVhZDRhMDI5OTBkNDgxMzNkZDkzY2U4MDhjZTM3
YmM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0aWMgTGF5b3V0U2l6ZSBhY2N1bXVs
YXRlSW5GbG93UG9zaXRpb25PZmZzZXRzKGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQpCiAgICAg
aWYgKCFjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpIHx8ICFjaGlsZC0+aXNJbkZsb3dQb3NpdGlv
bmVkKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXQ7Ci0gICAgUmVuZGVyRWxlbWVudCogcCA9IHRvUmVuZGVyQmxvY2soY2hpbGQpLT5pbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCk7Ci0gICAgd2hpbGUgKHAgJiYgcC0+aXNSZW5kZXJJbmxpbmUo
KSkgeworICAgIFJlbmRlckVsZW1lbnQqIHAgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNoaWxk
KS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgd2hpbGUgKGlzPFJlbmRlcklubGlu
ZT4ocCkpIHsKICAgICAgICAgaWYgKHAtPmlzSW5GbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHApOwotICAg
ICAgICAgICAgb2Zmc2V0ICs9IHJlbmRlcklubGluZS0+b2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24o
KTsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVu
ZGVySW5saW5lPigqcCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gcmVuZGVySW5saW5lLm9mZnNl
dEZvckluRmxvd1Bvc2l0aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgcCA9IHAtPnBhcmVudCgp
OwogICAgIH0KQEAgLTI2NzQsNyArMjY3NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
Om1vdmVDaGlsZFRvKFJlbmRlckJveE1vZGVsT2JqZWN0KiB0b0JveE1vZGVsT2JqZWN0LCBSCiB7
CiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgY2FsbGVycyBoYXZlIGNsZWFyZWQgdGhlaXIgcG9zaXRp
b25lZCBvYmplY3RzIGxpc3QgZm9yIGNoaWxkIG1vdmVzICghZnVsbFJlbW92ZUluc2VydCkgc28g
dGhlCiAgICAgLy8gcG9zaXRpb25lZCByZW5kZXJlciBtYXBzIGRvbid0IGJlY29tZSBzdGFsZS4g
SXQgd291bGQgYmUgdG9vIHNsb3cgdG8gZG8gdGhlIG1hcCBsb29rdXAgb24gZWFjaCBjYWxsLgot
ICAgIEFTU0VSVCghZnVsbFJlbW92ZUluc2VydCB8fCAhaXNSZW5kZXJCbG9jaygpIHx8ICF0b1Jl
bmRlckJsb2NrKHRoaXMpLT5oYXNQb3NpdGlvbmVkT2JqZWN0cygpKTsKKyAgICBBU1NFUlQoIWZ1
bGxSZW1vdmVJbnNlcnQgfHwgIWlzPFJlbmRlckJsb2NrPigqdGhpcykgfHwgIWRvd25jYXN0PFJl
bmRlckJsb2NrPigqdGhpcykuaGFzUG9zaXRpb25lZE9iamVjdHMoKSk7CiAKICAgICBBU1NFUlQo
dGhpcyA9PSBjaGlsZC0+cGFyZW50KCkpOwogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9C
b3hNb2RlbE9iamVjdCA9PSBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwpAQCAtMjY5NSwxMCArMjY5
NSwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRyZW5UbyhSZW5kZXJC
b3hNb2RlbE9iamVjdCogdG9Cb3hNb2RlbE9iamVjdAogICAgIC8vIFRoaXMgY29uZGl0aW9uIGlz
IHJhcmVseSBoaXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBvbgogICAg
IC8vIGFub255bW91cyBibG9ja3Mgd2hpY2ggY2FuIG5vIGxvbmdlciBjYXJyeSBwb3NpdGlvbmVk
IG9iamVjdHMgKHNlZSByMTIwNzYxKQogICAgIC8vIG9yIHdoZW4gZnVsbFJlbW92ZUluc2VydCBp
cyBmYWxzZS4KLSAgICBpZiAoZnVsbFJlbW92ZUluc2VydCAmJiBpc1JlbmRlckJsb2NrKCkpIHsK
LSAgICAgICAgdG9SZW5kZXJCbG9jayh0aGlzKS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7
Ci0gICAgICAgIGlmIChpc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJC
bG9ja0Zsb3codGhpcyktPnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOyAKKyAgICBpZiAoZnVsbFJl
bW92ZUluc2VydCAmJiBpczxSZW5kZXJCbG9jaz4oKnRoaXMpKSB7CisgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPigqdGhpcykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKSkKKyAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlckJsb2NrRmxvdz4oKnRoaXMpLnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOwogICAg
IH0KIAogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9Cb3hNb2RlbE9iamVjdCA9PSBiZWZv
cmVDaGlsZC0+cGFyZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCmluZGV4IDhmNGY0NWU5NTdkM2MxZTRiZDRmOTQ5MDQzNWQ3NjgxM2EzOWM2NWEuLjA4
MjdjYWE3MGU1NGQ3ZmRiOTU1MGQ3OThjMWI0ODQ0YTY4OGVjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIFJl
bmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3Bh
Z2F0aW9uVHlwZSBwcm9wYQogICAgICAgICBpZiAoIWVsZW1lbnRDaGlsZC5pc0Fub255bW91cygp
IHx8IGVsZW1lbnRDaGlsZC5zdHlsZSgpLnN0eWxlVHlwZSgpICE9IE5PUFNFVURPKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHByb3BhZ2F0aW9uVHlwZSA9PSBQcm9wYWdh
dGVUb0Jsb2NrQ2hpbGRyZW5Pbmx5ICYmICFlbGVtZW50Q2hpbGQuaXNSZW5kZXJCbG9jaygpKQor
ICAgICAgICBpZiAocHJvcGFnYXRpb25UeXBlID09IFByb3BhZ2F0ZVRvQmxvY2tDaGlsZHJlbk9u
bHkgJiYgIWlzPFJlbmRlckJsb2NrPihlbGVtZW50Q2hpbGQpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC03NzEsNyArNzcxLDcgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oU3R5bGVQ
cm9wYWdhdGlvblR5cGUgcHJvcGEKICNlbmRpZgogCiAgICAgICAgIC8vIFJlbmRlckZsb3dUaHJl
YWRzIGFyZSB1cGRhdGVkIHRocm91Z2ggdGhlIFJlbmRlclZpZXc6OnN0eWxlRGlkQ2hhbmdlIGZ1
bmN0aW9uLgotICAgICAgICBpZiAoZWxlbWVudENoaWxkLmlzUmVuZGVyRmxvd1RocmVhZCgpKQor
ICAgICAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oZWxlbWVudENoaWxkKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgZWxlbWVudENoaWxkLnN0eWxl
KCkuZGlzcGxheSgpKTsKQEAgLTc4NCw3ICs3ODQsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnBy
b3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3BhZ2F0aW9uVHlwZSBwcm9w
YQogCiAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBwb3NpdGlvbiBzdHlsZSBvZiBhbm9ueW1vdXMg
YmxvY2sgY29udGludWF0aW9ucyBhcyB0aGV5IGNhbiBoYXZlIHJlbGF0aXZlIG9yIHN0aWNreSBw
b3NpdGlvbiB3aGVuCiAgICAgICAgIC8vIHRoZXkgY29udGFpbiBibG9jayBkZXNjZW5kYW50cyBv
ZiByZWxhdGl2ZSBvciBzdGlja3kgcG9zaXRpb25lZCBpbmxpbmVzLgotICAgICAgICBpZiAoZWxl
bWVudENoaWxkLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIHRvUmVuZGVyQmxvY2soZWxlbWVudENo
aWxkKS5pc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIGlmIChlbGVtZW50
Q2hpbGQuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGVsZW1l
bnRDaGlsZCkuaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKQogICAgICAgICAgICAgbmV3
U3R5bGUuZ2V0KCkuc2V0UG9zaXRpb24oZWxlbWVudENoaWxkLnN0eWxlKCkucG9zaXRpb24oKSk7
CiAKICAgICAgICAgZWxlbWVudENoaWxkLnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGYx
ZjViMzJhNTNkNjY4YWI2MTllMzQ1ZTQ4ZTA5NmUxNzFkNGExNzcuLmE4NjAwOTY3NGI2Y2U4OGM3
Njc2ZjBlNmRkN2UwZDlkNjc3Mzc1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTQ3MywxNiArNDczLDE2IEBAIExheW91dFBvaW50IFJl
bmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNv
bnN0IFJlbmRlCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdldCB0aGUgbG9naWNhbCB0
b3AgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBvYmplY3QuCiAgICAgICAgICAgICBMYXlvdXRV
bml0IHRvcCA9IDA7Ci0gICAgICAgICAgICBpZiAoYm94TW9kZWxPYmplY3QuaXNSZW5kZXJCbG9j
aygpKQotICAgICAgICAgICAgICAgIHRvcCA9IHRvUmVuZGVyQmxvY2soYm94TW9kZWxPYmplY3Qp
Lm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAgICAgICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4oYm94TW9kZWxPYmplY3QpKQorICAgICAgICAgICAgICAgIHRvcCA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPihib3hNb2RlbE9iamVjdCkub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGJveE1v
ZGVsT2JqZWN0LmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgICAgICB0b3AgPSBi
b3hNb2RlbE9iamVjdC5jb250YWluaW5nQmxvY2soKS0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChib3hNb2Rl
bE9iamVjdC5pc0JveCgpKQotICAgICAgICAgICAgICAgICAgICB0b3AgKz0gdG9SZW5kZXJCb3go
Ym94TW9kZWxPYmplY3QpLnRvcExlZnRMb2NhdGlvbigpLnkoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChib3hNb2RlbE9iamVjdC5pc1JlbmRlcklubGluZSgpKQotICAgICAgICAgICAgICAg
ICAgICB0b3AgLT0gdG9SZW5kZXJJbmxpbmUoYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOwor
ICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGJveE1vZGVsT2JqZWN0KSkKKyAgICAg
ICAgICAgICAgICAgICAgdG9wICs9IGRvd25jYXN0PFJlbmRlckJveD4oYm94TW9kZWxPYmplY3Qp
LnRvcExlZnRMb2NhdGlvbigpLnkoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5k
ZXJJbmxpbmU+KGJveE1vZGVsT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgdG9wIC09IGRv
d25jYXN0PFJlbmRlcklubGluZT4oYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGxvZ2ljYWwgdG9w
IG9mIHRoZSByZWdpb24gdGhpcyBvYmplY3Qgc3RhcnRzIGluCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKaW5kZXggNjQ0MzNmYzVkMjYzNGU5MGQwMzc3
ZDYyMDE4ZjRkNzBlZmU0ZDU0NC4uNzQ1MTIyMWMyY2MxNTBiMGQ5MjI4M2IwZjYzOTk5YmUxOTcz
NjBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3Jl
ZW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNw
cApAQCAtMTQ5LDE0ICsxNDksMTQgQEAgdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjp1bndyYXBSZW5k
ZXJlcihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKQogICAgICAgICBpZiAoY2hpbGQg
IT0gbGFzdENoaWxkKCkpCiAgICAgICAgICAgICByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkID0g
dHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQgJiYgY2hpbGQtPmlzQW5vbnltb3VzQmxvY2so
KSkgewotICAgICAgICAgICAgYXV0byYgYW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2NrKCpj
aGlsZCk7CisgICAgICAgICAgICBhdXRvJiBhbm9ueW1vdXNCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY2hpbGQpOwogICAgICAgICAgICAgaWYgKGFub255bW91c0Jsb2NrLmZpcnN0Q2hp
bGQoKSAhPSBhbm9ueW1vdXNCbG9jay5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgICAgICByZXF1
aXJlc1JlbmRlclRyZWVSZWJ1aWxkID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIHdoaWxl
ICgoY2hpbGQgPSBmaXJzdENoaWxkKCkpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQW5v
bnltb3VzQmxvY2soKSAmJiAhcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZCkgewotICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBub25Bbm9ueW1vdXNDaGlsZCA9IHRvUmVuZGVyQmxvY2soKmNoaWxk
KS5maXJzdENoaWxkKCkpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG5vbkFub255bW91c0No
aWxkID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCkuZmlyc3RDaGlsZCgpKQogICAgICAg
ICAgICAgICAgICAgICBjaGlsZCA9IG5vbkFub255bW91c0NoaWxkOwogICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBmMzdmNTM3NDg4
MWE3MzNiZjM3MTMzMTE0NmIyYTc2YmJiN2RmNWVhLi43ZjU0YTllMWQ5MTkxZGQzNzQ5OWY2Yzc5
MGZkNWQyYzE3YWIzMjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcApAQCAtMTIxLDEwICsxMjEsMTAgQEAgUmVuZGVySW5saW5lKiBSZW5kZXJJbmxpbmU6Omlu
bGluZUVsZW1lbnRDb250aW51YXRpb24oKSBjb25zdAogICAgIGlmICghY29udGludWF0aW9uKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChjb250aW51YXRpb24tPmlzUmVuZGVy
SW5saW5lKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlcklubGluZShjb250aW51YXRpb24pOwor
ICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjb250aW51YXRpb24pKQorICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVySW5saW5lPihjb250aW51YXRpb24pOwogCi0gICAgcmV0dXJuIGNvbnRp
bnVhdGlvbi0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjb250aW51YXRpb24pLT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgOiBudWxscHRyOworICAgIHJldHVybiBpczxSZW5k
ZXJCbG9jaz4oKmNvbnRpbnVhdGlvbikgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRpbnVh
dGlvbikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUZyb21TdHlsZSgpCkBAIC0xNTIsMjEgKzE1MiwyMSBAQCBzdGF0
aWMgdm9pZCB1cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKFJlbmRlckJv
eCogYm94LCBjb25zdCBSZW5kZQogICAgICAgICBpZiAoYm94LT5zdHlsZSgpLnBvc2l0aW9uKCkg
PT0gbmV3U3R5bGUtPnBvc2l0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Ci0gICAgICAgIGlmICghYm94LT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgIGlmICghaXM8UmVu
ZGVyQmxvY2s+KCpib3gpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUmVuZGVy
QmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhib3gpOwotICAgICAgICBpZiAoIWJsb2NrLT5p
c0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIFJlbmRlckJsb2NrJiBibG9j
ayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqYm94KTsKKyAgICAgICAgaWYgKCFibG9jay5pc0Fu
b255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgCiAgICAgICAgIC8vIElmIHdlIGFyZSBubyBsb25nZXIgaW4tZmxvdyBwb3NpdGlvbmVkIGJ1
dCBvdXIgZGVzY2VuZGFudCBibG9jayhzKSBzdGlsbCBoYXZlIGFuIGluLWZsb3cgcG9zaXRpb25l
ZCBhbmNlc3RvciB0aGVuCiAgICAgICAgIC8vIHRoZWlyIGNvbnRhaW5pbmcgYW5vbnltb3VzIGJs
b2NrIHNob3VsZCBrZWVwIGl0cyBpbi1mbG93IHBvc2l0aW9uaW5nLiAKLSAgICAgICAgUmVuZGVy
SW5saW5lKiBjb250ID0gYmxvY2stPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICAg
ICAgaWYgKG9sZFN0eWxlLT5oYXNJbkZsb3dQb3NpdGlvbigpICYmIGluRmxvd1Bvc2l0aW9uZWRJ
bmxpbmVBbmNlc3Rvcihjb250KSkKKyAgICAgICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24g
PSBibG9jay5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgIGlmIChvbGRTdHls
ZS0+aGFzSW5GbG93UG9zaXRpb24oKSAmJiBpbkZsb3dQb3NpdGlvbmVkSW5saW5lQW5jZXN0b3Io
Y29udGludWF0aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIGJsb2Nr
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmYmxv
Y2stPnN0eWxlKCksIEJMT0NLKTsKKyAgICAgICAgYXV0byBibG9ja1N0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJmJsb2NrLnN0eWxlKCksIEJMT0NL
KTsKICAgICAgICAgYmxvY2tTdHlsZS5nZXQoKS5zZXRQb3NpdGlvbihuZXdTdHlsZS0+cG9zaXRp
b24oKSk7Ci0gICAgICAgIGJsb2NrLT5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOwor
ICAgICAgICBibG9jay5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOwogICAgIH0KIH0K
IApAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAgICAgICAgIC8v
IElmIGFueSBkZXNjZW5kYW50IGJsb2NrcyBleGlzdCB0aGVuIHRoZXkgd2lsbCBiZSBpbiB0aGUg
bmV4dCBhbm9ueW1vdXMgYmxvY2sgYW5kIGl0cyBzaWJsaW5ncy4KICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpLT5uZXh0U2libGluZygpOwogICAgICAgICBB
U1NFUlQoYmxvY2sgJiYgYmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSk7Ci0gICAgICAgIHVwZGF0
ZVN0eWxlT2ZBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbnModG9SZW5kZXJCbG9jayhibG9jayks
ICZuZXdTdHlsZSwgb2xkU3R5bGUpOworICAgICAgICB1cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxv
Y2tDb250aW51YXRpb25zKGRvd25jYXN0PFJlbmRlckJsb2NrPihibG9jayksICZuZXdTdHlsZSwg
b2xkU3R5bGUpOwogICAgIH0KIAogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpIHsK
QEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIAogc3RhdGljIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7Ci0gICAgaWYgKHJlbmRlcmVyLT5pc0lubGluZSgpICYmICFyZW5kZXJlci0+aXNSZXBsYWNl
ZCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51YXRp
b24oKTsKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmlubGluZUVsZW1lbnRD
b250aW51YXRpb24oKTsKKyAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqcmVuZGVyZXIpICYmICFy
ZW5kZXJlci0+aXNSZXBsYWNlZCgpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5s
aW5lPigqcmVuZGVyZXIpLmNvbnRpbnVhdGlvbigpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiB9CiAKIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbkJlZm9yZShSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRv
QmxvY2ssCiB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENv
bnQpCiB7Ci0gICAgUmVuZGVyQmxvY2sqIHByZSA9IDA7CisgICAgUmVuZGVyQmxvY2sqIHByZSA9
IG51bGxwdHI7CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgCiAgICAgLy8gRGVsZXRlIG91ciBsaW5lIGJveGVzIGJlZm9yZSB3ZSBkbyB0aGUgaW5saW5l
IHNwbGl0IGludG8gY29udGludWF0aW9ucy4KQEAgLTQ1MywxMiArNDUzLDEyIEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxv
Y2sqIG5ld0Jsb2NrQm94CiAgICAgaWYgKGJsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgKCFi
bG9jay0+cGFyZW50KCkgfHwgIWJsb2NrLT5wYXJlbnQoKS0+Y3JlYXRlc0Fub255bW91c1dyYXBw
ZXIoKSkpIHsKICAgICAgICAgLy8gV2UgY2FuIHJldXNlIHRoaXMgYmxvY2sgYW5kIG1ha2UgaXQg
dGhlIHByZUJsb2NrIG9mIHRoZSBuZXh0IGNvbnRpbnVhdGlvbi4KICAgICAgICAgcHJlID0gYmxv
Y2s7Ci0gICAgICAgIHByZS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7CisgICAgICAgIHBy
ZS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7CiAgICAgICAgIC8vIEZJWE1FLUJM
T0NLRkxPVzogVGhlIGVuY2xvc2luZyBtZXRob2Qgc2hvdWxkIGxpa2VseSBiZSBzd2l0Y2hlZCBv
dmVyCiAgICAgICAgIC8vIHRvIG9ubHkgd29yayBvbiBSZW5kZXJCbG9ja0Zsb3csIGluIHdoaWNo
IGNhc2UgdGhpcyBjb252ZXJzaW9uIGNhbiBiZQogICAgICAgICAvLyByZW1vdmVkLgotICAgICAg
ICBpZiAocHJlLT5pc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9j
a0Zsb3cocHJlKS0+cmVtb3ZlRmxvYXRpbmdPYmplY3RzKCk7CisgICAgICAgIGlmIChpczxSZW5k
ZXJCbG9ja0Zsb3c+KCpwcmUpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93
PigqcHJlKS5yZW1vdmVGbG9hdGluZ09iamVjdHMoKTsKICAgICAgICAgYmxvY2sgPSBibG9jay0+
Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm8gYW5vbnltb3Vz
IGJsb2NrIGF2YWlsYWJsZSBmb3IgdXNlLiAgTWFrZSBvbmUuCkBAIC00NjYsNyArNDY2LDcgQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBS
ZW5kZXJCbG9jayogbmV3QmxvY2tCb3gKICAgICAgICAgbWFkZU5ld0JlZm9yZUJsb2NrID0gdHJ1
ZTsKICAgICB9CiAKLSAgICBSZW5kZXJCbG9jayogcG9zdCA9IHRvUmVuZGVyQmxvY2socHJlLT5j
cmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhibG9jaykpOworICAgIFJlbmRlckJsb2Nr
KiBwb3N0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0
aFNhbWVUeXBlQXMoYmxvY2spKTsKIAogICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3QgPSBtYWRl
TmV3QmVmb3JlQmxvY2sgPyBibG9jay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2libGluZygp
OwogICAgIGlmIChtYWRlTmV3QmVmb3JlQmxvY2spCkBAIC04NTMsMjEgKzg1MywyMSBAQCBib29s
IFJlbmRlcklubGluZTo6aGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlcwogVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRp
b25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlclJlZ2lvbiog
cmVnaW9uKQogewogICAgIC8vIEZJWE1FOiBEb2VzIG5vdCBkZWFsIHdpdGggcmVsYXRpdmUgb3Ig
c3RpY2t5IHBvc2l0aW9uZWQgaW5saW5lcyAoc2hvdWxkIGl0PykKLSAgICBSZW5kZXJCbG9jayog
Y2IgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2Nr
ID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZpcnN0TGluZUJveCgpKSB7CiAg
ICAgICAgIC8vIFRoaXMgaW5saW5lIGFjdHVhbGx5IGhhcyBhIGxpbmUgYm94LiAgV2UgbXVzdCBo
YXZlIGNsaWNrZWQgaW4gdGhlIGJvcmRlci9wYWRkaW5nIG9mIG9uZSBvZiB0aGVzZSBib3hlcy4g
IFdlCiAgICAgICAgIC8vIHNob3VsZCB0cnkgdG8gZmluZCBhIHJlc3VsdCBieSBhc2tpbmcgb3Vy
IGNvbnRhaW5pbmcgYmxvY2suCi0gICAgICAgIHJldHVybiBjYi0+cG9zaXRpb25Gb3JQb2ludChw
b2ludCwgcmVnaW9uKTsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+cG9zaXRpb25G
b3JQb2ludChwb2ludCwgcmVnaW9uKTsKICAgICB9CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIGNv
b3JkcyBmcm9tIHRoZSBwcmUtYW5vbnltb3VzIGJsb2NrIHRvIHRoZSBwb3N0LWFub255bW91cyBi
bG9jay4KLSAgICBMYXlvdXRQb2ludCBwYXJlbnRCbG9ja1BvaW50ID0gY2ItPmxvY2F0aW9uKCkg
KyBwb2ludDsgIAotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjID0gY29udGludWF0aW9uKCk7
Ci0gICAgd2hpbGUgKGMpIHsKLSAgICAgICAgUmVuZGVyQm94KiBjb250QmxvY2sgPSBjLT5pc0lu
bGluZSgpID8gYy0+Y29udGFpbmluZ0Jsb2NrKCkgOiB0b1JlbmRlckJsb2NrKGMpOwotICAgICAg
ICBpZiAoYy0+aXNJbmxpbmUoKSB8fCBjLT5maXJzdENoaWxkKCkpCi0gICAgICAgICAgICByZXR1
cm4gYy0+cG9zaXRpb25Gb3JQb2ludChwYXJlbnRCbG9ja1BvaW50IC0gY29udEJsb2NrLT5sb2Nh
dGlvbk9mZnNldCgpLCByZWdpb24pOwotICAgICAgICBjID0gdG9SZW5kZXJCbG9jayhjKS0+aW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgIExheW91dFBvaW50IHBhcmVudEJsb2NrUG9p
bnQgPSBjb250YWluaW5nQmxvY2stPmxvY2F0aW9uKCkgKyBwb2ludDsKKyAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogY29udGludWF0aW9uID0gdGhpcy0+Y29udGludWF0aW9uKCk7CisgICAgd2hp
bGUgKGNvbnRpbnVhdGlvbikgeworICAgICAgICBSZW5kZXJCb3gqIGNvbnRhaW5pbmdCbG9jayA9
IGNvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSA/IGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2Nr
KCkgOiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKGNv
bnRpbnVhdGlvbi0+aXNJbmxpbmUoKSB8fCBjb250aW51YXRpb24tPmZpcnN0Q2hpbGQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24tPnBvc2l0aW9uRm9yUG9pbnQocGFyZW50Qmxv
Y2tQb2ludCAtIGNvbnRhaW5pbmdCbG9jay0+bG9jYXRpb25PZmZzZXQoKSwgcmVnaW9uKTsKKyAg
ICAgICAgY29udGludWF0aW9uID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250aW51YXRpb24p
LmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIFJl
bmRlckJveE1vZGVsT2JqZWN0Ojpwb3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggNDlhZmYxYzQ2NTU1ODIw
Y2EwZDBkZWZkNDIyYTE5ZTE2MmFlYmUwMi4uNzE4OWJmYjNmMGMzNjZhNTI0ZmU1MjE0MzkyYTZi
NzliNGQ0ZmMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBA
IC0zMjk4LDggKzMyOTgsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJMYXlvdXQoKQogICAgICAgICAgICAgICAgIC8vIE91ciBwcm9wcmlldGFyeSBvdmVyZmxvdzog
b3ZlcmxheSB2YWx1ZSBkb2Vzbid0IHRyaWdnZXIgYSBsYXlvdXQuCiAgICAgICAgICAgICAgICAg
bV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCku
c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVy
ZXIoKS5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sm
IGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAo
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRl
ckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKICAgICAg
ICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3Jv
bGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKICAgICAgICAgICAg
ICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
CkBAIC01NDE3LDcgKzU0MTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhj
b25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1v
dmVCeShMYXlvdXRQb2ludChmbG93VGhyZWFkLT53aWR0aCgpLCAwKSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogcmVuZGVyZXJDb250YWluaW5nQmxvY2sgPSBi
b3hNb2RlbE9iamVjdC5lbmNsb3NpbmdCb3goKS5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJs
b2NrKCZib3hNb2RlbE9iamVjdC5lbmNsb3NpbmdCb3goKSkgOiAwOworICAgICAgICAgICAgUmVu
ZGVyQmxvY2sqIHJlbmRlcmVyQ29udGFpbmluZ0Jsb2NrID0gaXM8UmVuZGVyQmxvY2s+KGJveE1v
ZGVsT2JqZWN0LmVuY2xvc2luZ0JveCgpKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9jaz4oYm94TW9k
ZWxPYmplY3QuZW5jbG9zaW5nQm94KCkpIDogbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChyZW5k
ZXJlckNvbnRhaW5pbmdCbG9jaykKICAgICAgICAgICAgICAgICByZW5kZXJlckNvbnRhaW5pbmdC
bG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAK
aW5kZXggZWE3ZjIxODg1MTgxZTRiMWNiY2QwNGRlM2YyY2E1MDI5ODQ5MjAzMS4uNjJmNzQ1ZjUy
OWFlMjQ5OTNjZThjYWQzZTNlOTNmZTMzMzA2ZTk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgIkVs
ZW1lbnRUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
T0xpc3RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUg
IklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisjaW5jbHVk
ZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1
ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKQEAgLTIyNywyNSArMjI5LDI0IEBAIHN0YXRpYyBSZW5kZXJCbG9jayogZ2V0UGFyZW50T2ZG
aXJzdExpbmVCb3goUmVuZGVyQmxvY2sqIGN1cnIsIFJlbmRlck9iamVjdCogbWFyCiAgICAgICAg
IGlmIChjdXJyQ2hpbGQgPT0gbWFya2VyKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+aXNJbmxpbmUoKSAmJiAoIWN1cnJDaGlsZC0+aXNSZW5kZXJJbmxp
bmUoKSB8fCBjdXJyLT5nZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGlsZChjdXJyQ2hpbGQp
KSkKKyAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNJbmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGlu
ZT4oKmN1cnJDaGlsZCkgfHwgY3Vyci0+Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQo
Y3VyckNoaWxkKSkpCiAgICAgICAgICAgICByZXR1cm4gY3VycjsKIAogICAgICAgICBpZiAoY3Vy
ckNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgY3VyckNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzVGFi
bGUoKSB8fCAhY3VyckNoaWxkLT5pc1JlbmRlckJsb2NrKCkgfHwgKGN1cnJDaGlsZC0+aXNCb3go
KSAmJiB0b1JlbmRlckJveChjdXJyQ2hpbGQpLT5pc1dyaXRpbmdNb2RlUm9vdCgpKSkKKyAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+aXNUYWJsZSgpIHx8ICFpczxSZW5kZXJCbG9jaz4oKmN1cnJDaGls
ZCkgfHwgKGlzPFJlbmRlckJveD4oKmN1cnJDaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94Pigq
Y3VyckNoaWxkKS5pc1dyaXRpbmdNb2RlUm9vdCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGlmIChjdXJyLT5pc0xpc3RJdGVtKCkgJiYgaW5RdWlya3NNb2RlICYmIGN1cnJDaGls
ZC0+bm9kZSgpICYmCi0gICAgICAgICAgICAoY3VyckNoaWxkLT5ub2RlKCktPmhhc1RhZ05hbWUo
dWxUYWcpfHwgY3VyckNoaWxkLT5ub2RlKCktPmhhc1RhZ05hbWUob2xUYWcpKSkKKyAgICAgICAg
ICAgIChpczxIVE1MVUxpc3RFbGVtZW50PigqY3VyckNoaWxkLT5ub2RlKCkpIHx8IGlzPEhUTUxP
TGlzdEVsZW1lbnQ+KCpjdXJyQ2hpbGQtPm5vZGUoKSkpKQogICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgUmVuZGVyQmxvY2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0
b1JlbmRlckJsb2NrKGN1cnJDaGlsZCksIG1hcmtlcik7Ci0gICAgICAgIGlmIChsaW5lQm94KQor
ICAgICAgICBpZiAoUmVuZGVyQmxvY2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJv
eChkb3duY2FzdDxSZW5kZXJCbG9jaz4oY3VyckNoaWxkKSwgbWFya2VyKSkKICAgICAgICAgICAg
IHJldHVybiBsaW5lQm94OwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxs
cHRyOwogfQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCkBAIC0yOTQsNyAr
Mjk1LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2VyUmVuZGVyZXJJ
Zk5lZWRlZCgpCiAgICAgICAgIG5ld1BhcmVudC0+YWRkQ2hpbGQobV9tYXJrZXIuZ2V0KCksIGZp
cnN0Tm9uTWFya2VyQ2hpbGQobmV3UGFyZW50KSk7CiAgICAgICAgIG1fbWFya2VyLT51cGRhdGVN
YXJnaW5zQW5kQ29udGVudCgpOwogICAgICAgICAvLyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBh
bm9ueW1vdXMgYmxvY2sgdGhhdCBoYXMgbG9zdCBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0
LgotICAgICAgICBpZiAoY3VycmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50LT5pc0Fub255bW91
c0Jsb2NrKCkgJiYgIWN1cnJlbnRQYXJlbnQtPmZpcnN0Q2hpbGQoKSAmJiAhdG9SZW5kZXJCbG9j
ayhjdXJyZW50UGFyZW50KS0+Y29udGludWF0aW9uKCkpCisgICAgICAgIGlmIChjdXJyZW50UGFy
ZW50ICYmIGN1cnJlbnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhY3VycmVudFBhcmVu
dC0+Zmlyc3RDaGlsZCgpICYmICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRQYXJlbnQp
LmNvbnRpbnVhdGlvbigpKQogICAgICAgICAgICAgY3VycmVudFBhcmVudC0+ZGVzdHJveSgpOwog
ICAgIH0KIApAQCAtNDA2LDExICs0MDcsMTEgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRp
b25MaXN0TWFya2VyKCkKICAgICAgICAgICAgICAgICBvID0gby0+cGFyZW50Qm94KCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICAgICAgICAgICAg
ICBwcm9wYWdhdGVWaXN1YWxPdmVyZmxvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChv
LT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+
KCpvKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKG8pLT5hZGRWaXN1YWxPdmVy
ZmxvdyhtYXJrZXJSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqbykuYWRkVmlzdWFsT3ZlcmZsb3cobWFya2VyUmVjdCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcm9wYWdhdGVMYXlvdXRPdmVyZmxvdykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRvUmVuZGVyQmxvY2sobyktPmFkZExheW91dE92ZXJmbG93KG1hcmtlclJlY3QpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvKS5hZGRMYXlvdXRP
dmVyZmxvdyhtYXJrZXJSZWN0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVM
YXlvdXRPdmVyZmxvdyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKaW5kZXggNjEzNjJlZTcxY2E0MWJkZDdmN2Ni
ZmEzMDk3OGYxYTJhNWRhMDY2MC4uMTY2NGQ0N2IwYTI1NTU3Y2E1N2NlYWZhODAxNWUzOWFmMDVj
OGNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudDo6bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgIEFTU0VSVChw
YXJlbnQoKSk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHBhcmVudCgp
LT5zdHlsZSgpOwotICAgIHJldHVybiBzdHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1Vu
ZGVmaW5lZCgpID8gUmVuZGVyRmxvd1RocmVhZDo6bWF4TG9naWNhbEhlaWdodCgpIDogdG9SZW5k
ZXJCbG9jayhwYXJlbnQoKSktPmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHls
ZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKSk7CisgICAgcmV0dXJuIHN0eWxlVG9Vc2UubG9naWNh
bE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2Fs
SGVpZ2h0KCkgOiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5jb21wdXRlUmVwbGFj
ZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS5sb2dpY2FsTWF4SGVpZ2h0KCkpOwogfQog
CiBMYXlvdXRSZWN0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpmbG93VGhyZWFkUG9ydGlvblJl
Y3RGb3JDbGlwcGluZyhib29sIGlzRmlyc3RSZWdpb25JblJhbmdlLCBib29sIGlzTGFzdFJlZ2lv
bkluUmFuZ2UpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CmluZGV4IGNjNjQyNWZiNmM1ZWMzMTIzYmY5ODI5ZTc2Y2IyZTQxNTkzZDg5M2EuLjRhMDI4NWI4
ODIwZWUwN2ZmNTE2NGEwMGM5NjZlZTRhNzJhYTYwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0zOTksMTUgKzM5OSwxNSBAQCBSZW5kZXJPYmplY3Qq
IFJlbmRlck9iamVjdDo6dHJhdmVyc2VOZXh0KGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhp
biwgVHJhdmVycwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgUmVuZGVyT2JqZWN0OjpCbG9j
a0NvbnRlbnRIZWlnaHRUeXBlIGluY2x1ZGVOb25GaXhlZEhlaWdodChjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcikKK3N0YXRpYyBSZW5kZXJPYmplY3Q6OkJsb2NrQ29udGVudEhlaWdodFR5cGUg
aW5jbHVkZU5vbkZpeGVkSGVpZ2h0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyLT5zdHlsZSgpOworICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIGlmIChzdHlsZS5o
ZWlnaHQoKS50eXBlKCkgPT0gRml4ZWQpIHsKLSAgICAgICAgaWYgKHJlbmRlci0+aXNSZW5kZXJC
bG9jaygpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRl
ckJsb2NrKHJlbmRlcik7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSkg
ewogICAgICAgICAgICAgLy8gRm9yIGZpeGVkIGhlaWdodCBzdHlsZXMsIGlmIHRoZSBvdmVyZmxv
dyBzaXplIG9mIHRoZSBlbGVtZW50IHNwaWxscyBvdXQgb2YgdGhlIHNwZWNpZmllZAogICAgICAg
ICAgICAgLy8gaGVpZ2h0LCBhc3N1bWUgd2UgY2FuIGFwcGx5IHRleHQgYXV0by1zaXppbmcuCi0g
ICAgICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUuaGVp
Z2h0KCkudmFsdWUoKSA8IGJsb2NrLT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhZKCkpCisgICAg
ICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUKKyAgICAgICAgICAgICAg
ICAmJiBzdHlsZS5oZWlnaHQoKS52YWx1ZSgpIDwgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRl
cmVyKS5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhZKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFJlbmRlck9iamVjdDo6T3ZlcmZsb3dIZWlnaHQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IFJlbmRlck9iamVjdDo6Rml4ZWRIZWlnaHQ7CkBAIC02NzIsOCArNjcyLDggQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OmNoZWNrQmxvY2tQb3NpdGlvbmVkT2JqZWN0c05lZWRMYXlvdXQoKQogewogICAg
IEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAKLSAgICBpZiAoaXNSZW5kZXJCbG9jaygpKQotICAg
ICAgICB0b1JlbmRlckJsb2NrKHRoaXMpLT5jaGVja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91
dCgpOworICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKnRoaXMpLmNoZWNrUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiB9
CiAjZW5kaWYKIApAQCAtNzIwLDIyICs3MjAsMjIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldExh
eWVyTmVlZHNGdWxsUmVwYWludEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpCiAKIFJlbmRl
ckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0
byBvID0gcGFyZW50KCk7Ci0gICAgaWYgKCFvICYmIGlzUmVuZGVyU2Nyb2xsYmFyUGFydCgpKQot
ICAgICAgICBvID0gdG9SZW5kZXJTY3JvbGxiYXJQYXJ0KHRoaXMpLT5yZW5kZXJlck93bmluZ1Nj
cm9sbGJhcigpOworICAgIGF1dG8gcmVuZGVyZXIgPSBwYXJlbnQoKTsKKyAgICBpZiAoIXJlbmRl
cmVyICYmIGlzPFJlbmRlclNjcm9sbGJhclBhcnQ+KCp0aGlzKSkKKyAgICAgICAgcmVuZGVyZXIg
PSBkb3duY2FzdDxSZW5kZXJTY3JvbGxiYXJQYXJ0PigqdGhpcykucmVuZGVyZXJPd25pbmdTY3Jv
bGxiYXIoKTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7
Ci0gICAgaWYgKCFpc1RleHQoKSAmJiBzdHlsZS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24p
Ci0gICAgICAgIG8gPSBjb250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKG8pOwotICAgIGVs
c2UgaWYgKCFpc1RleHQoKSAmJiBzdHlsZS5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24p
Ci0gICAgICAgIG8gPSBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKG8pOworICAg
IGlmICghaXM8UmVuZGVyVGV4dD4oKnRoaXMpICYmIHN0eWxlLnBvc2l0aW9uKCkgPT0gRml4ZWRQ
b3NpdGlvbikKKyAgICAgICAgcmVuZGVyZXIgPSBjb250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0
aW9uKHJlbmRlcmVyKTsKKyAgICBlbHNlIGlmICghaXM8UmVuZGVyVGV4dD4oKnRoaXMpICYmIHN0
eWxlLnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikKKyAgICAgICAgcmVuZGVyZXIgPSBj
b250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKHJlbmRlcmVyKTsKICAgICBlbHNlCi0g
ICAgICAgIG8gPSBjb250YWluaW5nQmxvY2tGb3JPYmplY3RJbkZsb3cobyk7CisgICAgICAgIHJl
bmRlcmVyID0gY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KHJlbmRlcmVyKTsKIAotICAg
IGlmICghbyB8fCAhby0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICByZXR1cm4gMDsgLy8gVGhp
cyBjYW4gc3RpbGwgaGFwcGVuIGluIGNhc2Ugb2YgYW4gb3JwaGFuZWQgdHJlZQorICAgIGlmICgh
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7IC8vIFRo
aXMgY2FuIHN0aWxsIGhhcHBlbiBpbiBjYXNlIG9mIGFuIG9ycGhhbmVkIHRyZWUKIAotICAgIHJl
dHVybiB0b1JlbmRlckJsb2NrKG8pOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIpOwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRlKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0
IHgyLCBmbG9hdCB5MiwKQEAgLTE2NzksMTAgKzE2NzksMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OmhhbmRsZUR5bmFtaWNGbG9hdFBvc2l0aW9uQ2hhbmdlKCkKICAgICBzZXRJbmxpbmUoc3R5bGUo
KS5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkpOwogICAgIGlmIChpc0lubGluZSgpICE9IHBhcmVudCgp
LT5jaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIGlmICghaXNJbmxpbmUoKSkKLSAgICAgICAg
ICAgIHRvUmVuZGVyQm94TW9kZWxPYmplY3QocGFyZW50KCkpLT5jaGlsZEJlY2FtZU5vbklubGlu
ZSh0aGlzKTsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcGFy
ZW50KCkpLmNoaWxkQmVjYW1lTm9uSW5saW5lKHRoaXMpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIC8vIEFuIGFub255bW91cyBibG9jayBtdXN0IGJlIG1hZGUgdG8gd3JhcCB0aGlzIGlu
bGluZS4KLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxvY2socGFy
ZW50KCkpLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgICAgICAgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkuY3JlYXRlQW5vbnltb3Vz
QmxvY2soKTsKICAgICAgICAgICAgIHBhcmVudCgpLT5pbnNlcnRDaGlsZEludGVybmFsKGJsb2Nr
LCB0aGlzLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBwYXJl
bnQoKS0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqdGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hp
bGRyZW4pOwogICAgICAgICAgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwodGhpcywgbnVs
bHB0ciwgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwpAQCAtMTY5Miw4ICsxNjkyLDgg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OmhhbmRsZUR5bmFtaWNGbG9hdFBvc2l0aW9uQ2hhbmdlKCkK
IAogdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91c1dyYXBwZXJzRm9ySW5saW5lc0lm
TmVjZXNzYXJ5KCkKIHsKLSAgICBSZW5kZXJCbG9jayogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJs
b2NrKHBhcmVudCgpKTsKLSAgICBpZiAoIXBhcmVudEJsb2NrLT5jYW5Db2xsYXBzZUFub255bW91
c0Jsb2NrQ2hpbGQoKSkKKyAgICBSZW5kZXJCbG9jayYgcGFyZW50QmxvY2sgPSBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKnBhcmVudCgpKTsKKyAgICBpZiAoIXBhcmVudEJsb2NrLmNhbkNvbGxhcHNl
QW5vbnltb3VzQmxvY2tDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBoYXZl
IGNoYW5nZWQgdG8gZmxvYXRlZCBvciBvdXQtb2YtZmxvdyBwb3NpdGlvbmluZyBzbyBtYXliZSBh
bGwgb3VyIHBhcmVudCdzCkBAIC0xNzAxLDE5ICsxNzAxLDE5IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpyZW1vdmVBbm9ueW1vdXNXcmFwcGVyc0ZvcklubGluZXNJZk5lY2Vzc2FyeSgpCiAgICAgLy8g
b3RoZXJ3aXNlIHdlIGNhbiBwcm9jZWVkIHRvIHN0cmlwcGluZyBzb2xpdGFyeSBhbm9ueW1vdXMg
d3JhcHBlcnMgZnJvbSB0aGUgaW5saW5lcy4KICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsc28g
aGFuZGxlIHNwbGl0IGlubGluZXMgaGVyZSAtIHdlIGV4Y2x1ZGUgdGhlbSBhdCB0aGUgbW9tZW50
IGJ5IHJldHVybmluZwogICAgIC8vIGlmIHdlIGZpbmQgYSBjb250aW51YXRpb24uCi0gICAgUmVu
ZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY3Vy
ciAmJiAoKGN1cnItPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9jayhjdXJyKS0+
aXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKSB8fCBjdXJyLT5zdHlsZSgpLmlzRmxvYXRp
bmcoKSB8fCBjdXJyLT5zdHlsZSgpLmhhc091dE9mRmxvd1Bvc2l0aW9uKCkpKQotICAgICAgICBj
dXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBw
YXJlbnQoKS0+Zmlyc3RDaGlsZCgpOworICAgIHdoaWxlIChjdXJyZW50ICYmICgoY3VycmVudC0+
aXNBbm9ueW1vdXNCbG9jaygpICYmICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpLmlz
QW5vbnltb3VzQmxvY2tDb250aW51YXRpb24oKSkgfHwgY3VycmVudC0+c3R5bGUoKS5pc0Zsb2F0
aW5nKCkgfHwgY3VycmVudC0+c3R5bGUoKS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpKSkKKyAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICBpZiAoY3VycikKKyAg
ICBpZiAoY3VycmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY3VyciA9IHBhcmVudCgpLT5m
aXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGN1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBu
ZXh0ID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKGN1cnItPmlzQW5vbnltb3Vz
QmxvY2soKSkKLSAgICAgICAgICAgIHBhcmVudEJsb2NrLT5jb2xsYXBzZUFub255bW91c0JveENo
aWxkKHBhcmVudEJsb2NrLCB0b1JlbmRlckJsb2NrKGN1cnIpKTsKLSAgICAgICAgY3VyciA9IG5l
eHQ7CisgICAgY3VycmVudCA9IHBhcmVudCgpLT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGN1
cnJlbnQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAg
ICAgIHBhcmVudEJsb2NrLmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQocGFyZW50QmxvY2ssIGRv
d25jYXN0PFJlbmRlckJsb2NrPihjdXJyZW50KSk7CisgICAgICAgIGN1cnJlbnQgPSBuZXh0Owog
ICAgIH0KIH0KIApAQCAtMjI3MCwxMiArMjI3MCwxMiBAQCBzdGF0aWMgQ29sb3IgZGVjb3JhdGlv
bkNvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSkKIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVj
b3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9yJiB1bmRlcmxpbmUsIENvbG9yJiBv
dmVybGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xv
ciYgbGluZXRocm91Z2gsIGJvb2wgcXVpcmtzTW9kZSwgYm9vbCBmaXJzdGxpbmVTdHlsZSkKIHsK
LSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSB0aGlzOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZVRv
VXNlID0gMDsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSB0aGlzOworICAgIFJlbmRlclN0
eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3JhdGlvbiBjdXJyRGVjcyA9
IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xvcjsKICAgICBkbyB7Ci0g
ICAgICAgIHN0eWxlVG9Vc2UgPSBmaXJzdGxpbmVTdHlsZSA/ICZjdXJyLT5maXJzdExpbmVTdHls
ZSgpIDogJmN1cnItPnN0eWxlKCk7CisgICAgICAgIHN0eWxlVG9Vc2UgPSBmaXJzdGxpbmVTdHls
ZSA/ICZjdXJyZW50LT5maXJzdExpbmVTdHlsZSgpIDogJmN1cnJlbnQtPnN0eWxlKCk7CiAgICAg
ICAgIGN1cnJEZWNzID0gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRpb24oKTsKICAgICAgICAgcmVz
dWx0Q29sb3IgPSBkZWNvcmF0aW9uQ29sb3Ioc3R5bGVUb1VzZSk7CiAgICAgICAgIC8vIFBhcmFt
ZXRlciAnZGVjb3JhdGlvbnMnIGlzIGNhc3QgYXMgYW4gaW50IHRvIGVuYWJsZSB0aGUgYml0d2lz
ZSBvcGVyYXRpb25zIGJlbG93LgpAQCAtMjI5MywxNiArMjI5MywxNiBAQCB2b2lkIFJlbmRlck9i
amVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMoaW50IGRlY29yYXRpb25zLCBDb2xvciYgdW5k
ZXJsaW5lLCBDbwogICAgICAgICAgICAgICAgIGxpbmV0aHJvdWdoID0gcmVzdWx0Q29sb3I7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnItPmlzUnVieVRleHQoKSkK
KyAgICAgICAgaWYgKGN1cnJlbnQtPmlzUnVieVRleHQoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwotICAgICAgICBpZiAoY3VyciAmJiBjdXJy
LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhjdXJyKS0+Y29udGludWF0aW9u
KCkpCi0gICAgICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhjdXJyKS0+Y29udGludWF0aW9u
KCk7Ci0gICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwg
IWN1cnItPm5vZGUoKSB8fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50PigqY3Vyci0+bm9kZSgpKSAm
JiAhY3Vyci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOworICAgICAgICBjdXJyZW50
ID0gY3VycmVudC0+cGFyZW50KCk7CisgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQtPmlz
QW5vbnltb3VzQmxvY2soKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpLmNvbnRp
bnVhdGlvbigpKQorICAgICAgICAgICAgY3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigq
Y3VycmVudCkuY29udGludWF0aW9uKCk7CisgICAgfSB3aGlsZSAoY3VycmVudCAmJiBkZWNvcmF0
aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnJlbnQtPm5vZGUoKSB8fCAoIWlzPEhUTUxBbmNo
b3JFbGVtZW50PigqY3VycmVudC0+bm9kZSgpKSAmJiAhY3VycmVudC0+bm9kZSgpLT5oYXNUYWdO
YW1lKGZvbnRUYWcpKSkpOwogCiAgICAgLy8gSWYgd2UgYmFpbGVkIG91dCwgdXNlIHRoZSBlbGVt
ZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBhIDxmb250PiBvciA8YT4gZWxlbWVudCku
Ci0gICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsKLSAgICAgICAgc3R5bGVUb1VzZSA9IGZp
cnN0bGluZVN0eWxlID8gJmN1cnItPmZpcnN0TGluZVN0eWxlKCkgOiAmY3Vyci0+c3R5bGUoKTsK
KyAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3VycmVudCkgeworICAgICAgICBzdHlsZVRvVXNlID0g
Zmlyc3RsaW5lU3R5bGUgPyAmY3VycmVudC0+Zmlyc3RMaW5lU3R5bGUoKSA6ICZjdXJyZW50LT5z
dHlsZSgpOwogICAgICAgICByZXN1bHRDb2xvciA9IGRlY29yYXRpb25Db2xvcihzdHlsZVRvVXNl
KTsKICAgICAgICAgaWYgKGRlY29yYXRpb25zICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpCiAg
ICAgICAgICAgICB1bmRlcmxpbmUgPSByZXN1bHRDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5LmNwcAppbmRleCA1MWIwZDFjMDdhNjdlMGIyMTUxMGRhZjU0YjA1YWQ5Y2U0
MDEzZWE4Li5jZGVjNTlhMDVhYjY1ZWM3NWM5ODgxYjc5ODhlMzNjYTVhYTE2MTFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCkBAIC03NSwxMyArNzUsMTMgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzUnVieUFmdGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QmVmb3JlQmxvY2soY29uc3QgUmVu
ZGVyRWxlbWVudCogcnVieSkKIHsKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcnVieS0+Zmly
c3RDaGlsZCgpOwotICAgIHJldHVybiBpc1J1YnlCZWZvcmVCbG9jayhjaGlsZCkgPyB0b1JlbmRl
ckJsb2NrKGNoaWxkKSA6IDA7CisgICAgcmV0dXJuIGlzUnVieUJlZm9yZUJsb2NrKGNoaWxkKSA/
IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkgOiBudWxscHRyOwogfQogCiBzdGF0aWMgaW5s
aW5lIFJlbmRlckJsb2NrKiBydWJ5QWZ0ZXJCbG9jayhjb25zdCBSZW5kZXJFbGVtZW50KiBydWJ5
KQogewogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGQoKTsKLSAgICBy
ZXR1cm4gaXNSdWJ5QWZ0ZXJCbG9jayhjaGlsZCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7
CisgICAgcmV0dXJuIGlzUnVieUFmdGVyQmxvY2soY2hpbGQpID8gZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KGNoaWxkKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBSZW5kZXJCbG9jayogY3JlYXRlQW5v
bnltb3VzUnVieUlubGluZUJsb2NrKFJlbmRlck9iamVjdCYgcnVieSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCmluZGV4IDdkYmUxNDViNTg1NzRhNTZiODY3
MzgyNDU1NzI3MjNmNjM0Y2Q4N2UuLmVhMGNkNjM4NDRlNGM2NmUwZGUxNTY2YWJjNjYyMzUyODQw
NDQ4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcApA
QCAtOTIsNyArOTIsNyBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3ZlSW5saW5lQ2hpbGRyZW4o
UmVuZGVyUnVieUJhc2UqIHRvQmFzZSwgUmVuZGVyT2JqZWN0KiBiZQogICAgICAgICAvLyBJZiB0
b0Jhc2UgaGFzIGEgc3VpdGFibGUgYmxvY2ssIHdlIHJlLXVzZSBpdCwgb3RoZXJ3aXNlIGNyZWF0
ZSBhIG5ldyBvbmUuCiAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkID0gdG9CYXNlLT5s
YXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQtPmlzQW5vbnlt
b3VzQmxvY2soKSAmJiBsYXN0Q2hpbGQtPmNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAgICAgICB0
b0Jsb2NrID0gdG9SZW5kZXJCbG9jayhsYXN0Q2hpbGQpOworICAgICAgICAgICAgdG9CbG9jayA9
IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGQpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHRvQmxvY2sgPSB0b0Jhc2UtPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CiAgICAgICAg
ICAgICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9jaywgbnVsbHB0ciwgTm90aWZ5
Q2hpbGRyZW4pOwpAQCAtMTE4LDggKzExOCw4IEBAIHZvaWQgUmVuZGVyUnVieUJhc2U6Om1vdmVC
bG9ja0NoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJlbmRlck9iamVjdCogYmVmCiAg
ICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGRUaGVyZSA9IHRvQmFzZS0+bGFzdENoaWxkKCk7CiAg
ICAgaWYgKGZpcnN0Q2hpbGRIZXJlLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmlyc3RDaGlsZEhl
cmUtPmNoaWxkcmVuSW5saW5lKCkgCiAgICAgICAgICAgICAmJiBsYXN0Q2hpbGRUaGVyZSAmJiBs
YXN0Q2hpbGRUaGVyZS0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGxhc3RDaGlsZFRoZXJlLT5jaGls
ZHJlbklubGluZSgpKSB7ICAgICAgICAgICAgCi0gICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxv
Y2tIZXJlID0gdG9SZW5kZXJCbG9jayhmaXJzdENoaWxkSGVyZSk7Ci0gICAgICAgIFJlbmRlckJs
b2NrKiBhbm9uQmxvY2tUaGVyZSA9IHRvUmVuZGVyQmxvY2sobGFzdENoaWxkVGhlcmUpOworICAg
ICAgICBSZW5kZXJCbG9jayogYW5vbkJsb2NrSGVyZSA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihm
aXJzdENoaWxkSGVyZSk7CisgICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2tUaGVyZSA9IGRv
d25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGRUaGVyZSk7CiAgICAgICAgIGFub25CbG9ja0hl
cmUtPm1vdmVBbGxDaGlsZHJlblRvKGFub25CbG9ja1RoZXJlLCB0cnVlKTsKICAgICAgICAgYW5v
bkJsb2NrSGVyZS0+ZGVsZXRlTGluZXMoKTsKICAgICAgICAgYW5vbkJsb2NrSGVyZS0+ZGVzdHJv
eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDMz
NTU1NDZlZTY3NjU1YjNkZTBlOGZiN2I1YWRhYmM3OTdiM2U5YTguLjhkNTFmYzQzZGZlZGJmZjZk
MjE4NGM1ZDA3Y2U5Njg5NDZiOTM4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KQEAgLTE4MjEsMTUgKzE4MjEsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCiB7CiAgICAgaWYg
KHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghby5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFpczxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0
IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9ICp0b1JlbmRlckJsb2NrKCZvKTsKKyAgICBjb25z
dCBSZW5kZXJCbG9jayYgcmVuZGVyQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVy
ZXIpOwogCiAgICAgTGF5b3V0VW5pdCBjb250ZW50V2lkdGggPSByZW5kZXJCbG9jay5jb250ZW50
V2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHQgPSByZW5kZXJCbG9jay5jb250
ZW50SGVpZ2h0KCk7CkBAIC0xODc4LDcgKzE4NzgsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0
CiAKICAgICAvLyBXZSBjb3VsZCBkcmF3IHRoZSBzbmFwc2hvdCB3aXRoIHRoYXQgY29vcmRpbmF0
ZXMsIGJ1dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZQogICAgIC8vIGlzbid0IGEgY29tcG9z
aXRlZCBsYXllciBiZXR3ZWVuIHVzIGFuZCB0aGUgcGx1Z0luUmVuZGVyZXIuCi0gICAgY29uc3Qg
UmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveCgmbyk7CisgICAgY29uc3QgUmVuZGVy
Qm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveCgmcmVuZGVyZXIpOwogICAgIHdoaWxlIChyZW5k
ZXJCb3ggIT0gcGx1Z0luUmVuZGVyZXIpIHsKICAgICAgICAgaWYgKHJlbmRlckJveC0+aGFzTGF5
ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCkgJiYgcmVuZGVyQm94LT5sYXllcigpLT5pc0NvbXBv
c2l0ZWQoKSkgewogICAgICAgICAgICAgc25hcHNob3RBYnNQb3MgPSAtcmVuZGVyQm94LT5sb2Nh
dGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4
IDc0YzNjMGEwYmNjYTdlYzQ3YWFhYzljMzMzNjZkMGZjMzk5MmQ1MGYuLmI3YjY0ZWE3ODRjYTE4
NmEyNWY5NDFlZjRjMGY4YjYzZjU5MTgxY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEF1dG9zaXplci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6
OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAgICB9CiAKICAgICAv
LyBUaGUgbGF5b3V0Um9vdCBjb3VsZCBiZSBuZWl0aGVyIGEgY29udGFpbmVyIG5vciBhIGNsdXN0
ZXIsIHNvIHdhbGsgdXAgdGhlIHRyZWUgdGlsbCB3ZSBmaW5kIGVhY2ggb2YgdGhlc2UuCi0gICAg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IGxheW91dFJvb3QtPmlzUmVuZGVyQmxvY2soKSA/IHRv
UmVuZGVyQmxvY2sobGF5b3V0Um9vdCkgOiBsYXlvdXRSb290LT5jb250YWluaW5nQmxvY2soKTsK
KyAgICBSZW5kZXJCbG9jayogY29udGFpbmVyID0gaXM8UmVuZGVyQmxvY2s+KCpsYXlvdXRSb290
KSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXlvdXRSb290KSA6IGxheW91dFJvb3QtPmNvbnRh
aW5pbmdCbG9jaygpOwogICAgIHdoaWxlIChjb250YWluZXIgJiYgIWlzQXV0b3NpemluZ0NvbnRh
aW5lcihjb250YWluZXIpKQogICAgICAgICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5p
bmdCbG9jaygpOwogCkBAIC0yMDQsMTQgKzIwNCwxNCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnBy
b2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
VAogCiAgICAgUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGlu
Z0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKHN1YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7CiAgICAg
d2hpbGUgKGRlc2NlbmRhbnQpIHsKLSAgICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzVGV4dCgpKSB7
CisgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAg
IGlmIChsb2NhbE11bHRpcGxpZXIgIT0gMSAmJiBkZXNjZW5kYW50LT5zdHlsZSgpLT50ZXh0QXV0
b3NpemluZ011bHRpcGxpZXIoKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgc2V0TXVsdGlwbGll
cihkZXNjZW5kYW50LCBsb2NhbE11bHRpcGxpZXIpOwogICAgICAgICAgICAgICAgIHNldE11bHRp
cGxpZXIoZGVzY2VuZGFudC0+cGFyZW50KCksIGxvY2FsTXVsdGlwbGllcik7IC8vIFBhcmVudCBk
b2VzIGxpbmUgc3BhY2luZy4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
bmNyZWFzZSBsaXN0IG1hcmtlciBzaXplIHByb3BvcnRpb25hdGVseS4KICAgICAgICAgfSBlbHNl
IGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkpIHsKLSAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwor
ICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPihkZXNjZW5kYW50KTsKICAgICAgICAgICAgIFRleHRBdXRvc2l6aW5nQ2x1c3Rlcklu
Zm8gZGVzY2VuZGFudENsdXN0ZXJJbmZvKGRlc2NlbmRhbnRCbG9jayk7CiAgICAgICAgICAgICBp
ZiAoaXNXaWRlckRlc2NlbmRhbnQoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbykgfHwgaXNJ
bmRlcGVuZGVudERlc2NlbmRhbnQoZGVzY2VuZGFudEJsb2NrKSkKICAgICAgICAgICAgICAgICBw
cm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50Q2x1c3RlckluZm8sIGRlc2NlbmRhbnRCbG9jaywgZGVz
Y2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCB2b2lkIFRleHRB
dXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBj
b250YWluZXIsIFRleAogICAgICAgICBpZiAoIXNraXBMb2NhbFRleHQgJiYgaXM8UmVuZGVyVGV4
dD4oKmRlc2NlbmRhbnQpKQogICAgICAgICAgICAgdGV4dFdpZHRoICs9IGRvd25jYXN0PFJlbmRl
clRleHQ+KCpkZXNjZW5kYW50KS5yZW5kZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0
eWxlKCktPnNwZWNpZmllZEZvbnRTaXplKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXV0b3Npemlu
Z0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2Nl
bmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFudCk7CisgICAgICAgICAgICBSZW5k
ZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGRlc2NlbmRh
bnQpOwogICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9j
aywgY2x1c3RlckluZm8pKQogICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdp
ZHRoKGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8sIG1pblRleHRXaWR0aCwgdGV4dFdpZHRo
KTsKICAgICAgICAgfQpAQCAtNTQyLDggKzU0Miw4IEBAIGNvbnN0IFJlbmRlckJsb2NrKiBUZXh0
QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVy
CiAgICAgICAgIGxhc3ROb2RlID0gbGFzdE5vZGUtPnBhcmVudCgpOwogICAgIH0KIAotICAgIGlm
IChmaXJzdE5vZGUtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyQmxv
Y2soZmlyc3ROb2RlKTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpmaXJzdE5vZGUpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGZpcnN0Tm9kZSk7CiAKICAgICAvLyBj
b250YWluaW5nQmxvY2soKSBzaG91bGQgbmV2ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNlIGl0
IG9ubHkgc2tpcHMgYW5jZXN0b3JzIHdoZW4gZmluZGluZyB0aGUKICAgICAvLyBjb250YWluZXIg
b2YgcG9zaXRpb246YWJzb2x1dGUvZml4ZWQgYmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4aXN0
IGJldHdlZW4gYSBjbHVzdGVyIGFuZCBpdHMgdGV4dApAQCAtNTU4LDIxICs1NTgsMjAgQEAgY29u
c3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5n
QWxsVGV4dChjb25zdCBSZW5kZXIKIGNvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6
ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQs
IHNpemVfdCYgZGVwdGgsIFRyYXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYg
KHBhcmVudC0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGFyZW50LT5pc1RleHQoKSA/IHBh
cmVudCA6IDA7CisgICAgICAgIHJldHVybiBpczxSZW5kZXJUZXh0PigqcGFyZW50KSA/IHBhcmVu
dCA6IG51bGxwdHI7CiAKICAgICArK2RlcHRoOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hp
bGQgPSAoZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDog
cGFyZW50LT5sYXN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFp
c0F1dG9zaXppbmdDb250YWluZXIoY2hpbGQpIHx8ICFpc0luZGVwZW5kZW50RGVzY2VuZGFudCh0
b1JlbmRlckJsb2NrKGNoaWxkKSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCog
bGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0
aW9uKTsKLSAgICAgICAgICAgIGlmIChsZWFmKQorICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0Nv
bnRhaW5lcihjaGlsZCkgfHwgIWlzSW5kZXBlbmRlbnREZXNjZW5kYW50KGRvd25jYXN0PFJlbmRl
ckJsb2NrPihjaGlsZCkpKSB7CisgICAgICAgICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBs
ZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rp
b24pKQogICAgICAgICAgICAgICAgIHJldHVybiBsZWFmOwogICAgICAgICB9CiAgICAgICAgIGNo
aWxkID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6
IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB9CiAgICAgLS1kZXB0aDsKIAotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5k
ZXggMjgwNjM5MDY4ZDU2YWQ5MGEyNzkyNDJmNzVmOWE3MDk3OWU4NDQzNS4uYjYzYWNmNDExY2Nh
ZDM1YjMwODY1MWUxOTA5M2MyYTA1NjcwN2JlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCkBAIC0zMDAsNyArMzAwLDcg
QEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlvdXQoKQogICAgICAgICAgICAgYXV0byBpbmRl
eCA9IGluZGV4V3JhcHBlcigpOwogICAgICAgICAgICAgZmxvYXQgaW5kZXhIZWlnaHQgPSAwOwog
ICAgICAgICAgICAgaWYgKCFpbmRleC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGluZGV4
SGVpZ2h0ID0gdG9SZW5kZXJCbG9jayhpbmRleC0+Zmlyc3RDaGlsZCgpKS0+bG9naWNhbEhlaWdo
dCgpOworICAgICAgICAgICAgICAgIGluZGV4SGVpZ2h0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KCppbmRleC0+Zmlyc3RDaGlsZCgpKS5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgICAgICBmbG9h
dCBpbmRleFRvcE1hcmdpbiA9ICgxLjAgLSBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCkgKiBy
YWRpY2FsLT5zdHJldGNoU2l6ZSgpICsgcmFkaWNhbFRvcE1hcmdpbiAtIGluZGV4SGVpZ2h0Owog
ICAgICAgICAgICAgaWYgKGluZGV4VG9wTWFyZ2luIDwgMCkgewogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBpbmRleCBpcyB0b28gdGFsbCwgd2UgbXVzdCBhZGQgc3BhY2UgYXQgdGhlIHRvcCBv
ZiByZW5kZXJlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQppbmRleCA5NTY5ODNiYWZiMjFlYmZiYTE3Zjg3MWEwYjBmN2MxZjNh
ZWIzYTViLi4zMDAxMDU5ZWYxMWRjNzNiYmFmMDIyYWRlZTJiZjBhMGY1ODViNmNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CkBAIC03NzQsNyArNzc0LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JX
ZWJTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwKICAgICBpZiAoIXJl
bmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLnVzZXJTZWxlY3QoKSA9PSBTRUxFQ1RfTk9ORSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAocmVuZGVyZXItPmNoaWxkcmVuSW5s
aW5lKCkgJiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVu
ZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpICYmICFyZW5kZXJlci0+aXNUYWJs
ZSgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpICYmIChpczxSZW5kZXJC
bG9jaz4oKnJlbmRlcmVyKSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpKSAmJiAhcmVuZGVyZXItPmlzVGFibGUoKSkgewogICAg
ICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29y
ZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25CYWNrd2FyZCk7CiAgICAgICAgIGlmIChyYW5nZSAmJiAh
cmFuZ2UtPmNvbGxhcHNlZChBU1NFUlRfTk9fRVhDRVBUSU9OKSkKICAgICAgICAgICAgIHJldHVy
biByYW5nZTsKQEAgLTEzMTYsNyArMTMxNiw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6
OmNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoUmFuZ2UqIGN1cnJlbnRSYW5nZSwgU2VsZWN0CiAg
ICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRFbGVtZW50KCk7CiAKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVy
ZXItPmNoaWxkcmVuSW5saW5lKCkgJiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRv
UmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpICYmICFy
ZW5kZXJlci0+aXNUYWJsZSgpKQorICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRy
ZW5JbmxpbmUoKSAmJiAoaXM8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJl
bmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgJiYgIXJl
bmRlcmVyLT5pc1RhYmxlKCkpCiAgICAgICAgIGZsYWdzID0gTm9uZTsKIAogICAgIHJldHVybiBi
ZXN0UmFuZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239458</attachid>
            <date>2014-10-07 23:13:26 -0700</date>
            <delta_ts>2014-10-08 13:00:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137512-20141007231328.patch</filename>
            <type>text/plain</type>
            <size>120759</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFhZTViYTczNzk5ZDU3
MGIzYjdkYjZkMTEyMDQwZTQ5NDZjNGZjNi4uYzJjN2FiY2Y2M2IwNTI2ZjRiZGJjMmVmNWVkM2Iz
NjVmMzgzOWZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNC0xMC0wNyAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQmxvY2sgb2JqZWN0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NTEyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBm
b3IgUmVuZGVyQmxvY2sgb2JqZWN0cyBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIHN1cnJvdW5k
aW5nIGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Omxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RhcnRPZkNvbnRpbnVhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5kT2ZDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkQmVmb3JlQ29uc2lk
ZXJpbmdDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29u
dGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnJlbmRlclBhcmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVVJ
S2l0RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBjb250YWluc09ubHlJbmxpbmVP
YmplY3RzXSk6CisgICAgICAgICgtW0RPTU5vZGUgaXNTZWxlY3RhYmxlQmxvY2tdKToKKyAgICAg
ICAgKC1bRE9NSFRNTEVsZW1lbnQgc3RydWN0dXJhbENvbXBsZXhpdHlDb250cmlidXRpb25dKToK
KyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnZhbHVlRm9yR3JpZFRyYWNrTGlzdCk6CisgICAgICAgICogZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnNob3VsZFJl
cHJlc2VudE5vZGVPZmZzZXRaZXJvKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRhaW5pbmdCbG9ja0ZvckFic29sdXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzcGxpdEJsb2Nrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjYW5NZXJnZUFub255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhbk1lcmdlQ29udGlndW91c0Fub255bW91c0Jsb2Nrcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpibG9ja0JlZm9yZVdpdGhpblNlbGVjdGlvblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6aXND
aGlsZEhpdFRlc3RDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZp
cnN0TGluZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdExldHRlckJsb2NrKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklubGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmspOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc01hcmdpbkFmdGVyUXVpcmspOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjptYXJnaW5C
ZWZvcmVFc3RpbWF0ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93OjphZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrRmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdo
dEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rp
c3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVsYXRlSW5GbG93UG9zaXRpb25PZmZz
ZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRU
byk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkcmVu
VG8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQ
YXJlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVTdHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENv
bnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJlbnRPZkZpcnN0TGlu
ZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFy
a2VyUmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6
cG9zaXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6
Om1heFBhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVOb25GaXhlZEhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNoZWNrQmxvY2tQb3NpdGlvbmVkT2JqZWN0c05lZWRM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3Np
dGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255
bW91c1dyYXBwZXJzRm9ySW5saW5lc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJSdWJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1YnlCZWZvcmVCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpydWJ5QWZ0ZXJCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjptb3Zl
SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVC
bG9ja0NoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92
ZXJsYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90SW5D
bHVzdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KToKKwogMjAxNC0x
MC0wOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgU2FmYXJpIDgg
b24gT1NYIDEwLjEwIGRvZXMgbm90IHJ1biBXZWJHTCBpbiBSZXRpbmEgSGlEUEkgbW9kZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBmMjlkYWMzNTA0OWQyNWUyYTU3NjMyZmI4MGNkMDVjMTYyMmVjMDY4Li41MTg3
YTk1Y2ZkNDJjYzUxZDFmZmZiMWI5ZTBjY2E2ZGMwYWZiOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTkgQEAKIDIwMTQtMTAtMDcgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9i
amVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NzUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9iamVjdHMgYW5kIGNsZWFu
IHVwIHRoZSAKKyAgICAgICAgc3Vycm91bmRpbmcgY29kZS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZSk6CisKKzIwMTQtMTAtMDcgIENocmlzdG9waGUg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIFtXSzJdIFVzZSBpczw+KCkgLyBk
b3duY2FzdDw+KCkgZm9yIERyYXdpbmdBcmVhIHN1YmNsYXNzZXMKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQ5NwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAppbmRleCBlZjMyMThmNGFlM2YzMjQyYmZhMzY3ZDY3OWU4NTI1MjBkNTU1YjJmLi4wMzNiYzQz
ZTVmNzhiODBiNTIzOGExYzc3MWUwMDMwODdiMWNmMWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
QEAgLTE4NiwxMiArMTg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJzdENo
aWxkSW5Db250aW51YXRpb24oUmVuZGVySW5saW5lJiByZW5kZXJlcikKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRl
cmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGlubGluZSBS
ZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKQogewotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVy
LT5maXJzdENoaWxkU2xvdygpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRl
cmVyLmZpcnN0Q2hpbGRTbG93KCk7CiAKLSAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxpbmVX
aXRoQ29udGludWF0aW9uKHJlbmRlcmVyKSkKLSAgICAgICAgZmlyc3RDaGlsZCA9IGZpcnN0Q2hp
bGRJbkNvbnRpbnVhdGlvbih0b1JlbmRlcklubGluZSgqcmVuZGVyZXIpKTsKKyAgICBpZiAoIWZp
cnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKCZyZW5kZXJlcikpCisgICAgICAg
IGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkSW5Db250aW51YXRpb24oZG93bmNhc3Q8UmVuZGVySW5s
aW5lPihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiB9CkBAIC0yMDAsMjMg
KzIwMCwyMyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZENvbnNpZGVy
aW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZAogc3RhdGljIGlubGluZSBSZW5kZXJP
YmplY3QqIGxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENo
aWxkU2xvdygpOwotICAgIFJlbmRlck9iamVjdCogcHJldjsKLSAgICBSZW5kZXJPYmplY3QqIGN1
ciA9IHJlbmRlcmVyOworICAgIFJlbmRlck9iamVjdCogcHJldmlvdXM7CisgICAgUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50ID0gcmVuZGVyZXI7CiAKLSAgICBpZiAoIWN1ci0+aXNSZW5kZXJJbmxpbmUo
KSAmJiAhY3VyLT5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KCpj
dXJyZW50KSAmJiAhaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50KSkKICAgICAgICAgcmV0dXJuIHJl
bmRlcmVyOwogCi0gICAgd2hpbGUgKGN1cikgewotICAgICAgICBwcmV2ID0gY3VyOworICAgIHdo
aWxlIChjdXJyZW50KSB7CisgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKIAotICAgICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiBsYyA9IGN1ci0+bGFzdENoaWxkU2xvdygpKQotICAgICAgICAgICAg
bGFzdENoaWxkID0gbGM7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIG5ld0xhc3RDaGlsZCA9
IGN1cnJlbnQtPmxhc3RDaGlsZFNsb3coKSkKKyAgICAgICAgICAgIGxhc3RDaGlsZCA9IG5ld0xh
c3RDaGlsZDsKIAotICAgICAgICBpZiAoY3VyLT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAg
ICAgICBjdXIgPSB0b1JlbmRlcklubGluZShjdXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHByZXYsIGN1ciB8fCAhdG9SZW5kZXJJbmxp
bmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4o
KmN1cnJlbnQpKSB7CisgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVySW5saW5l
PigqY3VycmVudCkuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChwcmV2aW91cywgY3VycmVudCB8fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigq
cHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBj
dXIgPSB0b1JlbmRlckJsb2NrKGN1ciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKKyAg
ICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpLmlubGlu
ZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4gbGFzdENoaWxkOwpA
QCAtMjI3LDcgKzIyNyw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkID0g
Zmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKG1fcmVuZGVyZXIpOworICAgIFJlbmRl
ck9iamVjdCogZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbigq
bV9yZW5kZXJlcik7CiAKICAgICAvLyBJZiBhbiBvYmplY3QgY2FuJ3QgaGF2ZSBjaGlsZHJlbiwg
dGhlbiBpdCBpcyB1c2luZyB0aGlzIG1ldGhvZCB0byBoZWxwCiAgICAgLy8gY2FsY3VsYXRlIHNv
bWUgaW50ZXJuYWwgcHJvcGVydHkgKGxpa2UgaXRzIGRlc2NyaXB0aW9uKS4KQEAgLTI1Miw2MiAr
MjUyLDYxIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
Omxhc3RDaGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUobGFzdENoaWxkKTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZD
b250aW51YXRpb25zKFJlbmRlck9iamVjdCogcikKK3N0YXRpYyBpbmxpbmUgUmVuZGVySW5saW5l
KiBzdGFydE9mQ29udGludWF0aW9ucyhSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIGlm
IChyLT5pc0lubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRvUmVu
ZGVySW5saW5lKHItPm5vZGUoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKHJlbmRlcmVyLmlzSW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihyZW5kZXJlci5ub2RlKCktPnJlbmRlcmVyKCkpOwogCiAgICAgLy8gQmxvY2tzIHdp
dGggYSBwcmV2aW91cyBjb250aW51YXRpb24gYWx3YXlzIGhhdmUgYSBuZXh0IGNvbnRpbnVhdGlv
bgotICAgIGlmIChyLT5pc1JlbmRlckJsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhyKS0+aW5saW5l
RWxlbWVudENvbnRpbnVhdGlvbigpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUodG9S
ZW5kZXJCbG9jayhyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5lbGVtZW50KCktPnJl
bmRlcmVyKCkpOworICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpICYmIGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5saW5lPihkb3duY2FzdDxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+ZWxlbWVudCgpLT5yZW5kZXJl
cigpKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9i
amVjdCogZW5kT2ZDb250aW51YXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMg
aW5saW5lIFJlbmRlck9iamVjdCogZW5kT2ZDb250aW51YXRpb25zKFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gcmVuZGVyZXI7Ci0gICAgUmVuZGVy
T2JqZWN0KiBjdXIgPSByZW5kZXJlcjsKKyAgICBpZiAoIWlzPFJlbmRlcklubGluZT4ocmVuZGVy
ZXIpICYmICFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gJnJlbmRl
cmVyOwogCi0gICAgaWYgKCFjdXItPmlzUmVuZGVySW5saW5lKCkgJiYgIWN1ci0+aXNSZW5kZXJC
bG9jaygpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXI7Ci0KLSAgICB3aGlsZSAoY3VyKSB7Ci0g
ICAgICAgIHByZXYgPSBjdXI7Ci0gICAgICAgIGlmIChjdXItPmlzUmVuZGVySW5saW5lKCkpIHsK
LSAgICAgICAgICAgIGN1ciA9IHRvUmVuZGVySW5saW5lKGN1ciktPmlubGluZUVsZW1lbnRDb250
aW51YXRpb24oKTsKLSAgICAgICAgICAgIEFTU0VSVChjdXIgfHwgIXRvUmVuZGVySW5saW5lKHBy
ZXYpLT5jb250aW51YXRpb24oKSk7CisgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91cyA9ICZyZW5k
ZXJlcjsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSAmcmVuZGVyZXI7CisgICAgd2hpbGUg
KGN1cnJlbnQpIHsKKyAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OworICAgICAgICBpZiAoaXM8
UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2Fz
dDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7Cisg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudCB8fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcHJl
dmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAgICAgICAgfSBlbHNlIAotICAgICAgICAgICAgY3Vy
ID0gdG9SZW5kZXJCbG9jayhjdXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAg
ICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5pbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHByZXY7CisgICAgcmV0
dXJuIHByZXZpb3VzOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBjaGlsZEJl
Zm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9ucyhSZW5kZXJJbmxpbmUqIHIsIFJlbmRlck9iamVj
dCogY2hpbGQpCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogY2hpbGRCZWZvcmVDb25zaWRl
cmluZ0NvbnRpbnVhdGlvbnMoUmVuZGVySW5saW5lKiByZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBj
aGlsZCkKIHsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3VyQ29udGFpbmVyID0gcjsKLSAg
ICBSZW5kZXJPYmplY3QqIGN1ciA9IG51bGxwdHI7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0g
bnVsbHB0cjsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3VycmVudENvbnRhaW5lciA9IHJl
bmRlcmVyOworICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IG51bGxwdHI7CisgICAgUmVuZGVy
T2JqZWN0KiBwcmV2aW91cyA9IG51bGxwdHI7CiAKLSAgICB3aGlsZSAoY3VyQ29udGFpbmVyKSB7
Ci0gICAgICAgIGlmIChjdXJDb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAg
ICAgIGN1ciA9IGN1ckNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgd2hpbGUg
KGN1cikgewotICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gY2hpbGQpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwcmV2OwotICAgICAgICAgICAgICAgIHByZXYgPSBjdXI7Ci0gICAgICAg
ICAgICAgICAgY3VyID0gY3VyLT5uZXh0U2libGluZygpOworICAgIHdoaWxlIChjdXJyZW50Q29u
dGFpbmVyKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjdXJyZW50Q29udGFpbmVy
KSkgeworICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRDb250YWluZXItPmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnQgPT0gY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAg
ICAgICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGN1ckNvbnRhaW5lciA9IHRvUmVuZGVySW5saW5lKGN1ckNvbnRhaW5lciktPmNvbnRpbnVhdGlv
bigpOwotICAgICAgICB9IGVsc2UgaWYgKGN1ckNvbnRhaW5lci0+aXNSZW5kZXJCbG9jaygpKSB7
Ci0gICAgICAgICAgICBpZiAoY3VyQ29udGFpbmVyID09IGNoaWxkKQotICAgICAgICAgICAgICAg
IHJldHVybiBwcmV2OworICAgICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGRvd25jYXN0PFJl
bmRlcklubGluZT4oKmN1cnJlbnRDb250YWluZXIpLmNvbnRpbnVhdGlvbigpOworICAgICAgICB9
IGVsc2UgaWYgKGlzPFJlbmRlckJsb2NrPigqY3VycmVudENvbnRhaW5lcikpIHsKKyAgICAgICAg
ICAgIGlmIChjdXJyZW50Q29udGFpbmVyID09IGNoaWxkKQorICAgICAgICAgICAgICAgIHJldHVy
biBwcmV2aW91czsKIAotICAgICAgICAgICAgcHJldiA9IGN1ckNvbnRhaW5lcjsKLSAgICAgICAg
ICAgIGN1ckNvbnRhaW5lciA9IHRvUmVuZGVyQmxvY2soY3VyQ29udGFpbmVyKS0+aW5saW5lRWxl
bWVudENvbnRpbnVhdGlvbigpOworICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50Q29udGFp
bmVyOworICAgICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PigqY3VycmVudENvbnRhaW5lcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0zMzIsMTUgKzMzMSwxNSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgIC8v
IENhc2UgMTogVGhlIG5vZGUgaXMgYSBibG9jayBhbmQgaXMgYW4gaW5saW5lJ3MgY29udGludWF0
aW9uLiBJbiB0aGF0IGNhc2UsIHRoZSBpbmxpbmUncwogICAgIC8vIGxhc3QgY2hpbGQgaXMgb3Vy
IHByZXZpb3VzIHNpYmxpbmcgKG9yIGZ1cnRoZXIgYmFjayBpbiB0aGUgY29udGludWF0aW9uIGNo
YWluKQogICAgIFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRzOwotICAgIGlmIChtX3JlbmRlcmVy
LT5pc1JlbmRlckJsb2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25z
KG1fcmVuZGVyZXIpKSkKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqbV9yZW5kZXJlcikgJiYgKHN0
YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyKSkpCiAgICAgICAg
IHByZXZpb3VzU2libGluZyA9IGNoaWxkQmVmb3JlQ29uc2lkZXJpbmdDb250aW51YXRpb25zKHN0
YXJ0T2ZDb250cywgbV9yZW5kZXJlcik7CiAKICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9j
ayBwYXJlbnQgb2YgdGhlIGVuZCBvZiBhIGNvbnRpbnVhdGlvbiAtIHNraXAgYWxsIHRoZSB3YXkg
dG8gYmVmb3JlCiAgICAgLy8gdGhlIHBhcmVudCBvZiB0aGUgc3RhcnQsIHNpbmNlIGV2ZXJ5dGhp
bmcgaW4gYmV0d2VlbiB3aWxsIGJlIGxpbmtlZCB1cCB2aWEgdGhlIGNvbnRpbnVhdGlvbi4KICAg
ICBlbHNlIGlmIChtX3JlbmRlcmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmlyc3RDaGlsZElz
SW5saW5lQ29udGludWF0aW9uKG1fcmVuZGVyZXIpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
Zmlyc3RQYXJlbnQgPSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5maXJzdENoaWxk
U2xvdygpKS0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0UGFyZW50ID0g
c3RhcnRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXItPmZpcnN0Q2hpbGRTbG93KCkpLT5wYXJl
bnQoKTsKICAgICAgICAgd2hpbGUgKGZpcnN0Q2hpbGRJc0lubGluZUNvbnRpbnVhdGlvbihmaXJz
dFBhcmVudCkpCi0gICAgICAgICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250aW51YXRpb25z
KGZpcnN0UGFyZW50LT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBm
aXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250aW51YXRpb25zKCpmaXJzdFBhcmVudC0+Zmlyc3RDaGls
ZCgpKS0+cGFyZW50KCk7CiAgICAgICAgIHByZXZpb3VzU2libGluZyA9IGZpcnN0UGFyZW50LT5w
cmV2aW91c1NpYmxpbmcoKTsKICAgICB9CiAKQEAgLTM1MCw3ICszNDksNyBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBj
b25zdAogCiAgICAgLy8gQ2FzZSA0OiBUaGlzIG5vZGUgaGFzIG5vIHByZXZpb3VzIHNpYmxpbmdz
LCBidXQgaXRzIHBhcmVudCBpcyBhbiBpbmxpbmUsCiAgICAgLy8gYW5kIGlzIGFub3RoZXIgbm9k
ZSdzIGlubGluZSBjb250aW51dGF0aW9uLiBGb2xsb3cgdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4K
LSAgICBlbHNlIGlmIChtX3JlbmRlcmVyLT5wYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSAmJiAo
c3RhcnRPZkNvbnRzID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlci0+cGFyZW50KCkp
KSkKKyAgICBlbHNlIGlmIChpczxSZW5kZXJJbmxpbmU+KCptX3JlbmRlcmVyLT5wYXJlbnQoKSkg
JiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyLT5wYXJl
bnQoKSkpKQogICAgICAgICBwcmV2aW91c1NpYmxpbmcgPSBjaGlsZEJlZm9yZUNvbnNpZGVyaW5n
Q29udGludWF0aW9ucyhzdGFydE9mQ29udHMsIG1fcmVuZGVyZXItPnBhcmVudCgpLT5maXJzdENo
aWxkKCkpOwogCiAgICAgaWYgKCFwcmV2aW91c1NpYmxpbmcpCkBAIC0zNzUsMTUgKzM3NCwxNSBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2li
bGluZygpIGNvbnN0CiAgICAgLy8gQ2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGhhcyBhbiBp
bmxpbmUgY29udGludWF0aW9uLiBOZXh0IHNpYmxpbmcgaXMgdGhlIGlubGluZSBjb250aW51YXRp
b24ncwogICAgIC8vIGZpcnN0IGNoaWxkLgogICAgIFJlbmRlcklubGluZSogaW5saW5lQ29udGlu
dWF0aW9uOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKGlubGluZUNv
bnRpbnVhdGlvbiA9IHRvUmVuZGVyQmxvY2sobV9yZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250
aW51YXRpb24oKSkpCi0gICAgICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5n
Q29udGludWF0aW9uKGlubGluZUNvbnRpbnVhdGlvbik7CisgICAgaWYgKGlzPFJlbmRlckJsb2Nr
PigqbV9yZW5kZXJlcikgJiYgKGlubGluZUNvbnRpbnVhdGlvbiA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPigqbV9yZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKSkKKyAgICAgICAg
bmV4dFNpYmxpbmcgPSBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oKmlubGluZUNv
bnRpbnVhdGlvbik7CiAKICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2Yg
dGhlIHN0YXJ0IG9mIGEgY29udGludWF0aW9uIC0gc2tpcCBhbGwgdGhlIHdheSB0bwogICAgIC8v
IGFmdGVyIHRoZSBwYXJlbnQgb2YgdGhlIGVuZCwgc2luY2UgZXZlcnl0aGluZyBpbiBiZXR3ZWVu
IHdpbGwgYmUgbGlua2VkIHVwIHZpYSB0aGUgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKG1f
cmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSAmJiBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24o
bV9yZW5kZXJlcikpIHsKLSAgICAgICAgUmVuZGVyRWxlbWVudCogbGFzdFBhcmVudCA9IGVuZE9m
Q29udGludWF0aW9ucyh0b1JlbmRlckJsb2NrKG1fcmVuZGVyZXIpLT5sYXN0Q2hpbGQoKSktPnBh
cmVudCgpOworICAgICAgICBSZW5kZXJFbGVtZW50KiBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51
YXRpb25zKCpkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm1fcmVuZGVyZXIpLmxhc3RDaGlsZCgpKS0+
cGFyZW50KCk7CiAgICAgICAgIHdoaWxlIChsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obGFzdFBh
cmVudCkpCi0gICAgICAgICAgICBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKGxhc3RQ
YXJlbnQtPmxhc3RDaGlsZCgpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBsYXN0UGFyZW50ID0g
ZW5kT2ZDb250aW51YXRpb25zKCpsYXN0UGFyZW50LT5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOwog
ICAgICAgICBuZXh0U2libGluZyA9IGxhc3RQYXJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQog
CkBAIC0zOTQsMTUgKzM5MywxNSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAgLy8gQ2FzZSA0OiBub2RlIGlz
IGFuIGlubGluZSB3aXRoIGEgY29udGludWF0aW9uLiBOZXh0IHNpYmxpbmcgaXMgdGhlIG5leHQg
c2libGluZyBvZiB0aGUgZW5kIAogICAgIC8vIG9mIHRoZSBjb250aW51YXRpb24gY2hhaW4uCiAg
ICAgZWxzZSBpZiAoaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKG1fcmVuZGVyZXIpKQotICAgICAg
ICBuZXh0U2libGluZyA9IGVuZE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyKS0+bmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgbmV4dFNpYmxpbmcgPSBlbmRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVy
ZXIpLT5uZXh0U2libGluZygpOwogCiAgICAgLy8gQ2FzZSA1OiBub2RlIGhhcyBubyBuZXh0IHNp
YmxpbmcsIGFuZCBpdHMgcGFyZW50IGlzIGFuIGlubGluZSB3aXRoIGEgY29udGludWF0aW9uLgog
ICAgIGVsc2UgaWYgKGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihtX3JlbmRlcmVyLT5wYXJlbnQo
KSkpIHsKLSAgICAgICAgYXV0byBjb250aW51YXRpb24gPSB0b1JlbmRlcklubGluZShtX3JlbmRl
cmVyLT5wYXJlbnQoKSktPmNvbnRpbnVhdGlvbigpOworICAgICAgICBhdXRvJiBjb250aW51YXRp
b24gPSAqZG93bmNhc3Q8UmVuZGVySW5saW5lPigqbV9yZW5kZXJlci0+cGFyZW50KCkpLmNvbnRp
bnVhdGlvbigpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FzZSA1YTogY29udGludWF0aW9uIGlz
IGEgYmxvY2sgLSBpbiB0aGlzIGNhc2UgdGhlIGJsb2NrIGl0c2VsZiBpcyB0aGUgbmV4dCBzaWJs
aW5nLgotICAgICAgICBpZiAoY29udGludWF0aW9uLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAg
ICAgICBuZXh0U2libGluZyA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJs
b2NrPihjb250aW51YXRpb24pKQorICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSAmY29udGludWF0
aW9uOwogICAgICAgICAvLyBDYXNlIDViOiBjb250aW51YXRpb24gaXMgYW4gaW5saW5lIC0gaW4g
dGhpcyBjYXNlIHRoZSBpbmxpbmUncyBmaXJzdCBjaGlsZCBpcyB0aGUgbmV4dCBzaWJsaW5nCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVy
aW5nQ29udGludWF0aW9uKGNvbnRpbnVhdGlvbik7CkBAIC00MTQsMTMgKzQxMywxMiBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygp
IGNvbnN0CiAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxp
bmcpOwogfQogCi1zdGF0aWMgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24o
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCogbmV4
dENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIEFTU0VSVChyZW5k
ZXJlcik7Ci0gICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpICYmICFyZW5kZXJlci0+
aXNSZXBsYWNlZCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5j
b250aW51YXRpb24oKTsKLSAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkKLSAgICAg
ICAgcmV0dXJuIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0
aW9uKCk7CisgICAgaWYgKGlzPFJlbmRlcklubGluZT4ocmVuZGVyZXIpICYmICFyZW5kZXJlci5p
c1JlcGxhY2VkKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRl
cmVyKS5jb250aW51YXRpb24oKTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxl
bWVudENvbnRpbnVhdGlvbigpOwogICAgIHJldHVybiBudWxscHRyOwogfQogICAgIApAQCAtNDM1
LDEyICs0MzMsMTIgQEAgUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpy
ZW5kZXJQYXJlbnRPYmplY3QoKSBjb25zdAogICAgIC8vIGlzIHRoZSBzdGFydCBvZiB0aGUgY29u
dGludWF0aW9uIGNoYWluLgogICAgIFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRzID0gbnVsbHB0
cjsKICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBudWxscHRyOwotICAgIGlmIChtX3Jl
bmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51
YXRpb25zKG1fcmVuZGVyZXIpKSkKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCptX3JlbmRlcmVy
KSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXIpKSkK
ICAgICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOwogCiAgICAgLy8gQ2FzZSAyOiBub2RlJ3Mg
cGFyZW50IGlzIGFuIGlubGluZSB3aGljaCBpcyBzb21lIG5vZGUncyBjb250aW51YXRpb247IHBh
cmVudCBpcyAKICAgICAvLyB0aGUgZWFybGllc3Qgbm9kZSBpbiB0aGUgY29udGludWF0aW9uIGNo
YWluLgotICAgIGVsc2UgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzUmVuZGVySW5saW5lKCkgJiYg
KHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKHBhcmVudCkpKQorICAgIGVsc2Ug
aWYgKGlzPFJlbmRlcklubGluZT4ocGFyZW50KSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNv
bnRpbnVhdGlvbnMoKnBhcmVudCkpKQogICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHM7CiAg
ICAgCiAgICAgLy8gQ2FzZSAzOiBUaGUgZmlyc3Qgc2libGluZyBpcyB0aGUgYmVnaW5uaW5nIG9m
IGEgY29udGludWF0aW9uIGNoYWluLiBGaW5kIHRoZSBvcmlnaW4gb2YgdGhhdCBjb250aW51YXRp
b24uCkBAIC00NDgsNyArNDQ2LDcgQEAgUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpyZW5kZXJQYXJlbnRPYmplY3QoKSBjb25zdAogICAgICAgICAvLyBHZXQgdGhlIG5v
ZGUncyByZW5kZXJlciBhbmQgZm9sbG93IHRoYXQgY29udGludWF0aW9uIGNoYWluIHVudGlsIHRo
ZSBmaXJzdCBjaGlsZCBpcyBmb3VuZAogICAgICAgICBSZW5kZXJPYmplY3QqIG5vZGVSZW5kZXJG
aXJzdENoaWxkID0gZmlyc3RDaGlsZC0+bm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICB3aGls
ZSAobm9kZVJlbmRlckZpcnN0Q2hpbGQgIT0gZmlyc3RDaGlsZCkgewotICAgICAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNvbnRzVGVzdCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rl
c3Q7IGNvbnRzVGVzdCA9IG5leHRDb250aW51YXRpb24oY29udHNUZXN0KSkgeworICAgICAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNvbnRzVGVzdCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBj
b250c1Rlc3Q7IGNvbnRzVGVzdCA9IG5leHRDb250aW51YXRpb24oKmNvbnRzVGVzdCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoY29udHNUZXN0ID09IGZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50ID0gbm9kZVJlbmRlckZpcnN0Q2hpbGQtPnBhcmVudCgpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTU2NiwyNSArNTY0LDIzIEBAIEVsZW1lbnQqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIFJlbmRlck9iamVjdCogY3Vy
clJlbmRlcmVyOworICAgIFJlbmRlck9iamVjdCogY3VycmVudFJlbmRlcmVyOwogICAgIAogICAg
IC8vIFNlYXJjaCB1cCB0aGUgcmVuZGVyIHRyZWUgZm9yIGEgUmVuZGVyT2JqZWN0IHdpdGggYSBE
T00gbm9kZS4gIERlZmVyIHRvIGFuIGVhcmxpZXIgY29udGludWF0aW9uLCB0aG91Z2guCi0gICAg
Zm9yIChjdXJyUmVuZGVyZXIgPSBtX3JlbmRlcmVyOyBjdXJyUmVuZGVyZXIgJiYgIWN1cnJSZW5k
ZXJlci0+bm9kZSgpOyBjdXJyUmVuZGVyZXIgPSBjdXJyUmVuZGVyZXItPnBhcmVudCgpKSB7Ci0g
ICAgICAgIGlmIChjdXJyUmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBjb250aW51YXRpb24gPSB0b1JlbmRlckJsb2NrKGN1cnJSZW5kZXJl
ciktPmNvbnRpbnVhdGlvbigpOwotICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICBm
b3IgKGN1cnJlbnRSZW5kZXJlciA9IG1fcmVuZGVyZXI7IGN1cnJlbnRSZW5kZXJlciAmJiAhY3Vy
cmVudFJlbmRlcmVyLT5ub2RlKCk7IGN1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlci0+
cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9j
aygpKSB7CisgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjb250aW51YXRpb24gPSBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRSZW5kZXJlcikuY29udGludWF0aW9uKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZShjb250aW51YXRpb24pLT5hbmNo
b3JFbGVtZW50KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gYmFpbCBpZiBub25l
IGZvdW5kCi0gICAgaWYgKCFjdXJyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgIGlm
ICghY3VycmVudFJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAv
LyBzZWFyY2ggdXAgdGhlIERPTSB0cmVlIGZvciBhbiBhbmNob3IgZWxlbWVudAogICAgIC8vIE5P
VEU6IHRoaXMgYXNzdW1lcyB0aGF0IGFueSBub24taW1hZ2Ugd2l0aCBhbiBhbmNob3IgaXMgYW4g
SFRNTEFuY2hvckVsZW1lbnQKLSAgICBOb2RlKiBub2RlID0gY3VyclJlbmRlcmVyLT5ub2RlKCk7
Ci0gICAgZm9yICggOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgZm9y
IChOb2RlKiBub2RlID0gY3VycmVudFJlbmRlcmVyLT5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9k
ZSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUtPnJlbmRl
cmVyKCkpLT5pc0FuY2hvcigpKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50
Pihub2RlKTsKICAgICB9CkBAIC0xNjc3LDE0ICsxNjczLDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHJl
dHVybjsKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fcmVuZGVy
ZXItPm5vZGUoKSk7CiAKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkK
KyAgICBpZiAoIWlzPFJlbmRlckJveE1vZGVsT2JqZWN0PigqbV9yZW5kZXJlcikpCiAgICAgICAg
IHJldHVybjsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSB0b1JlbmRlckJv
eE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5k
ZXJlciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqbV9yZW5kZXJlcik7CiAKICAg
ICAvLyBGSVhNRTogRG8gd2Ugd2FudCB0byBkbyBhbnl0aGluZyBoZXJlIGZvciBBUklBIHRleHRi
b3hlcz8KLSAgICBpZiAocmVuZGVyZXItPmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRNTElucHV0RWxl
bWVudD4oZWxlbWVudCkpCisgICAgaWYgKHJlbmRlcmVyLmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRN
TElucHV0RWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KGVsZW1lbnQpLnNldFZhbHVlKHN0cmluZyk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXItPmlz
VGV4dEFyZWEoKSAmJiBpczxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KSkKKyAgICBlbHNl
IGlmIChyZW5kZXJlci5pc1RleHRBcmVhKCkgJiYgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxl
bWVudCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLnNl
dFZhbHVlKHN0cmluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggYzU1ZGIwMTc3MzJiYTEwODAwMGQxMjhiZmFi
NTU1NGIzYmU5ZGQ1OC4uNzJhOTJjMTM0YTg2MTg5YzJhN2NmNDQxMjYzMTM4NWY1MWJiOTdkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lv
bnMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lv
bnMubW0KQEAgLTIwNywxNyArMjA3LDE3IEBAIC0gKE5TQXJyYXkgKilib3JkZXJSYWRpaQogCiAt
IChCT09MKWNvbnRhaW5zT25seUlubGluZU9iamVjdHMKIHsKLSAgICBSZW5kZXJPYmplY3QgKiBy
ZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuICAocmVuZGVyZXIg
JiYKLSAgICAgICAgICAgICByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJgotICAgICAgICAg
ICAgIChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIp
LT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgPT0gbmlsKSAmJgotICAgICAgICAgICAgICFy
ZW5kZXJlci0+aXNUYWJsZSgpKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShz
ZWxmKS0+cmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIKKyAgICAgICAgJiYgcmVuZGVy
ZXItPmNoaWxkcmVuSW5saW5lKCkKKyAgICAgICAgJiYgKGlzPFJlbmRlckJsb2NrPigqcmVuZGVy
ZXIpICYmIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250
aW51YXRpb24oKSA9PSBuaWwpCisgICAgICAgICYmICFyZW5kZXJlci0+aXNUYWJsZSgpOwogfQog
CiAtIChCT09MKWlzU2VsZWN0YWJsZUJsb2NrCiB7Ci0gICAgUmVuZGVyT2JqZWN0ICogcmVuZGVy
ZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwotICAgIHJldHVybiAocmVuZGVyZXIgJiYgKHJl
bmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygp
ICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkg
IT0gbmlsKSkpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5k
ZXJlcigpOworICAgIHJldHVybiByZW5kZXJlciAmJiAoaXM8UmVuZGVyQmxvY2tGbG93PigqcmVu
ZGVyZXIpIHx8IChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgIT0gbmlsKSk7CiB9
CiAKIC0gKERPTVJhbmdlICopcmFuZ2VPZkNvbnRhaW5pbmdQYXJhZ3JhcGgKQEAgLTM0NCwxMiAr
MzQ0LDEyIEBAIC0gKGludClzdHJ1Y3R1cmFsQ29tcGxleGl0eUNvbnRyaWJ1dGlvbgogICAgICAg
ICAgICAgcmVzdWx0ID0gSU5UX01BWDsKICAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKHJl
bmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygp
ICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkg
IT0gMCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJl
cikgfHwgKGlzPFJlbmRlckJsb2NrPigqcmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJsb2Nr
PigqcmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkpIHsKICAgICAgICAgICAg
IEJPT0wgbm9Db3N0ID0gTk87Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsK
LSAgICAgICAgICAgICAgICBSZW5kZXJCb3ggJmFzQm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0Jv
eCgpOwotICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqcGFyZW50ID0gYXNCb3gucGFyZW50
KCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94ICpwYXJlbnRSZW5kZXJCb3ggPSAocGFyZW50
ICYmIHBhcmVudC0+aXNCb3goKSkgPyB0b1JlbmRlckJveChwYXJlbnQpIDogMDsKKyAgICAgICAg
ICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICBSZW5k
ZXJCb3gmIGFzQm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0JveCgpOworICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogcGFyZW50ID0gYXNCb3gucGFyZW50KCk7CisgICAgICAgICAgICAgICAg
UmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSBpczxSZW5kZXJCb3g+KHBhcmVudCkgPyBkb3du
Y2FzdDxSZW5kZXJCb3g+KHBhcmVudCkgOiBudWxscHRyOwogICAgICAgICAgICAgICAgIGlmIChw
YXJlbnRSZW5kZXJCb3ggJiYgYXNCb3gud2lkdGgoKSA9PSBwYXJlbnRSZW5kZXJCb3gtPndpZHRo
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbm9Db3N0ID0gWUVTOwogICAgICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKaW5kZXggY2U1ZWU2ZTRlZTdjY2NjMmNiNDhiY2RjOWJmYTJlMWE5MDhiYzA4Ny4uZGEy
M2QxM2RhNmVhNDY5OTA5MTQ5NzVjYTU3YmY0YTJlYzBmNmNhYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEwMDcsNyAr
MTAwNyw3IEBAIHN0YXRpYyBQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3Qo
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvCiB7CiAgICAgY29uc3QgVmVjdG9yPEdy
aWRUcmFja1NpemU+JiB0cmFja1NpemVzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHls
ZS0+Z3JpZENvbHVtbnMoKSA6IHN0eWxlLT5ncmlkUm93cygpOwogICAgIGNvbnN0IE9yZGVyZWRO
YW1lZEdyaWRMaW5lc01hcCYgb3JkZXJlZE5hbWVkR3JpZExpbmVzID0gZGlyZWN0aW9uID09IEZv
ckNvbHVtbnMgPyBzdHlsZS0+b3JkZXJlZE5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZS0+
b3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCk7Ci0gICAgYm9vbCBpc1JlbmRlckdyaWQgPSByZW5k
ZXJlciAmJiByZW5kZXJlci0+aXNSZW5kZXJHcmlkKCk7CisgICAgYm9vbCBpc1JlbmRlckdyaWQg
PSBpczxSZW5kZXJHcmlkPihyZW5kZXJlcik7CiAKICAgICAvLyBIYW5kbGUgdGhlICdub25lJyBj
YXNlLgogICAgIGJvb2wgdHJhY2tMaXN0SXNFbXB0eSA9IHRyYWNrU2l6ZXMuaXNFbXB0eSgpOwpA
QCAtMTAxNSw3ICsxMDE1LDcgQEAgc3RhdGljIFBhc3NSZWY8Q1NTVmFsdWU+IHZhbHVlRm9yR3Jp
ZFRyYWNrTGlzdChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW8KICAgICAgICAgLy8g
Rm9yIGdyaWRzIHdlIHNob3VsZCBjb25zaWRlciBldmVyeSBsaXN0ZWQgdHJhY2ssIHdoZXRoZXIg
aW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNyZWF0ZWQuIElmIHdlIGRvbid0IGhhdmUKICAgICAg
ICAgLy8gYW55IGV4cGxpY2l0IHRyYWNrIGFuZCB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gdGhlbiB0
aGVyZSBhcmUgbm8gaW1wbGljaXQgdHJhY2tzLiBXZSBjYW5ub3Qgc2ltcGx5IGNoZWNrIHRoZQog
ICAgICAgICAvLyBudW1iZXIgb2Ygcm93cy9jb2x1bW5zIGluIG91ciBpbnRlcm5hbCBncmlkIHJl
cHJlc2VudGF0aW9uIGJlY2F1c2UgaXQncyBhbHdheXMgYXQgbGVhc3QgMXgxIChzZWUgcjE0MzMz
MSkuCi0gICAgICAgIHRyYWNrTGlzdElzRW1wdHkgPSAhdG9SZW5kZXJCbG9jayhyZW5kZXJlcikt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgdHJhY2tMaXN0SXNFbXB0eSA9ICFkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKnJlbmRlcmVyKS5maXJzdENoaWxkKCk7CiAgICAgfQogCiAgICAgaWYgKHRyYWNr
TGlzdElzRW1wdHkpIHsKQEAgLTEwMjUsNyArMTAyNSw3IEBAIHN0YXRpYyBQYXNzUmVmPENTU1Zh
bHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3QoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvCiAKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVk
KCk7CiAgICAgaWYgKGlzUmVuZGVyR3JpZCkgewotICAgICAgICBjb25zdCBWZWN0b3I8TGF5b3V0
VW5pdD4mIHRyYWNrUG9zaXRpb25zID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyB0b1JlbmRl
ckdyaWQocmVuZGVyZXIpLT5jb2x1bW5Qb3NpdGlvbnMoKSA6IHRvUmVuZGVyR3JpZChyZW5kZXJl
ciktPnJvd1Bvc2l0aW9ucygpOworICAgICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHRy
YWNrUG9zaXRpb25zID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBkb3duY2FzdDxSZW5kZXJH
cmlkPigqcmVuZGVyZXIpLmNvbHVtblBvc2l0aW9ucygpIDogZG93bmNhc3Q8UmVuZGVyR3JpZD4o
KnJlbmRlcmVyKS5yb3dQb3NpdGlvbnMoKTsKICAgICAgICAgLy8gVGhlcmUgYXJlIGF0IGxlYXN0
ICN0cmFja3MgKyAxIGdyaWQgbGluZXMgKHRyYWNrUG9zaXRpb25zKS4gQXBhcnQgZnJvbSB0aGF0
LCB0aGUgZ3JpZCBjb250YWluZXIgY2FuIGdlbmVyYXRlIGltcGxpY2l0IGdyaWQgdHJhY2tzLAog
ICAgICAgICAvLyBzbyB3ZSdsbCBoYXZlIG1vcmUgdHJhY2tQb3NpdGlvbnMgdGhhbiB0cmFja1Np
emVzIGFzIHRoZSBsYXR0ZXIgb25seSBjb250YWluIHRoZSBleHBsaWNpdCBncmlkLgogICAgICAg
ICBBU1NFUlQodHJhY2tQb3NpdGlvbnMuc2l6ZSgpIC0gMSA+PSB0cmFja1NpemVzLnNpemUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmlu
ZGV4IDM0NjRjMjc1NTI5NDZlZDI5ODg3MjliNzVmMGY4YmQzNDkyOGZmYmIuLjU4NDk0OGEzOTU0
MWE1ZTBiNzk2NTNhNWVhZDgwMDc4Njk3YWE5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01NSwxMCArNTUsMTAgQEAKICNpbmNs
dWRlICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29t
bWFuZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgi
CisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgog
I2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAi
U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCIKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5k
LmgiCkBAIC05MjksMjEgKzkyOSwyMSBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRD
b21tYW5kOjppbnNlcnRCbG9ja1BsYWNlaG9sZGVyKGNvbnN0IFBvc2l0aW9uJiBwbwogUGFzc1Jl
ZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVl
ZGVkKEVsZW1lbnQqIGNvbnRhaW5lcikKIHsKICAgICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjb250YWluZXItPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAh
cmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlm
ICghaXM8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIAogICAgIC8vIGFwcGVuZCB0aGUgcGxhY2Vob2xkZXIgdG8gbWFrZSBzdXJlIGl0IGZv
bGxvd3MKICAgICAvLyBhbnkgdW5yZW5kZXJlZCBibG9ja3MKLSAgICBSZW5kZXJCbG9jayogYmxv
Y2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKTsKLSAgICBpZiAoYmxvY2stPmhlaWdodCgpID09
IDAgfHwgKGJsb2NrLT5pc0xpc3RJdGVtKCkgJiYgYmxvY2stPmlzRW1wdHkoKSkpCisgICAgUmVu
ZGVyQmxvY2tGbG93JiBibG9ja0Zsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5k
ZXJlcik7CisgICAgaWYgKCFibG9ja0Zsb3cuaGVpZ2h0KCkgfHwgKGJsb2NrRmxvdy5pc0xpc3RJ
dGVtKCkgJiYgYmxvY2tGbG93LmlzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiBhcHBlbmRCbG9j
a1BsYWNlaG9sZGVyKGNvbnRhaW5lcik7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogLy8gQXNzdW1lcyB0aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIHBsYWNlaG9s
ZGVyIGFuZCBkb2VzIHRoZSByZW1vdmFsIHdpdGhvdXQgbXVjaCBjaGVja2luZy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCA3MjVhODAyYzc3NjZlMzc4OTY4MGY5
NGI4MjUzYjhkYjVkNTQzYWE3Li42YmU5NzIzY2JkZDFhNTU2N2NhYTQwNGI4OWRkYThmOGYyZTIy
YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC05NjMsNyAr
OTYzLDcgQEAgYm9vbCBUZXh0SXRlcmF0b3I6OnNob3VsZFJlcHJlc2VudE5vZGVPZmZzZXRaZXJv
KCkKICAgICAvLyBBZGRpdGlvbmFsbHksIGlmIHRoZSByYW5nZSB3ZSBhcmUgaXRlcmF0aW5nIG92
ZXIgY29udGFpbnMgaHVnZSBzZWN0aW9ucyBvZiB1bnJlbmRlcmVkIGNvbnRlbnQsIAogICAgIC8v
IHdlIHdvdWxkIGNyZWF0ZSBWaXNpYmxlUG9zaXRpb25zIG9uIGV2ZXJ5IGNhbGwgdG8gdGhpcyBm
dW5jdGlvbiB3aXRob3V0IHRoaXMgY2hlY2suCiAgICAgaWYgKCFtX25vZGUtPnJlbmRlcmVyKCkg
fHwgbV9ub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFCi0g
ICAgICAgIHx8IChtX25vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXRv
UmVuZGVyQmxvY2sobV9ub2RlLT5yZW5kZXJlcigpKS0+aGVpZ2h0KCkgJiYgIW1fbm9kZS0+aGFz
VGFnTmFtZShib2R5VGFnKSkpCisgICAgICAgIHx8IChpczxSZW5kZXJCbG9ja0Zsb3c+KCptX25v
ZGUtPnJlbmRlcmVyKCkpICYmICFkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCptX25vZGUtPnJl
bmRlcmVyKCkpLmhlaWdodCgpICYmICFpczxIVE1MQm9keUVsZW1lbnQ+KCptX25vZGUpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gVGhlIHN0YXJ0UG9zLmlzTm90TnVsbCgpIGNo
ZWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzdGFydCBjb3VsZCBiZSBiZWZvcmUgdGhlIGJvZHks
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IGRkOTQzZWI0NDBkNDE2MjhjNjU1
N2UyOTMzMWI0MmI1YTMyNTMxMTQuLjJhYzRjZmRjMzM5MTg2ZDc4YzZhZDk0ZWM5MWIyZDBlNzll
MzllZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC01NTIsMTEgKzU1Miwx
MSBAQCBpbnQgRnJhbWU6OnByZWZlcnJlZEhlaWdodCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGJvZHktPnJlbmRlcmVyKCk7Ci0gICAg
aWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIWlz
PFJlbmRlckJsb2NrPihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVy
QmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcik7Ci0gICAgcmV0dXJuIGJsb2Nr
LT5oZWlnaHQoKSArIGJsb2NrLT5tYXJnaW5Ub3AoKSArIGJsb2NrLT5tYXJnaW5Cb3R0b20oKTsK
KyAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVy
KTsKKyAgICByZXR1cm4gYmxvY2suaGVpZ2h0KCkgKyBibG9jay5tYXJnaW5Ub3AoKSArIGJsb2Nr
Lm1hcmdpbkJvdHRvbSgpOwogfQogCiBpbnQgRnJhbWU6OmlubmVyTGluZUhlaWdodChET01Ob2Rl
KiBkb21Ob2RlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xv
Z2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
b2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgKaW5kZXggZmVjNTJmN2IxNDQ4MGQzMWE0ZmE5
YWMyNGYyZGNkNDZmMDZmODg1Ni4uNTk4MzllNmJlYjVhZDNjZGRjMzdmY2EwOTdiYmQ0MjY2ODgy
YThiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rp
b25PZmZzZXRDYWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNl
bGVjdGlvbk9mZnNldENhY2hlcy5oCkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9ja0ZvckZpeGVkUG9zaXRpb24oUmVuZGVyRWxlbWVudCog
cGFyZW50CiAgICAgd2hpbGUgKG9iamVjdCAmJiAhb2JqZWN0LT5jYW5Db250YWluRml4ZWRQb3Np
dGlvbk9iamVjdHMoKSkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5wYXJlbnQoKTsKICAgICBB
U1NFUlQoIW9iamVjdCB8fCAhb2JqZWN0LT5pc0Fub255bW91c0Jsb2NrKCkpOwotICAgIHJldHVy
biB0b1JlbmRlckJsb2NrKG9iamVjdCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2Nr
PihvYmplY3QpOwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxv
Y2tGb3JBYnNvbHV0ZVBvc2l0aW9uKFJlbmRlckVsZW1lbnQqIHBhcmVudCkKQEAgLTU3LDEzICs1
NywxMyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tGb3JBYnNv
bHV0ZVBvc2l0aW9uKFJlbmRlckVsZW1lbnQqIHBhcgogICAgIC8vIG5vdCB0aGUgaW5saW5lIGl0
c2VsZiwgdG8gYXZvaWQgaGF2aW5nIGEgcG9zaXRpb25lZCBvYmplY3RzIGxpc3QgaW4gYWxsIFJl
bmRlcklubGluZXMKICAgICAvLyBhbmQgdXNlIFJlbmRlckJsb2NrKiBhcyBSZW5kZXJFbGVtZW50
Ojpjb250YWluaW5nQmxvY2sncyByZXR1cm4gdHlwZS4KICAgICAvLyBVc2UgUmVuZGVyQmxvY2s6
OmNvbnRhaW5lcigpIHRvIG9idGFpbiB0aGUgaW5saW5lLgotICAgIGlmIChvYmplY3QgJiYgIW9i
amVjdC0+aXNSZW5kZXJCbG9jaygpKQorICAgIGlmIChvYmplY3QgJiYgIWlzPFJlbmRlckJsb2Nr
Pigqb2JqZWN0KSkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5jb250YWluaW5nQmxvY2soKTsK
IAogICAgIHdoaWxlIChvYmplY3QgJiYgb2JqZWN0LT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAg
ICAgIG9iamVjdCA9IG9iamVjdC0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKLSAgICByZXR1cm4gdG9S
ZW5kZXJCbG9jayhvYmplY3QpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4ob2Jq
ZWN0KTsKIH0KIAogc3RhdGljIGlubGluZSBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9y
T2JqZWN0SW5GbG93KFJlbmRlckVsZW1lbnQqIHBhcmVudCkKQEAgLTcxLDcgKzcxLDcgQEAgc3Rh
dGljIGlubGluZSBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KFJl
bmRlckVsZW1lbnQqIHBhcmVudCkKICAgICBSZW5kZXJFbGVtZW50KiBvYmplY3QgPSBwYXJlbnQ7
CiAgICAgd2hpbGUgKG9iamVjdCAmJiBpc05vblJlbmRlckJsb2NrSW5saW5lKCpvYmplY3QpKQog
ICAgICAgICBvYmplY3QgPSBvYmplY3QtPnBhcmVudCgpOwotICAgIHJldHVybiB0b1JlbmRlckJs
b2NrKG9iamVjdCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPihvYmplY3QpOwog
fQogCiBjbGFzcyBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGUxMmViYjUzMDEyNDhmOWQ1MzRiMDNkYzRh
YjY3YWU5MjJlMDAwMGYuLjIzN2UzNTg2OWRiYjVmNzkzYjkwMjRjM2UyMzA3Zjg1NzExZDdlMWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjcyLDE3ICsy
NzIsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3QKICAgICAgICAgZWxzZSBpZiAob2xkU3R5
bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pIHsKICAgICAgICAgICAgIC8vIFJlbW92
ZSBvdXIgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGRlc2NlbmRhbnRzIGZyb20gdGhlaXIgY3VycmVu
dCBjb250YWluaW5nIGJsb2NrLgogICAgICAgICAgICAgLy8gVGhleSB3aWxsIGJlIGluc2VydGVk
IGludG8gb3VyIHBvc2l0aW9uZWQgb2JqZWN0cyBsaXN0IGR1cmluZyBsYXlvdXQuCi0gICAgICAg
ICAgICBhdXRvIGNiID0gcGFyZW50KCk7Ci0gICAgICAgICAgICB3aGlsZSAoY2IgJiYgKGNiLT5z
dHlsZSgpLnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24gfHwgKGNiLT5pc0lubGluZSgpICYm
ICFjYi0+aXNSZXBsYWNlZCgpKSkgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChjYi0+c3R5bGUoKS5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYg
Y2ItPmlzSW5saW5lKCkgJiYgIWNiLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICBhdXRvIGNvbnRhaW5p
bmdCbG9jayA9IHBhcmVudCgpOworICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAm
JiAoY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24g
fHwgKGNvbnRhaW5pbmdCbG9jay0+aXNJbmxpbmUoKSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1Jl
cGxhY2VkKCkpKSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPnN0eWxlKCkucG9zaXRpb24oKSA9PSBSZWxh
dGl2ZVBvc2l0aW9uICYmIGNvbnRhaW5pbmdCbG9jay0+aXNJbmxpbmUoKSAmJiAhY29udGFpbmlu
Z0Jsb2NrLT5pc1JlcGxhY2VkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNiID0gY2It
PnBhcmVudCgpOworICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdC
bG9jay0+cGFyZW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChjYi0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2so
Y2IpLT5yZW1vdmVQb3NpdGlvbmVkT2JqZWN0cyh0aGlzLCBOZXdDb250YWluaW5nQmxvY2spOwor
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSkKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykucmVtb3Zl
UG9zaXRpb25lZE9iamVjdHModGhpcywgTmV3Q29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMzMyLDE5ICszMzIsMTkgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpj
b250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKICAgICBpZiAoYmVm
b3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpCiAgICAgICAgIHJldHVy
biB0aGlzOwogCi0gICAgUmVuZGVyQmxvY2sqIGN1cnIgPSB0b1JlbmRlckJsb2NrKGNvbnRpbnVh
dGlvbigpKTsKKyAgICBSZW5kZXJCbG9jayogY3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
Pihjb250aW51YXRpb24oKSk7CiAgICAgUmVuZGVyQmxvY2sqIG5leHRUb0xhc3QgPSB0aGlzOwog
ICAgIFJlbmRlckJsb2NrKiBsYXN0ID0gdGhpczsKLSAgICB3aGlsZSAoY3VycikgewotICAgICAg
ICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IGN1cnIpIHsKLSAg
ICAgICAgICAgIGlmIChjdXJyLT5maXJzdENoaWxkKCkgPT0gYmVmb3JlQ2hpbGQpCisgICAgd2hp
bGUgKGN1cnJlbnQpIHsKKyAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5w
YXJlbnQoKSA9PSBjdXJyZW50KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGls
ZCgpID09IGJlZm9yZUNoaWxkKQogICAgICAgICAgICAgICAgIHJldHVybiBsYXN0OwotICAgICAg
ICAgICAgcmV0dXJuIGN1cnI7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgICAg
fQogCiAgICAgICAgIG5leHRUb0xhc3QgPSBsYXN0OwotICAgICAgICBsYXN0ID0gY3VycjsKLSAg
ICAgICAgY3VyciA9IHRvUmVuZGVyQmxvY2soY3Vyci0+Y29udGludWF0aW9uKCkpOworICAgICAg
ICBsYXN0ID0gY3VycmVudDsKKyAgICAgICAgY3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PihjdXJyZW50LT5jb250aW51YXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKCFiZWZvcmVDaGls
ZCAmJiAhbGFzdC0+Zmlyc3RDaGlsZCgpKQpAQCAtNDQxLDE2ICs0NDEsMTYgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6c3BsaXRCbG9ja3MoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sq
IHRvQmxvY2ssCiAgICAgLy8gV2UgaGF2ZSBiZWVuIHJlcGFyZW50ZWQgYW5kIGFyZSBub3cgdW5k
ZXIgdGhlIGZyb21CbG9jay4gIFdlIG5lZWQKICAgICAvLyB0byB3YWxrIHVwIG91ciBibG9jayBw
YXJlbnQgY2hhaW4gdW50aWwgd2UgaGl0IHRoZSBjb250YWluaW5nIGFub255bW91cyBjb2x1bW5z
IGJsb2NrLgogICAgIC8vIE9uY2Ugd2UgaGl0IHRoZSBhbm9ueW1vdXMgY29sdW1ucyBibG9jayB3
ZSdyZSBkb25lLgotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjdXJyID0gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChwYXJlbnQoKSk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJlbnQg
PSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocGFyZW50KCkpOwogICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBjdXJyQ2hpbGQgPSB0aGlzOwogICAgIFJlbmRlck9iamVjdCogY3VyckNo
aWxkTmV4dFNpYmxpbmcgPSBjdXJyQ2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICB3aGlsZSAo
Y3VyciAmJiBjdXJyLT5pc0Rlc2NlbmRhbnRPZihmcm9tQmxvY2spICYmIGN1cnIgIT0gZnJvbUJs
b2NrKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBibG9ja0N1cnIgPSB0b1JlbmRlckJsb2NrKGN1
cnIpOworICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQtPmlzRGVzY2VuZGFudE9mKGZyb21C
bG9jaykgJiYgY3VycmVudCAhPSBmcm9tQmxvY2spIHsKKyAgICAgICAgUmVuZGVyQmxvY2smIGN1
cnJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBDcmVhdGUgYSBuZXcgY2xvbmUuCiAgICAgICAgIFJlbmRlclB0cjxSZW5kZXJC
bG9jaz4gY2xvbmVDaGlsZCA9IFdURjo6bW92ZShjbG9uZUJsb2NrKTsKLSAgICAgICAgY2xvbmVC
bG9jayA9IGJsb2NrQ3Vyci0+Y2xvbmUoKTsKKyAgICAgICAgY2xvbmVCbG9jayA9IGN1cnJlbnRC
bG9jay5jbG9uZSgpOwogCiAgICAgICAgIC8vIEluc2VydCBvdXIgY2hpbGQgY2xvbmUgYXMgdGhl
IGZpcnN0IGNoaWxkLgogICAgICAgICBjbG9uZUJsb2NrLT5hZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKGNsb25lQ2hpbGQubGVha1B0cigpLCAwKTsKQEAgLTQ1OSwyMCArNDU5LDIwIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnNwbGl0QmxvY2tzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRl
ckJsb2NrKiB0b0Jsb2NrLAogICAgICAgICAvLyBhbm9ueW1vdXMgYmxvY2tzIHBvc3NpYmx5IGFz
IHdlIHdhbGsgdXAgdGhlIGJsb2NrIGNoYWluLiAgV2hlbiB3ZSBzcGxpdCBhbgogICAgICAgICAv
LyBhbm9ueW1vdXMgYmxvY2ssIHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBhbnkgY29udGludWF0aW9u
IGhvb2t1cCwgc2luY2Ugd2UgaGF2ZW4ndAogICAgICAgICAvLyBhY3R1YWxseSBzcGxpdCBhIHJl
YWwgZWxlbWVudC4KLSAgICAgICAgaWYgKCFibG9ja0N1cnItPmlzQW5vbnltb3VzQmxvY2soKSkg
ewotICAgICAgICAgICAgb2xkQ29udCA9IGJsb2NrQ3Vyci0+Y29udGludWF0aW9uKCk7Ci0gICAg
ICAgICAgICBibG9ja0N1cnItPnNldENvbnRpbnVhdGlvbihjbG9uZUJsb2NrLmdldCgpKTsKKyAg
ICAgICAgaWYgKCFjdXJyZW50QmxvY2suaXNBbm9ueW1vdXNCbG9jaygpKSB7CisgICAgICAgICAg
ICBvbGRDb250ID0gY3VycmVudEJsb2NrLmNvbnRpbnVhdGlvbigpOworICAgICAgICAgICAgY3Vy
cmVudEJsb2NrLnNldENvbnRpbnVhdGlvbihjbG9uZUJsb2NrLmdldCgpKTsKICAgICAgICAgICAg
IGNsb25lQmxvY2stPnNldENvbnRpbnVhdGlvbihvbGRDb250KTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHRha2UgYWxsIG9mIHRoZSBjaGlsZHJlbiBzdGFydGluZyBm
cm9tIHRoZSBmaXJzdCBjaGlsZAogICAgICAgICAvLyAqYWZ0ZXIqIGN1cnJDaGlsZCBhbmQgYXBw
ZW5kIHRoZW0gYWxsIHRvIHRoZSBjbG9uZS4KLSAgICAgICAgYmxvY2tDdXJyLT5tb3ZlQ2hpbGRy
ZW5UbyhjbG9uZUJsb2NrLmdldCgpLCBjdXJyQ2hpbGROZXh0U2libGluZywgMCwgdHJ1ZSk7Cisg
ICAgICAgIGN1cnJlbnRCbG9jay5tb3ZlQ2hpbGRyZW5UbyhjbG9uZUJsb2NrLmdldCgpLCBjdXJy
Q2hpbGROZXh0U2libGluZywgMCwgdHJ1ZSk7CiAKICAgICAgICAgLy8gS2VlcCB3YWxraW5nIHVw
IHRoZSBjaGFpbi4KLSAgICAgICAgY3VyckNoaWxkID0gY3VycjsKKyAgICAgICAgY3VyckNoaWxk
ID0gY3VycmVudDsKICAgICAgICAgY3VyckNoaWxkTmV4dFNpYmxpbmcgPSBjdXJyQ2hpbGQtPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIGN1cnIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1cnIt
PnBhcmVudCgpKTsKKyAgICAgICAgY3VycmVudCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY3Vy
cmVudC0+cGFyZW50KCkpOwogICAgIH0KIAogICAgIC8vIE5vdyB3ZSBhcmUgYXQgdGhlIGNvbHVt
bnMgYmxvY2sgbGV2ZWwuIFdlIG5lZWQgdG8gcHV0IHRoZSBjbG9uZSBpbnRvIHRoZSB0b0Jsb2Nr
LgpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqCiAgICAgICAgIFJl
bmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZp
b3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CiAKICAgICAgICAgaWYgKGFmdGVyQ2hpbGQgJiYg
YWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlckJs
b2NrKGFmdGVyQ2hpbGQpLT5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKmFmdGVyQ2hpbGQpLmFkZENoaWxkKG5ld0NoaWxkKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01NzYsOCArNTc2LDggQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxk
LCBSZW5kZXJPYmoKIAogICAgIFJlbmRlckJveDo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNo
aWxkKTsKICAKLSAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIHBhcmVudCgpICYmIGlzQW5v
bnltb3VzQmxvY2soKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICB0b1Jl
bmRlckJsb2NrKHBhcmVudCgpKS0+cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlzKTsK
KyAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIGlzPFJlbmRlckJsb2NrPihwYXJlbnQoKSkg
JiYgaXNBbm9ueW1vdXNCbG9jaygpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBh
cmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMpOwogICAgIC8vIHRoaXMg
b2JqZWN0IG1heSBiZSBkZWFkIGhlcmUKIH0KIApAQCAtNzIyLDExICs3MjIsMTEgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayogY2hp
bGQpCiAgICAgY2hpbGQtPmRlc3Ryb3koKTsKIH0KIAotc3RhdGljIGJvb2wgY2FuTWVyZ2VBbm9u
eW1vdXNCbG9jayhSZW5kZXJCbG9jayogYW5vbnltb3VzQmxvY2spCitzdGF0aWMgYm9vbCBjYW5N
ZXJnZUFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrJiBhbm9ueW1vdXNCbG9jaykKIHsKLSAgICBp
ZiAoYW5vbnltb3VzQmxvY2stPmJlaW5nRGVzdHJveWVkKCkgfHwgYW5vbnltb3VzQmxvY2stPmNv
bnRpbnVhdGlvbigpKQorICAgIGlmIChhbm9ueW1vdXNCbG9jay5iZWluZ0Rlc3Ryb3llZCgpIHx8
IGFub255bW91c0Jsb2NrLmNvbnRpbnVhdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGFub255bW91c0Jsb2NrLT5pc1J1YnlSdW4oKSB8fCBhbm9ueW1vdXNCbG9jay0+aXNS
dWJ5QmFzZSgpKQorICAgIGlmIChhbm9ueW1vdXNCbG9jay5pc1J1YnlSdW4oKSB8fCBhbm9ueW1v
dXNCbG9jay5pc1J1YnlCYXNlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTczOSwyNCArNzM5LDI0IEBAIHN0YXRpYyBib29sIGNhbk1lcmdlQ29udGln
dW91c0Fub255bW91c0Jsb2NrcyhSZW5kZXJPYmplY3QmIG9sZENoaWxkLCBSZW5kZXJPYmplCiAg
ICAgaWYgKHByZXZpb3VzKSB7CiAgICAgICAgIGlmICghcHJldmlvdXMtPmlzQW5vbnltb3VzQmxv
Y2soKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIHBy
ZXZpb3VzQW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2NrKHByZXZpb3VzKTsKKyAgICAgICAg
UmVuZGVyQmxvY2smIHByZXZpb3VzQW5vbnltb3VzQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKnByZXZpb3VzKTsKICAgICAgICAgaWYgKCFjYW5NZXJnZUFub255bW91c0Jsb2NrKHByZXZp
b3VzQW5vbnltb3VzQmxvY2spKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICBpZiAobmV4dCkgewogICAgICAgICBpZiAoIW5leHQtPmlzQW5vbnltb3VzQmxvY2soKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRBbm9ueW1v
dXNCbG9jayA9IHRvUmVuZGVyQmxvY2sobmV4dCk7CisgICAgICAgIFJlbmRlckJsb2NrJiBuZXh0
QW5vbnltb3VzQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm5leHQpOwogICAgICAgICBp
ZiAoIWNhbk1lcmdlQW5vbnltb3VzQmxvY2sobmV4dEFub255bW91c0Jsb2NrKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwg
UmVuZGVyQmxvY2sqIGNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNC
b3hDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJCbG9jayogY2hpbGQpCiB7Ci0gICAg
cGFyZW50LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICBwYXJlbnQt
PnNldENoaWxkcmVuSW5saW5lKGNoaWxkLT5jaGlsZHJlbklubGluZSgpKTsKKyAgICBwYXJlbnQu
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcGFyZW50LnNldENoaWxk
cmVuSW5saW5lKGNoaWxkLT5jaGlsZHJlbklubGluZSgpKTsKICAgICBSZW5kZXJPYmplY3QqIG5l
eHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKICAgICBSZW5kZXJGbG93VGhyZWFk
KiBjaGlsZEZsb3dUaHJlYWQgPSBjaGlsZC0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwpA
QCAtNzY0LDggKzc2NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94
Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoCiAgICAgaWYgKGNoaWxk
Rmxvd1RocmVhZCAmJiBjaGlsZEZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkp
CiAgICAgICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKGNoaWxkRmxvd1RocmVhZCktPnJlbW92
ZUZsb3dDaGlsZEluZm8oY2hpbGQpOwogCi0gICAgcGFyZW50LT5yZW1vdmVDaGlsZEludGVybmFs
KCpjaGlsZCwgY2hpbGQtPmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlD
aGlsZHJlbik7Ci0gICAgY2hpbGQtPm1vdmVBbGxDaGlsZHJlblRvKHBhcmVudCwgbmV4dFNpYmxp
bmcsIGNoaWxkLT5oYXNMYXllcigpKTsKKyAgICBwYXJlbnQucmVtb3ZlQ2hpbGRJbnRlcm5hbCgq
Y2hpbGQsIGNoaWxkLT5oYXNMYXllcigpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hp
bGRyZW4pOworICAgIGNoaWxkLT5tb3ZlQWxsQ2hpbGRyZW5UbygmcGFyZW50LCBuZXh0U2libGlu
ZywgY2hpbGQtPmhhc0xheWVyKCkpOwogICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2Nr
J3MgbGluZXMgYW5kIG51a2UgaXQuCiAgICAgY2hpbGQtPmRlbGV0ZUxpbmVzKCk7CiAgICAgY2hp
bGQtPmRlc3Ryb3koKTsKQEAgLTc4Niw4ICs3ODYsOCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJs
b2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogICAgIGJvb2wgY2FuTWVy
Z2VBbm9ueW1vdXNCbG9ja3MgPSBjYW5NZXJnZUNvbnRpZ3VvdXNBbm9ueW1vdXNCbG9ja3Mob2xk
Q2hpbGQsIHByZXYsIG5leHQpOwogICAgIGlmIChjYW5NZXJnZUFub255bW91c0Jsb2NrcyAmJiBw
cmV2ICYmIG5leHQpIHsKICAgICAgICAgcHJldi0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBuZXh0QmxvY2sgPSB0b1JlbmRlckJsb2Nr
KG5leHQpOwotICAgICAgICBSZW5kZXJCbG9jayogcHJldkJsb2NrID0gdG9SZW5kZXJCbG9jayhw
cmV2KTsKKyAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPihuZXh0KTsKKyAgICAgICAgUmVuZGVyQmxvY2sqIHByZXZCbG9jayA9IGRvd25jYXN0PFJl
bmRlckJsb2NrPihwcmV2KTsKICAgICAgICAKICAgICAgICAgaWYgKHByZXYtPmNoaWxkcmVuSW5s
aW5lKCkgIT0gbmV4dC0+Y2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGlubGluZUNoaWxkcmVuQmxvY2sgPSBwcmV2LT5jaGlsZHJlbklubGluZSgpID8gcHJldkJs
b2NrIDogbmV4dEJsb2NrOwpAQCAtODM2LDE3ICs4MzYsMTcgQEAgUmVuZGVyT2JqZWN0KiBSZW5k
ZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKICAgICAgICAgLy8g
VGhlIHJlbW92YWwgaGFzIGtub2NrZWQgdXMgZG93biB0byBjb250YWluaW5nIG9ubHkgYSBzaW5n
bGUgYW5vbnltb3VzCiAgICAgICAgIC8vIGJveC4gIFdlIGNhbiBnbyBhaGVhZCBhbmQgcHVsbCB0
aGUgY29udGVudCByaWdodCBiYWNrIHVwIGludG8gb3VyCiAgICAgICAgIC8vIGJveC4KLSAgICAg
ICAgY29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCh0aGlzLCB0b1JlbmRlckJsb2NrKGNoaWxkKSk7
CisgICAgICAgIGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoKnRoaXMsIGRvd25jYXN0PFJlbmRl
ckJsb2NrPihjaGlsZCkpOwogICAgICAgICBuZXh0U2libGluZyA9IG51bGxwdHI7CiAgICAgfSBl
bHNlIGlmICgoKHByZXYgJiYgcHJldi0+aXNBbm9ueW1vdXNCbG9jaygpKSB8fCAobmV4dCAmJiBu
ZXh0LT5pc0Fub255bW91c0Jsb2NrKCkpKSAmJiBjYW5Db2xsYXBzZUFub255bW91c0Jsb2NrQ2hp
bGQoKSkgewogICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHJlbW92YWwgaGFzIGtu
b2NrZWQgdXMgZG93biB0byBhIHNpbmdsZSBhbm9ueW1vdXMKICAgICAgICAgLy8gYmxvY2sgd2l0
aCBwc2V1ZG8tc3R5bGUgZWxlbWVudCBzaWJsaW5ncyAoZS5nLiBmaXJzdC1sZXR0ZXIpLiBJZiB0
aGVzZQogICAgICAgICAvLyBhcmUgZmxvYXRpbmcsIHRoZW4gd2UgbmVlZCB0byBwdWxsIHRoZSBj
b250ZW50IHVwIGFsc28uCi0gICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2sgPSB0b1JlbmRl
ckJsb2NrKChwcmV2ICYmIHByZXYtPmlzQW5vbnltb3VzQmxvY2soKSkgPyBwcmV2IDogbmV4dCk7
CisgICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KHByZXYgJiYgcHJldi0+aXNBbm9ueW1vdXNCbG9jaygpKSA/IHByZXYgOiBuZXh0KTsKICAgICAg
ICAgaWYgKChhbm9uQmxvY2stPnByZXZpb3VzU2libGluZygpIHx8IGFub25CbG9jay0+bmV4dFNp
YmxpbmcoKSkKICAgICAgICAgICAgICYmICghYW5vbkJsb2NrLT5wcmV2aW91c1NpYmxpbmcoKSB8
fCAoYW5vbkJsb2NrLT5wcmV2aW91c1NpYmxpbmcoKS0+c3R5bGUoKS5zdHlsZVR5cGUoKSAhPSBO
T1BTRVVETyAmJiBhbm9uQmxvY2stPnByZXZpb3VzU2libGluZygpLT5pc0Zsb2F0aW5nKCkgJiYg
IWFub25CbG9jay0+cHJldmlvdXNTaWJsaW5nKCktPnByZXZpb3VzU2libGluZygpKSkKICAgICAg
ICAgICAgICYmICghYW5vbkJsb2NrLT5uZXh0U2libGluZygpIHx8IChhbm9uQmxvY2stPm5leHRT
aWJsaW5nKCktPnN0eWxlKCkuc3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8gJiYgYW5vbkJsb2NrLT5u
ZXh0U2libGluZygpLT5pc0Zsb2F0aW5nKCkgJiYgIWFub25CbG9jay0+bmV4dFNpYmxpbmcoKS0+
bmV4dFNpYmxpbmcoKSkpKSB7Ci0gICAgICAgICAgICBjb2xsYXBzZUFub255bW91c0JveENoaWxk
KHRoaXMsIGFub25CbG9jayk7CisgICAgICAgICAgICBjb2xsYXBzZUFub255bW91c0JveENoaWxk
KCp0aGlzLCBhbm9uQmxvY2spOwogICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBudWxscHRyOwog
ICAgICAgICB9CiAgICAgfQpAQCAtODY0LDIzICs4NjQsMjMgQEAgUmVuZGVyT2JqZWN0KiBSZW5k
ZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKICAgICAgICAgICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMgPSBjb250YWluaW5nQmxvY2so
KTsKICAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2tJZ25vcmluZ0Fub255bW91cyAm
JiBjb250YWluaW5nQmxvY2tJZ25vcmluZ0Fub255bW91cy0+aXNBbm9ueW1vdXNCbG9jaygpKQog
ICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5vbnltb3VzID0gY29udGFp
bmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJl
dmlvdXNJblByZU9yZGVyKGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5vbnltb3VzKSkgewotICAg
ICAgICAgICAgICAgIGlmIChjdXJyLT52aXJ0dWFsQ29udGludWF0aW9uKCkgIT0gdGhpcykKKyAg
ICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gdGhpczsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnByZXZpb3VzSW5QcmVPcmRlcihjb250YWluaW5nQmxvY2tJZ25vcmlu
Z0Fub255bW91cykpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+dmlydHVhbENvbnRp
bnVhdGlvbigpICE9IHRoaXMpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICAgICAgLy8gRm91bmQgb3VyIHByZXZpb3VzIGNvbnRpbnVhdGlvbi4gV2UganVzdCBu
ZWVkIHRvIHBvaW50IGl0IHRvCiAgICAgICAgICAgICAgICAgLy8gfHRoaXN8J3MgbmV4dCBjb250
aW51YXRpb24uCiAgICAgICAgICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250
aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoY3Vyci0+aXNS
ZW5kZXJJbmxpbmUoKSkKLSAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJJbmxpbmUoY3Vycikt
PnNldENvbnRpbnVhdGlvbihuZXh0Q29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChjdXJyLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICAgICAgICAgIHRvUmVuZGVy
QmxvY2soY3VyciktPnNldENvbnRpbnVhdGlvbihuZXh0Q29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqY3VycmVudCkpCisgICAgICAgICAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlcklubGluZT4oKmN1cnJlbnQpLnNldENvbnRpbnVhdGlvbihuZXh0
Q29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJCbG9jaz4o
KmN1cnJlbnQpKQorICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1
cnJlbnQpLnNldENvbnRpbnVhdGlvbihuZXh0Q29udGludWF0aW9uKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRDb250aW51
YXRpb24oMCk7CisgICAgICAgICAgICBzZXRDb250aW51YXRpb24obnVsbHB0cik7CiAgICAgICAg
ICAgICBkZXN0cm95KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzQxLDExICsxNzQxLDExIEBA
IFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6YmxvY2tFbGVtZW50Q29udGludWF0aW9uKCkgY29u
c3QKIHsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3VycmVudENvbnRpbnVhdGlvbiA9IGNv
bnRpbnVhdGlvbigpOwogICAgIGlmICghY3VycmVudENvbnRpbnVhdGlvbiB8fCBjdXJyZW50Q29u
dGludWF0aW9uLT5pc0lubGluZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJCbG9j
ayogbmV4dENvbnRpbnVhdGlvbiA9IHRvUmVuZGVyQmxvY2soY3VycmVudENvbnRpbnVhdGlvbik7
Ci0gICAgaWYgKG5leHRDb250aW51YXRpb24tPmlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAg
cmV0dXJuIG5leHRDb250aW51YXRpb24tPmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbigpOwotICAg
IHJldHVybiBuZXh0Q29udGludWF0aW9uOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBS
ZW5kZXJCbG9jayYgbmV4dENvbnRpbnVhdGlvbiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3Vy
cmVudENvbnRpbnVhdGlvbik7CisgICAgaWYgKG5leHRDb250aW51YXRpb24uaXNBbm9ueW1vdXNC
bG9jaygpKQorICAgICAgICByZXR1cm4gbmV4dENvbnRpbnVhdGlvbi5ibG9ja0VsZW1lbnRDb250
aW51YXRpb24oKTsKKyAgICByZXR1cm4gJm5leHRDb250aW51YXRpb247CiB9CiAgICAgCiBzdGF0
aWMgQ29udGludWF0aW9uT3V0bGluZVRhYmxlTWFwKiBjb250aW51YXRpb25PdXRsaW5lVGFibGUo
KQpAQCAtMjA0Miw3ICsyMDQyLDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0
aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICAgICAg
ICAgIGxhc3RMb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJs
b2NrLCBjdXJyLT5sb2dpY2FsQm90dG9tKCksIGNhY2hlKTsKICAgICAgICAgfSBlbHNlIGlmIChj
aGlsZFN0YXRlICE9IFNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAgICAgIC8vIFdlIG11c3QgYmUg
YSBibG9jayB0aGF0IGhhcyBzb21lIHNlbGVjdGVkIG9iamVjdCBpbnNpZGUgaXQuICBHbyBhaGVh
ZCBhbmQgcmVjdXIuCi0gICAgICAgICAgICByZXN1bHQudW5pdGUodG9SZW5kZXJCbG9jayhjdXJy
KS0+c2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExh
eW91dFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+eCgpLCBvZmZzZXRG
cm9tUm9vdEJsb2NrLmhlaWdodCgpICsgY3Vyci0+eSgpKSwgCisgICAgICAgICAgICByZXN1bHQu
dW5pdGUoZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyKS5zZWxlY3Rpb25HYXBzKHJvb3RCbG9j
aywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0U2l6ZShvZmZzZXRGcm9tUm9vdEJs
b2NrLndpZHRoKCkgKyBjdXJyLT54KCksIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyBj
dXJyLT55KCkpLAogICAgICAgICAgICAgICAgIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExl
ZnQsIGxhc3RMb2dpY2FsUmlnaHQsIGNoaWxkQ2FjaGUsIHBhaW50SW5mbykpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMjE2MiwyOSArMjE2MiwyOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjps
b2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5bwog
UmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpibG9ja0JlZm9yZVdpdGhpblNlbGVjdGlvblJvb3Qo
TGF5b3V0U2l6ZSYgb2Zmc2V0KSBjb25zdAogewogICAgIGlmIChpc1NlbGVjdGlvblJvb3QoKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgY29uc3Qg
UmVuZGVyRWxlbWVudCogb2JqZWN0ID0gdGhpczsKICAgICBSZW5kZXJPYmplY3QqIHNpYmxpbmc7
CiAgICAgZG8gewogICAgICAgICBzaWJsaW5nID0gb2JqZWN0LT5wcmV2aW91c1NpYmxpbmcoKTsK
LSAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgKCFzaWJsaW5nLT5pc1JlbmRlckJsb2NrKCkgfHwg
dG9SZW5kZXJCbG9jayhzaWJsaW5nKS0+aXNTZWxlY3Rpb25Sb290KCkpKQorICAgICAgICB3aGls
ZSAoc2libGluZyAmJiAoIWlzPFJlbmRlckJsb2NrPigqc2libGluZykgfHwgZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KCpzaWJsaW5nKS5pc1NlbGVjdGlvblJvb3QoKSkpCiAgICAgICAgICAgICBzaWJs
aW5nID0gc2libGluZy0+cHJldmlvdXNTaWJsaW5nKCk7CiAKLSAgICAgICAgb2Zmc2V0IC09IExh
eW91dFNpemUodG9SZW5kZXJCbG9jayhvYmplY3QpLT5sb2dpY2FsTGVmdCgpLCB0b1JlbmRlckJs
b2NrKG9iamVjdCktPmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIG9mZnNldCAtPSBMYXlvdXRTaXpl
KGRvd25jYXN0PFJlbmRlckJsb2NrPigqb2JqZWN0KS5sb2dpY2FsTGVmdCgpLCBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKm9iamVjdCkubG9naWNhbFRvcCgpKTsKICAgICAgICAgb2JqZWN0ID0gb2Jq
ZWN0LT5wYXJlbnQoKTsKLSAgICB9IHdoaWxlICghc2libGluZyAmJiBvYmplY3QgJiYgb2JqZWN0
LT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2sob2JqZWN0KS0+aXNTZWxlY3Rpb25S
b290KCkpOworICAgIH0gd2hpbGUgKCFzaWJsaW5nICYmIGlzPFJlbmRlckJsb2NrPihvYmplY3Qp
ICYmICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm9iamVjdCkuaXNTZWxlY3Rpb25Sb290KCkpOwog
CiAgICAgaWYgKCFzaWJsaW5nKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBSZW5kZXJCbG9jayogYmVmb3JlQmxvY2sgPSB0b1JlbmRlckJsb2NrKHNp
YmxpbmcpOworICAgIFJlbmRlckJsb2NrKiBiZWZvcmVCbG9jayA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPihzaWJsaW5nKTsKIAogICAgIG9mZnNldCArPSBMYXlvdXRTaXplKGJlZm9yZUJsb2NrLT5s
b2dpY2FsTGVmdCgpLCBiZWZvcmVCbG9jay0+bG9naWNhbFRvcCgpKTsKIAogICAgIFJlbmRlck9i
amVjdCogY2hpbGQgPSBiZWZvcmVCbG9jay0+bGFzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxk
ICYmIGNoaWxkLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgYmVmb3JlQmxvY2sgPSB0b1Jl
bmRlckJsb2NrKGNoaWxkKTsKKyAgICB3aGlsZSAoaXM8UmVuZGVyQmxvY2s+KGNoaWxkKSkgewor
ICAgICAgICBiZWZvcmVCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCk7CiAgICAg
ICAgIG9mZnNldCArPSBMYXlvdXRTaXplKGJlZm9yZUJsb2NrLT5sb2dpY2FsTGVmdCgpLCBiZWZv
cmVCbG9jay0+bG9naWNhbFRvcCgpKTsKICAgICAgICAgY2hpbGQgPSBiZWZvcmVCbG9jay0+bGFz
dENoaWxkKCk7CiAgICAgfQpAQCAtMjY4Miw3ICsyNjgyLDcgQEAgc3RhdGljIGlubGluZSBib29s
IGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKGNvbnN0IFJlbmRlckJveCYgYm94LCBjb25zdCBSZW5k
ZXJSZWcKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghcmVnaW9uKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBjb25zdCBSZW5kZXJCbG9jayYgYmxvY2sgPSBib3guaXNSZW5kZXJC
bG9jaygpID8gdG9SZW5kZXJCbG9jayhib3gpIDogKmJveC5jb250YWluaW5nQmxvY2soKTsKKyAg
ICBjb25zdCBSZW5kZXJCbG9jayYgYmxvY2sgPSBpczxSZW5kZXJCbG9jaz4oYm94KSA/IGRvd25j
YXN0PFJlbmRlckJsb2NrPihib3gpIDogKmJveC5jb250YWluaW5nQmxvY2soKTsKICAgICByZXR1
cm4gYmxvY2sucmVnaW9uQXRCbG9ja09mZnNldChwb2ludC55KCkpID09IHJlZ2lvbjsKIH0KIApA
QCAtMzA0MiwxMSArMzA0MiwxMSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGlu
ZUJsb2NrKCkgY29uc3QKICAgICAgICAgaWYgKGZpcnN0TGluZUJsb2NrLT5pc1JlcGxhY2VkKCkg
fHwgZmlyc3RMaW5lQmxvY2stPmlzRmxvYXRpbmcoKQogICAgICAgICAgICAgfHwgIXBhcmVudEJs
b2NrIHx8IHBhcmVudEJsb2NrLT5maXJzdENoaWxkKCkgIT0gZmlyc3RMaW5lQmxvY2sgfHwgIWlz
UmVuZGVyQmxvY2tGbG93T3JSZW5kZXJCdXR0b24oKnBhcmVudEJsb2NrKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBmaXJzdExpbmVCbG9jayA9IHRvUmVuZGVyQmxvY2socGFyZW50Qmxv
Y2spOworICAgICAgICBmaXJzdExpbmVCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihwYXJl
bnRCbG9jayk7CiAgICAgfSAKICAgICAKICAgICBpZiAoIWhhc1BzZXVkbykKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHJldHVybiBmaXJzdExp
bmVCbG9jazsKIH0KQEAgLTMxMjUsMTEgKzMxMjUsMTEgQEAgc3RhdGljIGlubGluZSBSZW5kZXJC
bG9jayogZmluZEZpcnN0TGV0dGVyQmxvY2soUmVuZGVyQmxvY2sqIHN0YXJ0KQogICAgICAgICBS
ZW5kZXJFbGVtZW50KiBwYXJlbnRCbG9jayA9IGZpcnN0TGV0dGVyQmxvY2stPnBhcmVudCgpOwog
ICAgICAgICBpZiAoZmlyc3RMZXR0ZXJCbG9jay0+aXNSZXBsYWNlZCgpIHx8ICFwYXJlbnRCbG9j
ayB8fCBwYXJlbnRCbG9jay0+Zmlyc3RDaGlsZCgpICE9IGZpcnN0TGV0dGVyQmxvY2sKICAgICAg
ICAgICAgIHx8ICFpc1JlbmRlckJsb2NrRmxvd09yUmVuZGVyQnV0dG9uKCpwYXJlbnRCbG9jaykp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZmlyc3RMZXR0ZXJCbG9jayA9IHRvUmVu
ZGVyQmxvY2socGFyZW50QmxvY2spOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIGZpcnN0TGV0dGVyQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocGFyZW50QmxvY2sp
OwogICAgIH0gCiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9p
ZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShSZW5kZXJPYmplY3QqIGZpcnN0
TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCogY3VycmVudENoaWxkKQpAQCAtMzQyMSw4ICszNDIx
LDggQEAgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlckJsb2NrOjpvdXRsaW5lU3R5bGVGb3JSZXBh
aW50KCkgY29uc3QKIHZvaWQgUmVuZGVyQmxvY2s6OmNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRl
ck9iamVjdCopCiB7CiAgICAgbWFrZUNoaWxkcmVuTm9uSW5saW5lKCk7Ci0gICAgaWYgKGlzQW5v
bnltb3VzQmxvY2soKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQot
ICAgICAgICB0b1JlbmRlckJsb2NrKHBhcmVudCgpKS0+cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNC
bG9jayh0aGlzKTsKKyAgICBpZiAoaXNBbm9ueW1vdXNCbG9jaygpICYmIGlzPFJlbmRlckJsb2Nr
PihwYXJlbnQoKSkpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpLnJl
bW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CiAgICAgLy8gfHRoaXN8IG1heSBiZSBk
ZWFkIGhlcmUKIH0KIApAQCAtMzY3MSwxMiArMzY3MSwxMiBAQCBib29sIFJlbmRlckJsb2NrOjpo
YXNNYXJnaW5CZWZvcmVRdWlyayhjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogICAgIC8v
IElmIHRoZSBjaGlsZCBoYXMgdGhlIHNhbWUgZGlyZWN0aW9uYWxpdHkgYXMgd2UgZG8sIHRoZW4g
d2UgY2FuIGp1c3QgcmV0dXJuIGl0cwogICAgIC8vIG1hcmdpbiBxdWlyay4KICAgICBpZiAoIWNo
aWxkLmlzV3JpdGluZ01vZGVSb290KCkpCi0gICAgICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJs
b2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hp
bGQuc3R5bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpOworICAgICAgICByZXR1cm4gaXM8UmVu
ZGVyQmxvY2s+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFzTWFyZ2lu
QmVmb3JlUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKTsKICAg
ICAKICAgICAvLyBUaGUgY2hpbGQgaGFzIGEgZGlmZmVyZW50IGRpcmVjdGlvbmFsaXR5LiBJZiB0
aGUgY2hpbGQgaXMgcGFyYWxsZWwsIHRoZW4gaXQncyBqdXN0CiAgICAgLy8gZmxpcHBlZCByZWxh
dGl2ZSB0byB1cy4gV2UgY2FuIHVzZSB0aGUgb3Bwb3NpdGUgZWRnZS4KICAgICBpZiAoY2hpbGQu
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQot
ICAgICAgICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGls
ZCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpIDogY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1
aXJrKCk7CisgICAgICAgIHJldHVybiBpczxSZW5kZXJCbG9jaz4oY2hpbGQpID8gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KGNoaWxkKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkgOiBjaGlsZC5zdHlsZSgp
Lmhhc01hcmdpbkFmdGVyUXVpcmsoKTsKICAgICAKICAgICAvLyBUaGUgY2hpbGQgaXMgcGVycGVu
ZGljdWxhciB0byB1cyBhbmQgYm94IHNpZGVzIGFyZSBuZXZlciBxdWlya3kgaW4gaHRtbC5jc3Ms
IGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dAogICAgIC8vIHdoZXRoZXIgb3Igbm90IGF1
dGhvcnMgc3BlY2lmaWVkIHF1aXJreSBlbXMsIHNpbmNlIHRoZXkncmUgYW4gaW1wbGVtZW50YXRp
b24gZGV0YWlsLgpAQCAtMzY4OCwxMiArMzY4OCwxMiBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNN
YXJnaW5BZnRlclF1aXJrKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiAgICAgLy8gSWYg
dGhlIGNoaWxkIGhhcyB0aGUgc2FtZSBkaXJlY3Rpb25hbGl0eSBhcyB3ZSBkbywgdGhlbiB3ZSBj
YW4ganVzdCByZXR1cm4gaXRzCiAgICAgLy8gbWFyZ2luIHF1aXJrLgogICAgIGlmICghY2hpbGQu
aXNXcml0aW5nTW9kZVJvb3QoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLmlzUmVuZGVyQmxvY2so
KSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA6IGNoaWxkLnN0
eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpOworICAgICAgICByZXR1cm4gaXM8UmVuZGVyQmxv
Y2s+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFzTWFyZ2luQWZ0ZXJR
dWlyaygpIDogY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCk7CiAgICAgCiAgICAg
Ly8gVGhlIGNoaWxkIGhhcyBhIGRpZmZlcmVudCBkaXJlY3Rpb25hbGl0eS4gSWYgdGhlIGNoaWxk
IGlzIHBhcmFsbGVsLCB0aGVuIGl0J3MganVzdAogICAgIC8vIGZsaXBwZWQgcmVsYXRpdmUgdG8g
dXMuIFdlIGNhbiB1c2UgdGhlIG9wcG9zaXRlIGVkZ2UuCiAgICAgaWYgKGNoaWxkLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAg
cmV0dXJuIGNoaWxkLmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpLmhhc01h
cmdpbkJlZm9yZVF1aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCk7
CisgICAgICAgIHJldHVybiBpczxSZW5kZXJCbG9jaz4oY2hpbGQpID8gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KGNoaWxkKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hpbGQuc3R5bGUoKS5oYXNN
YXJnaW5CZWZvcmVRdWlyaygpOwogICAgIAogICAgIC8vIFRoZSBjaGlsZCBpcyBwZXJwZW5kaWN1
bGFyIHRvIHVzIGFuZCBib3ggc2lkZXMgYXJlIG5ldmVyIHF1aXJreSBpbiBodG1sLmNzcywgYW5k
IHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0CiAgICAgLy8gd2hldGhlciBvciBub3QgYXV0aG9y
cyBzcGVjaWZpZWQgcXVpcmt5IGVtcywgc2luY2UgdGhleSdyZSBhbiBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDY0MDBkYjZm
NTU5Mjk0YTdjZjYxMTlhZjcyNGM5N2NhMDI3ZjI0ZDIuLmFhNDI1YjczYmNiNzdkZWI0MzM1YTk2
YzU1ZjBlZjA4ZTIxYzY2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
CkBAIC0xOTUsNyArMTk1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlbmRlckJsb2NrKiBj
cmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXJBbmREaXNwbGF5KGNvbnN0IFJlbmRlck9i
amVjdCosIEVEaXNwbGF5ID0gQkxPQ0spOwogICAgIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1v
dXNCbG9jayhFRGlzcGxheSBkaXNwbGF5ID0gQkxPQ0spIGNvbnN0IHsgcmV0dXJuIGNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFuZERpc3BsYXkodGhpcywgZGlzcGxheSk7IH0KLSAg
ICBzdGF0aWMgdm9pZCBjb2xsYXBzZUFub255bW91c0JveENoaWxkKFJlbmRlckJsb2NrKiBwYXJl
bnQsIFJlbmRlckJsb2NrKiBjaGlsZCk7CisgICAgc3RhdGljIHZvaWQgY29sbGFwc2VBbm9ueW1v
dXNCb3hDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJCbG9jayogY2hpbGQpOwogCiAg
ICAgdmlydHVhbCBSZW5kZXJCb3gqIGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNv
bnN0IFJlbmRlck9iamVjdCogcGFyZW50KSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTMwLDggKzUz
MCw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgc19jYW5Qcm9wYWdhdGVGbG9hdEludG9T
aWJsaW5nOwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlckJsb2NrLCBpc1Jl
bmRlckJsb2NrKCkpCi0KIExheW91dFVuaXQgYmxvY2tEaXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxv
Y2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jayk7CiBM
YXlvdXRVbml0IGlubGluZURpcmVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBj
b25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrKTsKIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvclBvaW50UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKFJlbmRlckJsb2NrJiwg
UmVuZGVyQm94JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggZDg1YmQ4MjI2MDUyZDMyNzlhOGU4NDE2OWQ5
ZDU4ZDI5YjkwN2YyMy4uZmY5NmQ1MTY5ZTFjZDczOTY2NGY0MDY5ODFmZDgxNDcyZWI0YTgzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTEy
MTksMTAgKzEyMTksMTAgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpbkJlZm9yZUVzdGlt
YXRlRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCYKICAgICAvLyBNYWtlIHN1
cmUgdG8gdXBkYXRlIHRoZSBibG9jayBtYXJnaW5zIG5vdyBmb3IgdGhlIGdyYW5kY2hpbGQgYm94
IHNvIHRoYXQgd2UncmUgbG9va2luZyBhdCBjdXJyZW50IHZhbHVlcy4KICAgICBpZiAoZ3JhbmRj
aGlsZEJveC0+bmVlZHNMYXlvdXQoKSkgewogICAgICAgICBncmFuZGNoaWxkQm94LT5jb21wdXRl
QW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMpOwotICAgICAgICBpZiAoZ3JhbmRjaGls
ZEJveC0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogZ3JhbmRj
aGlsZEJsb2NrID0gdG9SZW5kZXJCbG9jayhncmFuZGNoaWxkQm94KTsKLSAgICAgICAgICAgIGdy
YW5kY2hpbGRCbG9jay0+c2V0SGFzTWFyZ2luQmVmb3JlUXVpcmsoZ3JhbmRjaGlsZEJveC0+c3R5
bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKTsKLSAgICAgICAgICAgIGdyYW5kY2hpbGRCbG9j
ay0+c2V0SGFzTWFyZ2luQWZ0ZXJRdWlyayhncmFuZGNoaWxkQm94LT5zdHlsZSgpLmhhc01hcmdp
bkFmdGVyUXVpcmsoKSk7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKmdyYW5kY2hpbGRC
b3gpKSB7CisgICAgICAgICAgICBSZW5kZXJCbG9jayYgZ3JhbmRjaGlsZEJsb2NrID0gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KCpncmFuZGNoaWxkQm94KTsKKyAgICAgICAgICAgIGdyYW5kY2hpbGRC
bG9jay5zZXRIYXNNYXJnaW5CZWZvcmVRdWlyayhncmFuZGNoaWxkQm94LT5zdHlsZSgpLmhhc01h
cmdpbkJlZm9yZVF1aXJrKCkpOworICAgICAgICAgICAgZ3JhbmRjaGlsZEJsb2NrLnNldEhhc01h
cmdpbkFmdGVyUXVpcmsoZ3JhbmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJr
KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjc0LDggKzEyNzQsOCBAQCBMYXlvdXRVbml0
IFJlbmRlckJsb2NrRmxvdzo6ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24oUmVuZGVyQm94JiBj
aGlsZCwgY29uc3QgTQogICAgICAgICAvLyBGb3IgcmVwbGFjZWQgZWxlbWVudHMgYW5kIHNjcm9s
bGVkIGVsZW1lbnRzLCB3ZSB3YW50IHRvIHNoaWZ0IHRoZW0gdG8gdGhlIG5leHQgcGFnZSBpZiB0
aGV5IGRvbid0IGZpdCBvbiB0aGUgY3VycmVudCBvbmUuCiAgICAgICAgIGxvZ2ljYWxUb3BFc3Rp
bWF0ZSA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wRXN0aW1h
dGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFjaGlsZC5zZWxmTmVlZHNMYXlvdXQoKSAmJiBj
aGlsZC5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUgKz0g
dG9SZW5kZXJCbG9jayhjaGlsZCkucGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgIGlmICghY2hp
bGQuc2VsZk5lZWRzTGF5b3V0KCkgJiYgaXM8UmVuZGVyQmxvY2s+KGNoaWxkKSkKKyAgICAgICAg
ICAgIGxvZ2ljYWxUb3BFc3RpbWF0ZSArPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpLnBh
Z2luYXRpb25TdHJ1dCgpOwogICAgIH0KIAogICAgIHJldHVybiBsb2dpY2FsVG9wRXN0aW1hdGU7
CkBAIC0xNTIyLDcgKzE1MjIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6YXBwbHlB
ZnRlckJyZWFrKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbG9naWNhbAogCiBMYXlvdXRV
bml0IFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0QmxvY2tDaGlsZEZvclBhZ2luYXRpb24oTGF5b3V0
VW5pdCBsb2dpY2FsVG9wQWZ0ZXJDbGVhciwgTGF5b3V0VW5pdCBlc3RpbWF0ZVdpdGhvdXRQYWdp
bmF0aW9uLCBSZW5kZXJCb3gmIGNoaWxkLCBib29sIGF0QmVmb3JlU2lkZU9mQmxvY2spCiB7Ci0g
ICAgUmVuZGVyQmxvY2sqIGNoaWxkUmVuZGVyQmxvY2sgPSBjaGlsZC5pc1JlbmRlckJsb2NrKCkg
PyB0b1JlbmRlckJsb2NrKCZjaGlsZCkgOiBudWxscHRyOworICAgIFJlbmRlckJsb2NrKiBjaGls
ZFJlbmRlckJsb2NrID0gaXM8UmVuZGVyQmxvY2s+KGNoaWxkKSA/ICZkb3duY2FzdDxSZW5kZXJC
bG9jaz4oY2hpbGQpIDogbnVsbHB0cjsKIAogICAgIGlmIChlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0
aW9uICE9IGxvZ2ljYWxUb3BBZnRlckNsZWFyKSB7CiAgICAgICAgIC8vIE91ciBndWVzcyBwcmlv
ciB0byBwYWdpbmF0aW9uIG1vdmVtZW50IHdhcyB3cm9uZy4gQmVmb3JlIHdlIGF0dGVtcHQgdG8g
cGFnaW5hdGUsIGxldCdzIHRyeSBhZ2FpbiBhdCB0aGUgbmV3CkBAIC0yNDU3LDcgKzI0NTcsNyBA
QCBib29sIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICAgICAg
Ly8gU2VlIGlmIHdlIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0IHRoYXQgaXMgbWFraW5nIHVzIG1v
dmUgZG93biBmdXJ0aGVyLgogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGFuIHVuc3BsaXR0YWJs
ZSBjaGlsZCBjYW4ndCBhbHNvIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0LCBzbyB0aGlzIGlzCiAg
ICAgICAgICAgICAvLyBleGNsdXNpdmUgd2l0aCB0aGUgY2FzZSBhYm92ZS4KLSAgICAgICAgICAg
IFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gY2hpbGRCb3guaXNSZW5kZXJCbG9jaygpID8gdG9S
ZW5kZXJCbG9jaygmY2hpbGRCb3gpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIFJlbmRlckJsb2Nr
KiBjaGlsZEJsb2NrID0gaXM8UmVuZGVyQmxvY2s+KGNoaWxkQm94KSA/ICZkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oY2hpbGRCb3gpIDogbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChjaGlsZEJsb2Nr
ICYmIGNoaWxkQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpKSB7CiAgICAgICAgICAgICAgICAgbmV3
TG9naWNhbFRvcCArPSBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKTsKICAgICAgICAgICAg
ICAgICBjaGlsZEJsb2NrLT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7CkBAIC0yNzI5LDE2ICsyNzI5
LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5
b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSkKICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmVuZCgpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIG5leHQgPSBuZXh0U2libGlu
ZygpOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIW5l
eHQtPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwgbmV4dC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpIHx8IHRvUmVuZGVyQmxvY2sobmV4dCktPmF2b2lkc0Zsb2F0cygpKQorICAgICAg
ICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oKm5leHQpIHx8IG5leHQtPmlzRmxvYXRpbmdPck91
dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpuZXh0KS5h
dm9pZHNGbG9hdHMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlbmRlckJs
b2NrRmxvdyogbmV4dEJsb2NrID0gdG9SZW5kZXJCbG9ja0Zsb3cobmV4dCk7CisgICAgICAgIFJl
bmRlckJsb2NrRmxvdyYgbmV4dEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqbmV4
dCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgUmVuZGVyQm94JiBmbG9hdGluZ0JveCA9ICgq
aXQpLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKGZsb2F0VG9SZW1vdmUgJiYgJmZsb2F0
aW5nQm94ICE9IGZsb2F0VG9SZW1vdmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAobmV4dEJsb2NrLT5jb250YWluc0Zsb2F0KGZsb2F0aW5nQm94KSkKLSAgICAg
ICAgICAgICAgICBuZXh0QmxvY2stPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlv
dXQoJmZsb2F0aW5nQm94KTsKKyAgICAgICAgICAgIGlmIChuZXh0QmxvY2suY29udGFpbnNGbG9h
dChmbG9hdGluZ0JveCkpCisgICAgICAgICAgICAgICAgbmV4dEJsb2NrLm1hcmtBbGxEZXNjZW5k
YW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoJmZsb2F0aW5nQm94KTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAKaW5kZXggYjgyZTc1NjgwNGMzYmVlMTJhOGIxZTY2NjYxMjZhYzZhMzUwNDNlOC4uMWEz
OWRlNzc0YTQzYjhhYzNmYzdhMjFlNmYwMzlhMGNiYzBlNmQxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTE4OTQsOCAr
MTg5NCw4IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZs
b2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPCiAKICAgICAgICAgICAgIGlmICh1cGRh
dGVSZWdpb25SYW5nZUZvckJveENoaWxkKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKSkKICAg
ICAgICAgICAgICAgICBmbG9hdEJveC5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoZmxvYXRCb3guaXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAg
ICAgIHRvUmVuZGVyQmxvY2soZmxvYXRCb3gpLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlU
aGlzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlckJsb2NrPihmbG9hdEJveCkpCisg
ICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGZsb2F0Qm94KS5zZXRDaGlsZE5l
ZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgICAgICBmbG9hdEJveC5sYXlvdXRJZk5l
ZWRlZCgpOwogCiAgICAgICAgICAgICAvLyBTYXZlIHRoZSBvbGQgbG9naWNhbCB0b3AgYmVmb3Jl
IGNhbGxpbmcgcmVtb3ZlUGxhY2VkT2JqZWN0IHdoaWNoIHdpbGwgc2V0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGUxZGU0MjA3NmYxM2MzNGI3ODg2MDk0NWU2YTgy
MWZjMWE1ZjhjZWIuLjY5MjA4Njc3OTEwZmYzNjViY2RkOWQyOGE0ZWFkZWQ4NDI3NzcxY2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0yOTQ3LDIwICsyOTQ3LDIw
IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNp
bmcoTGVuZ3RoIGxvZ2ljYWxIZWlnaHQpIGNvCiAgICAgICAgIGNhc2UgQ2FsY3VsYXRlZDoKICAg
ICAgICAgewogICAgICAgICAgICAgYXV0byBjYiA9IGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpID8g
Y29udGFpbmVyKCkgOiBjb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjYi0+
aXNBbm9ueW1vdXMoKSAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICB3aGls
ZSAoY2ItPmlzQW5vbnltb3VzKCkgJiYgIWlzPFJlbmRlclZpZXc+KCpjYikpIHsKICAgICAgICAg
ICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgICAgICB0b1Jl
bmRlckJsb2NrKGNiKS0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3RfY2FzdDxSZW5k
ZXJCb3gmPigqdGhpcykpOworICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigq
Y2IpLmFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRo
aXMpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FsY3Vs
YXRpb24gaXMgbm90IHBhdGNoZWQgZm9yIGJsb2NrLWZsb3cgeWV0LgogICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NTAwCiAgICAgICAgICAg
ICBpZiAoY2ItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIGNiLT5zdHlsZSgpLmhlaWdodCgp
LmlzQXV0bygpICYmICEoY2ItPnN0eWxlKCkudG9wKCkuaXNBdXRvKCkgfHwgY2ItPnN0eWxlKCku
Ym90dG9tKCkuaXNBdXRvKCkpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oY2ItPmlzUmVuZGVyQmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhjYik7CisgICAgICAgICAgICAgICAgUmVu
ZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjYik7CiAgICAgICAgICAg
ICAgICAgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzIGNvbXB1dGVkVmFsdWVzOwotICAgICAg
ICAgICAgICAgIGJsb2NrLT5jb21wdXRlTG9naWNhbEhlaWdodChibG9jay0+bG9naWNhbEhlaWdo
dCgpLCAwLCBjb21wdXRlZFZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBuZXdD
b250ZW50SGVpZ2h0ID0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBibG9jay0+Ym9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrLT5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7
Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBuZXdIZWlnaHQgPSBibG9jay0+YWRqdXN0Q29u
dGVudEJveExvZ2ljYWxIZWlnaHRGb3JCb3hTaXppbmcobmV3Q29udGVudEhlaWdodCk7CisgICAg
ICAgICAgICAgICAgYmxvY2suY29tcHV0ZUxvZ2ljYWxIZWlnaHQoYmxvY2subG9naWNhbEhlaWdo
dCgpLCAwLCBjb21wdXRlZFZhbHVlcyk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBuZXdD
b250ZW50SGVpZ2h0ID0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBibG9jay5ib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbEhlaWdodCgpIC0gYmxvY2suc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwor
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3SGVpZ2h0ID0gYmxvY2suYWRqdXN0Q29udGVu
dEJveExvZ2ljYWxIZWlnaHRGb3JCb3hTaXppbmcobmV3Q29udGVudEhlaWdodCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6aW5n
KHZhbHVlRm9yTGVuZ3RoKGxvZ2ljYWxIZWlnaHQsIG5ld0hlaWdodCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0yOTg0LDcgKzI5ODQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJv
eDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0
KSBjbwogICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gc3RkOjptYXgo
YXZhaWxhYmxlSGVpZ2h0LCBpbnRyaW5zaWNMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTGVuZ3RoKGxvZ2ljYWxIZWlnaHQsIGF2YWlsYWJs
ZUhlaWdodCAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2IpLT5hZGRQZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKSk7CisgICAg
ICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqY2IpLmFkZFBlcmNlbnRIZWln
aHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpKTsKICAgICAgICAgICAg
ICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtMzAyMywxMSArMzAyMywxMSBAQCBMYXlvdXRVbml0IFJlbmRlckJv
eDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaCwgQXZhaWxhYmxl
TG9naQogCiAgICAgLy8gRklYTUU6IENoZWNrIGxvZ2ljYWxUb3AvbG9naWNhbEJvdHRvbSBoZXJl
IHRvIGNvcnJlY3RseSBoYW5kbGUgdmVydGljYWwgd3JpdGluZy1tb2RlLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUwMAotICAgIGlmIChpc1JlbmRl
ckJsb2NrKCkgJiYgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgc3R5bGUoKS5oZWlnaHQoKS5p
c0F1dG8oKSAmJiAhKHN0eWxlKCkudG9wKCkuaXNBdXRvKCkgfHwgc3R5bGUoKS5ib3R0b20oKS5p
c0F1dG8oKSkpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29uc3RfY2FzdDxSZW5k
ZXJCbG9jayo+KHRvUmVuZGVyQmxvY2sodGhpcykpOworICAgIGlmIChpczxSZW5kZXJCbG9jaz4o
KnRoaXMpICYmIGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHN0eWxlKCkuaGVpZ2h0KCkuaXNB
dXRvKCkgJiYgIShzdHlsZSgpLnRvcCgpLmlzQXV0bygpIHx8IHN0eWxlKCkuYm90dG9tKCkuaXNB
dXRvKCkpKSB7CisgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGNvbnN0X2Nhc3Q8UmVuZGVy
QmxvY2smPihkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnRoaXMpKTsKICAgICAgICAgTG9naWNhbEV4
dGVudENvbXB1dGVkVmFsdWVzIGNvbXB1dGVkVmFsdWVzOwotICAgICAgICBibG9jay0+Y29tcHV0
ZUxvZ2ljYWxIZWlnaHQoYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMp
OwotICAgICAgICBMYXlvdXRVbml0IG5ld0NvbnRlbnRIZWlnaHQgPSBjb21wdXRlZFZhbHVlcy5t
X2V4dGVudCAtIGJsb2NrLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpIC0gYmxvY2st
PnNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgYmxvY2suY29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoYmxvY2subG9naWNhbEhlaWdodCgpLCAwLCBjb21wdXRlZFZhbHVlcyk7CisgICAgICAg
IExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50IC0g
YmxvY2suYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrLnNjcm9sbGJhckxv
Z2ljYWxIZWlnaHQoKTsKICAgICAgICAgcmV0dXJuIGFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVp
Z2h0Rm9yQm94U2l6aW5nKG5ld0NvbnRlbnRIZWlnaHQpOwogICAgIH0KIApAQCAtMzA3MiwzOSAr
MzA3MiwzOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNbwogICAgIGlmIChjaGVja0ZvclBlcnBl
bmRpY3VsYXJXcml0aW5nTW9kZSAmJiBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5pbmdCbG9jaywg
ZmFsc2UpOwogCi0gICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNCb3goKSkgeworICAgIGlmIChp
czxSZW5kZXJCb3g+KCpjb250YWluaW5nQmxvY2spKSB7CiAgICAgICAgIGJvb2wgaXNGaXhlZFBv
c2l0aW9uID0gc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247CiAKICAgICAgICAg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KTsKICAgICAgICAgaWYgKCFmbG93VGhyZWFkKSB7Ci0gICAgICAgICAgICBpZiAoaXNGaXhlZFBv
c2l0aW9uICYmIGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRvUmVuZGVyVmlldyhjb250YWluaW5nQmxvY2spLT5jbGllbnRMb2dpY2FsV2lk
dGhGb3JGaXhlZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYm
IGlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKQorICAgICAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lk
dGhGb3JGaXhlZFBvc2l0aW9uKCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckJveChj
b250YWluaW5nQmxvY2spLT5jbGllbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJCb3g+KCpjb250YWluaW5nQmxvY2spLmNsaWVudExvZ2ljYWxXaWR0
aCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWlu
aW5nQmxvY2stPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCisgICAgICAgIGlmIChpc0ZpeGVk
UG9zaXRpb24gJiYgaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKSkK
ICAgICAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2stPnZpZXcoKS5jbGllbnRMb2dpY2Fs
V2lkdGgoKTsKIAotICAgICAgICBpZiAoIWNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJCbG9jaygp
KQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyQm94KCpjb250YWluaW5nQmxvY2spLmNsaWVu
dExvZ2ljYWxXaWR0aCgpOworICAgICAgICBpZiAoIWlzPFJlbmRlckJsb2NrPigqY29udGFpbmlu
Z0Jsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KCpjb250YWlu
aW5nQmxvY2spLmNsaWVudExvZ2ljYWxXaWR0aCgpOwogCi0gICAgICAgIGNvbnN0IFJlbmRlckJs
b2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgUmVuZGVy
Qm94UmVnaW9uSW5mbyogYm94SW5mbyA9IDA7CisgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiBj
YiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgUmVu
ZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IG51bGxwdHI7CiAgICAgICAgIGlmICghcmVnaW9u
KSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckZsb3dUaHJlYWQo
KSAmJiAhY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjb250YWluaW5nQmxvY2spLT5jb250ZW50TG9naWNh
bFdpZHRoT2ZGaXJzdFJlZ2lvbigpOwogICAgICAgICAgICAgaWYgKGlzV3JpdGluZ01vZGVSb290
KCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLT5vZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyUmVn
aW9uKiBjYlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7Cisg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi5vZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKCk7CisgICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiBjYlJl
Z2lvbiA9IGNiLnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgICAg
ICAgICBpZiAoY2JSZWdpb24pCi0gICAgICAgICAgICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVu
ZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lvbik7CisgICAgICAgICAgICAgICAgICAgIGJveEluZm8g
PSBjYi5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChyZWdpb24gJiYgZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA9PSBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1w
VG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAgICAgICAgICAgIGJveEluZm8gPSBjYi0+
cmVuZGVyQm94UmVnaW9uSW5mbyhjb250YWluaW5nQmxvY2tSZWdpb24pOworICAgICAgICAgICAg
UmVuZGVyUmVnaW9uKiBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi5jbGFtcFRvU3RhcnRBbmRF
bmRSZWdpb25zKHJlZ2lvbik7CisgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVn
aW9uSW5mbyhjb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAoYm94SW5mbykgPyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjYi0+Y2xpZW50TG9naWNhbFdp
ZHRoKCkgLSAoY2ItPmxvZ2ljYWxXaWR0aCgpIC0gYm94SW5mby0+bG9naWNhbFdpZHRoKCkpKSA6
IGNiLT5jbGllbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIChib3hJbmZvKSA/IHN0
ZDo6bWF4PExheW91dFVuaXQ+KDAsIGNiLmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLmxvZ2lj
YWxXaWR0aCgpIC0gYm94SW5mby0+bG9naWNhbFdpZHRoKCkpKSA6IGNiLmNsaWVudExvZ2ljYWxX
aWR0aCgpOwogICAgIH0KIAogICAgIEFTU0VSVChjb250YWluaW5nQmxvY2stPmlzUmVuZGVySW5s
aW5lKCkgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7CkBAIC0zMTMz
LDM3ICszMTMzLDM3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vCiBMYXlvdXRVbml0IFJlbmRl
ckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywgYm9vbCBjaGVja0ZvclBlcnBlbmRp
Y3VsYXJXcml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBpZiAoY2hlY2tGb3JQZXJwZW5kaWN1bGFy
V3JpdGluZ01vZGUgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ICE9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBjb250YWluaW5n
QmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5pbmdCbG9jaywgMCwgZmFsc2Up
OworICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25l
ZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIsIGZhbHNlKTsKIAogICAgIGlmIChjb250YWluaW5n
QmxvY2stPmlzQm94KCkpIHsKICAgICAgICAgYm9vbCBpc0ZpeGVkUG9zaXRpb24gPSBzdHlsZSgp
LnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbjsKIAotICAgICAgICBpZiAoaXNGaXhlZFBvc2l0
aW9uICYmIGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgICAgICByZXR1
cm4gdG9SZW5kZXJWaWV3KGNvbnRhaW5pbmdCbG9jayktPmNsaWVudExvZ2ljYWxIZWlnaHRGb3JG
aXhlZFBvc2l0aW9uKCk7CisgICAgICAgIGlmIChpc0ZpeGVkUG9zaXRpb24gJiYgaXM8UmVuZGVy
Vmlldz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyVmlldz4oKmNvbnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbEhlaWdodEZvckZpeGVkUG9z
aXRpb24oKTsKIAotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxv
Y2stPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY29udGFpbmluZ0Jsb2NrKSA6IGNv
bnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGNvbnN0IFJlbmRlckJs
b2NrKiBjYiA9IGlzPFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSA/IGRvd25jYXN0PFJl
bmRlckJsb2NrPihjb250YWluaW5nQmxvY2spIDogY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5n
QmxvY2soKTsKICAgICAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi0+Y2xpZW50TG9naWNhbEhl
aWdodCgpOwogICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICBpZiAoZmxvd1RocmVhZCAmJiBjb250YWluaW5n
QmxvY2stPmlzUmVuZGVyRmxvd1RocmVhZCgpICYmIGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpICYmIGlzRml4ZWRQb3NpdGlvbikKKyAgICAgICAgaWYgKGZsb3dUaHJlYWQgJiYgaXM8
UmVuZGVyRmxvd1RocmVhZD4oKmNvbnRhaW5pbmdCbG9jaykgJiYgZmxvd1RocmVhZC0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpj
b250YWluaW5nQmxvY2spICYmIGlzRml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgICAgICByZXR1
cm4gY29udGFpbmluZ0Jsb2NrLT52aWV3KCkuY2xpZW50TG9naWNhbEhlaWdodCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjb250YWluaW5nQmxvY2spLT5jb250ZW50
TG9naWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJGbG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKS5jb250ZW50TG9naWNhbEhlaWdo
dE9mRmlyc3RSZWdpb24oKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAgICAgCi0gICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJJbmxpbmUo
KSAmJiBjb250YWluaW5nQmxvY2stPmlzSW5GbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQo
aXM8UmVuZGVySW5saW5lPigqY29udGFpbmluZ0Jsb2NrKSAmJiBjb250YWluaW5nQmxvY2stPmlz
SW5GbG93UG9zaXRpb25lZCgpKTsKIAotICAgIGNvbnN0IFJlbmRlcklubGluZSogZmxvdyA9IHRv
UmVuZGVySW5saW5lKGNvbnRhaW5pbmdCbG9jayk7Ci0gICAgSW5saW5lRmxvd0JveCogZmlyc3Qg
PSBmbG93LT5maXJzdExpbmVCb3goKTsKLSAgICBJbmxpbmVGbG93Qm94KiBsYXN0ID0gZmxvdy0+
bGFzdExpbmVCb3goKTsKKyAgICBjb25zdCBSZW5kZXJJbmxpbmUmIGZsb3cgPSBkb3duY2FzdDxS
ZW5kZXJJbmxpbmU+KCpjb250YWluaW5nQmxvY2spOworICAgIElubGluZUZsb3dCb3gqIGZpcnN0
ID0gZmxvdy5maXJzdExpbmVCb3goKTsKKyAgICBJbmxpbmVGbG93Qm94KiBsYXN0ID0gZmxvdy5s
YXN0TGluZUJveCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZW1wdHks
IHJldHVybiBhIGhlaWdodCBvZiAwLgogICAgIGlmICghZmlyc3QgfHwgIWxhc3QpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZXN1bHQ7Ci0gICAgTGF5b3V0UmVj
dCBib3VuZGluZ0JveCA9IGZsb3ctPmxpbmVzQm91bmRpbmdCb3goKTsKKyAgICBMYXlvdXRSZWN0
IGJvdW5kaW5nQm94ID0gZmxvdy5saW5lc0JvdW5kaW5nQm94KCk7CiAgICAgaWYgKGNvbnRhaW5p
bmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgaGVpZ2h0UmVzdWx0
ID0gYm91bmRpbmdCb3guaGVpZ2h0KCk7CiAgICAgZWxzZQpAQCAtMzE4MCwxMyArMzE4MCwxMyBA
QCBzdGF0aWMgdm9pZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2Fs
TGVmdCwgTGVuZ3RoJiBsb2dpY2FsUmlnaAogICAgIC8vIEZJWE1FOiBUaGUgc3RhdGljIGRpc3Rh
bmNlIGNvbXB1dGF0aW9uIGhhcyBub3QgYmVlbiBwYXRjaGVkIGZvciBtaXhlZCB3cml0aW5nIG1v
ZGVzIHlldC4KICAgICBpZiAoY2hpbGQtPnBhcmVudCgpLT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IExUUikgewogICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVy
KCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyTG9naWNh
bExlZnQoKTsKLSAgICAgICAgZm9yIChhdXRvIGN1cnIgPSBjaGlsZC0+cGFyZW50KCk7IGN1cnIg
JiYgY3VyciAhPSBjb250YWluZXJCbG9jazsgY3VyciA9IGN1cnItPmNvbnRhaW5lcigpKSB7Ci0g
ICAgICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkgewotICAgICAgICAgICAgICAgIHN0YXRpY1Bv
c2l0aW9uICs9IHRvUmVuZGVyQm94KGN1cnIpLT5sb2dpY2FsTGVmdCgpOwotICAgICAgICAgICAg
ICAgIGlmIChyZWdpb24gJiYgdG9SZW5kZXJCb3goY3VyciktPmlzUmVuZGVyQmxvY2soKSkgewot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2Nr
KGN1cnIpOwotICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5k
RW5kUmVnaW9ucyhyZWdpb24pOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25J
bmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8ocmVnaW9uKTsKKyAgICAgICAg
Zm9yIChhdXRvIGN1cnJlbnQgPSBjaGlsZC0+cGFyZW50KCk7IGN1cnJlbnQgJiYgY3VycmVudCAh
PSBjb250YWluZXJCbG9jazsgY3VycmVudCA9IGN1cnJlbnQtPmNvbnRhaW5lcigpKSB7CisgICAg
ICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBz
dGF0aWNQb3NpdGlvbiArPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpjdXJyZW50KS5sb2dpY2FsTGVm
dCgpOworICAgICAgICAgICAgICAgIGlmIChyZWdpb24gJiYgaXM8UmVuZGVyQmxvY2s+KCpjdXJy
ZW50KSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgY3VycmVudEJs
b2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVnaW9uID0gY3VycmVudEJsb2NrLmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGN1
cnJlbnRCbG9jay5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChib3hJbmZvKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24g
Kz0gYm94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTk2LDI1
ICszMTk2LDI1IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShMZW5n
dGgmIGxvZ2ljYWxMZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgUmVuZGVyQm94JiBlbmNsb3NpbmdCb3ggPSBjaGlsZC0+cGFyZW50KCktPmVuY2xvc2luZ0Jv
eCgpOwogICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCkt
PnN0YXRpY0lubGluZVBvc2l0aW9uKCkgKyBjb250YWluZXJMb2dpY2FsV2lkdGggKyBjb250YWlu
ZXJCbG9jay0+Ym9yZGVyTG9naWNhbExlZnQoKTsKLSAgICAgICAgZm9yIChSZW5kZXJFbGVtZW50
KiBjdXJyID0gJmVuY2xvc2luZ0JveDsgY3VycjsgY3VyciA9IGN1cnItPmNvbnRhaW5lcigpKSB7
Ci0gICAgICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkgewotICAgICAgICAgICAgICAgIGlmIChj
dXJyICE9IGNvbnRhaW5lckJsb2NrKQotICAgICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlv
biAtPSB0b1JlbmRlckJveChjdXJyKS0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY3VyciA9PSAmZW5jbG9zaW5nQm94KQorICAgICAgICBmb3IgKFJlbmRlckVsZW1lbnQqIGN1
cnJlbnQgPSAmZW5jbG9zaW5nQm94OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y29udGFp
bmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjdXJyZW50KSkgeworICAg
ICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNQb3NpdGlvbiAtPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpjdXJyZW50KS5s
b2dpY2FsTGVmdCgpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09ICZlbmNsb3NpbmdC
b3gpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGVuY2xvc2luZ0JveC5s
b2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uICYmIGN1cnItPmlzUmVu
ZGVyQmxvY2soKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2Ig
PSB0b1JlbmRlckJsb2NrKGN1cnIpOwotICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjYi0+
Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwotICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8ocmVn
aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAocmVnaW9uICYmIGlzPFJlbmRlckJsb2NrPigqY3Vy
cmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIGN1cnJlbnRC
bG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAg
ICAgIHJlZ2lvbiA9IGN1cnJlbnRCbG9jay5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lv
bik7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBj
dXJyZW50QmxvY2sucmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoYm94SW5mbykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgIT0g
Y29udGFpbmVyQmxvY2spCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRp
b24gLT0gY2ItPmxvZ2ljYWxXaWR0aCgpIC0gKGJveEluZm8tPmxvZ2ljYWxMZWZ0KCkgKyBib3hJ
bmZvLT5sb2dpY2FsV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9
PSAmZW5jbG9zaW5nQm94KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT0g
Y29udGFpbmVyQmxvY2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRp
b24gLT0gY3VycmVudEJsb2NrLmxvZ2ljYWxXaWR0aCgpIC0gKGJveEluZm8tPmxvZ2ljYWxMZWZ0
KCkgKyBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudCA9PSAmZW5jbG9zaW5nQm94KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY1Bvc2l0aW9uICs9IGVuY2xvc2luZ0JveC5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8t
PmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGN1cnIgPT0gY29udGFpbmVyQmxvY2sp
CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBjb250YWluZXJCbG9jaykKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBsb2dpY2FsUmlnaHQuc2V0VmFsdWUoRml4
ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKQEAgLTMzMzgsMTQgKzMzMzgsMTQgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZh
bHVlcyYgY29tcHUKICAgICAvLyBBZGp1c3QgbG9naWNhbExlZnQgaWYgd2UgbmVlZCB0byBmb3Ig
dGhlIGZsaXBwZWQgdmVyc2lvbiBvZiBvdXIgd3JpdGluZyBtb2RlIGluIHJlZ2lvbnMuCiAgICAg
Ly8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBvZiBvYmplY3RzIGFzIGNvbnRh
aW5lckJsb2NrLCBub3Qgb25seSBSZW5kZXJCbG9jay4KICAgICBSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChmbG93VGhy
ZWFkICYmICFyZWdpb24gJiYgaXNXcml0aW5nTW9kZVJvb3QoKSAmJiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYm
IGNvbnRhaW5lckJsb2NrLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICBpZiAoZmxvd1RocmVhZCAm
JiAhcmVnaW9uICYmIGlzV3JpdGluZ01vZGVSb290KCkgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA9PSBjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBpczxS
ZW5kZXJCbG9jaz4oKmNvbnRhaW5lckJsb2NrKSkgewogICAgICAgICBBU1NFUlQoY29udGFpbmVy
QmxvY2stPmNhbkhhdmVCb3hJbmZvSW5SZWdpb24oKSk7CiAgICAgICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnRQb3MgPSBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uOwotICAgICAgICBjb25zdCBS
ZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGNvbnRhaW5lckJsb2NrKTsKLSAgICAgICAg
TGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpOwotICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0Qmxv
Y2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRl
ckJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250YWluZXJCbG9jayk7CisgICAgICAg
IExheW91dFVuaXQgY2JQYWdlT2Zmc2V0ID0gcmVuZGVyQmxvY2sub2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSgpOworICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gcmVuZGVy
QmxvY2sucmVnaW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOwogICAgICAgICBpZiAoY2JS
ZWdpb24pIHsKLSAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjYi0+
cmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lvbik7CisgICAgICAgICAgICBSZW5kZXJCb3hSZWdp
b25JbmZvKiBib3hJbmZvID0gcmVuZGVyQmxvY2sucmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lv
bik7CiAgICAgICAgICAgICBpZiAoYm94SW5mbykgewogICAgICAgICAgICAgICAgIGxvZ2ljYWxM
ZWZ0UG9zICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgICAgICAgICAgY29tcHV0
ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxMZWZ0UG9zOwpAQCAtMzY1NSwxNCArMzY1NSwx
NCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0KExvZ2lj
YWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcAogICAgIC8vIEFkanVzdCBsb2dpY2FsVG9wIGlm
IHdlIG5lZWQgdG8gZm9yIHBlcnBlbmRpY3VsYXIgd3JpdGluZyBtb2RlcyBpbiByZWdpb25zLgog
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgb2Ygb2JqZWN0cyBhcyBj
b250YWluZXJCbG9jaywgbm90IG9ubHkgUmVuZGVyQmxvY2suCiAgICAgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoZmxv
d1RocmVhZCAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGNvbnRhaW5lckJsb2NrLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIGNvbnRhaW5lckJsb2NrLT5pc1JlbmRlckJsb2Nr
KCkpIHsKKyAgICBpZiAoZmxvd1RocmVhZCAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9
IGNvbnRhaW5lckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIGlzPFJlbmRlckJs
b2NrPigqY29udGFpbmVyQmxvY2spKSB7CiAgICAgICAgIEFTU0VSVChjb250YWluZXJCbG9jay0+
Y2FuSGF2ZUJveEluZm9JblJlZ2lvbigpKTsKICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
UG9zID0gY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbjsKLSAgICAgICAgY29uc3QgUmVuZGVyQmxv
Y2sqIGNiID0gdG9SZW5kZXJCbG9jayhjb250YWluZXJCbG9jayk7Ci0gICAgICAgIExheW91dFVu
aXQgY2JQYWdlT2Zmc2V0ID0gY2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSAt
IGxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi0+cmVn
aW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOworICAgICAgICBjb25zdCBSZW5kZXJCbG9j
ayYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250YWluZXJCbG9jayk7Cisg
ICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zmc2V0ID0gcmVuZGVyQm94Lm9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UoKSAtIGxvZ2ljYWxMZWZ0KCk7CisgICAgICAgIFJlbmRlclJlZ2lv
biogY2JSZWdpb24gPSByZW5kZXJCb3gucmVnaW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQp
OwogICAgICAgICBpZiAoY2JSZWdpb24pIHsKLSAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbklu
Zm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lvbik7CisgICAgICAg
ICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94LnJlbmRlckJveFJl
Z2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKICAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAgICAgICAg
ICAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxUb3BQb3M7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRl
eCBiYWZkODRiMjRmMzFmODk0NDAxZDRiZGJjNDkxMzcwM2E0YzJhYjQ5Li43M2YzZWU0NWFkNGEw
Mjk5MGQ0ODEzM2RkOTNjZTgwOGNlMzdiYzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTIxMywxMSArMjEzLDExIEBAIHN0
YXRpYyBMYXlvdXRTaXplIGFjY3VtdWxhdGVJbkZsb3dQb3NpdGlvbk9mZnNldHMoY29uc3QgUmVu
ZGVyT2JqZWN0KiBjaGlsZCkKICAgICBpZiAoIWNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkgfHwg
IWNoaWxkLT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIExheW91dFNpemUo
KTsKICAgICBMYXlvdXRTaXplIG9mZnNldDsKLSAgICBSZW5kZXJFbGVtZW50KiBwID0gdG9SZW5k
ZXJCbG9jayhjaGlsZCktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICB3aGlsZSAo
cCAmJiBwLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgUmVuZGVyRWxlbWVudCogcCA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPigqY2hpbGQpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKKyAg
ICB3aGlsZSAoaXM8UmVuZGVySW5saW5lPihwKSkgewogICAgICAgICBpZiAocC0+aXNJbkZsb3dQ
b3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgIFJlbmRlcklubGluZSogcmVuZGVySW5saW5lID0g
dG9SZW5kZXJJbmxpbmUocCk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gcmVuZGVySW5saW5lLT5v
ZmZzZXRGb3JJbkZsb3dQb3NpdGlvbigpOworICAgICAgICAgICAgUmVuZGVySW5saW5lJiByZW5k
ZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpwKTsKKyAgICAgICAgICAgIG9mZnNl
dCArPSByZW5kZXJJbmxpbmUub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKTsKICAgICAgICAgfQog
ICAgICAgICBwID0gcC0+cGFyZW50KCk7CiAgICAgfQpAQCAtMjY3NCw3ICsyNjc0LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkVG8oUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHRvQm94TW9kZWxPYmplY3QsIFIKIHsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCBjYWxsZXJzIGhh
dmUgY2xlYXJlZCB0aGVpciBwb3NpdGlvbmVkIG9iamVjdHMgbGlzdCBmb3IgY2hpbGQgbW92ZXMg
KCFmdWxsUmVtb3ZlSW5zZXJ0KSBzbyB0aGUKICAgICAvLyBwb3NpdGlvbmVkIHJlbmRlcmVyIG1h
cHMgZG9uJ3QgYmVjb21lIHN0YWxlLiBJdCB3b3VsZCBiZSB0b28gc2xvdyB0byBkbyB0aGUgbWFw
IGxvb2t1cCBvbiBlYWNoIGNhbGwuCi0gICAgQVNTRVJUKCFmdWxsUmVtb3ZlSW5zZXJ0IHx8ICFp
c1JlbmRlckJsb2NrKCkgfHwgIXRvUmVuZGVyQmxvY2sodGhpcyktPmhhc1Bvc2l0aW9uZWRPYmpl
Y3RzKCkpOworICAgIEFTU0VSVCghZnVsbFJlbW92ZUluc2VydCB8fCAhaXM8UmVuZGVyQmxvY2s+
KCp0aGlzKSB8fCAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCp0aGlzKS5oYXNQb3NpdGlvbmVkT2Jq
ZWN0cygpKTsKIAogICAgIEFTU0VSVCh0aGlzID09IGNoaWxkLT5wYXJlbnQoKSk7CiAgICAgQVNT
RVJUKCFiZWZvcmVDaGlsZCB8fCB0b0JveE1vZGVsT2JqZWN0ID09IGJlZm9yZUNoaWxkLT5wYXJl
bnQoKSk7CkBAIC0yNjk1LDEwICsyNjk1LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
Om1vdmVDaGlsZHJlblRvKFJlbmRlckJveE1vZGVsT2JqZWN0KiB0b0JveE1vZGVsT2JqZWN0CiAg
ICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcmFyZWx5IGhpdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlz
IHVzdWFsbHkgY2FsbGVkIG9uCiAgICAgLy8gYW5vbnltb3VzIGJsb2NrcyB3aGljaCBjYW4gbm8g
bG9uZ2VyIGNhcnJ5IHBvc2l0aW9uZWQgb2JqZWN0cyAoc2VlIHIxMjA3NjEpCiAgICAgLy8gb3Ig
d2hlbiBmdWxsUmVtb3ZlSW5zZXJ0IGlzIGZhbHNlLgotICAgIGlmIChmdWxsUmVtb3ZlSW5zZXJ0
ICYmIGlzUmVuZGVyQmxvY2soKSkgewotICAgICAgICB0b1JlbmRlckJsb2NrKHRoaXMpLT5yZW1v
dmVQb3NpdGlvbmVkT2JqZWN0cygwKTsKLSAgICAgICAgaWYgKGlzUmVuZGVyQmxvY2tGbG93KCkp
Ci0gICAgICAgICAgICB0b1JlbmRlckJsb2NrRmxvdyh0aGlzKS0+cmVtb3ZlRmxvYXRpbmdPYmpl
Y3RzKCk7IAorICAgIGlmIChmdWxsUmVtb3ZlSW5zZXJ0ICYmIGlzPFJlbmRlckJsb2NrPigqdGhp
cykpIHsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCp0aGlzKS5yZW1vdmVQb3NpdGlv
bmVkT2JqZWN0cyhudWxscHRyKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnRo
aXMpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqdGhpcykucmVtb3Zl
RmxvYXRpbmdPYmplY3RzKCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCB0
b0JveE1vZGVsT2JqZWN0ID09IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggOGY0ZjQ1ZTk1N2QzYzFlNGJkNGY5
NDkwNDM1ZDc2ODEzYTM5YzY1YS4uMDgyN2NhYTcwZTU0ZDdmZGI5NTUwZDc5OGMxYjQ4NDRhNjg4
ZWMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAt
NzYyLDcgKzc2Miw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6cHJvcGFnYXRlU3R5bGVUb0Fub255
bW91c0NoaWxkcmVuKFN0eWxlUHJvcGFnYXRpb25UeXBlIHByb3BhCiAgICAgICAgIGlmICghZWxl
bWVudENoaWxkLmlzQW5vbnltb3VzKCkgfHwgZWxlbWVudENoaWxkLnN0eWxlKCkuc3R5bGVUeXBl
KCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAocHJv
cGFnYXRpb25UeXBlID09IFByb3BhZ2F0ZVRvQmxvY2tDaGlsZHJlbk9ubHkgJiYgIWVsZW1lbnRD
aGlsZC5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgIGlmIChwcm9wYWdhdGlvblR5cGUgPT0gUHJv
cGFnYXRlVG9CbG9ja0NoaWxkcmVuT25seSAmJiAhaXM8UmVuZGVyQmxvY2s+KGVsZW1lbnRDaGls
ZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
QEAgLTc3MSw3ICs3NzEsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9B
bm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3BhZ2F0aW9uVHlwZSBwcm9wYQogI2VuZGlmCiAKICAg
ICAgICAgLy8gUmVuZGVyRmxvd1RocmVhZHMgYXJlIHVwZGF0ZWQgdGhyb3VnaCB0aGUgUmVuZGVy
Vmlldzo6c3R5bGVEaWRDaGFuZ2UgZnVuY3Rpb24uCi0gICAgICAgIGlmIChlbGVtZW50Q2hpbGQu
aXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgIGlmIChpczxSZW5kZXJGbG93VGhyZWFkPihl
bGVtZW50Q2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYXV0byBuZXdT
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KCZzdHls
ZSgpLCBlbGVtZW50Q2hpbGQuc3R5bGUoKS5kaXNwbGF5KCkpOwpAQCAtNzg0LDcgKzc4NCw3IEBA
IHZvaWQgUmVuZGVyRWxlbWVudDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKFN0
eWxlUHJvcGFnYXRpb25UeXBlIHByb3BhCiAKICAgICAgICAgLy8gUHJlc2VydmUgdGhlIHBvc2l0
aW9uIHN0eWxlIG9mIGFub255bW91cyBibG9jayBjb250aW51YXRpb25zIGFzIHRoZXkgY2FuIGhh
dmUgcmVsYXRpdmUgb3Igc3RpY2t5IHBvc2l0aW9uIHdoZW4KICAgICAgICAgLy8gdGhleSBjb250
YWluIGJsb2NrIGRlc2NlbmRhbnRzIG9mIHJlbGF0aXZlIG9yIHN0aWNreSBwb3NpdGlvbmVkIGlu
bGluZXMuCi0gICAgICAgIGlmIChlbGVtZW50Q2hpbGQuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYg
dG9SZW5kZXJCbG9jayhlbGVtZW50Q2hpbGQpLmlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24o
KSkKKyAgICAgICAgaWYgKGVsZW1lbnRDaGlsZC5pc0luRmxvd1Bvc2l0aW9uZWQoKSAmJiBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oZWxlbWVudENoaWxkKS5pc0Fub255bW91c0Jsb2NrQ29udGludWF0
aW9uKCkpCiAgICAgICAgICAgICBuZXdTdHlsZS5nZXQoKS5zZXRQb3NpdGlvbihlbGVtZW50Q2hp
bGQuc3R5bGUoKS5wb3NpdGlvbigpKTsKIAogICAgICAgICBlbGVtZW50Q2hpbGQuc2V0U3R5bGUo
V1RGOjptb3ZlKG5ld1N0eWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAKaW5kZXggZjFmNWIzMmE1M2Q2NjhhYjYxOWUzNDVlNDhlMDk2ZTE3MWQ0
YTE3Ny4uYTg2MDA5Njc0YjZjZTg4Yzc2NzZmMGU2ZGQ3ZTBkOWQ2NzczNzU2NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNDczLDE2ICs0
NzMsMTYgQEAgTGF5b3V0UG9pbnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJl
bGF0aXZlVG9PZmZzZXRQYXJlbnQoY29uc3QgUmVuZGUKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gR2V0IHRoZSBsb2dpY2FsIHRvcCBjb29yZGluYXRlIG9mIHRoZSBjdXJyZW50IG9iamVj
dC4KICAgICAgICAgICAgIExheW91dFVuaXQgdG9wID0gMDsKLSAgICAgICAgICAgIGlmIChib3hN
b2RlbE9iamVjdC5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICAgICAgdG9wID0gdG9SZW5k
ZXJCbG9jayhib3hNb2RlbE9iamVjdCkub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
OworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihib3hNb2RlbE9iamVjdCkpCisgICAg
ICAgICAgICAgICAgdG9wID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGJveE1vZGVsT2JqZWN0KS5v
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBpZiAoYm94TW9kZWxPYmplY3QuY29udGFpbmluZ0Jsb2NrKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHRvcCA9IGJveE1vZGVsT2JqZWN0LmNvbnRhaW5pbmdCbG9jaygpLT5v
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKGJveE1vZGVsT2JqZWN0LmlzQm94KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHRvcCArPSB0b1JlbmRlckJveChib3hNb2RlbE9iamVjdCkudG9wTGVmdExvY2F0aW9uKCku
eSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJveE1vZGVsT2JqZWN0LmlzUmVuZGVySW5s
aW5lKCkpCi0gICAgICAgICAgICAgICAgICAgIHRvcCAtPSB0b1JlbmRlcklubGluZShib3hNb2Rl
bE9iamVjdCkuYm9yZGVyVG9wKCk7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4o
Ym94TW9kZWxPYmplY3QpKQorICAgICAgICAgICAgICAgICAgICB0b3AgKz0gZG93bmNhc3Q8UmVu
ZGVyQm94Pihib3hNb2RlbE9iamVjdCkudG9wTGVmdExvY2F0aW9uKCkueSgpOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlcklubGluZT4oYm94TW9kZWxPYmplY3QpKQorICAgICAg
ICAgICAgICAgICAgICB0b3AgLT0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihib3hNb2RlbE9iamVj
dCkuYm9yZGVyVG9wKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIEdldCB0aGUgbG9naWNhbCB0b3Agb2YgdGhlIHJlZ2lvbiB0aGlzIG9iamVjdCBzdGFydHMg
aW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAppbmRl
eCA2NDQzM2ZjNWQyNjM0ZTkwZDAzNzdkNjIwMThmNGQ3MGVmZTRkNTQ0Li43NDUxMjIxYzJjYzE1
MGIwZDkyMjgzYjBmNjM5OTliZTE5NzM2MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCkBAIC0xNDksMTQgKzE0OSwxNCBAQCB2b2lkIFJlbmRl
ckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKGJvb2wmIHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVp
bGQpCiAgICAgICAgIGlmIChjaGlsZCAhPSBsYXN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJlcXVp
cmVzUmVuZGVyVHJlZVJlYnVpbGQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChjaGlsZCAmJiBj
aGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhbm9ueW1vdXNC
bG9jayA9IHRvUmVuZGVyQmxvY2soKmNoaWxkKTsKKyAgICAgICAgICAgIGF1dG8mIGFub255bW91
c0Jsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCk7CiAgICAgICAgICAgICBpZiAo
YW5vbnltb3VzQmxvY2suZmlyc3RDaGlsZCgpICE9IGFub255bW91c0Jsb2NrLmxhc3RDaGlsZCgp
KQogICAgICAgICAgICAgICAgIHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQgPSB0cnVlOwogICAg
ICAgICB9CiAKICAgICAgICAgd2hpbGUgKChjaGlsZCA9IGZpcnN0Q2hpbGQoKSkpIHsKICAgICAg
ICAgICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFyZXF1aXJlc1JlbmRlclRy
ZWVSZWJ1aWxkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIG5vbkFub255bW91c0NoaWxk
ID0gdG9SZW5kZXJCbG9jaygqY2hpbGQpLmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byogbm9uQW5vbnltb3VzQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNoaWxk
KS5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbm9uQW5vbnltb3Vz
Q2hpbGQ7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxk
LT5yZW1vdmVGcm9tUGFyZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCmluZGV4IGYzN2Y1Mzc0ODgxYTczM2JmMzcxMzMxMTQ2YjJhNzZiYmI3ZGY1ZWEuLjdm
NTRhOWUxZDkxOTFkZDM3NDk5ZjZjNzkwZmQ1ZDJjMTdhYjMyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBAIC0xMjEsMTAgKzEyMSwxMCBAQCBSZW5kZXJJ
bmxpbmUqIFJlbmRlcklubGluZTo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0CiAg
ICAgaWYgKCFjb250aW51YXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYg
KGNvbnRpbnVhdGlvbi0+aXNSZW5kZXJJbmxpbmUoKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVy
SW5saW5lKGNvbnRpbnVhdGlvbik7CisgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKmNvbnRpbnVh
dGlvbikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KGNvbnRpbnVhdGlv
bik7CiAKLSAgICByZXR1cm4gY29udGludWF0aW9uLT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRl
ckJsb2NrKGNvbnRpbnVhdGlvbiktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSA6IG51bGxw
dHI7CisgICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrPigqY29udGludWF0aW9uKSA/IGRvd25jYXN0
PFJlbmRlckJsb2NrPigqY29udGludWF0aW9uKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkg
OiBudWxscHRyOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlRnJvbVN0eWxlKCkKQEAg
LTE1MiwyMSArMTUyLDIxIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVN0eWxlT2ZBbm9ueW1vdXNCbG9j
a0NvbnRpbnVhdGlvbnMoUmVuZGVyQm94KiBib3gsIGNvbnN0IFJlbmRlCiAgICAgICAgIGlmIChi
b3gtPnN0eWxlKCkucG9zaXRpb24oKSA9PSBuZXdTdHlsZS0+cG9zaXRpb24oKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFib3gtPmlzUmVuZGVyQmxvY2so
KSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9jaz4oKmJveCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKGJveCk7
Ci0gICAgICAgIGlmICghYmxvY2stPmlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24oKSkKKyAg
ICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpib3gpOwor
ICAgICAgICBpZiAoIWJsb2NrLmlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24oKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vIGxvbmdl
ciBpbi1mbG93IHBvc2l0aW9uZWQgYnV0IG91ciBkZXNjZW5kYW50IGJsb2NrKHMpIHN0aWxsIGhh
dmUgYW4gaW4tZmxvdyBwb3NpdGlvbmVkIGFuY2VzdG9yIHRoZW4KICAgICAgICAgLy8gdGhlaXIg
Y29udGFpbmluZyBhbm9ueW1vdXMgYmxvY2sgc2hvdWxkIGtlZXAgaXRzIGluLWZsb3cgcG9zaXRp
b25pbmcuIAotICAgICAgICBSZW5kZXJJbmxpbmUqIGNvbnQgPSBibG9jay0+aW5saW5lRWxlbWVu
dENvbnRpbnVhdGlvbigpOwotICAgICAgICBpZiAob2xkU3R5bGUtPmhhc0luRmxvd1Bvc2l0aW9u
KCkgJiYgaW5GbG93UG9zaXRpb25lZElubGluZUFuY2VzdG9yKGNvbnQpKQorICAgICAgICBSZW5k
ZXJJbmxpbmUqIGNvbnRpbnVhdGlvbiA9IGJsb2NrLmlubGluZUVsZW1lbnRDb250aW51YXRpb24o
KTsKKyAgICAgICAgaWYgKG9sZFN0eWxlLT5oYXNJbkZsb3dQb3NpdGlvbigpICYmIGluRmxvd1Bv
c2l0aW9uZWRJbmxpbmVBbmNlc3Rvcihjb250aW51YXRpb24pKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGF1dG8gYmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1v
dXNTdHlsZVdpdGhEaXNwbGF5KCZibG9jay0+c3R5bGUoKSwgQkxPQ0spOworICAgICAgICBhdXRv
IGJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxh
eSgmYmxvY2suc3R5bGUoKSwgQkxPQ0spOwogICAgICAgICBibG9ja1N0eWxlLmdldCgpLnNldFBv
c2l0aW9uKG5ld1N0eWxlLT5wb3NpdGlvbigpKTsKLSAgICAgICAgYmxvY2stPnNldFN0eWxlKFdU
Rjo6bW92ZShibG9ja1N0eWxlKSk7CisgICAgICAgIGJsb2NrLnNldFN0eWxlKFdURjo6bW92ZShi
bG9ja1N0eWxlKSk7CiAgICAgfQogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3QKICAgICAgICAgLy8gSWYgYW55IGRlc2NlbmRhbnQgYmxvY2tzIGV4aXN0IHRo
ZW4gdGhleSB3aWxsIGJlIGluIHRoZSBuZXh0IGFub255bW91cyBibG9jayBhbmQgaXRzIHNpYmxp
bmdzLgogICAgICAgICBSZW5kZXJPYmplY3QqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCktPm5l
eHRTaWJsaW5nKCk7CiAgICAgICAgIEFTU0VSVChibG9jayAmJiBibG9jay0+aXNBbm9ueW1vdXNC
bG9jaygpKTsKLSAgICAgICAgdXBkYXRlU3R5bGVPZkFub255bW91c0Jsb2NrQ29udGludWF0aW9u
cyh0b1JlbmRlckJsb2NrKGJsb2NrKSwgJm5ld1N0eWxlLCBvbGRTdHlsZSk7CisgICAgICAgIHVw
ZGF0ZVN0eWxlT2ZBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbnMoZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KGJsb2NrKSwgJm5ld1N0eWxlLCBvbGRTdHlsZSk7CiAgICAgfQogCiAgICAgaWYgKCFhbHdh
eXNDcmVhdGVMaW5lQm94ZXMoKSkgewpAQCAtMjc3LDkgKzI3Nyw5IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQogCiBzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24o
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBpZiAocmVuZGVyZXItPmlzSW5saW5lKCkg
JiYgIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlcklubGlu
ZShyZW5kZXJlciktPmNvbnRpbnVhdGlvbigpOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKHJl
bmRlcmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgIGlmIChpczxSZW5kZXJJ
bmxpbmU+KCpyZW5kZXJlcikgJiYgIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikuY29udGludWF0aW9uKCk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVsZW1lbnRD
b250aW51YXRpb24oKTsKIH0KIAogUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlcklubGluZTo6
Y29udGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCkBAIC00NDMsNyAr
NDQzLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbG9jayogZnJv
bUJsb2NrLCBSZW5kZXJCbG9jayogdG9CbG9jaywKIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZs
b3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCkKIHsKLSAgICBSZW5kZXJCbG9jayogcHJlID0gMDsK
KyAgICBSZW5kZXJCbG9jayogcHJlID0gbnVsbHB0cjsKICAgICBSZW5kZXJCbG9jayogYmxvY2sg
PSBjb250YWluaW5nQmxvY2soKTsKICAgICAKICAgICAvLyBEZWxldGUgb3VyIGxpbmUgYm94ZXMg
YmVmb3JlIHdlIGRvIHRoZSBpbmxpbmUgc3BsaXQgaW50byBjb250aW51YXRpb25zLgpAQCAtNDUz
LDEyICs0NTMsMTIgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkLCBSZW5kZXJCbG9jayogbmV3QmxvY2tCb3gKICAgICBpZiAoYmxvY2stPmlz
QW5vbnltb3VzQmxvY2soKSAmJiAoIWJsb2NrLT5wYXJlbnQoKSB8fCAhYmxvY2stPnBhcmVudCgp
LT5jcmVhdGVzQW5vbnltb3VzV3JhcHBlcigpKSkgewogICAgICAgICAvLyBXZSBjYW4gcmV1c2Ug
dGhpcyBibG9jayBhbmQgbWFrZSBpdCB0aGUgcHJlQmxvY2sgb2YgdGhlIG5leHQgY29udGludWF0
aW9uLgogICAgICAgICBwcmUgPSBibG9jazsKLSAgICAgICAgcHJlLT5yZW1vdmVQb3NpdGlvbmVk
T2JqZWN0cygwKTsKKyAgICAgICAgcHJlLT5yZW1vdmVQb3NpdGlvbmVkT2JqZWN0cyhudWxscHRy
KTsKICAgICAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBUaGUgZW5jbG9zaW5nIG1ldGhvZCBzaG91
bGQgbGlrZWx5IGJlIHN3aXRjaGVkIG92ZXIKICAgICAgICAgLy8gdG8gb25seSB3b3JrIG9uIFJl
bmRlckJsb2NrRmxvdywgaW4gd2hpY2ggY2FzZSB0aGlzIGNvbnZlcnNpb24gY2FuIGJlCiAgICAg
ICAgIC8vIHJlbW92ZWQuCi0gICAgICAgIGlmIChwcmUtPmlzUmVuZGVyQmxvY2tGbG93KCkpCi0g
ICAgICAgICAgICB0b1JlbmRlckJsb2NrRmxvdyhwcmUpLT5yZW1vdmVGbG9hdGluZ09iamVjdHMo
KTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnByZSkpCisgICAgICAgICAgICBk
b3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwcmUpLnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOwog
ICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBObyBhbm9ueW1vdXMgYmxvY2sgYXZhaWxhYmxlIGZvciB1c2UuICBNYWtlIG9u
ZS4KQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveAogICAgICAgICBt
YWRlTmV3QmVmb3JlQmxvY2sgPSB0cnVlOwogICAgIH0KIAotICAgIFJlbmRlckJsb2NrKiBwb3N0
ID0gdG9SZW5kZXJCbG9jayhwcmUtPmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGJs
b2NrKSk7CisgICAgUmVuZGVyQmxvY2sqIHBvc3QgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocHJl
LT5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhibG9jaykpOwogCiAgICAgUmVuZGVy
T2JqZWN0KiBib3hGaXJzdCA9IG1hZGVOZXdCZWZvcmVCbG9jayA/IGJsb2NrLT5maXJzdENoaWxk
KCkgOiBwcmUtPm5leHRTaWJsaW5nKCk7CiAgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykKQEAg
LTg1MywyMSArODUzLDIxIEBAIGJvb2wgUmVuZGVySW5saW5lOjpoaXRUZXN0Q3VsbGVkSW5saW5l
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzCiBWaXNpYmxlUG9zaXRp
b24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2lu
dCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgLy8gRklYTUU6IERvZXMgbm90
IGRlYWwgd2l0aCByZWxhdGl2ZSBvciBzdGlja3kgcG9zaXRpb25lZCBpbmxpbmVzIChzaG91bGQg
aXQ/KQotICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOworICAgIFJlbmRl
ckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKICAgICBp
ZiAoZmlyc3RMaW5lQm94KCkpIHsKICAgICAgICAgLy8gVGhpcyBpbmxpbmUgYWN0dWFsbHkgaGFz
IGEgbGluZSBib3guICBXZSBtdXN0IGhhdmUgY2xpY2tlZCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcg
b2Ygb25lIG9mIHRoZXNlIGJveGVzLiAgV2UKICAgICAgICAgLy8gc2hvdWxkIHRyeSB0byBmaW5k
IGEgcmVzdWx0IGJ5IGFza2luZyBvdXIgY29udGFpbmluZyBibG9jay4KLSAgICAgICAgcmV0dXJu
IGNiLT5wb3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24pOworICAgICAgICByZXR1cm4gY29u
dGFpbmluZ0Jsb2NrLT5wb3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24pOwogICAgIH0KIAog
ICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29vcmRzIGZyb20gdGhlIHByZS1hbm9ueW1vdXMgYmxvY2sg
dG8gdGhlIHBvc3QtYW5vbnltb3VzIGJsb2NrLgotICAgIExheW91dFBvaW50IHBhcmVudEJsb2Nr
UG9pbnQgPSBjYi0+bG9jYXRpb24oKSArIHBvaW50OyAgCi0gICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGMgPSBjb250aW51YXRpb24oKTsKLSAgICB3aGlsZSAoYykgewotICAgICAgICBSZW5kZXJC
b3gqIGNvbnRCbG9jayA9IGMtPmlzSW5saW5lKCkgPyBjLT5jb250YWluaW5nQmxvY2soKSA6IHRv
UmVuZGVyQmxvY2soYyk7Ci0gICAgICAgIGlmIChjLT5pc0lubGluZSgpIHx8IGMtPmZpcnN0Q2hp
bGQoKSkKLSAgICAgICAgICAgIHJldHVybiBjLT5wb3NpdGlvbkZvclBvaW50KHBhcmVudEJsb2Nr
UG9pbnQgLSBjb250QmxvY2stPmxvY2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7Ci0gICAgICAgIGMg
PSB0b1JlbmRlckJsb2NrKGMpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgTGF5
b3V0UG9pbnQgcGFyZW50QmxvY2tQb2ludCA9IGNvbnRhaW5pbmdCbG9jay0+bG9jYXRpb24oKSAr
IHBvaW50OworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24gPSB0aGlzLT5j
b250aW51YXRpb24oKTsKKyAgICB3aGlsZSAoY29udGludWF0aW9uKSB7CisgICAgICAgIFJlbmRl
ckJveCogY29udGFpbmluZ0Jsb2NrID0gY29udGludWF0aW9uLT5pc0lubGluZSgpID8gY29udGlu
dWF0aW9uLT5jb250YWluaW5nQmxvY2soKSA6IGRvd25jYXN0PFJlbmRlckJsb2NrPihjb250aW51
YXRpb24pOworICAgICAgICBpZiAoY29udGludWF0aW9uLT5pc0lubGluZSgpIHx8IGNvbnRpbnVh
dGlvbi0+Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbi0+cG9z
aXRpb25Gb3JQb2ludChwYXJlbnRCbG9ja1BvaW50IC0gY29udGFpbmluZ0Jsb2NrLT5sb2NhdGlv
bk9mZnNldCgpLCByZWdpb24pOworICAgICAgICBjb250aW51YXRpb24gPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKmNvbnRpbnVhdGlvbikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBvc2l0aW9uRm9yUG9p
bnQocG9pbnQsIHJlZ2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCA0OWFmZjFjNDY1NTU4MjBjYTBkMGRlZmQ0MjJhMTllMTYyYWViZTAyLi43MTg5YmZi
M2YwYzM2NmE1MjRmZTUyMTQzOTJhNmI3OWI0ZDRmYzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMyOTgsOCArMzI5OCw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCiAgICAgICAgICAgICAgICAgLy8gT3Vy
IHByb3ByaWV0YXJ5IG92ZXJmbG93OiBvdmVybGF5IHZhbHVlIGRvZXNuJ3QgdHJpZ2dlciBhIGxh
eW91dC4KICAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAg
ICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyQmxvY2soKSkgewotICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKCkp
OworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KHJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hh
bmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJh
ckNoYW5nZWQpOwogICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTU0MTcsNyArNTQxNyw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0Nv
bnRleHQsIGNvbnN0CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbGF5ZXJCb3Vu
ZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZUJ5KExheW91dFBvaW50KGZsb3dUaHJlYWQtPndpZHRo
KCksIDApKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiByZW5k
ZXJlckNvbnRhaW5pbmdCbG9jayA9IGJveE1vZGVsT2JqZWN0LmVuY2xvc2luZ0JveCgpLmlzUmVu
ZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soJmJveE1vZGVsT2JqZWN0LmVuY2xvc2luZ0JveCgp
KSA6IDA7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogcmVuZGVyZXJDb250YWluaW5nQmxvY2sg
PSBpczxSZW5kZXJCbG9jaz4oYm94TW9kZWxPYmplY3QuZW5jbG9zaW5nQm94KCkpID8gJmRvd25j
YXN0PFJlbmRlckJsb2NrPihib3hNb2RlbE9iamVjdC5lbmNsb3NpbmdCb3goKSkgOiBudWxscHRy
OwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyQ29udGFpbmluZ0Jsb2NrKQogICAgICAgICAgICAg
ICAgIHJlbmRlcmVyQ29udGFpbmluZ0Jsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUobGF5ZXJCb3Vu
ZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCBlYTdmMjE4ODUxODFlNGIxY2JjZDA0ZGUzZjJj
YTUwMjk4NDkyMDMxLi42MmY3NDVmNTI5YWUyNDk5M2NlOGNhZDNlM2U5M2ZlMzMzMDZlOTVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTI3LDgg
KzI3LDEwIEBACiAjaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPTGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVUxp
c3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgogI2luY2x1ZGUgIlBz
ZXVkb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjI3LDI1ICsyMjksMjQgQEAgc3RhdGljIFJl
bmRlckJsb2NrKiBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChSZW5kZXJCbG9jayogY3VyciwgUmVu
ZGVyT2JqZWN0KiBtYXIKICAgICAgICAgaWYgKGN1cnJDaGlsZCA9PSBtYXJrZXIpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0lubGluZSgpICYmICgh
Y3VyckNoaWxkLT5pc1JlbmRlcklubGluZSgpIHx8IGN1cnItPmdlbmVyYXRlc0xpbmVCb3hlc0Zv
cklubGluZUNoaWxkKGN1cnJDaGlsZCkpKQorICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0lubGlu
ZSgpICYmICghaXM8UmVuZGVySW5saW5lPigqY3VyckNoaWxkKSB8fCBjdXJyLT5nZW5lcmF0ZXNM
aW5lQm94ZXNGb3JJbmxpbmVDaGlsZChjdXJyQ2hpbGQpKSkKICAgICAgICAgICAgIHJldHVybiBj
dXJyOwogCiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzRmxvYXRpbmcoKSB8fCBjdXJyQ2hpbGQt
PmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+aXNUYWJsZSgpIHx8ICFjdXJyQ2hpbGQtPmlzUmVuZGVyQmxvY2so
KSB8fCAoY3VyckNoaWxkLT5pc0JveCgpICYmIHRvUmVuZGVyQm94KGN1cnJDaGlsZCktPmlzV3Jp
dGluZ01vZGVSb290KCkpKQorICAgICAgICBpZiAoY3VyckNoaWxkLT5pc1RhYmxlKCkgfHwgIWlz
PFJlbmRlckJsb2NrPigqY3VyckNoaWxkKSB8fCAoaXM8UmVuZGVyQm94PigqY3VyckNoaWxkKSAm
JiBkb3duY2FzdDxSZW5kZXJCb3g+KCpjdXJyQ2hpbGQpLmlzV3JpdGluZ01vZGVSb290KCkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKGN1cnItPmlzTGlzdEl0ZW0oKSAmJiBp
blF1aXJrc01vZGUgJiYgY3VyckNoaWxkLT5ub2RlKCkgJiYKLSAgICAgICAgICAgIChjdXJyQ2hp
bGQtPm5vZGUoKS0+aGFzVGFnTmFtZSh1bFRhZyl8fCBjdXJyQ2hpbGQtPm5vZGUoKS0+aGFzVGFn
TmFtZShvbFRhZykpKQorICAgICAgICAgICAgKGlzPEhUTUxVTGlzdEVsZW1lbnQ+KCpjdXJyQ2hp
bGQtPm5vZGUoKSkgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oKmN1cnJDaGlsZC0+bm9kZSgpKSkp
CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBSZW5kZXJCbG9jayogbGluZUJveCA9IGdl
dFBhcmVudE9mRmlyc3RMaW5lQm94KHRvUmVuZGVyQmxvY2soY3VyckNoaWxkKSwgbWFya2VyKTsK
LSAgICAgICAgaWYgKGxpbmVCb3gpCisgICAgICAgIGlmIChSZW5kZXJCbG9jayogbGluZUJveCA9
IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGRvd25jYXN0PFJlbmRlckJsb2NrPihjdXJyQ2hpbGQp
LCBtYXJrZXIpKQogICAgICAgICAgICAgcmV0dXJuIGxpbmVCb3g7CiAgICAgfQogCi0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVw
ZGF0ZVZhbHVlKCkKQEAgLTI5NCw3ICsyOTUsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjppbnNl
cnRPck1vdmVNYXJrZXJSZW5kZXJlcklmTmVlZGVkKCkKICAgICAgICAgbmV3UGFyZW50LT5hZGRD
aGlsZChtX21hcmtlci5nZXQoKSwgZmlyc3ROb25NYXJrZXJDaGlsZChuZXdQYXJlbnQpKTsKICAg
ICAgICAgbV9tYXJrZXItPnVwZGF0ZU1hcmdpbnNBbmRDb250ZW50KCk7CiAgICAgICAgIC8vIElm
IGN1cnJlbnQgcGFyZW50IGlzIGFuIGFub255bW91cyBibG9jayB0aGF0IGhhcyBsb3N0IGFsbCBp
dHMgY2hpbGRyZW4sIGRlc3Ryb3kgaXQuCi0gICAgICAgIGlmIChjdXJyZW50UGFyZW50ICYmIGN1
cnJlbnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhY3VycmVudFBhcmVudC0+Zmlyc3RD
aGlsZCgpICYmICF0b1JlbmRlckJsb2NrKGN1cnJlbnRQYXJlbnQpLT5jb250aW51YXRpb24oKSkK
KyAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNC
bG9jaygpICYmICFjdXJyZW50UGFyZW50LT5maXJzdENoaWxkKCkgJiYgIWRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY3VycmVudFBhcmVudCkuY29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjdXJy
ZW50UGFyZW50LT5kZXN0cm95KCk7CiAgICAgfQogCkBAIC00MDYsMTEgKzQwNywxMSBAQCB2b2lk
IFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoKQogICAgICAgICAgICAgICAgIG8g
PSBvLT5wYXJlbnRCb3goKTsKICAgICAgICAgICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlw
KCkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZpc3VhbE92ZXJmbG93ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkgeworICAgICAgICAgICAg
ICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKm8pKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChw
cm9wYWdhdGVWaXN1YWxPdmVyZmxvdykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVy
QmxvY2sobyktPmFkZFZpc3VhbE92ZXJmbG93KG1hcmtlclJlY3QpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvKS5hZGRWaXN1YWxPdmVyZmxvdyhtYXJr
ZXJSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BhZ2F0ZUxheW91dE92ZXJmbG93
KQotICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+YWRkTGF5b3V0T3Zl
cmZsb3cobWFya2VyUmVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKm8pLmFkZExheW91dE92ZXJmbG93KG1hcmtlclJlY3QpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHByb3BhZ2F0ZUxheW91dE92ZXJmbG93ID0gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAppbmRl
eCA2MTM2MmVlNzFjYTQxYmRkN2Y3Y2JmYTMwOTc4ZjFhMmE1ZGEwNjYwLi4xNjY0ZDQ3YjBhMjU1
NTdjYTU3Y2VhZmE4MDE1ZTM5YWYwNWM4Y2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKQEAgLTE4NCw3ICsxODQsNyBA
QCBMYXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjptYXhQYWdlTG9naWNhbEhlaWdo
dCgpIGNvbnN0CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZVRvVXNlID0gcGFyZW50KCktPnN0eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlVG9Vc2Uu
bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhM
b2dpY2FsSGVpZ2h0KCkgOiB0b1JlbmRlckJsb2NrKHBhcmVudCgpKS0+Y29tcHV0ZVJlcGxhY2Vk
TG9naWNhbEhlaWdodFVzaW5nKHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gc3R5bGVUb1VzZS5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IFJlbmRl
ckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSA6IGRvd25jYXN0PFJlbmRlckJsb2NrPigq
cGFyZW50KCkpLmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZVRvVXNlLmxv
Z2ljYWxNYXhIZWlnaHQoKSk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQ6OmZsb3dUaHJlYWRQb3J0aW9uUmVjdEZvckNsaXBwaW5nKGJvb2wgaXNGaXJzdFJlZ2lvbklu
UmFuZ2UsIGJvb2wgaXNMYXN0UmVnaW9uSW5SYW5nZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggY2M2NDI1ZmI2YzVlYzMxMjNiZjk4MjllNzZj
YjJlNDE1OTNkODkzYS4uNGEwMjg1Yjg4MjBlZTA3ZmY1MTY0YTAwYzk2NmVlNGE3MmFhNjBjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTM5OSwxNSAr
Mzk5LDE1IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Ojp0cmF2ZXJzZU5leHQoY29uc3Qg
UmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluLCBUcmF2ZXJzCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0
YXRpYyBSZW5kZXJPYmplY3Q6OkJsb2NrQ29udGVudEhlaWdodFR5cGUgaW5jbHVkZU5vbkZpeGVk
SGVpZ2h0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyKQorc3RhdGljIFJlbmRlck9iamVjdDo6
QmxvY2tDb250ZW50SGVpZ2h0VHlwZSBpbmNsdWRlTm9uRml4ZWRIZWlnaHQoY29uc3QgUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5k
ZXItPnN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0
eWxlKCk7CiAgICAgaWYgKHN0eWxlLmhlaWdodCgpLnR5cGUoKSA9PSBGaXhlZCkgewotICAgICAg
ICBpZiAocmVuZGVyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRl
ckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxvY2socmVuZGVyKTsKKyAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPigqcmVuZGVyZXIpKSB7CiAgICAgICAgICAgICAvLyBGb3IgZml4ZWQgaGVpZ2h0
IHN0eWxlcywgaWYgdGhlIG92ZXJmbG93IHNpemUgb2YgdGhlIGVsZW1lbnQgc3BpbGxzIG91dCBv
ZiB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAvLyBoZWlnaHQsIGFzc3VtZSB3ZSBjYW4gYXBw
bHkgdGV4dCBhdXRvLXNpemluZy4KLSAgICAgICAgICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9
PSBPVklTSUJMRSAmJiBzdHlsZS5oZWlnaHQoKS52YWx1ZSgpIDwgYmxvY2stPmxheW91dE92ZXJm
bG93UmVjdCgpLm1heFkoKSkKKyAgICAgICAgICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBP
VklTSUJMRQorICAgICAgICAgICAgICAgICYmIHN0eWxlLmhlaWdodCgpLnZhbHVlKCkgPCBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpLmxheW91dE92ZXJmbG93UmVjdCgpLm1heFkoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpPdmVyZmxvd0hlaWdodDsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpGaXhlZEhlaWdodDsKQEAgLTY3
Miw4ICs2NzIsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6Y2hlY2tCbG9ja1Bvc2l0aW9uZWRPYmpl
Y3RzTmVlZExheW91dCgpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKIAotICAgIGlm
IChpc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIHRvUmVuZGVyQmxvY2sodGhpcyktPmNoZWNrUG9z
aXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPigqdGhp
cykpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqdGhpcykuY2hlY2tQb3NpdGlvbmVk
T2JqZWN0c05lZWRMYXlvdXQoKTsKIH0KICNlbmRpZgogCkBAIC03MjAsMjIgKzcyMCwyMiBAQCB2
b2lkIFJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KCkKIAogUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Js
b2NrKCkgY29uc3QKIHsKLSAgICBhdXRvIG8gPSBwYXJlbnQoKTsKLSAgICBpZiAoIW8gJiYgaXNS
ZW5kZXJTY3JvbGxiYXJQYXJ0KCkpCi0gICAgICAgIG8gPSB0b1JlbmRlclNjcm9sbGJhclBhcnQo
dGhpcyktPnJlbmRlcmVyT3duaW5nU2Nyb2xsYmFyKCk7CisgICAgYXV0byByZW5kZXJlciA9IHBh
cmVudCgpOworICAgIGlmICghcmVuZGVyZXIgJiYgaXM8UmVuZGVyU2Nyb2xsYmFyUGFydD4oKnRo
aXMpKQorICAgICAgICByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlclNjcm9sbGJhclBhcnQ+KCp0
aGlzKS5yZW5kZXJlck93bmluZ1Njcm9sbGJhcigpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBpZiAoIWlzVGV4dCgpICYmIHN0eWxlLnBvc2l0
aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKLSAgICAgICAgbyA9IGNvbnRhaW5pbmdCbG9ja0ZvckZp
eGVkUG9zaXRpb24obyk7Ci0gICAgZWxzZSBpZiAoIWlzVGV4dCgpICYmIHN0eWxlLnBvc2l0aW9u
KCkgPT0gQWJzb2x1dGVQb3NpdGlvbikKLSAgICAgICAgbyA9IGNvbnRhaW5pbmdCbG9ja0ZvckFi
c29sdXRlUG9zaXRpb24obyk7CisgICAgaWYgKCFpczxSZW5kZXJUZXh0PigqdGhpcykgJiYgc3R5
bGUucG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZW5kZXJlciA9IGNvbnRh
aW5pbmdCbG9ja0ZvckZpeGVkUG9zaXRpb24ocmVuZGVyZXIpOworICAgIGVsc2UgaWYgKCFpczxS
ZW5kZXJUZXh0PigqdGhpcykgJiYgc3R5bGUucG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9u
KQorICAgICAgICByZW5kZXJlciA9IGNvbnRhaW5pbmdCbG9ja0ZvckFic29sdXRlUG9zaXRpb24o
cmVuZGVyZXIpOwogICAgIGVsc2UKLSAgICAgICAgbyA9IGNvbnRhaW5pbmdCbG9ja0Zvck9iamVj
dEluRmxvdyhvKTsKKyAgICAgICAgcmVuZGVyZXIgPSBjb250YWluaW5nQmxvY2tGb3JPYmplY3RJ
bkZsb3cocmVuZGVyZXIpOwogCi0gICAgaWYgKCFvIHx8ICFvLT5pc1JlbmRlckJsb2NrKCkpCi0g
ICAgICAgIHJldHVybiAwOyAvLyBUaGlzIGNhbiBzdGlsbCBoYXBwZW4gaW4gY2FzZSBvZiBhbiBv
cnBoYW5lZCB0cmVlCisgICAgaWYgKCFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsgLy8gVGhpcyBjYW4gc3RpbGwgaGFwcGVuIGluIGNhc2Ugb2YgYW4g
b3JwaGFuZWQgdHJlZQogCi0gICAgcmV0dXJuIHRvUmVuZGVyQmxvY2sobyk7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcik7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0
OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZs
b2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLApAQCAtMTY3OSwxMCArMTY3OSwx
MCBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2Uo
KQogICAgIHNldElubGluZShzdHlsZSgpLmlzRGlzcGxheUlubGluZVR5cGUoKSk7CiAgICAgaWYg
KGlzSW5saW5lKCkgIT0gcGFyZW50KCktPmNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgaWYg
KCFpc0lubGluZSgpKQotICAgICAgICAgICAgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChwYXJlbnQo
KSktPmNoaWxkQmVjYW1lTm9uSW5saW5lKHRoaXMpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQm94TW9kZWxPYmplY3Q+KCpwYXJlbnQoKSkuY2hpbGRCZWNhbWVOb25JbmxpbmUodGhpcyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2NrIG11c3Qg
YmUgbWFkZSB0byB3cmFwIHRoaXMgaW5saW5lLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJs
b2NrID0gdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Cisg
ICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBh
cmVudCgpKS5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwogICAgICAgICAgICAgcGFyZW50KCktPmlu
c2VydENoaWxkSW50ZXJuYWwoYmxvY2ssIHRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxk
cmVuKTsKICAgICAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZEludGVybmFsKCp0aGlzLCBS
ZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBibG9jay0+aW5zZXJ0
Q2hpbGRJbnRlcm5hbCh0aGlzLCBudWxscHRyLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJl
bik7CkBAIC0xNjkyLDggKzE2OTIsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1p
Y0Zsb2F0UG9zaXRpb25DaGFuZ2UoKQogCiB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlQW5vbnlt
b3VzV3JhcHBlcnNGb3JJbmxpbmVzSWZOZWNlc3NhcnkoKQogewotICAgIFJlbmRlckJsb2NrKiBw
YXJlbnRCbG9jayA9IHRvUmVuZGVyQmxvY2socGFyZW50KCkpOwotICAgIGlmICghcGFyZW50Qmxv
Y2stPmNhbkNvbGxhcHNlQW5vbnltb3VzQmxvY2tDaGlsZCgpKQorICAgIFJlbmRlckJsb2NrJiBw
YXJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpOworICAgIGlmICgh
cGFyZW50QmxvY2suY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFdlIGhhdmUgY2hhbmdlZCB0byBmbG9hdGVkIG9yIG91dC1vZi1mbG93
IHBvc2l0aW9uaW5nIHNvIG1heWJlIGFsbCBvdXIgcGFyZW50J3MKQEAgLTE3MDEsMTkgKzE3MDEs
MTkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91c1dyYXBwZXJzRm9ySW5saW5l
c0lmTmVjZXNzYXJ5KCkKICAgICAvLyBvdGhlcndpc2Ugd2UgY2FuIHByb2NlZWQgdG8gc3RyaXBw
aW5nIHNvbGl0YXJ5IGFub255bW91cyB3cmFwcGVycyBmcm9tIHRoZSBpbmxpbmVzLgogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgc3BsaXQgaW5saW5lcyBoZXJlIC0gd2UgZXhj
bHVkZSB0aGVtIGF0IHRoZSBtb21lbnQgYnkgcmV0dXJuaW5nCiAgICAgLy8gaWYgd2UgZmluZCBh
IGNvbnRpbnVhdGlvbi4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKS0+Zmlyc3RD
aGlsZCgpOwotICAgIHdoaWxlIChjdXJyICYmICgoY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpICYm
ICF0b1JlbmRlckJsb2NrKGN1cnIpLT5pc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpIHx8
IGN1cnItPnN0eWxlKCkuaXNGbG9hdGluZygpIHx8IGN1cnItPnN0eWxlKCkuaGFzT3V0T2ZGbG93
UG9zaXRpb24oKSkpCi0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOworICAgIFJl
bmRlck9iamVjdCogY3VycmVudCA9IHBhcmVudCgpLT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUg
KGN1cnJlbnQgJiYgKChjdXJyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWRvd25jYXN0PFJl
bmRlckJsb2NrPigqY3VycmVudCkuaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKSB8fCBj
dXJyZW50LT5zdHlsZSgpLmlzRmxvYXRpbmcoKSB8fCBjdXJyZW50LT5zdHlsZSgpLmhhc091dE9m
Rmxvd1Bvc2l0aW9uKCkpKQorICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmco
KTsKIAotICAgIGlmIChjdXJyKQorICAgIGlmIChjdXJyZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBjdXJyID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY3Vycikgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAg
ICBpZiAoY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICAgICAgcGFyZW50QmxvY2st
PmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQocGFyZW50QmxvY2ssIHRvUmVuZGVyQmxvY2soY3Vy
cikpOwotICAgICAgICBjdXJyID0gbmV4dDsKKyAgICBjdXJyZW50ID0gcGFyZW50KCktPmZpcnN0
Q2hpbGQoKTsKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIG5l
eHQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgICAgICBpZiAoY3VycmVudC0+aXNBbm9u
eW1vdXNCbG9jaygpKQorICAgICAgICAgICAgcGFyZW50QmxvY2suY29sbGFwc2VBbm9ueW1vdXNC
b3hDaGlsZChwYXJlbnRCbG9jaywgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGN1cnJlbnQpKTsKKyAg
ICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgfQogfQogCkBAIC0yMjcwLDEyICsyMjcwLDEyIEBA
IHN0YXRpYyBDb2xvciBkZWNvcmF0aW9uQ29sb3IoUmVuZGVyU3R5bGUqIHN0eWxlKQogdm9pZCBS
ZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sb3JzKGludCBkZWNvcmF0aW9ucywgQ29s
b3ImIHVuZGVybGluZSwgQ29sb3ImIG92ZXJsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvbG9yJiBsaW5ldGhyb3VnaCwgYm9vbCBxdWlya3NNb2RlLCBi
b29sIGZpcnN0bGluZVN0eWxlKQogewotICAgIFJlbmRlck9iamVjdCogY3VyciA9IHRoaXM7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSAwOworICAgIFJlbmRlck9iamVjdCogY3VycmVu
dCA9IHRoaXM7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOwogICAgIFRl
eHREZWNvcmF0aW9uIGN1cnJEZWNzID0gVGV4dERlY29yYXRpb25Ob25lOwogICAgIENvbG9yIHJl
c3VsdENvbG9yOwogICAgIGRvIHsKLSAgICAgICAgc3R5bGVUb1VzZSA9IGZpcnN0bGluZVN0eWxl
ID8gJmN1cnItPmZpcnN0TGluZVN0eWxlKCkgOiAmY3Vyci0+c3R5bGUoKTsKKyAgICAgICAgc3R5
bGVUb1VzZSA9IGZpcnN0bGluZVN0eWxlID8gJmN1cnJlbnQtPmZpcnN0TGluZVN0eWxlKCkgOiAm
Y3VycmVudC0+c3R5bGUoKTsKICAgICAgICAgY3VyckRlY3MgPSBzdHlsZVRvVXNlLT50ZXh0RGVj
b3JhdGlvbigpOwogICAgICAgICByZXN1bHRDb2xvciA9IGRlY29yYXRpb25Db2xvcihzdHlsZVRv
VXNlKTsKICAgICAgICAgLy8gUGFyYW1ldGVyICdkZWNvcmF0aW9ucycgaXMgY2FzdCBhcyBhbiBp
bnQgdG8gZW5hYmxlIHRoZSBiaXR3aXNlIG9wZXJhdGlvbnMgYmVsb3cuCkBAIC0yMjkzLDE2ICsy
MjkzLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQg
ZGVjb3JhdGlvbnMsIENvbG9yJiB1bmRlcmxpbmUsIENvCiAgICAgICAgICAgICAgICAgbGluZXRo
cm91Z2ggPSByZXN1bHRDb2xvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBp
ZiAoY3Vyci0+aXNSdWJ5VGV4dCgpKQorICAgICAgICBpZiAoY3VycmVudC0+aXNSdWJ5VGV4dCgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7Ci0g
ICAgICAgIGlmIChjdXJyICYmIGN1cnItPmlzQW5vbnltb3VzQmxvY2soKSAmJiB0b1JlbmRlckJs
b2NrKGN1cnIpLT5jb250aW51YXRpb24oKSkKLSAgICAgICAgICAgIGN1cnIgPSB0b1JlbmRlckJs
b2NrKGN1cnIpLT5jb250aW51YXRpb24oKTsKLSAgICB9IHdoaWxlIChjdXJyICYmIGRlY29yYXRp
b25zICYmICghcXVpcmtzTW9kZSB8fCAhY3Vyci0+bm9kZSgpIHx8ICghaXM8SFRNTEFuY2hvckVs
ZW1lbnQ+KCpjdXJyLT5ub2RlKCkpICYmICFjdXJyLT5ub2RlKCktPmhhc1RhZ05hbWUoZm9udFRh
ZykpKSk7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgaWYg
KGN1cnJlbnQgJiYgY3VycmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY3VycmVudCkuY29udGludWF0aW9uKCkpCisgICAgICAgICAgICBjdXJyZW50ID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5jb250aW51YXRpb24oKTsKKyAgICB9IHdo
aWxlIChjdXJyZW50ICYmIGRlY29yYXRpb25zICYmICghcXVpcmtzTW9kZSB8fCAhY3VycmVudC0+
bm9kZSgpIHx8ICghaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpjdXJyZW50LT5ub2RlKCkpICYmICFj
dXJyZW50LT5ub2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZykpKSk7CiAKICAgICAvLyBJZiB3ZSBi
YWlsZWQgb3V0LCB1c2UgdGhlIGVsZW1lbnQgd2UgYmFpbGVkIG91dCBhdCAodHlwaWNhbGx5IGEg
PGZvbnQ+IG9yIDxhPiBlbGVtZW50KS4KLSAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3Vycikgewot
ICAgICAgICBzdHlsZVRvVXNlID0gZmlyc3RsaW5lU3R5bGUgPyAmY3Vyci0+Zmlyc3RMaW5lU3R5
bGUoKSA6ICZjdXJyLT5zdHlsZSgpOworICAgIGlmIChkZWNvcmF0aW9ucyAmJiBjdXJyZW50KSB7
CisgICAgICAgIHN0eWxlVG9Vc2UgPSBmaXJzdGxpbmVTdHlsZSA/ICZjdXJyZW50LT5maXJzdExp
bmVTdHlsZSgpIDogJmN1cnJlbnQtPnN0eWxlKCk7CiAgICAgICAgIHJlc3VsdENvbG9yID0gZGVj
b3JhdGlvbkNvbG9yKHN0eWxlVG9Vc2UpOwogICAgICAgICBpZiAoZGVjb3JhdGlvbnMgJiBUZXh0
RGVjb3JhdGlvblVuZGVybGluZSkKICAgICAgICAgICAgIHVuZGVybGluZSA9IHJlc3VsdENvbG9y
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCmluZGV4IDUxYjBkMWMwN2E2
N2UwYjIxNTEwZGFmNTRiMDVhZDljZTQwMTNlYTguLmNkZWM1OWEwNWFiNjVlYzc1Yzk4ODFiNzk4
OGUzM2NhNWFhMTYxMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAK
QEAgLTc1LDEzICs3NSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSdWJ5QWZ0ZXJCbG9jayhj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIHJ1
YnlCZWZvcmVCbG9jayhjb25zdCBSZW5kZXJFbGVtZW50KiBydWJ5KQogewogICAgIFJlbmRlck9i
amVjdCogY2hpbGQgPSBydWJ5LT5maXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIGlzUnVieUJlZm9y
ZUJsb2NrKGNoaWxkKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKKyAgICByZXR1cm4gaXNS
dWJ5QmVmb3JlQmxvY2soY2hpbGQpID8gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51
bGxwdHI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIHJ1YnlBZnRlckJsb2NrKGNv
bnN0IFJlbmRlckVsZW1lbnQqIHJ1YnkpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1
YnktPmxhc3RDaGlsZCgpOwotICAgIHJldHVybiBpc1J1YnlBZnRlckJsb2NrKGNoaWxkKSA/IHRv
UmVuZGVyQmxvY2soY2hpbGQpIDogMDsKKyAgICByZXR1cm4gaXNSdWJ5QWZ0ZXJCbG9jayhjaGls
ZCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpIDogbnVsbHB0cjsKIH0KIAogc3RhdGlj
IFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soUmVuZGVyT2JqZWN0
JiBydWJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlC
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKaW5k
ZXggN2RiZTE0NWI1ODU3NGE1NmI4NjczODI0NTU3MjcyM2Y2MzRjZDg3ZS4uZWEwY2Q2Mzg0NGU0
YzY2ZTBkZTE1NjZhYmM2NjIzNTI4NDA0NDhjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUnVieUJhc2UuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgUmVuZGVyUnVieUJh
c2U6Om1vdmVJbmxpbmVDaGlsZHJlbihSZW5kZXJSdWJ5QmFzZSogdG9CYXNlLCBSZW5kZXJPYmpl
Y3QqIGJlCiAgICAgICAgIC8vIElmIHRvQmFzZSBoYXMgYSBzdWl0YWJsZSBibG9jaywgd2UgcmUt
dXNlIGl0LCBvdGhlcndpc2UgY3JlYXRlIGEgbmV3IG9uZS4KICAgICAgICAgUmVuZGVyT2JqZWN0
KiBsYXN0Q2hpbGQgPSB0b0Jhc2UtPmxhc3RDaGlsZCgpOwogICAgICAgICBpZiAobGFzdENoaWxk
ICYmIGxhc3RDaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGxhc3RDaGlsZC0+Y2hpbGRyZW5J
bmxpbmUoKSkKLSAgICAgICAgICAgIHRvQmxvY2sgPSB0b1JlbmRlckJsb2NrKGxhc3RDaGlsZCk7
CisgICAgICAgICAgICB0b0Jsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGxhc3RDaGlsZCk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdG9CbG9jayA9IHRvQmFzZS0+Y3JlYXRlQW5v
bnltb3VzQmxvY2soKTsKICAgICAgICAgICAgIHRvQmFzZS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbCh0
b0Jsb2NrLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7CkBAIC0xMTgsOCArMTE4LDggQEAgdm9p
ZCBSZW5kZXJSdWJ5QmFzZTo6bW92ZUJsb2NrQ2hpbGRyZW4oUmVuZGVyUnVieUJhc2UqIHRvQmFz
ZSwgUmVuZGVyT2JqZWN0KiBiZWYKICAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZFRoZXJlID0g
dG9CYXNlLT5sYXN0Q2hpbGQoKTsKICAgICBpZiAoZmlyc3RDaGlsZEhlcmUtPmlzQW5vbnltb3Vz
QmxvY2soKSAmJiBmaXJzdENoaWxkSGVyZS0+Y2hpbGRyZW5JbmxpbmUoKSAKICAgICAgICAgICAg
ICYmIGxhc3RDaGlsZFRoZXJlICYmIGxhc3RDaGlsZFRoZXJlLT5pc0Fub255bW91c0Jsb2NrKCkg
JiYgbGFzdENoaWxkVGhlcmUtPmNoaWxkcmVuSW5saW5lKCkpIHsgICAgICAgICAgICAKLSAgICAg
ICAgUmVuZGVyQmxvY2sqIGFub25CbG9ja0hlcmUgPSB0b1JlbmRlckJsb2NrKGZpcnN0Q2hpbGRI
ZXJlKTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIGFub25CbG9ja1RoZXJlID0gdG9SZW5kZXJCbG9j
ayhsYXN0Q2hpbGRUaGVyZSk7CisgICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2tIZXJlID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGZpcnN0Q2hpbGRIZXJlKTsKKyAgICAgICAgUmVuZGVyQmxv
Y2sqIGFub25CbG9ja1RoZXJlID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGxhc3RDaGlsZFRoZXJl
KTsKICAgICAgICAgYW5vbkJsb2NrSGVyZS0+bW92ZUFsbENoaWxkcmVuVG8oYW5vbkJsb2NrVGhl
cmUsIHRydWUpOwogICAgICAgICBhbm9uQmxvY2tIZXJlLT5kZWxldGVMaW5lcygpOwogICAgICAg
ICBhbm9uQmxvY2tIZXJlLT5kZXN0cm95KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KaW5kZXggMzM1NTU0NmVlNjc2NTViM2RlMGU4ZmI3YjVhZGFiYzc5N2Iz
ZTlhOC4uOGQ1MWZjNDNkZmVkYmZmNmQyMTg0YzVkMDdjZTk2ODk0NmI5Mzg1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMTgyMSwxNSArMTgyMSwx
NSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JikK
K2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JikKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VCbG9j
a0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFvLmlzUmVuZGVy
QmxvY2soKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlckJsb2NrID0gKnRvUmVu
ZGVyQmxvY2soJm8pOworICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcik7CiAKICAgICBMYXlvdXRVbml0IGNvbnRlbnRXaWR0
aCA9IHJlbmRlckJsb2NrLmNvbnRlbnRXaWR0aCgpOwogICAgIExheW91dFVuaXQgY29udGVudEhl
aWdodCA9IHJlbmRlckJsb2NrLmNvbnRlbnRIZWlnaHQoKTsKQEAgLTE4NzgsNyArMTg3OCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QKIAogICAgIC8vIFdlIGNvdWxkIGRyYXcgdGhlIHNuYXBz
aG90IHdpdGggdGhhdCBjb29yZGluYXRlcywgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJl
CiAgICAgLy8gaXNuJ3QgYSBjb21wb3NpdGVkIGxheWVyIGJldHdlZW4gdXMgYW5kIHRoZSBwbHVn
SW5SZW5kZXJlci4KLSAgICBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94
KCZvKTsKKyAgICBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KCZyZW5k
ZXJlcik7CiAgICAgd2hpbGUgKHJlbmRlckJveCAhPSBwbHVnSW5SZW5kZXJlcikgewogICAgICAg
ICBpZiAocmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKSAmJiByZW5k
ZXJCb3gtPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CiAgICAgICAgICAgICBzbmFwc2hvdEFi
c1BvcyA9IC1yZW5kZXJCb3gtPmxvY2F0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEF1dG9zaXplci5jcHAKaW5kZXggNzRjM2MwYTBiY2NhN2VjNDdhYWFjOWMzMzM2NmQwZmMz
OTkyZDUwZi4uYjdiNjRlYTc4NGNhMTg2YTI1Zjk0MWVmNGMwZjhiNjNmNTkxODFjYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcApAQCAtMTI2LDcgKzEyNiw3
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlv
dXRSb290KQogICAgIH0KIAogICAgIC8vIFRoZSBsYXlvdXRSb290IGNvdWxkIGJlIG5laXRoZXIg
YSBjb250YWluZXIgbm9yIGEgY2x1c3Rlciwgc28gd2FsayB1cCB0aGUgdHJlZSB0aWxsIHdlIGZp
bmQgZWFjaCBvZiB0aGVzZS4KLSAgICBSZW5kZXJCbG9jayogY29udGFpbmVyID0gbGF5b3V0Um9v
dC0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhsYXlvdXRSb290KSA6IGxheW91dFJv
b3QtPmNvbnRhaW5pbmdCbG9jaygpOworICAgIFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBpczxS
ZW5kZXJCbG9jaz4oKmxheW91dFJvb3QpID8gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGxheW91dFJv
b3QpIDogbGF5b3V0Um9vdC0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgd2hpbGUgKGNvbnRhaW5l
ciAmJiAhaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnRhaW5lcikpCiAgICAgICAgIGNvbnRhaW5l
ciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKQEAgLTIwNCwxNCArMjA0LDE0IEBA
IHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBS
ZW5kZXJCbG9jayogY29udGFpbmVyLCBUCiAKICAgICBSZW5kZXJPYmplY3QqIGRlc2NlbmRhbnQg
PSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoc3VidHJlZVJv
b3QsIHN1YnRyZWVSb290KTsKICAgICB3aGlsZSAoZGVzY2VuZGFudCkgewotICAgICAgICBpZiAo
ZGVzY2VuZGFudC0+aXNUZXh0KCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpkZXNj
ZW5kYW50KSkgewogICAgICAgICAgICAgaWYgKGxvY2FsTXVsdGlwbGllciAhPSAxICYmIGRlc2Nl
bmRhbnQtPnN0eWxlKCktPnRleHRBdXRvc2l6aW5nTXVsdGlwbGllcigpID09IDEpIHsKICAgICAg
ICAgICAgICAgICBzZXRNdWx0aXBsaWVyKGRlc2NlbmRhbnQsIGxvY2FsTXVsdGlwbGllcik7CiAg
ICAgICAgICAgICAgICAgc2V0TXVsdGlwbGllcihkZXNjZW5kYW50LT5wYXJlbnQoKSwgbG9jYWxN
dWx0aXBsaWVyKTsgLy8gUGFyZW50IGRvZXMgbGluZSBzcGFjaW5nLgogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgLy8gRklYTUU6IEluY3JlYXNlIGxpc3QgbWFya2VyIHNpemUgcHJvcG9ydGlv
bmF0ZWx5LgogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5k
YW50KSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVu
ZGVyQmxvY2soZGVzY2VuZGFudCk7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFu
dEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGRlc2NlbmRhbnQpOwogICAgICAgICAgICAg
VGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyBkZXNjZW5kYW50Q2x1c3RlckluZm8oZGVzY2VuZGFu
dEJsb2NrKTsKICAgICAgICAgICAgIGlmIChpc1dpZGVyRGVzY2VuZGFudChkZXNjZW5kYW50Qmxv
Y2ssIGNsdXN0ZXJJbmZvKSB8fCBpc0luZGVwZW5kZW50RGVzY2VuZGFudChkZXNjZW5kYW50Qmxv
Y2spKQogICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRDbHVzdGVySW5m
bywgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwpAQCAtNDk2
LDcgKzQ5Niw3IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lk
dGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVGV4CiAgICAgICAgIGlmICghc2tpcExv
Y2FsVGV4dCAmJiBpczxSZW5kZXJUZXh0PigqZGVzY2VuZGFudCkpCiAgICAgICAgICAgICB0ZXh0
V2lkdGggKz0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmRlc2NlbmRhbnQpLnJlbmRlcmVkVGV4dExl
bmd0aCgpICogZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNpemUoKTsKICAgICAg
ICAgZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5k
YW50KTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oZGVzY2VuZGFudCk7CiAgICAgICAgICAgICBpZiAoIWlzQXV0b3Npemlu
Z0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbykpCiAgICAgICAgICAgICAgICAg
bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbywg
bWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgICAgICB9CkBAIC01NDIsOCArNTQyLDggQEAg
Y29uc3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWlu
aW5nQWxsVGV4dChjb25zdCBSZW5kZXIKICAgICAgICAgbGFzdE5vZGUgPSBsYXN0Tm9kZS0+cGFy
ZW50KCk7CiAgICAgfQogCi0gICAgaWYgKGZpcnN0Tm9kZS0+aXNSZW5kZXJCbG9jaygpKQotICAg
ICAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhmaXJzdE5vZGUpOworICAgIGlmIChpczxSZW5kZXJC
bG9jaz4oKmZpcnN0Tm9kZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
Zmlyc3ROb2RlKTsKIAogICAgIC8vIGNvbnRhaW5pbmdCbG9jaygpIHNob3VsZCBuZXZlciBsZWF2
ZSB0aGUgY2x1c3Rlciwgc2luY2UgaXQgb25seSBza2lwcyBhbmNlc3RvcnMgd2hlbiBmaW5kaW5n
IHRoZQogICAgIC8vIGNvbnRhaW5lciBvZiBwb3NpdGlvbjphYnNvbHV0ZS9maXhlZCBibG9ja3Ms
IGFuZCB0aG9zZSBjYW5ub3QgZXhpc3QgYmV0d2VlbiBhIGNsdXN0ZXIgYW5kIGl0cyB0ZXh0CkBA
IC01NTgsMjEgKzU1OCwyMCBAQCBjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6Zmlu
ZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlcgogY29uc3QgUmVuZGVy
T2JqZWN0KiBUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25z
dCBSZW5kZXJPYmplY3QqIHBhcmVudCwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9u
IGRpcmVjdGlvbikKIHsKICAgICBpZiAocGFyZW50LT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBwYXJlbnQtPmlzVGV4dCgpID8gcGFyZW50IDogMDsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRl
clRleHQ+KCpwYXJlbnQpID8gcGFyZW50IDogbnVsbHB0cjsKIAogICAgICsrZGVwdGg7CiAgICAg
Y29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8g
cGFyZW50LT5maXJzdENoaWxkKCkgOiBwYXJlbnQtPmxhc3RDaGlsZCgpOwogICAgIHdoaWxlIChj
aGlsZCkgewotICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjaGlsZCkgfHwgIWlz
SW5kZXBlbmRlbnREZXNjZW5kYW50KHRvUmVuZGVyQmxvY2soY2hpbGQpKSkgewotICAgICAgICAg
ICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0
ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pOwotICAgICAgICAgICAgaWYgKGxlYWYpCisgICAg
ICAgIGlmICghaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNoaWxkKSB8fCAhaXNJbmRlcGVuZGVudERl
c2NlbmRhbnQoZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSkpIHsKKyAgICAgICAgICAgIGlm
IChjb25zdCBSZW5kZXJPYmplY3QqIGxlYWYgPSBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rl
cihjaGlsZCwgZGVwdGgsIGRpcmVjdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWY7
CiAgICAgICAgIH0KICAgICAgICAgY2hpbGQgPSAoZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/
IGNoaWxkLT5uZXh0U2libGluZygpIDogY2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgIH0K
ICAgICAtLWRlcHRoOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IG5hbWVzcGFjZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb290LmNwcAppbmRleCAyODA2MzkwNjhkNTZhZDkwYTI3OTI0MmY3NWY5YTcw
OTc5ZTg0NDM1Li5iNjNhY2Y0MTFjY2FkMzViMzA4NjUxZTE5MDkzYzJhMDU2NzA3YmVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9v
dC5jcHAKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCgp
CiAgICAgICAgICAgICBhdXRvIGluZGV4ID0gaW5kZXhXcmFwcGVyKCk7CiAgICAgICAgICAgICBm
bG9hdCBpbmRleEhlaWdodCA9IDA7CiAgICAgICAgICAgICBpZiAoIWluZGV4LT5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgaW5kZXhIZWlnaHQgPSB0b1JlbmRlckJsb2NrKGluZGV4LT5maXJz
dENoaWxkKCkpLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW5kZXhIZWlnaHQg
PSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmluZGV4LT5maXJzdENoaWxkKCkpLmxvZ2ljYWxIZWln
aHQoKTsKICAgICAgICAgICAgIGZsb2F0IGluZGV4VG9wTWFyZ2luID0gKDEuMCAtIG1fZGVncmVl
Qm90dG9tUmFpc2VQZXJjZW50KSAqIHJhZGljYWwtPnN0cmV0Y2hTaXplKCkgKyByYWRpY2FsVG9w
TWFyZ2luIC0gaW5kZXhIZWlnaHQ7CiAgICAgICAgICAgICBpZiAoaW5kZXhUb3BNYXJnaW4gPCAw
KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGluZGV4IGlzIHRvbyB0YWxsLCB3ZSBtdXN0
IGFkZCBzcGFjZSBhdCB0aGUgdG9wIG9mIHJlbmRlcmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDk1Njk4M2JhZmIy
MWViZmJhMTdmODcxYTBiMGY3YzFmM2FlYjNhNWIuLjMwMDEwNTllZjExZGM3M2JiYWYwMjJhZGVl
MmJmMGEwZjU4NWI2Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTc3NCw3ICs3NzQsNyBAQCBQYXNzUmVmUHRyPFJh
bmdlPiBXZWJQYWdlOjpyYW5nZUZvcldlYlNlbGVjdGlvbkF0UG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIHBvaW50LAogICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudXNlclNl
bGVjdCgpID09IFNFTEVDVF9OT05FKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
IChyZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2so
KSAmJiAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24o
KSkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCkpIHsKKyAgICBpZiAocmVuZGVyZXItPmNoaWxkcmVu
SW5saW5lKCkgJiYgKGlzPFJlbmRlckJsb2NrPigqcmVuZGVyZXIpICYmICFkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpICYmICFyZW5k
ZXJlci0+aXNUYWJsZSgpKSB7CiAgICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdy
YW51bGFyaXR5KHBvc2l0aW9uLCBXb3JkR3JhbnVsYXJpdHksIERpcmVjdGlvbkJhY2t3YXJkKTsK
ICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKEFTU0VSVF9OT19FWENFUFRJ
T04pKQogICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAgUGFz
c1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6Y29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZShSYW5nZSog
Y3VycmVudFJhbmdlLCBTZWxlY3QKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudEVsZW1lbnQo
KTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAocmVuZGVyZXIt
PmlzUmVuZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmlubGluZUVsZW1l
bnRDb250aW51YXRpb24oKSkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCkpCisgICAgaWYgKHJlbmRl
cmVyICYmIHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpICYmIChpczxSZW5kZXJCbG9jaz4oKnJl
bmRlcmVyKSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lRWxlbWVu
dENvbnRpbnVhdGlvbigpKSAmJiAhcmVuZGVyZXItPmlzVGFibGUoKSkKICAgICAgICAgZmxhZ3Mg
PSBOb25lOwogCiAgICAgcmV0dXJuIGJlc3RSYW5nZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239488</attachid>
            <date>2014-10-08 12:36:25 -0700</date>
            <delta_ts>2014-10-08 14:51:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137512-20141008123627.patch</filename>
            <type>text/plain</type>
            <size>126124</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM0YTlkODVjNjU0NWU1
OWRjZGM0YTYzNGU2NWEyYzBkOTNhZWUxMS4uNDFjNGUwMzc5OGQ2MDZlNGI3NzBjZTM5YzNjMDcy
ZmRmOGI2NWE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNC0xMC0wNyAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQmxvY2sgb2JqZWN0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NTEyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3Ig
UmVuZGVyQmxvY2sgb2JqZWN0cyBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIHN1cnJvdW5kaW5n
IGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Omxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhcnRPZkNvbnRpbnVhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5k
T2ZDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkQmVmb3JlQ29uc2lkZXJp
bmdDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJl
bmRlclBhcmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVVJS2l0
RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBjb250YWluc09ubHlJbmxpbmVPYmpl
Y3RzXSk6CisgICAgICAgICgtW0RPTU5vZGUgaXNTZWxlY3RhYmxlQmxvY2tdKToKKyAgICAgICAg
KC1bRE9NSFRNTEVsZW1lbnQgc3RydWN0dXJhbENvbXBsZXhpdHlDb250cmlidXRpb25dKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnZhbHVlRm9yR3JpZFRyYWNrTGlzdCk6CisgICAgICAgICogZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnNob3VsZFJlcHJl
c2VudE5vZGVPZmZzZXRaZXJvKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpj
b250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRh
aW5pbmdCbG9ja0ZvckFic29sdXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFp
bmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzcGxpdEJsb2Nrcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpjYW5NZXJnZUFub255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bk1lcmdlQ29udGlndW91c0Fub255bW91c0Jsb2Nrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6YmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpi
bG9ja0JlZm9yZVdpdGhpblNlbGVjdGlvblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGls
ZEhpdFRlc3RDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpcnN0
TGluZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdExldHRlckJsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklubGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmspOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc01hcmdpbkFmdGVyUXVpcmspOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjptYXJnaW5CZWZv
cmVFc3RpbWF0ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93OjphZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZv
clBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3Rh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVsYXRlSW5GbG93UG9zaXRpb25PZmZzZXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRUbyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkcmVuVG8p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJl
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVT
dHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbnRp
bnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJlbnRPZkZpcnN0TGluZUJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2Vy
UmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6cG9z
aXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6Om1h
eFBhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVOb25GaXhlZEhlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNoZWNrQmxvY2tQb3NpdGlvbmVkT2JqZWN0c05lZWRMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3NpdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91
c1dyYXBwZXJzRm9ySW5saW5lc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSdWJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1YnlCZWZvcmVCbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpydWJ5QWZ0ZXJCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjptb3ZlSW5s
aW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVCbG9j
a0NoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJs
YXkpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVz
dGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KToKKwogMjAxNC0xMC0w
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
YnVpbGQgZml4IGFmdGVyIHIxNzQ0NTYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODE2NDc0ZWI2NzQ4OGY2ZGVj
NDQ1ZTVmZjlkYTYwYTg1NDJjYTQ4OC4uNzNlZjg3YjBlNzIxOTM2YzRiMjY1ZGI1NTFlZGM0OWYx
NTdjZDhlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTEwLTA3ICBDaHJpc3Rv
cGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93
bmNhc3Q8PigpIGZvciBSZW5kZXJCbG9jayBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc1MTIKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBSZW5k
ZXJCbG9jayBvYmplY3RzIGFuZCBjbGVhbiB1cCB0aGUgCisgICAgICAgIHN1cnJvdW5kaW5nIGNv
ZGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUpOgor
CiAyMDE0LTEwLTA4ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAK
ICAgICAgICAgW0VGTF1bQ29vcmRpbmF0ZWRHcmFwaGljc10gQWxsIEVGTCBsYXlvdXQgdGVzdHMg
YXJlIGJyb2tlbiBzaW5jZSByMTc0MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBlZjMyMThm
NGFlM2YzMjQyYmZhMzY3ZDY3OWU4NTI1MjBkNTU1YjJmLi5hMTg2NDJiZmEzNjYxMzVkYjkxM2Q4
ZWE0ODQyODZkY2M1NDYxZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE4NiwzNyArMTg2
LDM1IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSW5Db250aW51YXRp
b24oUmVuZGVySW5saW5lJiByZW5kZXJlcikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3Rh
dGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlv
bihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZp
cnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQog
ewotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xv
dygpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLmZpcnN0Q2hpbGRT
bG93KCk7CiAKLSAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9u
KHJlbmRlcmVyKSkKLSAgICAgICAgZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRJbkNvbnRpbnVhdGlv
bih0b1JlbmRlcklubGluZSgqcmVuZGVyZXIpKTsKKyAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJ
bmxpbmVXaXRoQ29udGludWF0aW9uKCZyZW5kZXJlcikpCisgICAgICAgIGZpcnN0Q2hpbGQgPSBm
aXJzdENoaWxkSW5Db250aW51YXRpb24oZG93bmNhc3Q8UmVuZGVySW5saW5lPihyZW5kZXJlcikp
OwogCiAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiB9CiAKIAotc3RhdGljIGlubGluZSBSZW5kZXJP
YmplY3QqIGxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogbGFzdENoaWxkQ29uc2lkZXJpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3Qq
IGxhc3RDaGlsZCA9IHJlbmRlcmVyLT5sYXN0Q2hpbGRTbG93KCk7Ci0gICAgUmVuZGVyT2JqZWN0
KiBwcmV2OwotICAgIFJlbmRlck9iamVjdCogY3VyID0gcmVuZGVyZXI7Ci0KLSAgICBpZiAoIWN1
ci0+aXNSZW5kZXJJbmxpbmUoKSAmJiAhY3VyLT5pc1JlbmRlckJsb2NrKCkpCisgICAgaWYgKCFp
czxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKSAmJiAhaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkK
ICAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwogCi0gICAgd2hpbGUgKGN1cikgewotICAgICAgICBw
cmV2ID0gY3VyOworICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkID0gZG93bmNhc3Q8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXN0Q2hpbGQoKTsKKyAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcHJldmlvdXM7CisgICAgZm9yIChhdXRvKiBjdXJyZW50ID0gJmRvd25jYXN0PFJl
bmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcik7IGN1cnJlbnQ7ICkgeworICAgICAgICBwcmV2
aW91cyA9IGN1cnJlbnQ7CiAKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogbGMgPSBjdXItPmxh
c3RDaGlsZFNsb3coKSkKLSAgICAgICAgICAgIGxhc3RDaGlsZCA9IGxjOworICAgICAgICBpZiAo
UmVuZGVyT2JqZWN0KiBuZXdMYXN0Q2hpbGQgPSBjdXJyZW50LT5sYXN0Q2hpbGQoKSkKKyAgICAg
ICAgICAgIGxhc3RDaGlsZCA9IG5ld0xhc3RDaGlsZDsKIAotICAgICAgICBpZiAoY3VyLT5pc1Jl
bmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICBjdXIgPSB0b1JlbmRlcklubGluZShjdXIpLT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBy
ZXYsIGN1ciB8fCAhdG9SZW5kZXJJbmxpbmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICBjdXJyZW50
ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVudCkuaW5saW5lRWxlbWVudENvbnRpbnVh
dGlvbigpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91cywgY3VycmVudCB8fCAh
ZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBjdXIgPSB0b1JlbmRlckJsb2NrKGN1ciktPmlubGluZUVs
ZW1lbnRDb250aW51YXRpb24oKTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKmN1cnJlbnQpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAgICB9CiAK
ICAgICByZXR1cm4gbGFzdENoaWxkOwpAQCAtMjI3LDcgKzIyNSw3IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25zdAogICAg
IGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgUmVu
ZGVyT2JqZWN0KiBmaXJzdENoaWxkID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9u
KG1fcmVuZGVyZXIpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRD
b25zaWRlcmluZ0NvbnRpbnVhdGlvbigqbV9yZW5kZXJlcik7CiAKICAgICAvLyBJZiBhbiBvYmpl
Y3QgY2FuJ3QgaGF2ZSBjaGlsZHJlbiwgdGhlbiBpdCBpcyB1c2luZyB0aGlzIG1ldGhvZCB0byBo
ZWxwCiAgICAgLy8gY2FsY3VsYXRlIHNvbWUgaW50ZXJuYWwgcHJvcGVydHkgKGxpa2UgaXRzIGRl
c2NyaXB0aW9uKS4KQEAgLTI0NCw3ICsyNDIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXN0Q2hpbGQoKSBjb25zdAogICAgIGlmICghbV9yZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZCA9IGxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKG1fcmVuZGVyZXIpOworICAg
IFJlbmRlck9iamVjdCogbGFzdENoaWxkID0gbGFzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRp
b24oKm1fcmVuZGVyZXIpOwogCiAgICAgaWYgKCFsYXN0Q2hpbGQgJiYgIWNhbkhhdmVDaGlsZHJl
bigpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omxhc3RDaGlsZCgp
OwpAQCAtMjUyLDY3ICsyNTAsNjEgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6bGFzdENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShsYXN0Q2hpbGQpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlcklu
bGluZSogc3RhcnRPZkNvbnRpbnVhdGlvbnMoUmVuZGVyT2JqZWN0KiByKQorc3RhdGljIGlubGlu
ZSBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZDb250aW51YXRpb25zKFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIpCiB7Ci0gICAgaWYgKHItPmlzSW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKQotICAgICAg
ICByZXR1cm4gdG9SZW5kZXJJbmxpbmUoci0+bm9kZSgpLT5yZW5kZXJlcigpKTsKKyAgICBpZiAo
cmVuZGVyZXIuaXNJbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyLm5vZGUoKS0+cmVuZGVyZXIoKSk7CiAKICAg
ICAvLyBCbG9ja3Mgd2l0aCBhIHByZXZpb3VzIGNvbnRpbnVhdGlvbiBhbHdheXMgaGF2ZSBhIG5l
eHQgY29udGludWF0aW9uCi0gICAgaWYgKHItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJs
b2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCi0gICAgICAgIHJldHVybiB0b1Jl
bmRlcklubGluZSh0b1JlbmRlckJsb2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkt
PmVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJl
cikgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGlu
dWF0aW9uKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5lbGVt
ZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgUmVuZGVyT2JqZWN0KiBlbmRPZkNvbnRpbnVhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBlbmRPZkNvbnRpbnVhdGlvbnMoUmVu
ZGVyT2JqZWN0JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIHByZXYgPSByZW5kZXJl
cjsKLSAgICBSZW5kZXJPYmplY3QqIGN1ciA9IHJlbmRlcmVyOwotCi0gICAgaWYgKCFjdXItPmlz
UmVuZGVySW5saW5lKCkgJiYgIWN1ci0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICByZXR1cm4g
cmVuZGVyZXI7CisgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKSAmJiAhaXM8UmVu
ZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuICZyZW5kZXJlcjsKIAotICAgIHdo
aWxlIChjdXIpIHsKLSAgICAgICAgcHJldiA9IGN1cjsKLSAgICAgICAgaWYgKGN1ci0+aXNSZW5k
ZXJJbmxpbmUoKSkgewotICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJJbmxpbmUoY3VyKS0+aW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpOwotICAgICAgICAgICAgQVNTRVJUKGN1ciB8fCAhdG9S
ZW5kZXJJbmxpbmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsKKyAgICBhdXRvKiBwcmV2aW91cyA9
ICZkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIpOworICAgIGZvciAoYXV0
byogY3VycmVudCA9IHByZXZpb3VzOyBjdXJyZW50OyApIHsKKyAgICAgICAgcHJldmlvdXMgPSBj
dXJyZW50OworICAgICAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsKKyAgICAg
ICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KS5pbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudCB8fCAhZG93
bmNhc3Q8UmVuZGVySW5saW5lPigqcHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAgICAgICAg
fSBlbHNlIAotICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJCbG9jayhjdXIpLT5pbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KCpjdXJyZW50KS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIHByZXY7CisgICAgcmV0dXJuIHByZXZpb3VzOwogfQogCiAKLXN0YXRpYyBpbmxp
bmUgUmVuZGVyT2JqZWN0KiBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9ucyhSZW5k
ZXJJbmxpbmUqIHIsIFJlbmRlck9iamVjdCogY2hpbGQpCitzdGF0aWMgaW5saW5lIFJlbmRlck9i
amVjdCogY2hpbGRCZWZvcmVDb25zaWRlcmluZ0NvbnRpbnVhdGlvbnMoUmVuZGVySW5saW5lKiBy
ZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogY3VyQ29udGFpbmVyID0gcjsKLSAgICBSZW5kZXJPYmplY3QqIGN1ciA9IG51bGxwdHI7Ci0g
ICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gbnVsbHB0cjsKLQotICAgIHdoaWxlIChjdXJDb250YWlu
ZXIpIHsKLSAgICAgICAgaWYgKGN1ckNvbnRhaW5lci0+aXNSZW5kZXJJbmxpbmUoKSkgewotICAg
ICAgICAgICAgY3VyID0gY3VyQ29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB3
aGlsZSAoY3VyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBjaGlsZCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHByZXY7Ci0gICAgICAgICAgICAgICAgcHJldiA9IGN1cjsKLSAg
ICAgICAgICAgICAgICBjdXIgPSBjdXItPm5leHRTaWJsaW5nKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBwcmV2aW91cyA9IG51bGxwdHI7CisgICAgZm9yIChSZW5kZXJCb3hNb2RlbE9iamVjdCogY3Vy
cmVudENvbnRhaW5lciA9IHJlbmRlcmVyOyBjdXJyZW50Q29udGFpbmVyOyApIHsKKyAgICAgICAg
aWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnRDb250YWluZXIpKSB7CisgICAgICAgICAgICBh
dXRvKiBjdXJyZW50ID0gY3VycmVudENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOworICAgICAgICAg
ICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBjaGls
ZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOworICAgICAgICAgICAgICAg
IHByZXZpb3VzID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+
bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY3VyQ29udGFpbmVy
ID0gdG9SZW5kZXJJbmxpbmUoY3VyQ29udGFpbmVyKS0+Y29udGludWF0aW9uKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoY3VyQ29udGFpbmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAg
IGlmIChjdXJDb250YWluZXIgPT0gY2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7
CisgICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigq
Y3VycmVudENvbnRhaW5lcikuY29udGludWF0aW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8
UmVuZGVyQmxvY2s+KCpjdXJyZW50Q29udGFpbmVyKSkgeworICAgICAgICAgICAgaWYgKGN1cnJl
bnRDb250YWluZXIgPT0gY2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwog
Ci0gICAgICAgICAgICBwcmV2ID0gY3VyQ29udGFpbmVyOwotICAgICAgICAgICAgY3VyQ29udGFp
bmVyID0gdG9SZW5kZXJCbG9jayhjdXJDb250YWluZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0
aW9uKCk7CisgICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnRDb250YWluZXI7CisgICAgICAg
ICAgICBjdXJyZW50Q29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50Q29u
dGFpbmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQogICAgIHJldHVybiBudWxscHRyOwogfQogCkBA
IC0zMzIsMTUgKzMyNCwxNSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgIC8vIENhc2UgMTogVGhlIG5v
ZGUgaXMgYSBibG9jayBhbmQgaXMgYW4gaW5saW5lJ3MgY29udGludWF0aW9uLiBJbiB0aGF0IGNh
c2UsIHRoZSBpbmxpbmUncwogICAgIC8vIGxhc3QgY2hpbGQgaXMgb3VyIHByZXZpb3VzIHNpYmxp
bmcgKG9yIGZ1cnRoZXIgYmFjayBpbiB0aGUgY29udGludWF0aW9uIGNoYWluKQogICAgIFJlbmRl
cklubGluZSogc3RhcnRPZkNvbnRzOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJsb2Nr
KCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXIpKSkK
KyAgICBpZiAoaXM8UmVuZGVyQm94PigqbV9yZW5kZXJlcikgJiYgKHN0YXJ0T2ZDb250cyA9IHN0
YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyKSkpCiAgICAgICAgIHByZXZpb3VzU2libGlu
ZyA9IGNoaWxkQmVmb3JlQ29uc2lkZXJpbmdDb250aW51YXRpb25zKHN0YXJ0T2ZDb250cywgbV9y
ZW5kZXJlcik7CiAKICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2YgdGhl
IGVuZCBvZiBhIGNvbnRpbnVhdGlvbiAtIHNraXAgYWxsIHRoZSB3YXkgdG8gYmVmb3JlCiAgICAg
Ly8gdGhlIHBhcmVudCBvZiB0aGUgc3RhcnQsIHNpbmNlIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB3
aWxsIGJlIGxpbmtlZCB1cCB2aWEgdGhlIGNvbnRpbnVhdGlvbi4KICAgICBlbHNlIGlmIChtX3Jl
bmRlcmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmlyc3RDaGlsZElzSW5saW5lQ29udGludWF0
aW9uKG1fcmVuZGVyZXIpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RQYXJlbnQgPSBz
dGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50
KCk7CisgICAgICAgIGF1dG8qIGZpcnN0UGFyZW50ID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKm1f
cmVuZGVyZXItPmZpcnN0Q2hpbGRTbG93KCkpLT5wYXJlbnQoKTsKICAgICAgICAgd2hpbGUgKGZp
cnN0Q2hpbGRJc0lubGluZUNvbnRpbnVhdGlvbihmaXJzdFBhcmVudCkpCi0gICAgICAgICAgICBm
aXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250aW51YXRpb25zKGZpcnN0UGFyZW50LT5maXJzdENoaWxk
U2xvdygpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250
aW51YXRpb25zKCpmaXJzdFBhcmVudC0+Zmlyc3RDaGlsZCgpKS0+cGFyZW50KCk7CiAgICAgICAg
IHByZXZpb3VzU2libGluZyA9IGZpcnN0UGFyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB9
CiAKQEAgLTM1MCw3ICszNDIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogCiAgICAgLy8gQ2FzZSA0OiBU
aGlzIG5vZGUgaGFzIG5vIHByZXZpb3VzIHNpYmxpbmdzLCBidXQgaXRzIHBhcmVudCBpcyBhbiBp
bmxpbmUsCiAgICAgLy8gYW5kIGlzIGFub3RoZXIgbm9kZSdzIGlubGluZSBjb250aW51dGF0aW9u
LiBGb2xsb3cgdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4KLSAgICBlbHNlIGlmIChtX3JlbmRlcmVy
LT5wYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNv
bnRpbnVhdGlvbnMobV9yZW5kZXJlci0+cGFyZW50KCkpKSkKKyAgICBlbHNlIGlmIChpczxSZW5k
ZXJJbmxpbmU+KCptX3JlbmRlcmVyLT5wYXJlbnQoKSkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0
T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyLT5wYXJlbnQoKSkpKQogICAgICAgICBwcmV2aW91
c1NpYmxpbmcgPSBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9ucyhzdGFydE9mQ29u
dHMsIG1fcmVuZGVyZXItPnBhcmVudCgpLT5maXJzdENoaWxkKCkpOwogCiAgICAgaWYgKCFwcmV2
aW91c1NpYmxpbmcpCkBAIC0zNzUsMTUgKzM2NywxNSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAgLy8gQ2Fz
ZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGhhcyBhbiBpbmxpbmUgY29udGludWF0aW9uLiBOZXh0
IHNpYmxpbmcgaXMgdGhlIGlubGluZSBjb250aW51YXRpb24ncwogICAgIC8vIGZpcnN0IGNoaWxk
LgogICAgIFJlbmRlcklubGluZSogaW5saW5lQ29udGludWF0aW9uOwotICAgIGlmIChtX3JlbmRl
cmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKGlubGluZUNvbnRpbnVhdGlvbiA9IHRvUmVuZGVyQmxv
Y2sobV9yZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkpCi0gICAgICAgIG5l
eHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKGlubGluZUNvbnRp
bnVhdGlvbik7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPigqbV9yZW5kZXJlcikgJiYgKGlubGlu
ZUNvbnRpbnVhdGlvbiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqbV9yZW5kZXJlcikuaW5saW5l
RWxlbWVudENvbnRpbnVhdGlvbigpKSkKKyAgICAgICAgbmV4dFNpYmxpbmcgPSBmaXJzdENoaWxk
Q29uc2lkZXJpbmdDb250aW51YXRpb24oKmlubGluZUNvbnRpbnVhdGlvbik7CiAKICAgICAvLyBD
YXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2YgdGhlIHN0YXJ0IG9mIGEgY29udGludWF0
aW9uIC0gc2tpcCBhbGwgdGhlIHdheSB0bwogICAgIC8vIGFmdGVyIHRoZSBwYXJlbnQgb2YgdGhl
IGVuZCwgc2luY2UgZXZlcnl0aGluZyBpbiBiZXR3ZWVuIHdpbGwgYmUgbGlua2VkIHVwIHZpYSB0
aGUgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKG1fcmVuZGVyZXItPmlzQW5vbnltb3VzQmxv
Y2soKSAmJiBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obV9yZW5kZXJlcikpIHsKLSAgICAgICAg
UmVuZGVyRWxlbWVudCogbGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucyh0b1JlbmRlckJs
b2NrKG1fcmVuZGVyZXIpLT5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOworICAgICAgICBSZW5kZXJF
bGVtZW50KiBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKCpkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKm1fcmVuZGVyZXIpLmxhc3RDaGlsZCgpKS0+cGFyZW50KCk7CiAgICAgICAgIHdoaWxl
IChsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obGFzdFBhcmVudCkpCi0gICAgICAgICAgICBsYXN0
UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKGxhc3RQYXJlbnQtPmxhc3RDaGlsZCgpKS0+cGFy
ZW50KCk7CisgICAgICAgICAgICBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKCpsYXN0
UGFyZW50LT5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOwogICAgICAgICBuZXh0U2libGluZyA9IGxh
c3RQYXJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQogCkBAIC0zOTQsMTUgKzM4NiwxNSBAQCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGlu
ZygpIGNvbnN0CiAgICAgLy8gQ2FzZSA0OiBub2RlIGlzIGFuIGlubGluZSB3aXRoIGEgY29udGlu
dWF0aW9uLiBOZXh0IHNpYmxpbmcgaXMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZW5kIAogICAg
IC8vIG9mIHRoZSBjb250aW51YXRpb24gY2hhaW4uCiAgICAgZWxzZSBpZiAoaXNJbmxpbmVXaXRo
Q29udGludWF0aW9uKG1fcmVuZGVyZXIpKQotICAgICAgICBuZXh0U2libGluZyA9IGVuZE9mQ29u
dGludWF0aW9ucyhtX3JlbmRlcmVyKS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbmV4dFNpYmxp
bmcgPSBlbmRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXIpLT5uZXh0U2libGluZygpOwogCiAg
ICAgLy8gQ2FzZSA1OiBub2RlIGhhcyBubyBuZXh0IHNpYmxpbmcsIGFuZCBpdHMgcGFyZW50IGlz
IGFuIGlubGluZSB3aXRoIGEgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKGlzSW5saW5lV2l0
aENvbnRpbnVhdGlvbihtX3JlbmRlcmVyLT5wYXJlbnQoKSkpIHsKLSAgICAgICAgYXV0byBjb250
aW51YXRpb24gPSB0b1JlbmRlcklubGluZShtX3JlbmRlcmVyLT5wYXJlbnQoKSktPmNvbnRpbnVh
dGlvbigpOworICAgICAgICBhdXRvJiBjb250aW51YXRpb24gPSAqZG93bmNhc3Q8UmVuZGVySW5s
aW5lPigqbV9yZW5kZXJlci0+cGFyZW50KCkpLmNvbnRpbnVhdGlvbigpOwogICAgICAgICAKICAg
ICAgICAgLy8gQ2FzZSA1YTogY29udGludWF0aW9uIGlzIGEgYmxvY2sgLSBpbiB0aGlzIGNhc2Ug
dGhlIGJsb2NrIGl0c2VsZiBpcyB0aGUgbmV4dCBzaWJsaW5nLgotICAgICAgICBpZiAoY29udGlu
dWF0aW9uLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICBuZXh0U2libGluZyA9IGNvbnRp
bnVhdGlvbjsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihjb250aW51YXRpb24pKQorICAg
ICAgICAgICAgbmV4dFNpYmxpbmcgPSAmY29udGludWF0aW9uOwogICAgICAgICAvLyBDYXNlIDVi
OiBjb250aW51YXRpb24gaXMgYW4gaW5saW5lIC0gaW4gdGhpcyBjYXNlIHRoZSBpbmxpbmUncyBm
aXJzdCBjaGlsZCBpcyB0aGUgbmV4dCBzaWJsaW5nCiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKGNvbnRpbnVh
dGlvbik7CkBAIC00MTQsMTMgKzQwNiwxMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAgcmV0dXJuIGF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOwogfQogCi1zdGF0aWMgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K3N0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCogbmV4dENvbnRpbnVhdGlvbihSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKQogewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgaWYgKHJlbmRlcmVy
LT5pc1JlbmRlcklubGluZSgpICYmICFyZW5kZXJlci0+aXNSZXBsYWNlZCgpKQotICAgICAgICBy
ZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51YXRpb24oKTsKLSAgICBpZiAo
cmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyQmxvY2so
cmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgaWYgKGlzPFJlbmRl
cklubGluZT4ocmVuZGVyZXIpICYmICFyZW5kZXJlci5pc1JlcGxhY2VkKCkpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKS5jb250aW51YXRpb24oKTsKKyAg
ICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogICAgIApAQCAtNDM1LDEyICs0MjYsMTIgQEAgUmVuZGVyT2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJQYXJlbnRPYmplY3QoKSBjb25z
dAogICAgIC8vIGlzIHRoZSBzdGFydCBvZiB0aGUgY29udGludWF0aW9uIGNoYWluLgogICAgIFJl
bmRlcklubGluZSogc3RhcnRPZkNvbnRzID0gbnVsbHB0cjsKICAgICBSZW5kZXJPYmplY3QqIGZp
cnN0Q2hpbGQgPSBudWxscHRyOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkg
JiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXIpKSkKKyAg
ICBpZiAoaXM8UmVuZGVyQmxvY2s+KCptX3JlbmRlcmVyKSAmJiAoc3RhcnRPZkNvbnRzID0gc3Rh
cnRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXIpKSkKICAgICAgICAgcGFyZW50ID0gc3RhcnRP
ZkNvbnRzOwogCiAgICAgLy8gQ2FzZSAyOiBub2RlJ3MgcGFyZW50IGlzIGFuIGlubGluZSB3aGlj
aCBpcyBzb21lIG5vZGUncyBjb250aW51YXRpb247IHBhcmVudCBpcyAKICAgICAvLyB0aGUgZWFy
bGllc3Qgbm9kZSBpbiB0aGUgY29udGludWF0aW9uIGNoYWluLgotICAgIGVsc2UgaWYgKHBhcmVu
dCAmJiBwYXJlbnQtPmlzUmVuZGVySW5saW5lKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZD
b250aW51YXRpb25zKHBhcmVudCkpKQorICAgIGVsc2UgaWYgKGlzPFJlbmRlcklubGluZT4ocGFy
ZW50KSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKnBhcmVudCkpKQog
ICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHM7CiAgICAgCiAgICAgLy8gQ2FzZSAzOiBUaGUg
Zmlyc3Qgc2libGluZyBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgY29udGludWF0aW9uIGNoYWluLiBG
aW5kIHRoZSBvcmlnaW4gb2YgdGhhdCBjb250aW51YXRpb24uCkBAIC00NDgsNyArNDM5LDcgQEAg
UmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJQYXJlbnRPYmpl
Y3QoKSBjb25zdAogICAgICAgICAvLyBHZXQgdGhlIG5vZGUncyByZW5kZXJlciBhbmQgZm9sbG93
IHRoYXQgY29udGludWF0aW9uIGNoYWluIHVudGlsIHRoZSBmaXJzdCBjaGlsZCBpcyBmb3VuZAog
ICAgICAgICBSZW5kZXJPYmplY3QqIG5vZGVSZW5kZXJGaXJzdENoaWxkID0gZmlyc3RDaGlsZC0+
bm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICB3aGlsZSAobm9kZVJlbmRlckZpcnN0Q2hpbGQg
IT0gZmlyc3RDaGlsZCkgewotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNvbnRzVGVz
dCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rlc3Q7IGNvbnRzVGVzdCA9IG5leHRDb250
aW51YXRpb24oY29udHNUZXN0KSkgeworICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNv
bnRzVGVzdCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rlc3Q7IGNvbnRzVGVzdCA9IG5l
eHRDb250aW51YXRpb24oKmNvbnRzVGVzdCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udHNU
ZXN0ID09IGZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZVJl
bmRlckZpcnN0Q2hpbGQtPnBhcmVudCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTU2NiwyNSArNTU3LDIzIEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFu
Y2hvckVsZW1lbnQoKSBjb25zdAogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIFJlbmRlck9iamVjdCogY3VyclJlbmRlcmVyOworICAgIFJlbmRlck9i
amVjdCogY3VycmVudFJlbmRlcmVyOwogICAgIAogICAgIC8vIFNlYXJjaCB1cCB0aGUgcmVuZGVy
IHRyZWUgZm9yIGEgUmVuZGVyT2JqZWN0IHdpdGggYSBET00gbm9kZS4gIERlZmVyIHRvIGFuIGVh
cmxpZXIgY29udGludWF0aW9uLCB0aG91Z2guCi0gICAgZm9yIChjdXJyUmVuZGVyZXIgPSBtX3Jl
bmRlcmVyOyBjdXJyUmVuZGVyZXIgJiYgIWN1cnJSZW5kZXJlci0+bm9kZSgpOyBjdXJyUmVuZGVy
ZXIgPSBjdXJyUmVuZGVyZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJyUmVuZGVyZXIt
PmlzQW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250aW51
YXRpb24gPSB0b1JlbmRlckJsb2NrKGN1cnJSZW5kZXJlciktPmNvbnRpbnVhdGlvbigpOwotICAg
ICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICBmb3IgKGN1cnJlbnRSZW5kZXJlciA9IG1f
cmVuZGVyZXI7IGN1cnJlbnRSZW5kZXJlciAmJiAhY3VycmVudFJlbmRlcmVyLT5ub2RlKCk7IGN1
cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnRSZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpKSB7CisgICAgICAgICAgICBpZiAo
UmVuZGVyT2JqZWN0KiBjb250aW51YXRpb24gPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJl
bnRSZW5kZXJlcikuY29udGludWF0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hl
LT5nZXRPckNyZWF0ZShjb250aW51YXRpb24pLT5hbmNob3JFbGVtZW50KCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgLy8gYmFpbCBpZiBub25lIGZvdW5kCi0gICAgaWYgKCFjdXJyUmVu
ZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghY3VycmVudFJlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBzZWFyY2ggdXAgdGhlIERPTSB0cmVl
IGZvciBhbiBhbmNob3IgZWxlbWVudAogICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0aGF0IGFu
eSBub24taW1hZ2Ugd2l0aCBhbiBhbmNob3IgaXMgYW4gSFRNTEFuY2hvckVsZW1lbnQKLSAgICBO
b2RlKiBub2RlID0gY3VyclJlbmRlcmVyLT5ub2RlKCk7Ci0gICAgZm9yICggOyBub2RlOyBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gY3VycmVudFJl
bmRlcmVyLT5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkg
JiYgY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigpKSkKICAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CkBAIC0xNjc3
LDE0ICsxNjY2LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHJldHVybjsKICAgICBFbGVtZW50JiBlbGVt
ZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CiAKLSAgICBpZiAo
IW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveE1v
ZGVsT2JqZWN0PigqbV9yZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVuZGVyZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIp
OworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJv
eE1vZGVsT2JqZWN0PigqbV9yZW5kZXJlcik7CiAKICAgICAvLyBGSVhNRTogRG8gd2Ugd2FudCB0
byBkbyBhbnl0aGluZyBoZXJlIGZvciBBUklBIHRleHRib3hlcz8KLSAgICBpZiAocmVuZGVyZXIt
PmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYg
KHJlbmRlcmVyLmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkp
CiAgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLnNldFZhbHVlKHN0
cmluZyk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXItPmlzVGV4dEFyZWEoKSAmJiBpczxIVE1MVGV4
dEFyZWFFbGVtZW50PihlbGVtZW50KSkKKyAgICBlbHNlIGlmIChyZW5kZXJlci5pc1RleHRBcmVh
KCkgJiYgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIGRvd25jYXN0
PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLnNldFZhbHVlKHN0cmluZyk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25z
Lm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0K
aW5kZXggYzU1ZGIwMTc3MzJiYTEwODAwMGQxMjhiZmFiNTU1NGIzYmU5ZGQ1OC4uY2EwZDg4OTNi
Njg3MzRkMjcyOWZmYjQyN2IzMDI5YjcwMWEzN2Q1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTIwNywxNyArMjA3LDE3
IEBAIC0gKE5TQXJyYXkgKilib3JkZXJSYWRpaQogCiAtIChCT09MKWNvbnRhaW5zT25seUlubGlu
ZU9iamVjdHMKIHsKLSAgICBSZW5kZXJPYmplY3QgKiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJl
bmRlcmVyKCk7Ci0gICAgcmV0dXJuICAocmVuZGVyZXIgJiYKLSAgICAgICAgICAgICByZW5kZXJl
ci0+Y2hpbGRyZW5JbmxpbmUoKSAmJgotICAgICAgICAgICAgIChyZW5kZXJlci0+aXNSZW5kZXJC
bG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0
aW9uKCkgPT0gbmlsKSAmJgotICAgICAgICAgICAgICFyZW5kZXJlci0+aXNUYWJsZSgpKTsKKyAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXIKKyAgICAgICAgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkKKyAg
ICAgICAgJiYgKGlzPFJlbmRlckJsb2NrPigqcmVuZGVyZXIpICYmICFkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCisgICAgICAgICYm
ICFyZW5kZXJlci0+aXNUYWJsZSgpOwogfQogCiAtIChCT09MKWlzU2VsZWN0YWJsZUJsb2NrCiB7
Ci0gICAgUmVuZGVyT2JqZWN0ICogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwot
ICAgIHJldHVybiAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpIHx8
IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgIT0gbmlsKSkpOworICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlciAm
JiAoaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpIHx8IChpczxSZW5kZXJCbG9jaz4oKnJl
bmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50
Q29udGludWF0aW9uKCkgIT0gbmlsKSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFuZ2VPZkNvbnRh
aW5pbmdQYXJhZ3JhcGgKQEAgLTM0NCwxMiArMzQ0LDEyIEBAIC0gKGludClzdHJ1Y3R1cmFsQ29t
cGxleGl0eUNvbnRyaWJ1dGlvbgogICAgICAgICAgICAgcmVzdWx0ID0gSU5UX01BWDsKICAgICAg
ICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQg
PSAwOwotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpIHx8
IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgIT0gMCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChp
czxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikgfHwgKGlzPFJlbmRlckJsb2NrPigqcmVuZGVy
ZXIpICYmIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVsZW1lbnRDb250
aW51YXRpb24oKSkpIHsKICAgICAgICAgICAgIEJPT0wgbm9Db3N0ID0gTk87Ci0gICAgICAgICAg
ICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3ggJmFz
Qm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0JveCgpOwotICAgICAgICAgICAgICAgIFJlbmRlck9i
amVjdCAqcGFyZW50ID0gYXNCb3gucGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94
ICpwYXJlbnRSZW5kZXJCb3ggPSAocGFyZW50ICYmIHBhcmVudC0+aXNCb3goKSkgPyB0b1JlbmRl
ckJveChwYXJlbnQpIDogMDsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJl
cikpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gmIGFzQm94ID0gcmVuZGVyZXItPmVuY2xv
c2luZ0JveCgpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gYXNCb3gu
cGFyZW50KCk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSBp
czxSZW5kZXJCb3g+KHBhcmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHBhcmVudCkgOiBudWxs
cHRyOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJCb3ggJiYgYXNCb3gud2lkdGgo
KSA9PSBwYXJlbnRSZW5kZXJCb3gtPndpZHRoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbm9D
b3N0ID0gWUVTOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggY2U1ZWU2ZTRlZTdjY2NjMmNi
NDhiY2RjOWJmYTJlMWE5MDhiYzA4Ny4uZGEyM2QxM2RhNmVhNDY5OTA5MTQ5NzVjYTU3YmY0YTJl
YzBmNmNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKQEAgLTEwMDcsNyArMTAwNyw3IEBAIHN0YXRpYyBQYXNzUmVmPENTU1Zh
bHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3QoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvCiB7CiAgICAgY29uc3QgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzID0gZGly
ZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHlsZS0+Z3JpZENvbHVtbnMoKSA6IHN0eWxlLT5ncmlk
Um93cygpOwogICAgIGNvbnN0IE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCYgb3JkZXJlZE5hbWVk
R3JpZExpbmVzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHlsZS0+b3JkZXJlZE5hbWVk
R3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZS0+b3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCk7Ci0g
ICAgYm9vbCBpc1JlbmRlckdyaWQgPSByZW5kZXJlciAmJiByZW5kZXJlci0+aXNSZW5kZXJHcmlk
KCk7CisgICAgYm9vbCBpc1JlbmRlckdyaWQgPSBpczxSZW5kZXJHcmlkPihyZW5kZXJlcik7CiAK
ICAgICAvLyBIYW5kbGUgdGhlICdub25lJyBjYXNlLgogICAgIGJvb2wgdHJhY2tMaXN0SXNFbXB0
eSA9IHRyYWNrU2l6ZXMuaXNFbXB0eSgpOwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAgc3RhdGljIFBh
c3NSZWY8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFRyYWNrTGlzdChHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZGlyZWN0aW8KICAgICAgICAgLy8gRm9yIGdyaWRzIHdlIHNob3VsZCBjb25zaWRlciBl
dmVyeSBsaXN0ZWQgdHJhY2ssIHdoZXRoZXIgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNyZWF0
ZWQuIElmIHdlIGRvbid0IGhhdmUKICAgICAgICAgLy8gYW55IGV4cGxpY2l0IHRyYWNrIGFuZCB0
aGVyZSBhcmUgbm8gY2hpbGRyZW4gdGhlbiB0aGVyZSBhcmUgbm8gaW1wbGljaXQgdHJhY2tzLiBX
ZSBjYW5ub3Qgc2ltcGx5IGNoZWNrIHRoZQogICAgICAgICAvLyBudW1iZXIgb2Ygcm93cy9jb2x1
bW5zIGluIG91ciBpbnRlcm5hbCBncmlkIHJlcHJlc2VudGF0aW9uIGJlY2F1c2UgaXQncyBhbHdh
eXMgYXQgbGVhc3QgMXgxIChzZWUgcjE0MzMzMSkuCi0gICAgICAgIHRyYWNrTGlzdElzRW1wdHkg
PSAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgdHJhY2tM
aXN0SXNFbXB0eSA9ICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5maXJzdENoaWxk
KCk7CiAgICAgfQogCiAgICAgaWYgKHRyYWNrTGlzdElzRW1wdHkpIHsKQEAgLTEwMjUsNyArMTAy
NSw3IEBAIHN0YXRpYyBQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3QoR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvCiAKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgaWYgKGlzUmVuZGVyR3JpZCkgewot
ICAgICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHRyYWNrUG9zaXRpb25zID0gZGlyZWN0
aW9uID09IEZvckNvbHVtbnMgPyB0b1JlbmRlckdyaWQocmVuZGVyZXIpLT5jb2x1bW5Qb3NpdGlv
bnMoKSA6IHRvUmVuZGVyR3JpZChyZW5kZXJlciktPnJvd1Bvc2l0aW9ucygpOworICAgICAgICBj
b25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHRyYWNrUG9zaXRpb25zID0gZGlyZWN0aW9uID09IEZv
ckNvbHVtbnMgPyBkb3duY2FzdDxSZW5kZXJHcmlkPigqcmVuZGVyZXIpLmNvbHVtblBvc2l0aW9u
cygpIDogZG93bmNhc3Q8UmVuZGVyR3JpZD4oKnJlbmRlcmVyKS5yb3dQb3NpdGlvbnMoKTsKICAg
ICAgICAgLy8gVGhlcmUgYXJlIGF0IGxlYXN0ICN0cmFja3MgKyAxIGdyaWQgbGluZXMgKHRyYWNr
UG9zaXRpb25zKS4gQXBhcnQgZnJvbSB0aGF0LCB0aGUgZ3JpZCBjb250YWluZXIgY2FuIGdlbmVy
YXRlIGltcGxpY2l0IGdyaWQgdHJhY2tzLAogICAgICAgICAvLyBzbyB3ZSdsbCBoYXZlIG1vcmUg
dHJhY2tQb3NpdGlvbnMgdGhhbiB0cmFja1NpemVzIGFzIHRoZSBsYXR0ZXIgb25seSBjb250YWlu
IHRoZSBleHBsaWNpdCBncmlkLgogICAgICAgICBBU1NFUlQodHJhY2tQb3NpdGlvbnMuc2l6ZSgp
IC0gMSA+PSB0cmFja1NpemVzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM0NjRjMjc1NTI5NDZlZDI5ODg3MjliNzVm
MGY4YmQzNDkyOGZmYmIuLjU4NDk0OGEzOTU0MWE1ZTBiNzk2NTNhNWVhZDgwMDc4Njk3YWE5MmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CkBAIC01NSwxMCArNTUsMTAgQEAKICNpbmNsdWRlICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93Lmgi
CisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0aFNwYW5D
b21tYW5kLmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJTY29w
ZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCIKICNp
bmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCkBAIC05MjksMjEgKzkyOSwyMSBAQCBQYXNz
UmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRCbG9ja1BsYWNlaG9sZGVy
KGNvbnN0IFBvc2l0aW9uJiBwbwogUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKEVsZW1lbnQqIGNvbnRhaW5lcikKIHsKICAg
ICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb250YWluZXItPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkp
Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJl
cikpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIC8vIGFwcGVuZCB0aGUgcGxh
Y2Vob2xkZXIgdG8gbWFrZSBzdXJlIGl0IGZvbGxvd3MKICAgICAvLyBhbnkgdW5yZW5kZXJlZCBi
bG9ja3MKLSAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKTsK
LSAgICBpZiAoYmxvY2stPmhlaWdodCgpID09IDAgfHwgKGJsb2NrLT5pc0xpc3RJdGVtKCkgJiYg
YmxvY2stPmlzRW1wdHkoKSkpCisgICAgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3cgPSBkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcik7CisgICAgaWYgKCFibG9ja0Zsb3cuaGVp
Z2h0KCkgfHwgKGJsb2NrRmxvdy5pc0xpc3RJdGVtKCkgJiYgYmxvY2tGbG93LmlzRW1wdHkoKSkp
CiAgICAgICAgIHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGNvbnRhaW5lcik7CiAKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gQXNzdW1lcyB0aGF0IHRo
ZSBwb3NpdGlvbiBpcyBhdCBhIHBsYWNlaG9sZGVyIGFuZCBkb2VzIHRoZSByZW1vdmFsIHdpdGhv
dXQgbXVjaCBjaGVja2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApp
bmRleCA3MjVhODAyYzc3NjZlMzc4OTY4MGY5NGI4MjUzYjhkYjVkNTQzYWE3Li42YmU5NzIzY2Jk
ZDFhNTU2N2NhYTQwNGI4OWRkYThmOGYyZTIyYjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCkBAIC05NjMsNyArOTYzLDcgQEAgYm9vbCBUZXh0SXRlcmF0b3I6OnNo
b3VsZFJlcHJlc2VudE5vZGVPZmZzZXRaZXJvKCkKICAgICAvLyBBZGRpdGlvbmFsbHksIGlmIHRo
ZSByYW5nZSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgY29udGFpbnMgaHVnZSBzZWN0aW9ucyBvZiB1
bnJlbmRlcmVkIGNvbnRlbnQsIAogICAgIC8vIHdlIHdvdWxkIGNyZWF0ZSBWaXNpYmxlUG9zaXRp
b25zIG9uIGV2ZXJ5IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aXRob3V0IHRoaXMgY2hlY2suCiAg
ICAgaWYgKCFtX25vZGUtPnJlbmRlcmVyKCkgfHwgbV9ub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgp
LnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFCi0gICAgICAgIHx8IChtX25vZGUtPnJlbmRlcmVyKCkt
PmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXRvUmVuZGVyQmxvY2sobV9ub2RlLT5yZW5kZXJlcigp
KS0+aGVpZ2h0KCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkpCisgICAgICAgIHx8
IChpczxSZW5kZXJCbG9ja0Zsb3c+KCptX25vZGUtPnJlbmRlcmVyKCkpICYmICFkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KCptX25vZGUtPnJlbmRlcmVyKCkpLmhlaWdodCgpICYmICFpczxIVE1M
Qm9keUVsZW1lbnQ+KCptX25vZGUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
VGhlIHN0YXJ0UG9zLmlzTm90TnVsbCgpIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzdGFy
dCBjb3VsZCBiZSBiZWZvcmUgdGhlIGJvZHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1t
CmluZGV4IGRkOTQzZWI0NDBkNDE2MjhjNjU1N2UyOTMzMWI0MmI1YTMyNTMxMTQuLjJhYzRjZmRj
MzM5MTg2ZDc4YzZhZDk0ZWM5MWIyZDBlNzllMzllZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0Zy
YW1lSU9TLm1tCkBAIC01NTIsMTEgKzU1MiwxMSBAQCBpbnQgRnJhbWU6OnByZWZlcnJlZEhlaWdo
dCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGJvZHktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlz
UmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhy
ZW5kZXJlcik7Ci0gICAgcmV0dXJuIGJsb2NrLT5oZWlnaHQoKSArIGJsb2NrLT5tYXJnaW5Ub3Ao
KSArIGJsb2NrLT5tYXJnaW5Cb3R0b20oKTsKKyAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKTsKKyAgICByZXR1cm4gYmxvY2suaGVpZ2h0KCkg
KyBibG9jay5tYXJnaW5Ub3AoKSArIGJsb2NrLm1hcmdpbkJvdHRvbSgpOwogfQogCiBpbnQgRnJh
bWU6OmlubmVyTGluZUhlaWdodChET01Ob2RlKiBkb21Ob2RlKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgK
aW5kZXggZmVjNTJmN2IxNDQ4MGQzMWE0ZmE5YWMyNGYyZGNkNDZmMDZmODg1Ni4uNTk4MzllNmJl
YjVhZDNjZGRjMzdmY2EwOTdiYmQ0MjY2ODgyYThiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oCkBAIC00NCw3
ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9ja0ZvckZp
eGVkUG9zaXRpb24oUmVuZGVyRWxlbWVudCogcGFyZW50CiAgICAgd2hpbGUgKG9iamVjdCAmJiAh
b2JqZWN0LT5jYW5Db250YWluRml4ZWRQb3NpdGlvbk9iamVjdHMoKSkKICAgICAgICAgb2JqZWN0
ID0gb2JqZWN0LT5wYXJlbnQoKTsKICAgICBBU1NFUlQoIW9iamVjdCB8fCAhb2JqZWN0LT5pc0Fu
b255bW91c0Jsb2NrKCkpOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG9iamVjdCk7CisgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPihvYmplY3QpOwogfQogCiBzdGF0aWMgaW5saW5l
IFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKFJlbmRlckVs
ZW1lbnQqIHBhcmVudCkKQEAgLTU3LDEzICs1NywxMyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlckJs
b2NrKiBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKFJlbmRlckVsZW1lbnQqIHBh
cgogICAgIC8vIG5vdCB0aGUgaW5saW5lIGl0c2VsZiwgdG8gYXZvaWQgaGF2aW5nIGEgcG9zaXRp
b25lZCBvYmplY3RzIGxpc3QgaW4gYWxsIFJlbmRlcklubGluZXMKICAgICAvLyBhbmQgdXNlIFJl
bmRlckJsb2NrKiBhcyBSZW5kZXJFbGVtZW50Ojpjb250YWluaW5nQmxvY2sncyByZXR1cm4gdHlw
ZS4KICAgICAvLyBVc2UgUmVuZGVyQmxvY2s6OmNvbnRhaW5lcigpIHRvIG9idGFpbiB0aGUgaW5s
aW5lLgotICAgIGlmIChvYmplY3QgJiYgIW9iamVjdC0+aXNSZW5kZXJCbG9jaygpKQorICAgIGlm
IChvYmplY3QgJiYgIWlzPFJlbmRlckJsb2NrPigqb2JqZWN0KSkKICAgICAgICAgb2JqZWN0ID0g
b2JqZWN0LT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIHdoaWxlIChvYmplY3QgJiYgb2JqZWN0
LT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+Y29udGFpbmlu
Z0Jsb2NrKCk7CiAKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvYmplY3QpOworICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJCbG9jaz4ob2JqZWN0KTsKIH0KIAogc3RhdGljIGlubGluZSBSZW5k
ZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KFJlbmRlckVsZW1lbnQqIHBh
cmVudCkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJCbG9jayogY29udGFp
bmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KFJlbmRlckVsZW1lbnQqIHBhcmVudCkKICAgICBSZW5k
ZXJFbGVtZW50KiBvYmplY3QgPSBwYXJlbnQ7CiAgICAgd2hpbGUgKG9iamVjdCAmJiBpc05vblJl
bmRlckJsb2NrSW5saW5lKCpvYmplY3QpKQogICAgICAgICBvYmplY3QgPSBvYmplY3QtPnBhcmVu
dCgpOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG9iamVjdCk7CisgICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlckJsb2NrPihvYmplY3QpOwogfQogCiBjbGFzcyBMb2dpY2FsU2VsZWN0aW9uT2Zm
c2V0Q2FjaGVzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4
IGUxMmViYjUzMDEyNDhmOWQ1MzRiMDNkYzRhYjY3YWU5MjJlMDAwMGYuLjliOWQxY2VhZjc4NDhi
YjFkZTI4YTRlYzg5NWQ4MTMyNmU0MGM2MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcApAQCAtMjcyLDE3ICsyNzIsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5
bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3
U3QKICAgICAgICAgZWxzZSBpZiAob2xkU3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRp
b24pIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSBvdXIgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGRl
c2NlbmRhbnRzIGZyb20gdGhlaXIgY3VycmVudCBjb250YWluaW5nIGJsb2NrLgogICAgICAgICAg
ICAgLy8gVGhleSB3aWxsIGJlIGluc2VydGVkIGludG8gb3VyIHBvc2l0aW9uZWQgb2JqZWN0cyBs
aXN0IGR1cmluZyBsYXlvdXQuCi0gICAgICAgICAgICBhdXRvIGNiID0gcGFyZW50KCk7Ci0gICAg
ICAgICAgICB3aGlsZSAoY2IgJiYgKGNiLT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gU3RhdGljUG9z
aXRpb24gfHwgKGNiLT5pc0lubGluZSgpICYmICFjYi0+aXNSZXBsYWNlZCgpKSkgJiYgIWNiLT5p
c1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIGlmIChjYi0+c3R5bGUoKS5wb3NpdGlv
bigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgY2ItPmlzSW5saW5lKCkgJiYgIWNiLT5pc1JlcGxh
Y2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7
CisgICAgICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9jayA9IHBhcmVudCgpOworICAgICAgICAg
ICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAoY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLnBv
c2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24gfHwgKGNvbnRhaW5pbmdCbG9jay0+aXNJbmxpbmUo
KSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1JlcGxhY2VkKCkpKSAmJiAhY29udGFpbmluZ0Jsb2Nr
LT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2st
PnN0eWxlKCkucG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGNvbnRhaW5pbmdCbG9j
ay0+aXNJbmxpbmUoKSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1JlcGxhY2VkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWlu
aW5nQmxvY2soKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGNiID0gY2ItPnBhcmVudCgpOworICAgICAgICAgICAgICAgIGNv
bnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+cGFyZW50KCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjYi0+aXNSZW5kZXJCbG9jaygpKQotICAg
ICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2IpLT5yZW1vdmVQb3NpdGlvbmVkT2JqZWN0cyh0
aGlzLCBOZXdDb250YWluaW5nQmxvY2spOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2Nr
PigqY29udGFpbmluZ0Jsb2NrKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKmNvbnRhaW5pbmdCbG9jaykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHModGhpcywgTmV3Q29u
dGFpbmluZ0Jsb2NrKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzMyLDE5ICszMzIsMTcgQEAg
UmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpID09IHRoaXMpCiAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgUmVuZGVyQmxvY2sqIGN1
cnIgPSB0b1JlbmRlckJsb2NrKGNvbnRpbnVhdGlvbigpKTsKICAgICBSZW5kZXJCbG9jayogbmV4
dFRvTGFzdCA9IHRoaXM7CiAgICAgUmVuZGVyQmxvY2sqIGxhc3QgPSB0aGlzOwotICAgIHdoaWxl
IChjdXJyKSB7Ci0gICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50
KCkgPT0gY3VycikgewotICAgICAgICAgICAgaWYgKGN1cnItPmZpcnN0Q2hpbGQoKSA9PSBiZWZv
cmVDaGlsZCkKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
Y29udGludWF0aW9uKCkpOyBjdXJyZW50OyBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KGN1cnJlbnQtPmNvbnRpbnVhdGlvbigpKSkgeworICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IGN1cnJlbnQpIHsKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50LT5maXJzdENoaWxkKCkgPT0gYmVmb3JlQ2hpbGQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGxhc3Q7Ci0gICAgICAgICAgICByZXR1cm4gY3VycjsKKyAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50OwogICAgICAgICB9CiAKICAgICAgICAgbmV4dFRvTGFzdCA9IGxhc3Q7Ci0gICAgICAgIGxh
c3QgPSBjdXJyOwotICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhjdXJyLT5jb250aW51YXRp
b24oKSk7CisgICAgICAgIGxhc3QgPSBjdXJyZW50OwogICAgIH0KIAogICAgIGlmICghYmVmb3Jl
Q2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQoKSkKQEAgLTQ0MCwxNyArNDM4LDE4IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnNwbGl0QmxvY2tzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJs
b2NrKiB0b0Jsb2NrLAogCiAgICAgLy8gV2UgaGF2ZSBiZWVuIHJlcGFyZW50ZWQgYW5kIGFyZSBu
b3cgdW5kZXIgdGhlIGZyb21CbG9jay4gIFdlIG5lZWQKICAgICAvLyB0byB3YWxrIHVwIG91ciBi
bG9jayBwYXJlbnQgY2hhaW4gdW50aWwgd2UgaGl0IHRoZSBjb250YWluaW5nIGFub255bW91cyBj
b2x1bW5zIGJsb2NrLgotICAgIC8vIE9uY2Ugd2UgaGl0IHRoZSBhbm9ueW1vdXMgY29sdW1ucyBi
bG9jayB3ZSdyZSBkb25lLgotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjdXJyID0gdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChwYXJlbnQoKSk7CisgICAgLy8gT25jZSB3ZSBoaXQgdGhlIGFub255
bW91cyBjb2x1bW5zIGJsb2NrIHdlJ3JlIGRvbmUucmVudCA9IGRvd25jYXN0PFJlbmRlckJveE1v
ZGVsT2JqZWN0PihwYXJlbnQoKSk7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJDaGls
ZCA9IHRoaXM7CiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyQ2hpbGROZXh0U2libGluZyA9IGN1cnJD
aGlsZC0+bmV4dFNpYmxpbmcoKTsKIAotICAgIHdoaWxlIChjdXJyICYmIGN1cnItPmlzRGVzY2Vu
ZGFudE9mKGZyb21CbG9jaykgJiYgY3VyciAhPSBmcm9tQmxvY2spIHsKLSAgICAgICAgUmVuZGVy
QmxvY2sqIGJsb2NrQ3VyciA9IHRvUmVuZGVyQmxvY2soY3Vycik7CisgICAgZm9yIChhdXRvKiBj
dXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHBhcmVudCgpKTsKKyAgICAg
ICAgY3VycmVudCAmJiBjdXJyZW50LT5pc0Rlc2NlbmRhbnRPZihmcm9tQmxvY2spICYmIGN1cnJl
bnQgIT0gZnJvbUJsb2NrOworICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9k
ZWxPYmplY3Q+KGN1cnJlbnQtPnBhcmVudCgpKSkgeworICAgICAgICBSZW5kZXJCbG9jayYgY3Vy
cmVudEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KTsKICAgICAgICAgCiAg
ICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbG9uZS4KICAgICAgICAgUmVuZGVyUHRyPFJlbmRlckJs
b2NrPiBjbG9uZUNoaWxkID0gV1RGOjptb3ZlKGNsb25lQmxvY2spOwotICAgICAgICBjbG9uZUJs
b2NrID0gYmxvY2tDdXJyLT5jbG9uZSgpOworICAgICAgICBjbG9uZUJsb2NrID0gY3VycmVudEJs
b2NrLmNsb25lKCk7CiAKICAgICAgICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9uZSBhcyB0aGUg
Zmlyc3QgY2hpbGQuCiAgICAgICAgIGNsb25lQmxvY2stPmFkZENoaWxkSWdub3JpbmdDb250aW51
YXRpb24oY2xvbmVDaGlsZC5sZWFrUHRyKCksIDApOwpAQCAtNDU5LDIwICs0NTgsMTkgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6c3BsaXRCbG9ja3MoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVy
QmxvY2sqIHRvQmxvY2ssCiAgICAgICAgIC8vIGFub255bW91cyBibG9ja3MgcG9zc2libHkgYXMg
d2Ugd2FsayB1cCB0aGUgYmxvY2sgY2hhaW4uICBXaGVuIHdlIHNwbGl0IGFuCiAgICAgICAgIC8v
IGFub255bW91cyBibG9jaywgdGhlcmUncyBubyBuZWVkIHRvIGRvIGFueSBjb250aW51YXRpb24g
aG9va3VwLCBzaW5jZSB3ZSBoYXZlbid0CiAgICAgICAgIC8vIGFjdHVhbGx5IHNwbGl0IGEgcmVh
bCBlbGVtZW50LgotICAgICAgICBpZiAoIWJsb2NrQ3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpKSB7
Ci0gICAgICAgICAgICBvbGRDb250ID0gYmxvY2tDdXJyLT5jb250aW51YXRpb24oKTsKLSAgICAg
ICAgICAgIGJsb2NrQ3Vyci0+c2V0Q29udGludWF0aW9uKGNsb25lQmxvY2suZ2V0KCkpOworICAg
ICAgICBpZiAoIWN1cnJlbnRCbG9jay5pc0Fub255bW91c0Jsb2NrKCkpIHsKKyAgICAgICAgICAg
IG9sZENvbnQgPSBjdXJyZW50QmxvY2suY29udGludWF0aW9uKCk7CisgICAgICAgICAgICBjdXJy
ZW50QmxvY2suc2V0Q29udGludWF0aW9uKGNsb25lQmxvY2suZ2V0KCkpOwogICAgICAgICAgICAg
Y2xvbmVCbG9jay0+c2V0Q29udGludWF0aW9uKG9sZENvbnQpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gTm93IHdlIG5lZWQgdG8gdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIHN0YXJ0aW5nIGZy
b20gdGhlIGZpcnN0IGNoaWxkCiAgICAgICAgIC8vICphZnRlciogY3VyckNoaWxkIGFuZCBhcHBl
bmQgdGhlbSBhbGwgdG8gdGhlIGNsb25lLgotICAgICAgICBibG9ja0N1cnItPm1vdmVDaGlsZHJl
blRvKGNsb25lQmxvY2suZ2V0KCksIGN1cnJDaGlsZE5leHRTaWJsaW5nLCAwLCB0cnVlKTsKKyAg
ICAgICAgY3VycmVudEJsb2NrLm1vdmVDaGlsZHJlblRvKGNsb25lQmxvY2suZ2V0KCksIGN1cnJD
aGlsZE5leHRTaWJsaW5nLCAwLCB0cnVlKTsKIAogICAgICAgICAvLyBLZWVwIHdhbGtpbmcgdXAg
dGhlIGNoYWluLgotICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyOworICAgICAgICBjdXJyQ2hpbGQg
PSBjdXJyZW50OwogICAgICAgICBjdXJyQ2hpbGROZXh0U2libGluZyA9IGN1cnJDaGlsZC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgY3VyciA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY3Vyci0+
cGFyZW50KCkpOwogICAgIH0KIAogICAgIC8vIE5vdyB3ZSBhcmUgYXQgdGhlIGNvbHVtbnMgYmxv
Y2sgbGV2ZWwuIFdlIG5lZWQgdG8gcHV0IHRoZSBjbG9uZSBpbnRvIHRoZSB0b0Jsb2NrLgpAQCAt
NTU5LDcgKzU1Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdDb250aW51
YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqCiAgICAgICAgIFJlbmRlck9i
amVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2li
bGluZygpIDogbGFzdENoaWxkKCk7CiAKICAgICAgICAgaWYgKGFmdGVyQ2hpbGQgJiYgYWZ0ZXJD
aGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlckJsb2NrKGFm
dGVyQ2hpbGQpLT5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKmFmdGVyQ2hpbGQpLmFkZENoaWxkKG5ld0NoaWxkKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC01NzYsOCArNTc0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmoKIAogICAgIFJlbmRlckJveDo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsK
ICAKLSAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIHBhcmVudCgpICYmIGlzQW5vbnltb3Vz
QmxvY2soKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICB0b1JlbmRlckJs
b2NrKHBhcmVudCgpKS0+cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlzKTsKKyAgICBp
ZiAobWFkZUJveGVzTm9uSW5saW5lICYmIGlzPFJlbmRlckJsb2NrPihwYXJlbnQoKSkgJiYgaXNB
bm9ueW1vdXNCbG9jaygpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgp
KS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMpOwogICAgIC8vIHRoaXMgb2JqZWN0
IG1heSBiZSBkZWFkIGhlcmUKIH0KIApAQCAtNzIyLDExICs3MjAsMTEgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayogY2hpbGQpCiAg
ICAgY2hpbGQtPmRlc3Ryb3koKTsKIH0KIAotc3RhdGljIGJvb2wgY2FuTWVyZ2VBbm9ueW1vdXNC
bG9jayhSZW5kZXJCbG9jayogYW5vbnltb3VzQmxvY2spCitzdGF0aWMgYm9vbCBjYW5NZXJnZUFu
b255bW91c0Jsb2NrKFJlbmRlckJsb2NrJiBhbm9ueW1vdXNCbG9jaykKIHsKLSAgICBpZiAoYW5v
bnltb3VzQmxvY2stPmJlaW5nRGVzdHJveWVkKCkgfHwgYW5vbnltb3VzQmxvY2stPmNvbnRpbnVh
dGlvbigpKQorICAgIGlmIChhbm9ueW1vdXNCbG9jay5iZWluZ0Rlc3Ryb3llZCgpIHx8IGFub255
bW91c0Jsb2NrLmNvbnRpbnVhdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGFub255bW91c0Jsb2NrLT5pc1J1YnlSdW4oKSB8fCBhbm9ueW1vdXNCbG9jay0+aXNSdWJ5QmFz
ZSgpKQorICAgIGlmIChhbm9ueW1vdXNCbG9jay5pc1J1YnlSdW4oKSB8fCBhbm9ueW1vdXNCbG9j
ay5pc1J1YnlCYXNlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTczOSwyNCArNzM3LDI0IEBAIHN0YXRpYyBib29sIGNhbk1lcmdlQ29udGlndW91c0Fu
b255bW91c0Jsb2NrcyhSZW5kZXJPYmplY3QmIG9sZENoaWxkLCBSZW5kZXJPYmplCiAgICAgaWYg
KHByZXZpb3VzKSB7CiAgICAgICAgIGlmICghcHJldmlvdXMtPmlzQW5vbnltb3VzQmxvY2soKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIHByZXZpb3Vz
QW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2NrKHByZXZpb3VzKTsKKyAgICAgICAgUmVuZGVy
QmxvY2smIHByZXZpb3VzQW5vbnltb3VzQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBy
ZXZpb3VzKTsKICAgICAgICAgaWYgKCFjYW5NZXJnZUFub255bW91c0Jsb2NrKHByZXZpb3VzQW5v
bnltb3VzQmxvY2spKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAo
bmV4dCkgewogICAgICAgICBpZiAoIW5leHQtPmlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRBbm9ueW1vdXNCbG9j
ayA9IHRvUmVuZGVyQmxvY2sobmV4dCk7CisgICAgICAgIFJlbmRlckJsb2NrJiBuZXh0QW5vbnlt
b3VzQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm5leHQpOwogICAgICAgICBpZiAoIWNh
bk1lcmdlQW5vbnltb3VzQmxvY2sobmV4dEFub255bW91c0Jsb2NrKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVy
QmxvY2sqIGNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGls
ZChSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJCbG9jayogY2hpbGQpCiB7Ci0gICAgcGFyZW50
LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICBwYXJlbnQtPnNldENo
aWxkcmVuSW5saW5lKGNoaWxkLT5jaGlsZHJlbklubGluZSgpKTsKKyAgICBwYXJlbnQuc2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcGFyZW50LnNldENoaWxkcmVuSW5s
aW5lKGNoaWxkLT5jaGlsZHJlbklubGluZSgpKTsKICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJs
aW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBjaGls
ZEZsb3dUaHJlYWQgPSBjaGlsZC0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwpAQCAtNzY0
LDggKzc2Miw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQo
UmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoCiAgICAgaWYgKGNoaWxkRmxvd1Ro
cmVhZCAmJiBjaGlsZEZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCiAgICAg
ICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKGNoaWxkRmxvd1RocmVhZCktPnJlbW92ZUZsb3dD
aGlsZEluZm8oY2hpbGQpOwogCi0gICAgcGFyZW50LT5yZW1vdmVDaGlsZEludGVybmFsKCpjaGls
ZCwgY2hpbGQtPmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJl
bik7Ci0gICAgY2hpbGQtPm1vdmVBbGxDaGlsZHJlblRvKHBhcmVudCwgbmV4dFNpYmxpbmcsIGNo
aWxkLT5oYXNMYXllcigpKTsKKyAgICBwYXJlbnQucmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY2hpbGQs
IGNoaWxkLT5oYXNMYXllcigpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4p
OworICAgIGNoaWxkLT5tb3ZlQWxsQ2hpbGRyZW5UbygmcGFyZW50LCBuZXh0U2libGluZywgY2hp
bGQtPmhhc0xheWVyKCkpOwogICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGlu
ZXMgYW5kIG51a2UgaXQuCiAgICAgY2hpbGQtPmRlbGV0ZUxpbmVzKCk7CiAgICAgY2hpbGQtPmRl
c3Ryb3koKTsKQEAgLTc4Niw0NCArNzg0LDQ0IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6
OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCiAgICAgYm9vbCBjYW5NZXJnZUFu
b255bW91c0Jsb2NrcyA9IGNhbk1lcmdlQ29udGlndW91c0Fub255bW91c0Jsb2NrcyhvbGRDaGls
ZCwgcHJldiwgbmV4dCk7CiAgICAgaWYgKGNhbk1lcmdlQW5vbnltb3VzQmxvY2tzICYmIHByZXYg
JiYgbmV4dCkgewogICAgICAgICBwcmV2LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRCbG9jayA9IHRvUmVuZGVyQmxvY2sobmV4
dCk7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBwcmV2QmxvY2sgPSB0b1JlbmRlckJsb2NrKHByZXYp
OworICAgICAgICBSZW5kZXJCbG9jayYgbmV4dEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KCpuZXh0KTsKKyAgICAgICAgUmVuZGVyQmxvY2smIHByZXZCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqcHJldik7CiAgICAgICAgCiAgICAgICAgIGlmIChwcmV2LT5jaGlsZHJlbklubGlu
ZSgpICE9IG5leHQtPmNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2Nr
KiBpbmxpbmVDaGlsZHJlbkJsb2NrID0gcHJldi0+Y2hpbGRyZW5JbmxpbmUoKSA/IHByZXZCbG9j
ayA6IG5leHRCbG9jazsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9ja0NoaWxkcmVuQmxv
Y2sgPSBwcmV2LT5jaGlsZHJlbklubGluZSgpID8gbmV4dEJsb2NrIDogcHJldkJsb2NrOworICAg
ICAgICAgICAgUmVuZGVyQmxvY2smIGlubGluZUNoaWxkcmVuQmxvY2sgPSBwcmV2LT5jaGlsZHJl
bklubGluZSgpID8gcHJldkJsb2NrIDogbmV4dEJsb2NrOworICAgICAgICAgICAgUmVuZGVyQmxv
Y2smIGJsb2NrQ2hpbGRyZW5CbG9jayA9IHByZXYtPmNoaWxkcmVuSW5saW5lKCkgPyBuZXh0Qmxv
Y2sgOiBwcmV2QmxvY2s7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFBsYWNlIHRoZSBp
bmxpbmUgY2hpbGRyZW4gYmxvY2sgaW5zaWRlIG9mIHRoZSBibG9jayBjaGlsZHJlbiBibG9jayBp
bnN0ZWFkIG9mIGRlbGV0aW5nIGl0LgogICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gcmV1c2Ug
aXQsIHdlIGhhdmUgdG8gcmVzZXQgaXQgdG8ganVzdCBiZSBhIGdlbmVyaWMgYW5vbnltb3VzIGJs
b2NrLiAgTWFrZSBzdXJlCiAgICAgICAgICAgICAvLyB0byBjbGVhciBvdXQgaW5oZXJpdGVkIGNv
bHVtbiBwcm9wZXJ0aWVzIGJ5IGp1c3QgbWFraW5nIGEgbmV3IHN0eWxlLCBhbmQgdG8gYWxzbyBj
bGVhciB0aGUKICAgICAgICAgICAgIC8vIGNvbHVtbiBzcGFuIGZsYWcgaWYgaXQgaXMgc2V0Lgot
ICAgICAgICAgICAgQVNTRVJUKCFpbmxpbmVDaGlsZHJlbkJsb2NrLT5jb250aW51YXRpb24oKSk7
CisgICAgICAgICAgICBBU1NFUlQoIWlubGluZUNoaWxkcmVuQmxvY2suY29udGludWF0aW9uKCkp
OwogICAgICAgICAgICAgLy8gQ2FjaGUgdGhpcyB2YWx1ZSBhcyBpdCBtaWdodCBnZXQgY2hhbmdl
ZCBpbiBzZXRTdHlsZSgpIGNhbGwuCi0gICAgICAgICAgICBib29sIGlubGluZUNoaWxkcmVuQmxv
Y2tIYXNMYXllciA9IGlubGluZUNoaWxkcmVuQmxvY2stPmhhc0xheWVyKCk7Ci0gICAgICAgICAg
ICBpbmxpbmVDaGlsZHJlbkJsb2NrLT5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnlt
b3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgQkxPQ0spKTsKLSAgICAgICAgICAgIHJlbW92
ZUNoaWxkSW50ZXJuYWwoKmlubGluZUNoaWxkcmVuQmxvY2ssIGlubGluZUNoaWxkcmVuQmxvY2tI
YXNMYXllciA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAg
ICAgIGJvb2wgaW5saW5lQ2hpbGRyZW5CbG9ja0hhc0xheWVyID0gaW5saW5lQ2hpbGRyZW5CbG9j
ay5oYXNMYXllcigpOworICAgICAgICAgICAgaW5saW5lQ2hpbGRyZW5CbG9jay5zZXRTdHlsZShS
ZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgQkxP
Q0spKTsKKyAgICAgICAgICAgIHJlbW92ZUNoaWxkSW50ZXJuYWwoaW5saW5lQ2hpbGRyZW5CbG9j
aywgaW5saW5lQ2hpbGRyZW5CbG9ja0hhc0xheWVyID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90
aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBOb3cganVzdCBwdXQg
dGhlIGlubGluZUNoaWxkcmVuQmxvY2sgaW5zaWRlIHRoZSBibG9ja0NoaWxkcmVuQmxvY2suCi0g
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gcHJldiA9PSBpbmxpbmVDaGls
ZHJlbkJsb2NrID8gYmxvY2tDaGlsZHJlbkJsb2NrLT5maXJzdENoaWxkKCkgOiBudWxscHRyOwot
ICAgICAgICAgICAgYmxvY2tDaGlsZHJlbkJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKGlubGlu
ZUNoaWxkcmVuQmxvY2ssIGJlZm9yZUNoaWxkLAotICAgICAgICAgICAgICAgIChpbmxpbmVDaGls
ZHJlbkJsb2NrSGFzTGF5ZXIgfHwgYmxvY2tDaGlsZHJlbkJsb2NrLT5oYXNMYXllcigpKSA/IE5v
dGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQgPSBwcmV2ID09ICZpbmxpbmVDaGlsZHJlbkJsb2NrID8gYmxvY2tD
aGlsZHJlbkJsb2NrLmZpcnN0Q2hpbGQoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBibG9ja0No
aWxkcmVuQmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbCgmaW5saW5lQ2hpbGRyZW5CbG9jaywgYmVm
b3JlQ2hpbGQsCisgICAgICAgICAgICAgICAgKGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciB8
fCBibG9ja0NoaWxkcmVuQmxvY2suaGFzTGF5ZXIoKSkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnRO
b3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBuZXh0LT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gaW5saW5lQ2hpbGRy
ZW5CbG9jayBnb3QgcmVwYXJlbnRlZCB0byBibG9ja0NoaWxkcmVuQmxvY2ssIHNvIGl0IGlzIG5v
IGxvbmdlciBhIGNoaWxkCiAgICAgICAgICAgICAvLyBvZiAidGhpcyIuIHdlIG51bGwgb3V0IHBy
ZXYgb3IgbmV4dCBzbyB0aGF0IGlzIG5vdCB1c2VkIGxhdGVyIGluIHRoZSBmdW5jdGlvbi4KLSAg
ICAgICAgICAgIGlmIChpbmxpbmVDaGlsZHJlbkJsb2NrID09IHByZXZCbG9jaykKLSAgICAgICAg
ICAgICAgICBwcmV2ID0gMDsKKyAgICAgICAgICAgIGlmICgmaW5saW5lQ2hpbGRyZW5CbG9jayA9
PSAmcHJldkJsb2NrKQorICAgICAgICAgICAgICAgIHByZXYgPSBudWxscHRyOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG5leHQgPSAwOworICAgICAgICAgICAgICAgIG5leHQg
PSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGFrZSBhbGwgdGhl
IGNoaWxkcmVuIG91dCBvZiB0aGUgfG5leHR8IGJsb2NrIGFuZCBwdXQgdGhlbSBpbgogICAgICAg
ICAgICAgLy8gdGhlIHxwcmV2fCBibG9jay4KLSAgICAgICAgICAgIG5leHRCbG9jay0+bW92ZUFs
bENoaWxkcmVuSW5jbHVkaW5nRmxvYXRzVG8ocHJldkJsb2NrLCBuZXh0QmxvY2stPmhhc0xheWVy
KCkgfHwgcHJldkJsb2NrLT5oYXNMYXllcigpKTsKKyAgICAgICAgICAgIG5leHRCbG9jay5tb3Zl
QWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbygmcHJldkJsb2NrLCBuZXh0QmxvY2suaGFzTGF5
ZXIoKSB8fCBwcmV2QmxvY2suaGFzTGF5ZXIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGluZXMgYW5kIG51a2UgaXQuCi0gICAg
ICAgICAgICBuZXh0QmxvY2stPmRlbGV0ZUxpbmVzKCk7Ci0gICAgICAgICAgICBuZXh0QmxvY2st
PmRlc3Ryb3koKTsKLSAgICAgICAgICAgIG5leHQgPSAwOworICAgICAgICAgICAgbmV4dEJsb2Nr
LmRlbGV0ZUxpbmVzKCk7CisgICAgICAgICAgICBuZXh0QmxvY2suZGVzdHJveSgpOworICAgICAg
ICAgICAgbmV4dCA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTgzNiwxNyArODM0
LDE3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVj
dCYgb2xkQ2hpbGQpCiAgICAgICAgIC8vIFRoZSByZW1vdmFsIGhhcyBrbm9ja2VkIHVzIGRvd24g
dG8gY29udGFpbmluZyBvbmx5IGEgc2luZ2xlIGFub255bW91cwogICAgICAgICAvLyBib3guICBX
ZSBjYW4gZ28gYWhlYWQgYW5kIHB1bGwgdGhlIGNvbnRlbnQgcmlnaHQgYmFjayB1cCBpbnRvIG91
cgogICAgICAgICAvLyBib3guCi0gICAgICAgIGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQodGhp
cywgdG9SZW5kZXJCbG9jayhjaGlsZCkpOworICAgICAgICBjb2xsYXBzZUFub255bW91c0JveENo
aWxkKCp0aGlzLCBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpKTsKICAgICAgICAgbmV4dFNp
YmxpbmcgPSBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoKChwcmV2ICYmIHByZXYtPmlzQW5vbnlt
b3VzQmxvY2soKSkgfHwgKG5leHQgJiYgbmV4dC0+aXNBbm9ueW1vdXNCbG9jaygpKSkgJiYgY2Fu
Q29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkpIHsKICAgICAgICAgLy8gSXQncyBwb3NzaWJs
ZSB0aGF0IHRoZSByZW1vdmFsIGhhcyBrbm9ja2VkIHVzIGRvd24gdG8gYSBzaW5nbGUgYW5vbnlt
b3VzCiAgICAgICAgIC8vIGJsb2NrIHdpdGggcHNldWRvLXN0eWxlIGVsZW1lbnQgc2libGluZ3Mg
KGUuZy4gZmlyc3QtbGV0dGVyKS4gSWYgdGhlc2UKICAgICAgICAgLy8gYXJlIGZsb2F0aW5nLCB0
aGVuIHdlIG5lZWQgdG8gcHVsbCB0aGUgY29udGVudCB1cCBhbHNvLgotICAgICAgICBSZW5kZXJC
bG9jayogYW5vbkJsb2NrID0gdG9SZW5kZXJCbG9jaygocHJldiAmJiBwcmV2LT5pc0Fub255bW91
c0Jsb2NrKCkpID8gcHJldiA6IG5leHQpOworICAgICAgICBSZW5kZXJCbG9jayogYW5vbkJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KChwcmV2ICYmIHByZXYtPmlzQW5vbnltb3VzQmxvY2so
KSkgPyBwcmV2IDogbmV4dCk7CiAgICAgICAgIGlmICgoYW5vbkJsb2NrLT5wcmV2aW91c1NpYmxp
bmcoKSB8fCBhbm9uQmxvY2stPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAmJiAoIWFub25C
bG9jay0+cHJldmlvdXNTaWJsaW5nKCkgfHwgKGFub25CbG9jay0+cHJldmlvdXNTaWJsaW5nKCkt
PnN0eWxlKCkuc3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8gJiYgYW5vbkJsb2NrLT5wcmV2aW91c1Np
YmxpbmcoKS0+aXNGbG9hdGluZygpICYmICFhbm9uQmxvY2stPnByZXZpb3VzU2libGluZygpLT5w
cmV2aW91c1NpYmxpbmcoKSkpCiAgICAgICAgICAgICAmJiAoIWFub25CbG9jay0+bmV4dFNpYmxp
bmcoKSB8fCAoYW5vbkJsb2NrLT5uZXh0U2libGluZygpLT5zdHlsZSgpLnN0eWxlVHlwZSgpICE9
IE5PUFNFVURPICYmIGFub25CbG9jay0+bmV4dFNpYmxpbmcoKS0+aXNGbG9hdGluZygpICYmICFh
bm9uQmxvY2stPm5leHRTaWJsaW5nKCktPm5leHRTaWJsaW5nKCkpKSkgewotICAgICAgICAgICAg
Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCh0aGlzLCBhbm9uQmxvY2spOworICAgICAgICAgICAg
Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCgqdGhpcywgYW5vbkJsb2NrKTsKICAgICAgICAgICAg
IG5leHRTaWJsaW5nID0gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KQEAgLTg2NCwyMyArODYy
LDIzIEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVj
dCYgb2xkQ2hpbGQpCiAgICAgICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5v
bnltb3VzID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY29udGFpbmlu
Z0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMgJiYgY29udGFpbmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1v
dXMtPmlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2tJ
Z25vcmluZ0Fub255bW91cyA9IGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5vbnltb3VzLT5jb250
YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gdGhp
czsgY3VycjsgY3VyciA9IGN1cnItPnByZXZpb3VzSW5QcmVPcmRlcihjb250YWluaW5nQmxvY2tJ
Z25vcmluZ0Fub255bW91cykpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3Vyci0+dmlydHVhbENv
bnRpbnVhdGlvbigpICE9IHRoaXMpCisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vy
cmVudCA9IHRoaXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wcmV2aW91c0luUHJlT3Jk
ZXIoY29udGFpbmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnQtPnZpcnR1YWxDb250aW51YXRpb24oKSAhPSB0aGlzKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIC8vIEZvdW5kIG91ciBwcmV2aW91
cyBjb250aW51YXRpb24uIFdlIGp1c3QgbmVlZCB0byBwb2ludCBpdCB0bwogICAgICAgICAgICAg
ICAgIC8vIHx0aGlzfCdzIG5leHQgY29udGludWF0aW9uLgogICAgICAgICAgICAgICAgIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHRvUmVuZGVySW5saW5lKGN1cnIpLT5zZXRDb250aW51YXRpb24obmV4dENvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJCbG9jaygpKQotICAg
ICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGN1cnIpLT5zZXRDb250aW51YXRpb24obmV4
dENvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1
cnJlbnQpKQorICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJy
ZW50KS5zZXRDb250aW51YXRpb24obmV4dENvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5zZXRDb250aW51YXRpb24obmV4dENvbnRp
bnVhdGlvbik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgc2V0Q29udGludWF0aW9uKDApOworICAgICAgICAgICAgc2V0Q29udGlu
dWF0aW9uKG51bGxwdHIpOwogICAgICAgICAgICAgZGVzdHJveSgpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTc0MSwxMSArMTczOSwxMSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmJsb2Nr
RWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGN1cnJlbnRDb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKICAgICBpZiAoIWN1cnJlbnRD
b250aW51YXRpb24gfHwgY3VycmVudENvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgUmVuZGVyQmxvY2sqIG5leHRDb250aW51YXRpb24gPSB0b1JlbmRlckJs
b2NrKGN1cnJlbnRDb250aW51YXRpb24pOwotICAgIGlmIChuZXh0Q29udGludWF0aW9uLT5pc0Fu
b255bW91c0Jsb2NrKCkpCi0gICAgICAgIHJldHVybiBuZXh0Q29udGludWF0aW9uLT5ibG9ja0Vs
ZW1lbnRDb250aW51YXRpb24oKTsKLSAgICByZXR1cm4gbmV4dENvbnRpbnVhdGlvbjsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVuZGVyQmxvY2smIG5leHRDb250aW51YXRpb24gPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRDb250aW51YXRpb24pOworICAgIGlmIChuZXh0
Q29udGludWF0aW9uLmlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIG5leHRDb250
aW51YXRpb24uYmxvY2tFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgcmV0dXJuICZuZXh0Q29u
dGludWF0aW9uOwogfQogICAgIAogc3RhdGljIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCog
Y29udGludWF0aW9uT3V0bGluZVRhYmxlKCkKQEAgLTIwNDIsNyArMjA0MCw3IEBAIEdhcFJlY3Rz
IFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywg
Y29uc3QgTGF5b3V0UG9pCiAgICAgICAgICAgICBsYXN0TG9naWNhbFJpZ2h0ID0gbG9naWNhbFJp
Z2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+bG9naWNhbEJvdHRvbSgpLCBjYWNo
ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKSB7CiAg
ICAgICAgICAgICAvLyBXZSBtdXN0IGJlIGEgYmxvY2sgdGhhdCBoYXMgc29tZSBzZWxlY3RlZCBv
YmplY3QgaW5zaWRlIGl0LiAgR28gYWhlYWQgYW5kIHJlY3VyLgotICAgICAgICAgICAgcmVzdWx0
LnVuaXRlKHRvUmVuZGVyQmxvY2soY3VyciktPnNlbGVjdGlvbkdhcHMocm9vdEJsb2NrLCByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRTaXplKG9mZnNldEZyb21Sb290QmxvY2sud2lk
dGgoKSArIGN1cnItPngoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKSArIGN1cnItPnko
KSksIAorICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3Vy
cikuc2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExh
eW91dFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+eCgpLCBvZmZzZXRG
cm9tUm9vdEJsb2NrLmhlaWdodCgpICsgY3Vyci0+eSgpKSwKICAgICAgICAgICAgICAgICBsYXN0
TG9naWNhbFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBjaGlsZENhY2hl
LCBwYWludEluZm8pKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxNjIsMjkgKzIxNjAsMjkgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRl
ckJsb2NrJiByb290QmxvY2ssIExheW8KIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6YmxvY2tC
ZWZvcmVXaXRoaW5TZWxlY3Rpb25Sb290KExheW91dFNpemUmIG9mZnNldCkgY29uc3QKIHsKICAg
ICBpZiAoaXNTZWxlY3Rpb25Sb290KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IFJlbmRlckVsZW1lbnQqIG9iamVjdCA9IHRoaXM7CiAg
ICAgUmVuZGVyT2JqZWN0KiBzaWJsaW5nOwogICAgIGRvIHsKICAgICAgICAgc2libGluZyA9IG9i
amVjdC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYmICghc2li
bGluZy0+aXNSZW5kZXJCbG9jaygpIHx8IHRvUmVuZGVyQmxvY2soc2libGluZyktPmlzU2VsZWN0
aW9uUm9vdCgpKSkKKyAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgKCFpczxSZW5kZXJCbG9jaz4o
KnNpYmxpbmcpIHx8IGRvd25jYXN0PFJlbmRlckJsb2NrPigqc2libGluZykuaXNTZWxlY3Rpb25S
b290KCkpKQogICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzU2libGluZygp
OwogCi0gICAgICAgIG9mZnNldCAtPSBMYXlvdXRTaXplKHRvUmVuZGVyQmxvY2sob2JqZWN0KS0+
bG9naWNhbExlZnQoKSwgdG9SZW5kZXJCbG9jayhvYmplY3QpLT5sb2dpY2FsVG9wKCkpOworICAg
ICAgICBvZmZzZXQgLT0gTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm9iamVjdCku
bG9naWNhbExlZnQoKSwgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvYmplY3QpLmxvZ2ljYWxUb3Ao
KSk7CiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+cGFyZW50KCk7Ci0gICAgfSB3aGlsZSAoIXNp
YmxpbmcgJiYgb2JqZWN0ICYmIG9iamVjdC0+aXNSZW5kZXJCbG9jaygpICYmICF0b1JlbmRlckJs
b2NrKG9iamVjdCktPmlzU2VsZWN0aW9uUm9vdCgpKTsKKyAgICB9IHdoaWxlICghc2libGluZyAm
JiBpczxSZW5kZXJCbG9jaz4ob2JqZWN0KSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvYmpl
Y3QpLmlzU2VsZWN0aW9uUm9vdCgpKTsKIAogICAgIGlmICghc2libGluZykKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVuZGVyQmxvY2sqIGJlZm9y
ZUJsb2NrID0gdG9SZW5kZXJCbG9jayhzaWJsaW5nKTsKKyAgICBSZW5kZXJCbG9jayogYmVmb3Jl
QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oc2libGluZyk7CiAKICAgICBvZmZzZXQgKz0g
TGF5b3V0U2l6ZShiZWZvcmVCbG9jay0+bG9naWNhbExlZnQoKSwgYmVmb3JlQmxvY2stPmxvZ2lj
YWxUb3AoKSk7CiAKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gYmVmb3JlQmxvY2stPmxhc3RD
aGlsZCgpOwotICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7Ci0g
ICAgICAgIGJlZm9yZUJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7CisgICAgd2hpbGUgKGlz
PFJlbmRlckJsb2NrPihjaGlsZCkpIHsKKyAgICAgICAgYmVmb3JlQmxvY2sgPSBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oY2hpbGQpOwogICAgICAgICBvZmZzZXQgKz0gTGF5b3V0U2l6ZShiZWZvcmVC
bG9jay0+bG9naWNhbExlZnQoKSwgYmVmb3JlQmxvY2stPmxvZ2ljYWxUb3AoKSk7CiAgICAgICAg
IGNoaWxkID0gYmVmb3JlQmxvY2stPmxhc3RDaGlsZCgpOwogICAgIH0KQEAgLTI2ODIsNyArMjY4
MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoaWxkSGl0VGVzdENhbmRpZGF0ZShjb25zdCBS
ZW5kZXJCb3gmIGJveCwgY29uc3QgUmVuZGVyUmVnCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIXJlZ2lvbikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgUmVuZGVyQmxv
Y2smIGJsb2NrID0gYm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soYm94KSA6ICpi
b3guY29udGFpbmluZ0Jsb2NrKCk7CisgICAgY29uc3QgUmVuZGVyQmxvY2smIGJsb2NrID0gaXM8
UmVuZGVyQmxvY2s+KGJveCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oYm94KSA6ICpib3guY29u
dGFpbmluZ0Jsb2NrKCk7CiAgICAgcmV0dXJuIGJsb2NrLnJlZ2lvbkF0QmxvY2tPZmZzZXQocG9p
bnQueSgpKSA9PSByZWdpb247CiB9CiAKQEAgLTMwNDIsMTEgKzMwNDAsMTEgQEAgUmVuZGVyQmxv
Y2sqIFJlbmRlckJsb2NrOjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiAgICAgICAgIGlmIChmaXJz
dExpbmVCbG9jay0+aXNSZXBsYWNlZCgpIHx8IGZpcnN0TGluZUJsb2NrLT5pc0Zsb2F0aW5nKCkK
ICAgICAgICAgICAgIHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9jay0+Zmlyc3RDaGlsZCgp
ICE9IGZpcnN0TGluZUJsb2NrIHx8ICFpc1JlbmRlckJsb2NrRmxvd09yUmVuZGVyQnV0dG9uKCpw
YXJlbnRCbG9jaykpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZmlyc3RMaW5lQmxvY2sg
PSB0b1JlbmRlckJsb2NrKHBhcmVudEJsb2NrKTsKKyAgICAgICAgZmlyc3RMaW5lQmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4ocGFyZW50QmxvY2spOwogICAgIH0gCiAgICAgCiAgICAgaWYg
KCFoYXNQc2V1ZG8pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAKICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CkBAIC0zMTI1LDExICszMTIzLDEx
IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIGZpbmRGaXJzdExldHRlckJsb2NrKFJlbmRl
ckJsb2NrKiBzdGFydCkKICAgICAgICAgUmVuZGVyRWxlbWVudCogcGFyZW50QmxvY2sgPSBmaXJz
dExldHRlckJsb2NrLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKGZpcnN0TGV0dGVyQmxvY2stPmlz
UmVwbGFjZWQoKSB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hpbGQoKSAh
PSBmaXJzdExldHRlckJsb2NrCiAgICAgICAgICAgICB8fCAhaXNSZW5kZXJCbG9ja0Zsb3dPclJl
bmRlckJ1dHRvbigqcGFyZW50QmxvY2spKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IGZpcnN0TGV0dGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudEJsb2NrKTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICBmaXJzdExldHRlckJsb2NrID0gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KHBhcmVudEJsb2NrKTsKICAgICB9IAogCi0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVy
U3R5bGUoUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJPYmplY3QqIGN1cnJl
bnRDaGlsZCkKQEAgLTM0MjEsOCArMzQxOSw4IEBAIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJC
bG9jazo6b3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNvbnN0CiB2b2lkIFJlbmRlckJsb2NrOjpj
aGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqKQogewogICAgIG1ha2VDaGlsZHJlbk5v
bklubGluZSgpOwotICAgIGlmIChpc0Fub255bW91c0Jsb2NrKCkgJiYgcGFyZW50KCkgJiYgcGFy
ZW50KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgdG9SZW5kZXJCbG9jayhwYXJlbnQoKSkt
PnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CisgICAgaWYgKGlzQW5vbnltb3Vz
QmxvY2soKSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpKQorICAgICAgICBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMp
OwogICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVhZCBoZXJlCiB9CiAKQEAgLTM2NzEsMTIgKzM2Njks
MTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmsoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3QKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSBzYW1lIGRpcmVj
dGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBpdHMKICAgICAvLyBt
YXJnaW4gcXVpcmsuCiAgICAgaWYgKCFjaGlsZC5pc1dyaXRpbmdNb2RlUm9vdCgpKQotICAgICAg
ICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkuaGFz
TWFyZ2luQmVmb3JlUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmso
KTsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oY2hpbGQpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhh
c01hcmdpbkJlZm9yZVF1aXJrKCk7CiAgICAgCiAgICAgLy8gVGhlIGNoaWxkIGhhcyBhIGRpZmZl
cmVudCBkaXJlY3Rpb25hbGl0eS4gSWYgdGhlIGNoaWxkIGlzIHBhcmFsbGVsLCB0aGVuIGl0J3Mg
anVzdAogICAgIC8vIGZsaXBwZWQgcmVsYXRpdmUgdG8gdXMuIFdlIGNhbiB1c2UgdGhlIG9wcG9z
aXRlIGVkZ2UuCiAgICAgaWYgKGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLmlzUmVuZGVyQmxv
Y2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA6IGNoaWxk
LnN0eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpOworICAgICAgICByZXR1cm4gaXM8UmVuZGVy
QmxvY2s+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFzTWFyZ2luQWZ0
ZXJRdWlyaygpIDogY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCk7CiAgICAgCiAg
ICAgLy8gVGhlIGNoaWxkIGlzIHBlcnBlbmRpY3VsYXIgdG8gdXMgYW5kIGJveCBzaWRlcyBhcmUg
bmV2ZXIgcXVpcmt5IGluIGh0bWwuY3NzLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQK
ICAgICAvLyB3aGV0aGVyIG9yIG5vdCBhdXRob3JzIHNwZWNpZmllZCBxdWlya3kgZW1zLCBzaW5j
ZSB0aGV5J3JlIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KQEAgLTM2ODgsMTIgKzM2ODYsMTIg
QEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzTWFyZ2luQWZ0ZXJRdWlyayhjb25zdCBSZW5kZXJCb3gm
IGNoaWxkKSBjb25zdAogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHNhbWUgZGlyZWN0aW9u
YWxpdHkgYXMgd2UgZG8sIHRoZW4gd2UgY2FuIGp1c3QgcmV0dXJuIGl0cwogICAgIC8vIG1hcmdp
biBxdWlyay4KICAgICBpZiAoIWNoaWxkLmlzV3JpdGluZ01vZGVSb290KCkpCi0gICAgICAgIHJl
dHVybiBjaGlsZC5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKS5oYXNNYXJn
aW5BZnRlclF1aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhhc01hcmdpbkFmdGVyUXVpcmsoKTsKKyAg
ICAgICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyBkb3duY2FzdDxSZW5kZXJCbG9j
az4oY2hpbGQpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2lu
QWZ0ZXJRdWlyaygpOwogICAgIAogICAgIC8vIFRoZSBjaGlsZCBoYXMgYSBkaWZmZXJlbnQgZGly
ZWN0aW9uYWxpdHkuIElmIHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdzIGp1c3QKICAg
ICAvLyBmbGlwcGVkIHJlbGF0aXZlIHRvIHVzLiBXZSBjYW4gdXNlIHRoZSBvcHBvc2l0ZSBlZGdl
LgogICAgIGlmIChjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJsb2NrKCkgPyB0
b1JlbmRlckJsb2NrKGNoaWxkKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hpbGQuc3R5bGUo
KS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpOworICAgICAgICByZXR1cm4gaXM8UmVuZGVyQmxvY2s+
KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFzTWFyZ2luQmVmb3JlUXVp
cmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKTsKICAgICAKICAgICAv
LyBUaGUgY2hpbGQgaXMgcGVycGVuZGljdWxhciB0byB1cyBhbmQgYm94IHNpZGVzIGFyZSBuZXZl
ciBxdWlya3kgaW4gaHRtbC5jc3MsIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dAogICAg
IC8vIHdoZXRoZXIgb3Igbm90IGF1dGhvcnMgc3BlY2lmaWVkIHF1aXJreSBlbXMsIHNpbmNlIHRo
ZXkncmUgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAppbmRleCA2NDAwZGI2ZjU1OTI5NGE3Y2Y2MTE5YWY3MjRjOTdjYTAyN2YyNGQy
Li5hYTQyNWI3M2JjYjc3ZGViNDMzNWE5NmM1NWYwZWYwOGUyMWM2NjAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMTk1LDcgKzE5NSw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVy
QW5kRGlzcGxheShjb25zdCBSZW5kZXJPYmplY3QqLCBFRGlzcGxheSA9IEJMT0NLKTsKICAgICBS
ZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgZGlzcGxheSA9IEJMT0NL
KSBjb25zdCB7IHJldHVybiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXJBbmREaXNw
bGF5KHRoaXMsIGRpc3BsYXkpOyB9Ci0gICAgc3RhdGljIHZvaWQgY29sbGFwc2VBbm9ueW1vdXNC
b3hDaGlsZChSZW5kZXJCbG9jayogcGFyZW50LCBSZW5kZXJCbG9jayogY2hpbGQpOworICAgIHN0
YXRpYyB2b2lkIGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwg
UmVuZGVyQmxvY2sqIGNoaWxkKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyQm94KiBjcmVhdGVBbm9u
eW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3Qg
b3ZlcnJpZGU7CiAKQEAgLTUzMCw4ICs1MzAsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29s
IHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZzsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQ
RV9DQVNUUyhSZW5kZXJCbG9jaywgaXNSZW5kZXJCbG9jaygpKQotCiBMYXlvdXRVbml0IGJsb2Nr
RGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290QmxvY2spOwogTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25PZmZzZXQo
UmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RC
bG9jayk7CiBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5n
Qm91bmRhcmllcyhSZW5kZXJCbG9jayYsIFJlbmRlckJveCYsIGNvbnN0IExheW91dFBvaW50Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGQ4
NWJkODIyNjA1MmQzMjc5YThlODQxNjlkOWQ1OGQyOWI5MDdmMjMuLmZmOTZkNTE2OWUxY2Q3Mzk2
NjRmNDA2OTgxZmQ4MTQ3MmViNGE4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0xMjE5LDEwICsxMjE5LDEwIEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjptYXJnaW5CZWZvcmVFc3RpbWF0ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExh
eW91dFVuaXQmCiAgICAgLy8gTWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYmxvY2sgbWFyZ2lucyBu
b3cgZm9yIHRoZSBncmFuZGNoaWxkIGJveCBzbyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgY3VycmVu
dCB2YWx1ZXMuCiAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPm5lZWRzTGF5b3V0KCkpIHsKICAgICAg
ICAgZ3JhbmRjaGlsZEJveC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lucyh0aGlz
KTsKLSAgICAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPmlzUmVuZGVyQmxvY2soKSkgewotICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIGdyYW5kY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxvY2soZ3JhbmRj
aGlsZEJveCk7Ci0gICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01hcmdpbkJlZm9y
ZVF1aXJrKGdyYW5kY2hpbGRCb3gtPnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSk7Ci0g
ICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01hcmdpbkFmdGVyUXVpcmsoZ3JhbmRj
aGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOworICAgICAgICBpZiAoaXM8
UmVuZGVyQmxvY2s+KCpncmFuZGNoaWxkQm94KSkgeworICAgICAgICAgICAgUmVuZGVyQmxvY2sm
IGdyYW5kY2hpbGRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqZ3JhbmRjaGlsZEJveCk7
CisgICAgICAgICAgICBncmFuZGNoaWxkQmxvY2suc2V0SGFzTWFyZ2luQmVmb3JlUXVpcmsoZ3Jh
bmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKTsKKyAgICAgICAgICAg
IGdyYW5kY2hpbGRCbG9jay5zZXRIYXNNYXJnaW5BZnRlclF1aXJrKGdyYW5kY2hpbGRCb3gtPnN0
eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTI3
NCw4ICsxMjc0LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmVzdGltYXRlTG9naWNh
bFRvcFBvc2l0aW9uKFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IE0KICAgICAgICAgLy8gRm9yIHJl
cGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0
aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25l
LgogICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGls
ZChjaGlsZCwgbG9naWNhbFRvcEVzdGltYXRlKTsKICAgICAgICAgCi0gICAgICAgIGlmICghY2hp
bGQuc2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hpbGQuaXNSZW5kZXJCbG9jaygpKQotICAgICAgICAg
ICAgbG9naWNhbFRvcEVzdGltYXRlICs9IHRvUmVuZGVyQmxvY2soY2hpbGQpLnBhZ2luYXRpb25T
dHJ1dCgpOworICAgICAgICBpZiAoIWNoaWxkLnNlbGZOZWVkc0xheW91dCgpICYmIGlzPFJlbmRl
ckJsb2NrPihjaGlsZCkpCisgICAgICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUgKz0gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KGNoaWxkKS5wYWdpbmF0aW9uU3RydXQoKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gbG9naWNhbFRvcEVzdGltYXRlOwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gmIGNoaWxkLCBMYXlv
dXRVbml0IGxvZ2ljYWwKIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2Nr
Q2hpbGRGb3JQYWdpbmF0aW9uKExheW91dFVuaXQgbG9naWNhbFRvcEFmdGVyQ2xlYXIsIExheW91
dFVuaXQgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiwgUmVuZGVyQm94JiBjaGlsZCwgYm9vbCBh
dEJlZm9yZVNpZGVPZkJsb2NrKQogewotICAgIFJlbmRlckJsb2NrKiBjaGlsZFJlbmRlckJsb2Nr
ID0gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jaygmY2hpbGQpIDogbnVsbHB0
cjsKKyAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGlzPFJlbmRlckJsb2NrPihj
aGlsZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CiAKICAgICBp
ZiAoZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiAhPSBsb2dpY2FsVG9wQWZ0ZXJDbGVhcikgewog
ICAgICAgICAvLyBPdXIgZ3Vlc3MgcHJpb3IgdG8gcGFnaW5hdGlvbiBtb3ZlbWVudCB3YXMgd3Jv
bmcuIEJlZm9yZSB3ZSBhdHRlbXB0IHRvIHBhZ2luYXRlLCBsZXQncyB0cnkgYWdhaW4gYXQgdGhl
IG5ldwpAQCAtMjQ1Nyw3ICsyNDU3LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9u
TmV3RmxvYXRzKCkKICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgcGFnaW5hdGlvbiBz
dHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRvd24gZnVydGhlci4KICAgICAgICAgICAgIC8v
IE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hpbGQgY2FuJ3QgYWxzbyBoYXZlIGEgcGFnaW5h
dGlvbiBzdHJ1dCwgc28gdGhpcyBpcwogICAgICAgICAgICAgLy8gZXhjbHVzaXZlIHdpdGggdGhl
IGNhc2UgYWJvdmUuCi0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IGNoaWxk
Qm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soJmNoaWxkQm94KSA6IG51bGxwdHI7
CisgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IGlzPFJlbmRlckJsb2NrPihj
aGlsZEJveCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkQm94KSA6IG51bGxwdHI7CiAg
ICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQo
KSkgewogICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gY2hpbGRCbG9jay0+cGFnaW5h
dGlvblN0cnV0KCk7CiAgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0UGFnaW5hdGlvblN0
cnV0KDApOwpAQCAtMjcyOSwxNiArMjcyOSwxNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bWFy
a1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUpCiAg
ICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKIAogICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHRTaWJs
aW5nKCkpIHsKLSAgICAgICAgaWYgKCFuZXh0LT5pc1JlbmRlckJsb2NrRmxvdygpIHx8IG5leHQt
PmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCB0b1JlbmRlckJsb2NrKG5leHQp
LT5hdm9pZHNGbG9hdHMoKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+KCpuZXh0
KSB8fCBuZXh0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgZG93bmNhc3Q8
UmVuZGVyQmxvY2tGbG93PigqbmV4dCkuYXZvaWRzRmxvYXRzKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBSZW5kZXJCbG9ja0Zsb3cqIG5leHRCbG9jayA9IHRvUmVuZGVyQmxv
Y2tGbG93KG5leHQpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIG5leHRCbG9jayA9IGRvd25j
YXN0PFJlbmRlckJsb2NrRmxvdz4oKm5leHQpOwogICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFJl
bmRlckJveCYgZmxvYXRpbmdCb3ggPSAoKml0KS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlm
IChmbG9hdFRvUmVtb3ZlICYmICZmbG9hdGluZ0JveCAhPSBmbG9hdFRvUmVtb3ZlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5leHRCbG9jay0+Y29udGFpbnNG
bG9hdChmbG9hdGluZ0JveCkpCi0gICAgICAgICAgICAgICAgbmV4dEJsb2NrLT5tYXJrQWxsRGVz
Y2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCZmbG9hdGluZ0JveCk7CisgICAgICAgICAgICBp
ZiAobmV4dEJsb2NrLmNvbnRhaW5zRmxvYXQoZmxvYXRpbmdCb3gpKQorICAgICAgICAgICAgICAg
IG5leHRCbG9jay5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCZmbG9hdGlu
Z0JveCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IGI4MmU3NTY4MDRjM2JlZTEyYThi
MWU2NjY2MTI2YWM2YTM1MDQzZTguLjFhMzlkZTc3NGE0M2I4YWMzZmM3YTIxZTZmMDM5YTBjYmMw
ZTZkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCkBAIC0xODk0LDggKzE4OTQsOCBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6
cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5n
TwogCiAgICAgICAgICAgICBpZiAodXBkYXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChmbG9hdGlu
Z09iamVjdC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgZmxvYXRCb3guc2V0TmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGZsb2F0Qm94LmlzUmVu
ZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGZsb2F0Qm94KS5zZXRD
aGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBlbHNlIGlmIChpczxS
ZW5kZXJCbG9jaz4oZmxvYXRCb3gpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJs
b2NrPihmbG9hdEJveCkuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAg
ICAgICAgZmxvYXRCb3gubGF5b3V0SWZOZWVkZWQoKTsKIAogICAgICAgICAgICAgLy8gU2F2ZSB0
aGUgb2xkIGxvZ2ljYWwgdG9wIGJlZm9yZSBjYWxsaW5nIHJlbW92ZVBsYWNlZE9iamVjdCB3aGlj
aCB3aWxsIHNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlMWRl
NDIwNzZmMTNjMzRiNzg4NjA5NDVlNmE4MjFmYzFhNWY4Y2ViLi42OTIwODY3NzkxMGZmMzY1YmNk
ZDlkMjhhNGVhZGVkODQyNzc3MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtMjk0NywyMCArMjk0NywyMCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0KSBjbwogICAg
ICAgICBjYXNlIENhbGN1bGF0ZWQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gY2IgPSBp
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDogY29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgICAgICAgICB3aGlsZSAoY2ItPmlzQW5vbnltb3VzKCkgJiYgIWNiLT5pc1JlbmRlclZp
ZXcoKSkgeworICAgICAgICAgICAgd2hpbGUgKGNiLT5pc0Fub255bW91cygpICYmICFpczxSZW5k
ZXJWaWV3PigqY2IpKSB7CiAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjYiktPmFkZFBlcmNlbnRIZWlnaHRE
ZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpKTsKKyAgICAgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChj
b25zdF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNhbGN1bGF0aW9uIGlzIG5vdCBwYXRjaGVkIGZvciBibG9jay1m
bG93IHlldC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NjUwMAogICAgICAgICAgICAgaWYgKGNiLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSAmJiBjYi0+c3R5bGUoKS5oZWlnaHQoKS5pc0F1dG8oKSAmJiAhKGNiLT5zdHlsZSgpLnRvcCgp
LmlzQXV0bygpIHx8IGNiLT5zdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNiLT5pc1JlbmRlckJsb2Nr
KCkpOwotICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxvY2so
Y2IpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY2IpOwogICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVl
cyBjb21wdXRlZFZhbHVlczsKLSAgICAgICAgICAgICAgICBibG9jay0+Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOwotICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVkVmFsdWVzLm1f
ZXh0ZW50IC0gYmxvY2stPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgLSBibG9jay0+
c2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3
SGVpZ2h0ID0gYmxvY2stPmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6aW5n
KG5ld0NvbnRlbnRIZWlnaHQpOworICAgICAgICAgICAgICAgIGJsb2NrLmNvbXB1dGVMb2dpY2Fs
SGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOworICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVkVmFsdWVzLm1f
ZXh0ZW50IC0gYmxvY2suYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrLnNj
cm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG5ld0hl
aWdodCA9IGJsb2NrLmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6aW5nKG5l
d0NvbnRlbnRIZWlnaHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RDb250ZW50Qm94
TG9naWNhbEhlaWdodEZvckJveFNpemluZyh2YWx1ZUZvckxlbmd0aChsb2dpY2FsSGVpZ2h0LCBu
ZXdIZWlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjk4NCw3ICsyOTg0
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRV
c2luZyhMZW5ndGggbG9naWNhbEhlaWdodCkgY28KICAgICAgICAgICAgICAgICAgICAgICAgIGF2
YWlsYWJsZUhlaWdodCA9IHN0ZDo6bWF4KGF2YWlsYWJsZUhlaWdodCwgaW50cmluc2ljTG9naWNh
bEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckxlbmd0
aChsb2dpY2FsSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLSBib3JkZXJBbmRQYWRkaW5nTG9naWNh
bEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0
b1JlbmRlckJsb2NrKGNiKS0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3RfY2FzdDxS
ZW5kZXJCb3gmPigqdGhpcykpOworICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9jYXN0PFJlbmRlckJv
eCY+KCp0aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5pbmdCbG9j
aygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMwMjMsMTEgKzMwMjMs
MTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyhj
b25zdCBMZW5ndGgmIGgsIEF2YWlsYWJsZUxvZ2kKIAogICAgIC8vIEZJWE1FOiBDaGVjayBsb2dp
Y2FsVG9wL2xvZ2ljYWxCb3R0b20gaGVyZSB0byBjb3JyZWN0bHkgaGFuZGxlIHZlcnRpY2FsIHdy
aXRpbmctbW9kZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDY1MDAKLSAgICBpZiAoaXNSZW5kZXJCbG9jaygpICYmIGlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpICYmIHN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgIShzdHlsZSgpLnRvcCgpLmlzQXV0
bygpIHx8IHN0eWxlKCkuYm90dG9tKCkuaXNBdXRvKCkpKSB7Ci0gICAgICAgIFJlbmRlckJsb2Nr
KiBibG9jayA9IGNvbnN0X2Nhc3Q8UmVuZGVyQmxvY2sqPih0b1JlbmRlckJsb2NrKHRoaXMpKTsK
KyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCp0aGlzKSAmJiBpc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSAmJiBzdHlsZSgpLmhlaWdodCgpLmlzQXV0bygpICYmICEoc3R5bGUoKS50b3AoKS5pc0F1dG8o
KSB8fCBzdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgeworICAgICAgICBSZW5kZXJCbG9jayYg
YmxvY2sgPSBjb25zdF9jYXN0PFJlbmRlckJsb2NrJj4oZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCp0
aGlzKSk7CiAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVl
czsKLSAgICAgICAgYmxvY2stPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLT5sb2dpY2FsSGVp
Z2h0KCksIDAsIGNvbXB1dGVkVmFsdWVzKTsKLSAgICAgICAgTGF5b3V0VW5pdCBuZXdDb250ZW50
SGVpZ2h0ID0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBibG9jay0+Ym9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrLT5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CisgICAg
ICAgIGJsb2NrLmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgMCwg
Y29tcHV0ZWRWYWx1ZXMpOworICAgICAgICBMYXlvdXRVbml0IG5ld0NvbnRlbnRIZWlnaHQgPSBj
b21wdXRlZFZhbHVlcy5tX2V4dGVudCAtIGJsb2NrLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVp
Z2h0KCkgLSBibG9jay5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIHJldHVybiBh
ZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZyhuZXdDb250ZW50SGVpZ2h0
KTsKICAgICB9CiAKQEAgLTMwNzIsMzkgKzMwNzIsMzkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94
TW8KICAgICBpZiAoY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgJiYgY29udGFpbmlu
Z0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9z
aXRpb25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsKIAotICAgIGlmIChjb250YWluaW5nQmxv
Y2stPmlzQm94KCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKSkg
ewogICAgICAgICBib29sIGlzRml4ZWRQb3NpdGlvbiA9IHN0eWxlKCkucG9zaXRpb24oKSA9PSBG
aXhlZFBvc2l0aW9uOwogCiAgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBm
bG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGlmICghZmxvd1RocmVhZCkgewot
ICAgICAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxvY2stPmlzUmVu
ZGVyVmlldygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclZpZXcoY29udGFpbmlu
Z0Jsb2NrKS0+Y2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOworICAgICAgICAg
ICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBpczxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2Nr
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVmlldz4oKmNvbnRhaW5p
bmdCbG9jaykuY2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOwogCi0gICAgICAg
ICAgICByZXR1cm4gdG9SZW5kZXJCb3goY29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50TG9naWNhbFdp
ZHRoKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmlu
Z0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChp
c0ZpeGVkUG9zaXRpb24gJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlck5hbWVkRmxvd1RocmVh
ZCgpKQorICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlck5hbWVkRmxvd1Ro
cmVhZD4oKmNvbnRhaW5pbmdCbG9jaykpCiAgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Js
b2NrLT52aWV3KCkuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAKLSAgICAgICAgaWYgKCFjb250YWlu
aW5nQmxvY2stPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckJv
eCgqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgaWYgKCFp
czxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsK
IAotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGNvbnRhaW5p
bmdCbG9jayk7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSAwOworICAg
ICAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRh
aW5pbmdCbG9jayk7CisgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBudWxs
cHRyOwogICAgICAgICBpZiAoIXJlZ2lvbikgewogICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdC
bG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRp
bmdNb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dUaHJlYWQoY29udGFp
bmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24oKTsKICAgICAgICAg
ICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBjYlBhZ2VPZmZzZXQgPSBjYi0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwot
ICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi0+cmVnaW9uQXRCbG9j
a09mZnNldChjYlBhZ2VPZmZzZXQpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2JQYWdl
T2Zmc2V0ID0gY2Iub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOworICAgICAgICAg
ICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi5yZWdpb25BdEJsb2NrT2Zmc2V0KGNi
UGFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGNiUmVnaW9uKQotICAgICAgICAgICAg
ICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOworICAg
ICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lv
bik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYmIGZsb3dUaHJl
YWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5p
bmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0g
ICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Js
b2NrUmVnaW9uKTsKKyAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVn
aW9uID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgICAgICAgICAg
Ym94SW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2NrUmVnaW9uKTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gKGJveEluZm8pID8gc3RkOjptYXg8TGF5b3V0VW5p
dD4oMCwgY2ItPmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLT5sb2dpY2FsV2lkdGgoKSAtIGJv
eEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi0+Y2xpZW50TG9naWNhbFdpZHRoKCk7CisgICAg
ICAgIHJldHVybiAoYm94SW5mbykgPyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjYi5jbGllbnRM
b2dpY2FsV2lkdGgoKSAtIChjYi5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0
aCgpKSkgOiBjYi5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICB9CiAKICAgICBBU1NFUlQoY29u
dGFpbmluZ0Jsb2NrLT5pc1JlbmRlcklubGluZSgpICYmIGNvbnRhaW5pbmdCbG9jay0+aXNJbkZs
b3dQb3NpdGlvbmVkKCkpOwpAQCAtMzEzMywzNyArMzEzMywzNyBAQCBMYXlvdXRVbml0IFJlbmRl
ckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5k
ZXJCb3hNbwogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWln
aHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxv
Y2ssIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAg
aWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlICYmIGNvbnRhaW5pbmdCbG9jay0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQot
ICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChj
b250YWluaW5nQmxvY2ssIDAsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRyLCBmYWxz
ZSk7CiAKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CiAgICAgICAgIGJvb2wg
aXNGaXhlZFBvc2l0aW9uID0gc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247CiAK
LSAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxvY2stPmlzUmVuZGVy
VmlldygpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVmlldyhjb250YWluaW5nQmxvY2sp
LT5jbGllbnRMb2dpY2FsSGVpZ2h0Rm9yRml4ZWRQb3NpdGlvbigpOworICAgICAgICBpZiAoaXNG
aXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKQorICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spLmNsaWVu
dExvZ2ljYWxIZWlnaHRGb3JGaXhlZFBvc2l0aW9uKCk7CiAKLSAgICAgICAgY29uc3QgUmVuZGVy
QmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJs
b2NrKGNvbnRhaW5pbmdCbG9jaykgOiBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygp
OworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSBpczxSZW5kZXJCbG9jaz4oKmNvbnRh
aW5pbmdCbG9jaykgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Jsb2NrKSA6IGNv
bnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIExheW91dFVuaXQgcmVz
dWx0ID0gY2ItPmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgaWYg
KGZsb3dUaHJlYWQgJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckZsb3dUaHJlYWQoKSAmJiBm
bG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9jay0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdC
bG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBpc0ZpeGVkUG9zaXRpb24pCisgICAg
ICAgIGlmIChmbG93VGhyZWFkICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWluaW5nQmxv
Y2spICYmIGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmlu
Z0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBpZiAoaXM8
UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKSAmJiBpc0ZpeGVkUG9zaXRp
b24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+dmlldygpLmNsaWVu
dExvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dUaHJlYWQo
Y29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKmNvbnRhaW5pbmdC
bG9jaykuY29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIEFTU0VSVChjb250YWlu
aW5nQmxvY2stPmlzUmVuZGVySW5saW5lKCkgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0luRmxvd1Bv
c2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlcklubGluZT4oKmNvbnRhaW5pbmdCbG9j
aykgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7CiAKLSAgICBjb25z
dCBSZW5kZXJJbmxpbmUqIGZsb3cgPSB0b1JlbmRlcklubGluZShjb250YWluaW5nQmxvY2spOwot
ICAgIElubGluZUZsb3dCb3gqIGZpcnN0ID0gZmxvdy0+Zmlyc3RMaW5lQm94KCk7Ci0gICAgSW5s
aW5lRmxvd0JveCogbGFzdCA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CisgICAgY29uc3QgUmVuZGVy
SW5saW5lJiBmbG93ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY29udGFpbmluZ0Jsb2NrKTsK
KyAgICBJbmxpbmVGbG93Qm94KiBmaXJzdCA9IGZsb3cuZmlyc3RMaW5lQm94KCk7CisgICAgSW5s
aW5lRmxvd0JveCogbGFzdCA9IGZsb3cubGFzdExpbmVCb3goKTsKIAogICAgIC8vIElmIHRoZSBj
b250YWluaW5nIGJsb2NrIGlzIGVtcHR5LCByZXR1cm4gYSBoZWlnaHQgb2YgMC4KICAgICBpZiAo
IWZpcnN0IHx8ICFsYXN0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIExheW91dFVuaXQgaGVp
Z2h0UmVzdWx0OwotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBmbG93LT5saW5lc0JvdW5k
aW5nQm94KCk7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGZsb3cubGluZXNCb3VuZGlu
Z0JveCgpOwogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCiAgICAgICAgIGhlaWdodFJlc3VsdCA9IGJvdW5kaW5nQm94LmhlaWdodCgpOwogICAgIGVs
c2UKQEAgLTMxODAsMTMgKzMxODAsMTMgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRp
Y0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2gKICAgICAv
LyBGSVhNRTogVGhlIHN0YXRpYyBkaXN0YW5jZSBjb21wdXRhdGlvbiBoYXMgbm90IGJlZW4gcGF0
Y2hlZCBmb3IgbWl4ZWQgd3JpdGluZyBtb2RlcyB5ZXQuCiAgICAgaWYgKGNoaWxkLT5wYXJlbnQo
KS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgTGF5b3V0VW5pdCBzdGF0
aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpIC0gY29u
dGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgIGZvciAoYXV0byBjdXJy
ID0gY2hpbGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxvY2s7IGN1cnIg
PSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpIHsK
LSAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSB0b1JlbmRlckJveChjdXJyKS0+bG9n
aWNhbExlZnQoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uICYmIHRvUmVuZGVyQm94KGN1
cnIpLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVy
QmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKLSAgICAgICAgICAgICAgICAgICAgcmVn
aW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdp
b25JbmZvKHJlZ2lvbik7CisgICAgICAgIGZvciAoYXV0byBjdXJyZW50ID0gY2hpbGQtPnBhcmVu
dCgpOyBjdXJyZW50ICYmIGN1cnJlbnQgIT0gY29udGFpbmVyQmxvY2s7IGN1cnJlbnQgPSBjdXJy
ZW50LT5jb250YWluZXIoKSkgeworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmN1cnJl
bnQpKSB7CisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gZG93bmNhc3Q8UmVuZGVy
Qm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVnaW9u
ICYmIGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgUmVuZGVyQmxvY2smIGN1cnJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3Vy
cmVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGN1cnJlbnRCbG9jay5jbGFtcFRv
U3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJv
eFJlZ2lvbkluZm8qIGJveEluZm8gPSBjdXJyZW50QmxvY2sucmVuZGVyQm94UmVnaW9uSW5mbyhy
ZWdpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94SW5mbykKICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMzE5NiwyNSArMzE5NiwyNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRl
SW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBsb2dpY2Fs
UmlnaAogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlbmRlckJveCYgZW5jbG9zaW5nQm94ID0gY2hp
bGQtPnBhcmVudCgpLT5lbmNsb3NpbmdCb3goKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNQ
b3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpICsgY29udGFp
bmVyTG9naWNhbFdpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0KCk7Ci0g
ICAgICAgIGZvciAoUmVuZGVyRWxlbWVudCogY3VyciA9ICZlbmNsb3NpbmdCb3g7IGN1cnI7IGN1
cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyciAhPSBjb250YWluZXJCbG9jaykKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gdG9SZW5kZXJCb3goY3VyciktPmxvZ2ljYWxM
ZWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0JveCkKKyAgICAg
ICAgZm9yIChSZW5kZXJFbGVtZW50KiBjdXJyZW50ID0gJmVuY2xvc2luZ0JveDsgY3VycmVudDsg
Y3VycmVudCA9IGN1cnJlbnQtPmNvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyQm94PigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCAhPSBjb250
YWluZXJCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gZG93bmNh
c3Q8UmVuZGVyQm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudCA9PSAmZW5jbG9zaW5nQm94KQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNQ
b3NpdGlvbiAtPSBlbmNsb3NpbmdCb3gubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHJlZ2lvbiAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNi
LT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAgICAgICAgICAgICAgaWYgKHJlZ2lv
biAmJiBpczxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJlbmRlckJsb2NrJiBjdXJyZW50QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1
cnJlbnQpOworICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjdXJyZW50QmxvY2suY2xhbXBU
b1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
b3hSZWdpb25JbmZvKiBib3hJbmZvID0gY3VycmVudEJsb2NrLnJlbmRlckJveFJlZ2lvbkluZm8o
cmVnaW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjdXJyICE9IGNvbnRhaW5lckJsb2NrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGNiLT5sb2dpY2FsV2lkdGgoKSAtIChib3hJ
bmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRoKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0JveCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjdXJyZW50ICE9IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGN1cnJlbnRCbG9jay5sb2dpY2FsV2lkdGgo
KSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRoKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJmVuY2xvc2luZ0JveCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBlbmNsb3NpbmdCb3gu
bG9naWNhbFdpZHRoKCkgLSBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjdXJyID09IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gY29u
dGFpbmVyQmxvY2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
bG9naWNhbFJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CkBAIC0zMzM4LDE0
ICszMzM4LDE0IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1CiAgICAgLy8gQWRqdXN0IGxvZ2lj
YWxMZWZ0IGlmIHdlIG5lZWQgdG8gZm9yIHRoZSBmbGlwcGVkIHZlcnNpb24gb2Ygb3VyIHdyaXRp
bmcgbW9kZSBpbiByZWdpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIg
dHlwZXMgb2Ygb2JqZWN0cyBhcyBjb250YWluZXJCbG9jaywgbm90IG9ubHkgUmVuZGVyQmxvY2su
CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKTsKLSAgICBpZiAoZmxvd1RocmVhZCAmJiAhcmVnaW9uICYmIGlzV3JpdGluZ01vZGVS
b290KCkgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluZXJCbG9jay0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250YWluZXJCbG9jay0+aXNSZW5kZXJCbG9jaygp
KSB7CisgICAgaWYgKGZsb3dUaHJlYWQgJiYgIXJlZ2lvbiAmJiBpc1dyaXRpbmdNb2RlUm9vdCgp
ICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxvY2stPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgJiYgaXM8UmVuZGVyQmxvY2s+KCpjb250YWluZXJCbG9jaykpIHsK
ICAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrLT5jYW5IYXZlQm94SW5mb0luUmVnaW9uKCkp
OwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UG9zID0gY29tcHV0ZWRWYWx1ZXMubV9w
b3NpdGlvbjsKLSAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhj
b250YWluZXJCbG9jayk7Ci0gICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zmc2V0ID0gY2ItPm9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBj
YlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CisgICAgICAg
IGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigq
Y29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IHJlbmRl
ckJsb2NrLm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAgICAgUmVuZGVy
UmVnaW9uKiBjYlJlZ2lvbiA9IHJlbmRlckJsb2NrLnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdl
T2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hS
ZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwor
ICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRlckJsb2NrLnJl
bmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJveEluZm8pIHsK
ICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSBib3hJbmZvLT5sb2dpY2FsTGVmdCgp
OwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBsb2dpY2FsTGVm
dFBvczsKQEAgLTM2NTUsMTQgKzM2NTUsMTQgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbEhlaWdodChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXAKICAg
ICAvLyBBZGp1c3QgbG9naWNhbFRvcCBpZiB3ZSBuZWVkIHRvIGZvciBwZXJwZW5kaWN1bGFyIHdy
aXRpbmcgbW9kZXMgaW4gcmVnaW9ucy4KICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90
aGVyIHR5cGVzIG9mIG9iamVjdHMgYXMgY29udGFpbmVyQmxvY2ssIG5vdCBvbmx5IFJlbmRlckJs
b2NrLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250
YWluZXJCbG9jay0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgaWYgKGZsb3dUaHJlYWQgJiYgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAmJiBpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5lckJsb2NrKSkgewogICAgICAg
ICBBU1NFUlQoY29udGFpbmVyQmxvY2stPmNhbkhhdmVCb3hJbmZvSW5SZWdpb24oKSk7CiAgICAg
ICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb247
Ci0gICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmVy
QmxvY2spOwotICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLT5vZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dpY2FsTGVmdCgpOwotICAgICAgICBSZW5kZXJS
ZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsK
KyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPigqY29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9
IHJlbmRlckJveC5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dpY2FsTGVm
dCgpOworICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gcmVuZGVyQm94LnJlZ2lvbkF0
QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lv
bkluZm8oY2JSZWdpb24pOworICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5m
byA9IHJlbmRlckJveC5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAg
IGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAgICAgbG9naWNhbFRvcFBvcyArPSBib3hJbmZv
LT5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRp
b24gPSBsb2dpY2FsVG9wUG9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYmFmZDg0YjI0ZjMxZjg5NDQwMWQ0YmRiYzQ5MTM3
MDNhNGMyYWI0OS4uNzNmM2VlNDVhZDRhMDI5OTBkNDgxMzNkZDkzY2U4MDhjZTM3YmM2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0aWMgTGF5b3V0U2l6ZSBhY2N1bXVsYXRlSW5GbG93
UG9zaXRpb25PZmZzZXRzKGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQpCiAgICAgaWYgKCFjaGls
ZC0+aXNBbm9ueW1vdXNCbG9jaygpIHx8ICFjaGlsZC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpCiAg
ICAgICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXQ7Ci0gICAg
UmVuZGVyRWxlbWVudCogcCA9IHRvUmVuZGVyQmxvY2soY2hpbGQpLT5pbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCk7Ci0gICAgd2hpbGUgKHAgJiYgcC0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAg
IFJlbmRlckVsZW1lbnQqIHAgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNoaWxkKS5pbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCk7CisgICAgd2hpbGUgKGlzPFJlbmRlcklubGluZT4ocCkpIHsK
ICAgICAgICAgaWYgKHAtPmlzSW5GbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICBSZW5k
ZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHApOwotICAgICAgICAgICAg
b2Zmc2V0ICs9IHJlbmRlcklubGluZS0+b2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5l
PigqcCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gcmVuZGVySW5saW5lLm9mZnNldEZvckluRmxv
d1Bvc2l0aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgcCA9IHAtPnBhcmVudCgpOwogICAgIH0K
QEAgLTI2NzQsNyArMjY3NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1vdmVDaGls
ZFRvKFJlbmRlckJveE1vZGVsT2JqZWN0KiB0b0JveE1vZGVsT2JqZWN0LCBSCiB7CiAgICAgLy8g
V2UgYXNzdW1lIHRoYXQgY2FsbGVycyBoYXZlIGNsZWFyZWQgdGhlaXIgcG9zaXRpb25lZCBvYmpl
Y3RzIGxpc3QgZm9yIGNoaWxkIG1vdmVzICghZnVsbFJlbW92ZUluc2VydCkgc28gdGhlCiAgICAg
Ly8gcG9zaXRpb25lZCByZW5kZXJlciBtYXBzIGRvbid0IGJlY29tZSBzdGFsZS4gSXQgd291bGQg
YmUgdG9vIHNsb3cgdG8gZG8gdGhlIG1hcCBsb29rdXAgb24gZWFjaCBjYWxsLgotICAgIEFTU0VS
VCghZnVsbFJlbW92ZUluc2VydCB8fCAhaXNSZW5kZXJCbG9jaygpIHx8ICF0b1JlbmRlckJsb2Nr
KHRoaXMpLT5oYXNQb3NpdGlvbmVkT2JqZWN0cygpKTsKKyAgICBBU1NFUlQoIWZ1bGxSZW1vdmVJ
bnNlcnQgfHwgIWlzPFJlbmRlckJsb2NrPigqdGhpcykgfHwgIWRvd25jYXN0PFJlbmRlckJsb2Nr
PigqdGhpcykuaGFzUG9zaXRpb25lZE9iamVjdHMoKSk7CiAKICAgICBBU1NFUlQodGhpcyA9PSBj
aGlsZC0+cGFyZW50KCkpOwogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9Cb3hNb2RlbE9i
amVjdCA9PSBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwpAQCAtMjY5NSwxMCArMjY5NSwxMCBAQCB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRyZW5UbyhSZW5kZXJCb3hNb2RlbE9i
amVjdCogdG9Cb3hNb2RlbE9iamVjdAogICAgIC8vIFRoaXMgY29uZGl0aW9uIGlzIHJhcmVseSBo
aXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBvbgogICAgIC8vIGFub255
bW91cyBibG9ja3Mgd2hpY2ggY2FuIG5vIGxvbmdlciBjYXJyeSBwb3NpdGlvbmVkIG9iamVjdHMg
KHNlZSByMTIwNzYxKQogICAgIC8vIG9yIHdoZW4gZnVsbFJlbW92ZUluc2VydCBpcyBmYWxzZS4K
LSAgICBpZiAoZnVsbFJlbW92ZUluc2VydCAmJiBpc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAg
dG9SZW5kZXJCbG9jayh0aGlzKS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7Ci0gICAgICAg
IGlmIChpc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3co
dGhpcyktPnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOyAKKyAgICBpZiAoZnVsbFJlbW92ZUluc2Vy
dCAmJiBpczxSZW5kZXJCbG9jaz4oKnRoaXMpKSB7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckJs
b2NrPigqdGhpcykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7CisgICAgICAgIGlm
IChpczxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oKnRoaXMpLnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOwogICAgIH0KIAogICAg
IEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9Cb3hNb2RlbE9iamVjdCA9PSBiZWZvcmVDaGlsZC0+
cGFyZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmlu
ZGV4IDhmNGY0NWU5NTdkM2MxZTRiZDRmOTQ5MDQzNWQ3NjgxM2EzOWM2NWEuLjA4MjdjYWE3MGU1
NGQ3ZmRiOTU1MGQ3OThjMWI0ODQ0YTY4OGVjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIFJlbmRlckVsZW1l
bnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3BhZ2F0aW9uVHlw
ZSBwcm9wYQogICAgICAgICBpZiAoIWVsZW1lbnRDaGlsZC5pc0Fub255bW91cygpIHx8IGVsZW1l
bnRDaGlsZC5zdHlsZSgpLnN0eWxlVHlwZSgpICE9IE5PUFNFVURPKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKHByb3BhZ2F0aW9uVHlwZSA9PSBQcm9wYWdhdGVUb0Jsb2Nr
Q2hpbGRyZW5Pbmx5ICYmICFlbGVtZW50Q2hpbGQuaXNSZW5kZXJCbG9jaygpKQorICAgICAgICBp
ZiAocHJvcGFnYXRpb25UeXBlID09IFByb3BhZ2F0ZVRvQmxvY2tDaGlsZHJlbk9ubHkgJiYgIWlz
PFJlbmRlckJsb2NrPihlbGVtZW50Q2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC03NzEsNyArNzcxLDcgQEAgdm9pZCBSZW5kZXJF
bGVtZW50Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oU3R5bGVQcm9wYWdhdGlv
blR5cGUgcHJvcGEKICNlbmRpZgogCiAgICAgICAgIC8vIFJlbmRlckZsb3dUaHJlYWRzIGFyZSB1
cGRhdGVkIHRocm91Z2ggdGhlIFJlbmRlclZpZXc6OnN0eWxlRGlkQ2hhbmdlIGZ1bmN0aW9uLgot
ICAgICAgICBpZiAoZWxlbWVudENoaWxkLmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICBp
ZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oZWxlbWVudENoaWxkKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnlt
b3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgZWxlbWVudENoaWxkLnN0eWxlKCkuZGlzcGxh
eSgpKTsKQEAgLTc4NCw3ICs3ODQsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0
eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3BhZ2F0aW9uVHlwZSBwcm9wYQogCiAgICAg
ICAgIC8vIFByZXNlcnZlIHRoZSBwb3NpdGlvbiBzdHlsZSBvZiBhbm9ueW1vdXMgYmxvY2sgY29u
dGludWF0aW9ucyBhcyB0aGV5IGNhbiBoYXZlIHJlbGF0aXZlIG9yIHN0aWNreSBwb3NpdGlvbiB3
aGVuCiAgICAgICAgIC8vIHRoZXkgY29udGFpbiBibG9jayBkZXNjZW5kYW50cyBvZiByZWxhdGl2
ZSBvciBzdGlja3kgcG9zaXRpb25lZCBpbmxpbmVzLgotICAgICAgICBpZiAoZWxlbWVudENoaWxk
LmlzSW5GbG93UG9zaXRpb25lZCgpICYmIHRvUmVuZGVyQmxvY2soZWxlbWVudENoaWxkKS5pc0Fu
b255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIGlmIChlbGVtZW50Q2hpbGQuaXNJ
bkZsb3dQb3NpdGlvbmVkKCkgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGVsZW1lbnRDaGlsZCku
aXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKQogICAgICAgICAgICAgbmV3U3R5bGUuZ2V0
KCkuc2V0UG9zaXRpb24oZWxlbWVudENoaWxkLnN0eWxlKCkucG9zaXRpb24oKSk7CiAKICAgICAg
ICAgZWxlbWVudENoaWxkLnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGYxZjViMzJhNTNk
NjY4YWI2MTllMzQ1ZTQ4ZTA5NmUxNzFkNGExNzcuLmE4NjAwOTY3NGI2Y2U4OGM3Njc2ZjBlNmRk
N2UwZDlkNjc3Mzc1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAKQEAgLTQ3MywxNiArNDczLDE2IEBAIExheW91dFBvaW50IFJlbmRlckZsb3dU
aHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFJlbmRl
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdldCB0aGUgbG9naWNhbCB0b3AgY29vcmRp
bmF0ZSBvZiB0aGUgY3VycmVudCBvYmplY3QuCiAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcCA9
IDA7Ci0gICAgICAgICAgICBpZiAoYm94TW9kZWxPYmplY3QuaXNSZW5kZXJCbG9jaygpKQotICAg
ICAgICAgICAgICAgIHRvcCA9IHRvUmVuZGVyQmxvY2soYm94TW9kZWxPYmplY3QpLm9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9j
az4oYm94TW9kZWxPYmplY3QpKQorICAgICAgICAgICAgICAgIHRvcCA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPihib3hNb2RlbE9iamVjdCkub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGJveE1vZGVsT2JqZWN0
LmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgICAgICB0b3AgPSBib3hNb2RlbE9i
amVjdC5jb250YWluaW5nQmxvY2soKS0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChib3hNb2RlbE9iamVjdC5p
c0JveCgpKQotICAgICAgICAgICAgICAgICAgICB0b3AgKz0gdG9SZW5kZXJCb3goYm94TW9kZWxP
YmplY3QpLnRvcExlZnRMb2NhdGlvbigpLnkoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChi
b3hNb2RlbE9iamVjdC5pc1JlbmRlcklubGluZSgpKQotICAgICAgICAgICAgICAgICAgICB0b3Ag
LT0gdG9SZW5kZXJJbmxpbmUoYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOworICAgICAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGJveE1vZGVsT2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICAgICAgdG9wICs9IGRvd25jYXN0PFJlbmRlckJveD4oYm94TW9kZWxPYmplY3QpLnRvcExlZnRM
b2NhdGlvbigpLnkoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJJbmxpbmU+
KGJveE1vZGVsT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgdG9wIC09IGRvd25jYXN0PFJl
bmRlcklubGluZT4oYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGxvZ2ljYWwgdG9wIG9mIHRoZSBy
ZWdpb24gdGhpcyBvYmplY3Qgc3RhcnRzIGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnVsbFNjcmVlbi5jcHAKaW5kZXggNjQ0MzNmYzVkMjYzNGU5MGQwMzc3ZDYyMDE4ZjRk
NzBlZmU0ZDU0NC4uNzQ1MTIyMWMyY2MxNTBiMGQ5MjI4M2IwZjYzOTk5YmUxOTczNjBlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcApAQCAtMTQ5
LDE0ICsxNDksMTQgQEAgdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjp1bndyYXBSZW5kZXJlcihib29s
JiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKQogICAgICAgICBpZiAoY2hpbGQgIT0gbGFzdENo
aWxkKCkpCiAgICAgICAgICAgICByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkID0gdHJ1ZTsKICAg
ICAgICAgZWxzZSBpZiAoY2hpbGQgJiYgY2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSkgewotICAg
ICAgICAgICAgYXV0byYgYW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2NrKCpjaGlsZCk7Cisg
ICAgICAgICAgICBhdXRvJiBhbm9ueW1vdXNCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigq
Y2hpbGQpOwogICAgICAgICAgICAgaWYgKGFub255bW91c0Jsb2NrLmZpcnN0Q2hpbGQoKSAhPSBh
bm9ueW1vdXNCbG9jay5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgICAgICByZXF1aXJlc1JlbmRl
clRyZWVSZWJ1aWxkID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIHdoaWxlICgoY2hpbGQg
PSBmaXJzdENoaWxkKCkpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQW5vbnltb3VzQmxv
Y2soKSAmJiAhcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZCkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBub25Bbm9ueW1vdXNDaGlsZCA9IHRvUmVuZGVyQmxvY2soKmNoaWxkKS5maXJzdENo
aWxkKCkpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG5vbkFub255bW91c0NoaWxkID0gZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCkuZmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgICAg
ICAgICBjaGlsZCA9IG5vbkFub255bW91c0NoaWxkOwogICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBmMzdmNTM3NDg4MWE3MzNiZjM3
MTMzMTE0NmIyYTc2YmJiN2RmNWVhLi4xZmQzNmFhYTk0YzUyYzc1NTc2OTAyNzdlOWY3MWE2ZGM3
YmJmYzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAt
MTIxLDEwICsxMjEsMTAgQEAgUmVuZGVySW5saW5lKiBSZW5kZXJJbmxpbmU6OmlubGluZUVsZW1l
bnRDb250aW51YXRpb24oKSBjb25zdAogICAgIGlmICghY29udGludWF0aW9uKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChjb250aW51YXRpb24tPmlzUmVuZGVySW5saW5lKCkp
Ci0gICAgICAgIHJldHVybiB0b1JlbmRlcklubGluZShjb250aW51YXRpb24pOworICAgIGlmIChp
czxSZW5kZXJJbmxpbmU+KCpjb250aW51YXRpb24pKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8
UmVuZGVySW5saW5lPihjb250aW51YXRpb24pOwogCi0gICAgcmV0dXJuIGNvbnRpbnVhdGlvbi0+
aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjb250aW51YXRpb24pLT5pbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCkgOiBudWxscHRyOworICAgIHJldHVybiBpczxSZW5kZXJCbG9jaz4o
KmNvbnRpbnVhdGlvbikgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRpbnVhdGlvbikuaW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBSZW5kZXJJbmxp
bmU6OnVwZGF0ZUZyb21TdHlsZSgpCkBAIC0xNTIsMjEgKzE1MiwyMSBAQCBzdGF0aWMgdm9pZCB1
cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKFJlbmRlckJveCogYm94LCBj
b25zdCBSZW5kZQogICAgICAgICBpZiAoYm94LT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gbmV3U3R5
bGUtPnBvc2l0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAg
IGlmICghYm94LT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgIGlmICghaXM8UmVuZGVyQmxvY2s+
KCpib3gpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUmVuZGVyQmxvY2sqIGJs
b2NrID0gdG9SZW5kZXJCbG9jayhib3gpOwotICAgICAgICBpZiAoIWJsb2NrLT5pc0Fub255bW91
c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPigqYm94KTsKKyAgICAgICAgaWYgKCFibG9jay5pc0Fub255bW91c0Js
b2NrQ29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAg
ICAgIC8vIElmIHdlIGFyZSBubyBsb25nZXIgaW4tZmxvdyBwb3NpdGlvbmVkIGJ1dCBvdXIgZGVz
Y2VuZGFudCBibG9jayhzKSBzdGlsbCBoYXZlIGFuIGluLWZsb3cgcG9zaXRpb25lZCBhbmNlc3Rv
ciB0aGVuCiAgICAgICAgIC8vIHRoZWlyIGNvbnRhaW5pbmcgYW5vbnltb3VzIGJsb2NrIHNob3Vs
ZCBrZWVwIGl0cyBpbi1mbG93IHBvc2l0aW9uaW5nLiAKLSAgICAgICAgUmVuZGVySW5saW5lKiBj
b250ID0gYmxvY2stPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICAgICAgaWYgKG9s
ZFN0eWxlLT5oYXNJbkZsb3dQb3NpdGlvbigpICYmIGluRmxvd1Bvc2l0aW9uZWRJbmxpbmVBbmNl
c3Rvcihjb250KSkKKyAgICAgICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBibG9jay5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgIGlmIChvbGRTdHlsZS0+aGFzSW5G
bG93UG9zaXRpb24oKSAmJiBpbkZsb3dQb3NpdGlvbmVkSW5saW5lQW5jZXN0b3IoY29udGludWF0
aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIGJsb2NrU3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmYmxvY2stPnN0eWxl
KCksIEJMT0NLKTsKKyAgICAgICAgYXV0byBibG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJmJsb2NrLnN0eWxlKCksIEJMT0NLKTsKICAgICAg
ICAgYmxvY2tTdHlsZS5nZXQoKS5zZXRQb3NpdGlvbihuZXdTdHlsZS0+cG9zaXRpb24oKSk7Ci0g
ICAgICAgIGJsb2NrLT5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOworICAgICAgICBi
bG9jay5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOwogICAgIH0KIH0KIApAQCAtMTk2
LDcgKzE5Niw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAgICAgICAgIC8vIElmIGFueSBk
ZXNjZW5kYW50IGJsb2NrcyBleGlzdCB0aGVuIHRoZXkgd2lsbCBiZSBpbiB0aGUgbmV4dCBhbm9u
eW1vdXMgYmxvY2sgYW5kIGl0cyBzaWJsaW5ncy4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBibG9j
ayA9IGNvbnRhaW5pbmdCbG9jaygpLT5uZXh0U2libGluZygpOwogICAgICAgICBBU1NFUlQoYmxv
Y2sgJiYgYmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSk7Ci0gICAgICAgIHVwZGF0ZVN0eWxlT2ZB
bm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbnModG9SZW5kZXJCbG9jayhibG9jayksICZuZXdTdHls
ZSwgb2xkU3R5bGUpOworICAgICAgICB1cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51
YXRpb25zKGRvd25jYXN0PFJlbmRlckJsb2NrPihibG9jayksICZuZXdTdHlsZSwgb2xkU3R5bGUp
OwogICAgIH0KIAogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpIHsKQEAgLTI3Nyw5
ICsyNzcsOSBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIAogc3RhdGljIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBuZXh0Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAg
aWYgKHJlbmRlcmVyLT5pc0lubGluZSgpICYmICFyZW5kZXJlci0+aXNSZXBsYWNlZCgpKQotICAg
ICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51YXRpb24oKTsKLSAg
ICByZXR1cm4gdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250aW51YXRp
b24oKTsKKyAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqcmVuZGVyZXIpICYmICFyZW5kZXJlci0+
aXNSZXBsYWNlZCgpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcmVu
ZGVyZXIpLmNvbnRpbnVhdGlvbigpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiB9CiAKIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkKQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxp
dElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssCiB2
b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJl
bmRlckJsb2NrKiBuZXdCbG9ja0JveCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpCiB7Ci0g
ICAgUmVuZGVyQmxvY2sqIHByZSA9IDA7CisgICAgUmVuZGVyQmxvY2sqIHByZSA9IG51bGxwdHI7
CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgCiAgICAg
Ly8gRGVsZXRlIG91ciBsaW5lIGJveGVzIGJlZm9yZSB3ZSBkbyB0aGUgaW5saW5lIHNwbGl0IGlu
dG8gY29udGludWF0aW9ucy4KQEAgLTQ1MywxMiArNDUzLDEyIEBAIHZvaWQgUmVuZGVySW5saW5l
OjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Js
b2NrQm94CiAgICAgaWYgKGJsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgKCFibG9jay0+cGFy
ZW50KCkgfHwgIWJsb2NrLT5wYXJlbnQoKS0+Y3JlYXRlc0Fub255bW91c1dyYXBwZXIoKSkpIHsK
ICAgICAgICAgLy8gV2UgY2FuIHJldXNlIHRoaXMgYmxvY2sgYW5kIG1ha2UgaXQgdGhlIHByZUJs
b2NrIG9mIHRoZSBuZXh0IGNvbnRpbnVhdGlvbi4KICAgICAgICAgcHJlID0gYmxvY2s7Ci0gICAg
ICAgIHByZS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7CisgICAgICAgIHByZS0+cmVtb3Zl
UG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7CiAgICAgICAgIC8vIEZJWE1FLUJMT0NLRkxPVzog
VGhlIGVuY2xvc2luZyBtZXRob2Qgc2hvdWxkIGxpa2VseSBiZSBzd2l0Y2hlZCBvdmVyCiAgICAg
ICAgIC8vIHRvIG9ubHkgd29yayBvbiBSZW5kZXJCbG9ja0Zsb3csIGluIHdoaWNoIGNhc2UgdGhp
cyBjb252ZXJzaW9uIGNhbiBiZQogICAgICAgICAvLyByZW1vdmVkLgotICAgICAgICBpZiAocHJl
LT5pc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3cocHJl
KS0+cmVtb3ZlRmxvYXRpbmdPYmplY3RzKCk7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9ja0Zs
b3c+KCpwcmUpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcHJlKS5y
ZW1vdmVGbG9hdGluZ09iamVjdHMoKTsKICAgICAgICAgYmxvY2sgPSBibG9jay0+Y29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm8gYW5vbnltb3VzIGJsb2NrIGF2
YWlsYWJsZSBmb3IgdXNlLiAgTWFrZSBvbmUuCkBAIC00NjYsMTMgKzQ2NiwxMyBAQCB2b2lkIFJl
bmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJs
b2NrKiBuZXdCbG9ja0JveAogICAgICAgICBtYWRlTmV3QmVmb3JlQmxvY2sgPSB0cnVlOwogICAg
IH0KIAotICAgIFJlbmRlckJsb2NrKiBwb3N0ID0gdG9SZW5kZXJCbG9jayhwcmUtPmNyZWF0ZUFu
b255bW91c0JveFdpdGhTYW1lVHlwZUFzKGJsb2NrKSk7CisgICAgUmVuZGVyQmxvY2smIHBvc3Qg
PSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVU
eXBlQXMoYmxvY2spKTsKIAogICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3QgPSBtYWRlTmV3QmVm
b3JlQmxvY2sgPyBibG9jay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2libGluZygpOwogICAg
IGlmIChtYWRlTmV3QmVmb3JlQmxvY2spCiAgICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVy
bmFsKHByZSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKICAgICBibG9jay0+aW5zZXJ0Q2hp
bGRJbnRlcm5hbChuZXdCbG9ja0JveCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICBi
bG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwb3N0LCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRyZW4p
OworICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKCZwb3N0LCBib3hGaXJzdCwgTm90aWZ5
Q2hpbGRyZW4pOwogICAgIGJsb2NrLT5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7CiAgICAgCiAg
ICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykgewpAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxv
Y2sqIG5ld0Jsb2NrQm94CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzcGxpdElubGluZXMocHJl
LCBwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOworICAgIHNwbGl0SW5s
aW5lcyhwcmUsICZwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOwogCiAg
ICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdCbG9ja0JveCBpc24ndCBnb2luZyB0byBjb250
YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0aW5nCiAgICAgLy8gdGltZSBpbiBtYWtlQ2hp
bGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5nIHRoaXMgZXhwbGljaXRseSB1cCBmcm9udC4K
QEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveAogICAgIC8vIG1ha2Ug
bmV3IGxpbmUgYm94ZXMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgbGluZSBib3hlcyBhcm91
bmQuCiAgICAgcHJlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBi
bG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgcG9zdC0+c2V0
TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcG9zdC5zZXROZWVkc0xheW91
dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxk
VG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCkKQEAgLTg1MywyMSArODUzLDIxIEBAIGJvb2wgUmVuZGVySW5saW5lOjpoaXRUZXN0
Q3VsbGVkSW5saW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzCiBW
aXNpYmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgLy8gRklY
TUU6IERvZXMgbm90IGRlYWwgd2l0aCByZWxhdGl2ZSBvciBzdGlja3kgcG9zaXRpb25lZCBpbmxp
bmVzIChzaG91bGQgaXQ/KQotICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygp
OworICAgIFJlbmRlckJsb2NrJiBjb250YWluaW5nQmxvY2sgPSAqdGhpcy0+Y29udGFpbmluZ0Js
b2NrKCk7CiAgICAgaWYgKGZpcnN0TGluZUJveCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaW5saW5l
IGFjdHVhbGx5IGhhcyBhIGxpbmUgYm94LiAgV2UgbXVzdCBoYXZlIGNsaWNrZWQgaW4gdGhlIGJv
cmRlci9wYWRkaW5nIG9mIG9uZSBvZiB0aGVzZSBib3hlcy4gIFdlCiAgICAgICAgIC8vIHNob3Vs
ZCB0cnkgdG8gZmluZCBhIHJlc3VsdCBieSBhc2tpbmcgb3VyIGNvbnRhaW5pbmcgYmxvY2suCi0g
ICAgICAgIHJldHVybiBjYi0+cG9zaXRpb25Gb3JQb2ludChwb2ludCwgcmVnaW9uKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay5wb3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24p
OwogICAgIH0KIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29vcmRzIGZyb20gdGhlIHByZS1hbm9u
eW1vdXMgYmxvY2sgdG8gdGhlIHBvc3QtYW5vbnltb3VzIGJsb2NrLgotICAgIExheW91dFBvaW50
IHBhcmVudEJsb2NrUG9pbnQgPSBjYi0+bG9jYXRpb24oKSArIHBvaW50OyAgCi0gICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGMgPSBjb250aW51YXRpb24oKTsKLSAgICB3aGlsZSAoYykgewotICAg
ICAgICBSZW5kZXJCb3gqIGNvbnRCbG9jayA9IGMtPmlzSW5saW5lKCkgPyBjLT5jb250YWluaW5n
QmxvY2soKSA6IHRvUmVuZGVyQmxvY2soYyk7Ci0gICAgICAgIGlmIChjLT5pc0lubGluZSgpIHx8
IGMtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiBjLT5wb3NpdGlvbkZvclBvaW50
KHBhcmVudEJsb2NrUG9pbnQgLSBjb250QmxvY2stPmxvY2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7
Ci0gICAgICAgIGMgPSB0b1JlbmRlckJsb2NrKGMpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCk7CisgICAgTGF5b3V0UG9pbnQgcGFyZW50QmxvY2tQb2ludCA9IGNvbnRhaW5pbmdCbG9jay5s
b2NhdGlvbigpICsgcG9pbnQ7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlv
biA9IHRoaXMtPmNvbnRpbnVhdGlvbigpOworICAgIHdoaWxlIChjb250aW51YXRpb24pIHsKKyAg
ICAgICAgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbi0+aXNJbmxpbmUo
KSA/IGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCkgOiBkb3duY2FzdDxSZW5kZXJCbG9j
az4oY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSB8
fCBjb250aW51YXRpb24tPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb250aW51
YXRpb24tPnBvc2l0aW9uRm9yUG9pbnQocGFyZW50QmxvY2tQb2ludCAtIGN1cnJlbnRCbG9jay0+
bG9jYXRpb25PZmZzZXQoKSwgcmVnaW9uKTsKKyAgICAgICAgY29udGludWF0aW9uID0gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KCpjb250aW51YXRpb24pLmlubGluZUVsZW1lbnRDb250aW51YXRpb24o
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpwb3NpdGlv
bkZvclBvaW50KHBvaW50LCByZWdpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggNDlhZmYxYzQ2NTU1ODIwY2EwZDBkZWZkNDIyYTE5ZTE2MmFlYmUwMi4u
NzE4OWJmYjNmMGMzNjZhNTI0ZmU1MjE0MzkyYTZiNzliNGQ0ZmMxNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjk4LDggKzMyOTgsOCBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgICAg
IC8vIE91ciBwcm9wcmlldGFyeSBvdmVyZmxvdzogb3ZlcmxheSB2YWx1ZSBkb2Vzbid0IHRyaWdn
ZXIgYSBsYXlvdXQuCiAgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlckJsb2NrKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5k
ZXJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xs
YmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxT
Y3JvbGxCYXJDaGFuZ2VkKTsKICAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2so
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC01NDE3LDcgKzU0MTcsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlw
UmVjdHNDb250ZXh0LCBjb25zdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGxh
eWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmVCeShMYXlvdXRQb2ludChmbG93VGhyZWFk
LT53aWR0aCgpLCAwKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9j
ayogcmVuZGVyZXJDb250YWluaW5nQmxvY2sgPSBib3hNb2RlbE9iamVjdC5lbmNsb3NpbmdCb3go
KS5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKCZib3hNb2RlbE9iamVjdC5lbmNsb3Np
bmdCb3goKSkgOiAwOworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIHJlbmRlcmVyQ29udGFpbmlu
Z0Jsb2NrID0gaXM8UmVuZGVyQmxvY2s+KGJveE1vZGVsT2JqZWN0LmVuY2xvc2luZ0JveCgpKSA/
ICZkb3duY2FzdDxSZW5kZXJCbG9jaz4oYm94TW9kZWxPYmplY3QuZW5jbG9zaW5nQm94KCkpIDog
bnVsbHB0cjsKICAgICAgICAgICAgIGlmIChyZW5kZXJlckNvbnRhaW5pbmdCbG9jaykKICAgICAg
ICAgICAgICAgICByZW5kZXJlckNvbnRhaW5pbmdCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxh
eWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggZWE3ZjIxODg1MTgxZTRiMWNiY2Qw
NGRlM2YyY2E1MDI5ODQ5MjAzMS4uNjJmNzQ1ZjUyOWFlMjQ5OTNjZThjYWQzZTNlOTNmZTMzMzA2
ZTk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBA
IC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTFVMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNs
dWRlICJQc2V1ZG9FbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIyNywyNSArMjI5LDI0IEBAIHN0
YXRpYyBSZW5kZXJCbG9jayogZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goUmVuZGVyQmxvY2sqIGN1
cnIsIFJlbmRlck9iamVjdCogbWFyCiAgICAgICAgIGlmIChjdXJyQ2hpbGQgPT0gbWFya2VyKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNJbmxpbmUo
KSAmJiAoIWN1cnJDaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSB8fCBjdXJyLT5nZW5lcmF0ZXNMaW5l
Qm94ZXNGb3JJbmxpbmVDaGlsZChjdXJyQ2hpbGQpKSkKKyAgICAgICAgaWYgKGN1cnJDaGlsZC0+
aXNJbmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGluZT4oKmN1cnJDaGlsZCkgfHwgY3Vyci0+Z2Vu
ZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoY3VyckNoaWxkKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gY3VycjsKIAogICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgY3Vy
ckNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzVGFibGUoKSB8fCAhY3VyckNoaWxkLT5pc1JlbmRl
ckJsb2NrKCkgfHwgKGN1cnJDaGlsZC0+aXNCb3goKSAmJiB0b1JlbmRlckJveChjdXJyQ2hpbGQp
LT5pc1dyaXRpbmdNb2RlUm9vdCgpKSkKKyAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNUYWJsZSgp
IHx8ICFpczxSZW5kZXJCbG9jaz4oKmN1cnJDaGlsZCkgfHwgKGlzPFJlbmRlckJveD4oKmN1cnJD
aGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqY3VyckNoaWxkKS5pc1dyaXRpbmdNb2RlUm9v
dCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChjdXJyLT5pc0xpc3RJdGVt
KCkgJiYgaW5RdWlya3NNb2RlICYmIGN1cnJDaGlsZC0+bm9kZSgpICYmCi0gICAgICAgICAgICAo
Y3VyckNoaWxkLT5ub2RlKCktPmhhc1RhZ05hbWUodWxUYWcpfHwgY3VyckNoaWxkLT5ub2RlKCkt
Pmhhc1RhZ05hbWUob2xUYWcpKSkKKyAgICAgICAgICAgIChpczxIVE1MVUxpc3RFbGVtZW50Pigq
Y3VyckNoaWxkLT5ub2RlKCkpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCpjdXJyQ2hpbGQtPm5v
ZGUoKSkpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgUmVuZGVyQmxvY2sqIGxpbmVC
b3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0b1JlbmRlckJsb2NrKGN1cnJDaGlsZCksIG1h
cmtlcik7Ci0gICAgICAgIGlmIChsaW5lQm94KQorICAgICAgICBpZiAoUmVuZGVyQmxvY2sqIGxp
bmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChkb3duY2FzdDxSZW5kZXJCbG9jaz4oY3Vy
ckNoaWxkKSwgbWFya2VyKSkKICAgICAgICAgICAgIHJldHVybiBsaW5lQm94OwogICAgIH0KIAot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIFJlbmRlckxpc3RJ
dGVtOjp1cGRhdGVWYWx1ZSgpCkBAIC0yOTQsNyArMjk1LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRl
bTo6aW5zZXJ0T3JNb3ZlTWFya2VyUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgIG5ld1BhcmVu
dC0+YWRkQ2hpbGQobV9tYXJrZXIuZ2V0KCksIGZpcnN0Tm9uTWFya2VyQ2hpbGQobmV3UGFyZW50
KSk7CiAgICAgICAgIG1fbWFya2VyLT51cGRhdGVNYXJnaW5zQW5kQ29udGVudCgpOwogICAgICAg
ICAvLyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhhdCBoYXMgbG9z
dCBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0LgotICAgICAgICBpZiAoY3VycmVudFBhcmVu
dCAmJiBjdXJyZW50UGFyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWN1cnJlbnRQYXJlbnQt
PmZpcnN0Q2hpbGQoKSAmJiAhdG9SZW5kZXJCbG9jayhjdXJyZW50UGFyZW50KS0+Y29udGludWF0
aW9uKCkpCisgICAgICAgIGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQtPmlzQW5v
bnltb3VzQmxvY2soKSAmJiAhY3VycmVudFBhcmVudC0+Zmlyc3RDaGlsZCgpICYmICFkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRQYXJlbnQpLmNvbnRpbnVhdGlvbigpKQogICAgICAgICAg
ICAgY3VycmVudFBhcmVudC0+ZGVzdHJveSgpOwogICAgIH0KIApAQCAtNDA2LDExICs0MDcsMTEg
QEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKCkKICAgICAgICAgICAg
ICAgICBvID0gby0+cGFyZW50Qm94KCk7CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhhc092ZXJm
bG93Q2xpcCgpKQogICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVWaXN1YWxPdmVyZmxvdyA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpvKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAocHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICB0
b1JlbmRlckJsb2NrKG8pLT5hZGRWaXN1YWxPdmVyZmxvdyhtYXJrZXJSZWN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqbykuYWRkVmlzdWFsT3ZlcmZs
b3cobWFya2VyUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wYWdhdGVMYXlvdXRP
dmVyZmxvdykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2sobyktPmFkZExh
eW91dE92ZXJmbG93KG1hcmtlclJlY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KCpvKS5hZGRMYXlvdXRPdmVyZmxvdyhtYXJrZXJSZWN0KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQog
ICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVMYXlvdXRPdmVyZmxvdyA9IGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5j
cHAKaW5kZXggNjEzNjJlZTcxY2E0MWJkZDdmN2NiZmEzMDk3OGYxYTJhNWRhMDY2MC4uMTY2NGQ0
N2IwYTI1NTU3Y2E1N2NlYWZhODAxNWUzOWFmMDVjOGNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCkBAIC0xODQsNyAr
MTg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bWF4UGFnZUxvZ2lj
YWxIZWlnaHQoKSBjb25zdAogICAgIEFTU0VSVChwYXJlbnQoKSk7CiAKICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHBhcmVudCgpLT5zdHlsZSgpOwotICAgIHJldHVybiBzdHls
ZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gUmVuZGVyRmxvd1RocmVh
ZDo6bWF4TG9naWNhbEhlaWdodCgpIDogdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKSk7
CisgICAgcmV0dXJuIHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkg
PyBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0KCkgOiBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKnBhcmVudCgpKS5jb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVU
b1VzZS5sb2dpY2FsTWF4SGVpZ2h0KCkpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OjpmbG93VGhyZWFkUG9ydGlvblJlY3RGb3JDbGlwcGluZyhib29sIGlzRmlyc3RS
ZWdpb25JblJhbmdlLCBib29sIGlzTGFzdFJlZ2lvbkluUmFuZ2UpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGNjNjQyNWZiNmM1ZWMzMTIzYmY5
ODI5ZTc2Y2IyZTQxNTkzZDg5M2EuLmQ5NTNjZTUyMTI5YTAwNjY3NmUxMDU0N2U2MjA3YWVkOTE3
YjQyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0z
OTksMTUgKzM5OSwxNSBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6dHJhdmVyc2VOZXh0
KGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbiwgVHJhdmVycwogICAgIHJldHVybiAwOwog
fQogCi1zdGF0aWMgUmVuZGVyT2JqZWN0OjpCbG9ja0NvbnRlbnRIZWlnaHRUeXBlIGluY2x1ZGVO
b25GaXhlZEhlaWdodChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcikKK3N0YXRpYyBSZW5kZXJP
YmplY3Q6OkJsb2NrQ29udGVudEhlaWdodFR5cGUgaW5jbHVkZU5vbkZpeGVkSGVpZ2h0KGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gcmVuZGVyLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpOwogICAgIGlmIChzdHlsZS5oZWlnaHQoKS50eXBlKCkgPT0gRml4ZWQpIHsK
LSAgICAgICAgaWYgKHJlbmRlci0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgICAgICBjb25z
dCBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcik7CisgICAgICAgIGlm
IChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSkgewogICAgICAgICAgICAgLy8gRm9yIGZpeGVk
IGhlaWdodCBzdHlsZXMsIGlmIHRoZSBvdmVyZmxvdyBzaXplIG9mIHRoZSBlbGVtZW50IHNwaWxs
cyBvdXQgb2YgdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgLy8gaGVpZ2h0LCBhc3N1bWUgd2Ug
Y2FuIGFwcGx5IHRleHQgYXV0by1zaXppbmcuCi0gICAgICAgICAgICBpZiAoc3R5bGUub3ZlcmZs
b3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUuaGVpZ2h0KCkudmFsdWUoKSA8IGJsb2NrLT5sYXlv
dXRPdmVyZmxvd1JlY3QoKS5tYXhZKCkpCisgICAgICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZ
KCkgPT0gT1ZJU0lCTEUKKyAgICAgICAgICAgICAgICAmJiBzdHlsZS5oZWlnaHQoKS52YWx1ZSgp
IDwgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5sYXlvdXRPdmVyZmxvd1JlY3QoKS5t
YXhZKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6T3ZlcmZsb3dIZWln
aHQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Rml4ZWRIZWlnaHQ7
CkBAIC02NzIsOCArNjcyLDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNoZWNrQmxvY2tQb3NpdGlv
bmVkT2JqZWN0c05lZWRMYXlvdXQoKQogewogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAK
LSAgICBpZiAoaXNSZW5kZXJCbG9jaygpKQotICAgICAgICB0b1JlbmRlckJsb2NrKHRoaXMpLT5j
aGVja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91dCgpOworICAgIGlmIChpczxSZW5kZXJCbG9j
az4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnRoaXMpLmNoZWNrUG9z
aXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiB9CiAjZW5kaWYKIApAQCAtNzIwLDIyICs3MjAs
MjIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldExheWVyTmVlZHNGdWxsUmVwYWludEZvclBvc2l0
aW9uZWRNb3ZlbWVudExheW91dCgpCiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRh
aW5pbmdCbG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0byBvID0gcGFyZW50KCk7Ci0gICAgaWYgKCFv
ICYmIGlzUmVuZGVyU2Nyb2xsYmFyUGFydCgpKQotICAgICAgICBvID0gdG9SZW5kZXJTY3JvbGxi
YXJQYXJ0KHRoaXMpLT5yZW5kZXJlck93bmluZ1Njcm9sbGJhcigpOworICAgIGF1dG8gcGFyZW50
ID0gdGhpcy0+cGFyZW50KCk7CisgICAgaWYgKCFwYXJlbnQgJiYgaXM8UmVuZGVyU2Nyb2xsYmFy
UGFydD4oKnRoaXMpKQorICAgICAgICBwYXJlbnQgPSBkb3duY2FzdDxSZW5kZXJTY3JvbGxiYXJQ
YXJ0PigqdGhpcykucmVuZGVyZXJPd25pbmdTY3JvbGxiYXIoKTsKIAogICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0gICAgaWYgKCFpc1RleHQoKSAmJiBzdHls
ZS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIG8gPSBjb250YWluaW5nQmxv
Y2tGb3JGaXhlZFBvc2l0aW9uKG8pOwotICAgIGVsc2UgaWYgKCFpc1RleHQoKSAmJiBzdHlsZS5w
b3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24pCi0gICAgICAgIG8gPSBjb250YWluaW5nQmxv
Y2tGb3JBYnNvbHV0ZVBvc2l0aW9uKG8pOworICAgIGlmICghaXM8UmVuZGVyVGV4dD4oKnRoaXMp
ICYmIHN0eWxlLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAgcGFyZW50ID0g
Y29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbihwYXJlbnQpOworICAgIGVsc2UgaWYgKCFp
czxSZW5kZXJUZXh0PigqdGhpcykgJiYgc3R5bGUucG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0
aW9uKQorICAgICAgICBwYXJlbnQgPSBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9u
KHBhcmVudCk7CiAgICAgZWxzZQotICAgICAgICBvID0gY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0
SW5GbG93KG8pOworICAgICAgICBwYXJlbnQgPSBjb250YWluaW5nQmxvY2tGb3JPYmplY3RJbkZs
b3cocGFyZW50KTsKIAotICAgIGlmICghbyB8fCAhby0+aXNSZW5kZXJCbG9jaygpKQotICAgICAg
ICByZXR1cm4gMDsgLy8gVGhpcyBjYW4gc3RpbGwgaGFwcGVuIGluIGNhc2Ugb2YgYW4gb3JwaGFu
ZWQgdHJlZQorICAgIGlmICghaXM8UmVuZGVyQmxvY2s+KHBhcmVudCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOyAvLyBUaGlzIGNhbiBzdGlsbCBoYXBwZW4gaW4gY2FzZSBvZiBhbiBvcnBoYW5l
ZCB0cmVlCiAKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KHBhcmVudCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGlu
ZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZsb2F0IHgxLCBm
bG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLApAQCAtMTY3OSwxMCArMTY3OSwxMCBAQCB2b2lk
IFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2UoKQogICAgIHNl
dElubGluZShzdHlsZSgpLmlzRGlzcGxheUlubGluZVR5cGUoKSk7CiAgICAgaWYgKGlzSW5saW5l
KCkgIT0gcGFyZW50KCktPmNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgaWYgKCFpc0lubGlu
ZSgpKQotICAgICAgICAgICAgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChwYXJlbnQoKSktPmNoaWxk
QmVjYW1lTm9uSW5saW5lKHRoaXMpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94TW9k
ZWxPYmplY3Q+KCpwYXJlbnQoKSkuY2hpbGRCZWNhbWVOb25JbmxpbmUodGhpcyk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2NrIG11c3QgYmUgbWFkZSB0
byB3cmFwIHRoaXMgaW5saW5lLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9S
ZW5kZXJCbG9jayhwYXJlbnQoKSktPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgICAg
ICBSZW5kZXJCbG9jayogYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5j
cmVhdGVBbm9ueW1vdXNCbG9jaygpOwogICAgICAgICAgICAgcGFyZW50KCktPmluc2VydENoaWxk
SW50ZXJuYWwoYmxvY2ssIHRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxkcmVuKTsKICAg
ICAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZEludGVybmFsKCp0aGlzLCBSZW5kZXJFbGVt
ZW50OjpOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRl
cm5hbCh0aGlzLCBudWxscHRyLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CkBAIC0x
NjkyLDggKzE2OTIsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9z
aXRpb25DaGFuZ2UoKQogCiB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlQW5vbnltb3VzV3JhcHBl
cnNGb3JJbmxpbmVzSWZOZWNlc3NhcnkoKQogewotICAgIFJlbmRlckJsb2NrKiBwYXJlbnRCbG9j
ayA9IHRvUmVuZGVyQmxvY2socGFyZW50KCkpOwotICAgIGlmICghcGFyZW50QmxvY2stPmNhbkNv
bGxhcHNlQW5vbnltb3VzQmxvY2tDaGlsZCgpKQorICAgIFJlbmRlckJsb2NrJiBwYXJlbnRCbG9j
ayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpOworICAgIGlmICghcGFyZW50Qmxv
Y2suY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFdlIGhhdmUgY2hhbmdlZCB0byBmbG9hdGVkIG9yIG91dC1vZi1mbG93IHBvc2l0aW9u
aW5nIHNvIG1heWJlIGFsbCBvdXIgcGFyZW50J3MKQEAgLTE3MDEsMTkgKzE3MDEsMTggQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91c1dyYXBwZXJzRm9ySW5saW5lc0lmTmVjZXNz
YXJ5KCkKICAgICAvLyBvdGhlcndpc2Ugd2UgY2FuIHByb2NlZWQgdG8gc3RyaXBwaW5nIHNvbGl0
YXJ5IGFub255bW91cyB3cmFwcGVycyBmcm9tIHRoZSBpbmxpbmVzLgogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYWxzbyBoYW5kbGUgc3BsaXQgaW5saW5lcyBoZXJlIC0gd2UgZXhjbHVkZSB0aGVt
IGF0IHRoZSBtb21lbnQgYnkgcmV0dXJuaW5nCiAgICAgLy8gaWYgd2UgZmluZCBhIGNvbnRpbnVh
dGlvbi4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKS0+Zmlyc3RDaGlsZCgpOwot
ICAgIHdoaWxlIChjdXJyICYmICgoY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpICYmICF0b1JlbmRl
ckJsb2NrKGN1cnIpLT5pc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpIHx8IGN1cnItPnN0
eWxlKCkuaXNGbG9hdGluZygpIHx8IGN1cnItPnN0eWxlKCkuaGFzT3V0T2ZGbG93UG9zaXRpb24o
KSkpCi0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOworICAgIFJlbmRlck9iamVj
dCogY3VycmVudCA9IHBhcmVudCgpLT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGN1cnJlbnQg
JiYgKChjdXJyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2Nr
PigqY3VycmVudCkuaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKSB8fCBjdXJyZW50LT5z
dHlsZSgpLmlzRmxvYXRpbmcoKSB8fCBjdXJyZW50LT5zdHlsZSgpLmhhc091dE9mRmxvd1Bvc2l0
aW9uKCkpKQorICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKIAotICAg
IGlmIChjdXJyKQorICAgIGlmIChjdXJyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBjdXJy
ID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY3VycikgewotICAgICAgICBS
ZW5kZXJPYmplY3QqIG5leHQgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAgICBpZiAoY3Vy
ci0+aXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICAgICAgcGFyZW50QmxvY2stPmNvbGxhcHNl
QW5vbnltb3VzQm94Q2hpbGQocGFyZW50QmxvY2ssIHRvUmVuZGVyQmxvY2soY3VycikpOwotICAg
ICAgICBjdXJyID0gbmV4dDsKKyAgICBSZW5kZXJPYmplY3QqIG5leHQ7CisgICAgZm9yIChjdXJy
ZW50ID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IG5leHQpIHsK
KyAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGlmIChjdXJy
ZW50LT5pc0Fub255bW91c0Jsb2NrKCkpCisgICAgICAgICAgICBwYXJlbnRCbG9jay5jb2xsYXBz
ZUFub255bW91c0JveENoaWxkKHBhcmVudEJsb2NrLCBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY3Vy
cmVudCkpOwogICAgIH0KIH0KIApAQCAtMjI3MCwxMiArMjI2OSwxMiBAQCBzdGF0aWMgQ29sb3Ig
ZGVjb3JhdGlvbkNvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSkKIHZvaWQgUmVuZGVyT2JqZWN0Ojpn
ZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9yJiB1bmRlcmxpbmUs
IENvbG9yJiBvdmVybGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2xvciYgbGluZXRocm91Z2gsIGJvb2wgcXVpcmtzTW9kZSwgYm9vbCBmaXJzdGxpbmVT
dHlsZSkKIHsKLSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSB0aGlzOwotICAgIFJlbmRlclN0eWxl
KiBzdHlsZVRvVXNlID0gMDsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSB0aGlzOworICAg
IFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3JhdGlvbiBj
dXJyRGVjcyA9IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xvcjsKICAg
ICBkbyB7Ci0gICAgICAgIHN0eWxlVG9Vc2UgPSBmaXJzdGxpbmVTdHlsZSA/ICZjdXJyLT5maXJz
dExpbmVTdHlsZSgpIDogJmN1cnItPnN0eWxlKCk7CisgICAgICAgIHN0eWxlVG9Vc2UgPSBmaXJz
dGxpbmVTdHlsZSA/ICZjdXJyZW50LT5maXJzdExpbmVTdHlsZSgpIDogJmN1cnJlbnQtPnN0eWxl
KCk7CiAgICAgICAgIGN1cnJEZWNzID0gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRpb24oKTsKICAg
ICAgICAgcmVzdWx0Q29sb3IgPSBkZWNvcmF0aW9uQ29sb3Ioc3R5bGVUb1VzZSk7CiAgICAgICAg
IC8vIFBhcmFtZXRlciAnZGVjb3JhdGlvbnMnIGlzIGNhc3QgYXMgYW4gaW50IHRvIGVuYWJsZSB0
aGUgYml0d2lzZSBvcGVyYXRpb25zIGJlbG93LgpAQCAtMjI5MywxNiArMjI5MiwxNiBAQCB2b2lk
IFJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMoaW50IGRlY29yYXRpb25zLCBD
b2xvciYgdW5kZXJsaW5lLCBDbwogICAgICAgICAgICAgICAgIGxpbmV0aHJvdWdoID0gcmVzdWx0
Q29sb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnItPmlzUnVi
eVRleHQoKSkKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzUnVieVRleHQoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwotICAgICAgICBpZiAoY3Vy
ciAmJiBjdXJyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhjdXJyKS0+Y29u
dGludWF0aW9uKCkpCi0gICAgICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhjdXJyKS0+Y29u
dGludWF0aW9uKCk7Ci0gICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJr
c01vZGUgfHwgIWN1cnItPm5vZGUoKSB8fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50PigqY3Vyci0+
bm9kZSgpKSAmJiAhY3Vyci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOworICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7CisgICAgICAgIGlmIChjdXJyZW50ICYmIGN1
cnJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJl
bnQpLmNvbnRpbnVhdGlvbigpKQorICAgICAgICAgICAgY3VycmVudCA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY3VycmVudCkuY29udGludWF0aW9uKCk7CisgICAgfSB3aGlsZSAoY3VycmVudCAm
JiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnJlbnQtPm5vZGUoKSB8fCAoIWlz
PEhUTUxBbmNob3JFbGVtZW50PigqY3VycmVudC0+bm9kZSgpKSAmJiAhY3VycmVudC0+bm9kZSgp
LT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOwogCiAgICAgLy8gSWYgd2UgYmFpbGVkIG91dCwgdXNl
IHRoZSBlbGVtZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBhIDxmb250PiBvciA8YT4g
ZWxlbWVudCkuCi0gICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsKLSAgICAgICAgc3R5bGVU
b1VzZSA9IGZpcnN0bGluZVN0eWxlID8gJmN1cnItPmZpcnN0TGluZVN0eWxlKCkgOiAmY3Vyci0+
c3R5bGUoKTsKKyAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3VycmVudCkgeworICAgICAgICBzdHls
ZVRvVXNlID0gZmlyc3RsaW5lU3R5bGUgPyAmY3VycmVudC0+Zmlyc3RMaW5lU3R5bGUoKSA6ICZj
dXJyZW50LT5zdHlsZSgpOwogICAgICAgICByZXN1bHRDb2xvciA9IGRlY29yYXRpb25Db2xvcihz
dHlsZVRvVXNlKTsKICAgICAgICAgaWYgKGRlY29yYXRpb25zICYgVGV4dERlY29yYXRpb25VbmRl
cmxpbmUpCiAgICAgICAgICAgICB1bmRlcmxpbmUgPSByZXN1bHRDb2xvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAppbmRleCA1MWIwZDFjMDdhNjdlMGIyMTUxMGRhZjU0
YjA1YWQ5Y2U0MDEzZWE4Li5jZGVjNTlhMDVhYjY1ZWM3NWM5ODgxYjc5ODhlMzNjYTVhYTE2MTFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCkBAIC03NSwxMyArNzUs
MTMgQEAgc3RhdGljIGlubGluZSBib29sIGlzUnVieUFmdGVyQmxvY2soY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QmVmb3JlQmxvY2so
Y29uc3QgUmVuZGVyRWxlbWVudCogcnVieSkKIHsKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0g
cnVieS0+Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiBpc1J1YnlCZWZvcmVCbG9jayhjaGlsZCkg
PyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAgcmV0dXJuIGlzUnVieUJlZm9yZUJsb2Nr
KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkgOiBudWxscHRyOwogfQogCiBz
dGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QWZ0ZXJCbG9jayhjb25zdCBSZW5kZXJFbGVt
ZW50KiBydWJ5KQogewogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGQo
KTsKLSAgICByZXR1cm4gaXNSdWJ5QWZ0ZXJCbG9jayhjaGlsZCkgPyB0b1JlbmRlckJsb2NrKGNo
aWxkKSA6IDA7CisgICAgcmV0dXJuIGlzUnVieUFmdGVyQmxvY2soY2hpbGQpID8gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBSZW5kZXJCbG9jayog
Y3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKFJlbmRlck9iamVjdCYgcnVieSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCmluZGV4IDdkYmUxNDViNTg1
NzRhNTZiODY3MzgyNDU1NzI3MjNmNjM0Y2Q4N2UuLmVhMGNkNjM4NDRlNGM2NmUwZGUxNTY2YWJj
NjYyMzUyODQwNDQ4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlC
YXNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3ZlSW5saW5l
Q2hpbGRyZW4oUmVuZGVyUnVieUJhc2UqIHRvQmFzZSwgUmVuZGVyT2JqZWN0KiBiZQogICAgICAg
ICAvLyBJZiB0b0Jhc2UgaGFzIGEgc3VpdGFibGUgYmxvY2ssIHdlIHJlLXVzZSBpdCwgb3RoZXJ3
aXNlIGNyZWF0ZSBhIG5ldyBvbmUuCiAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkID0g
dG9CYXNlLT5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQt
PmlzQW5vbnltb3VzQmxvY2soKSAmJiBsYXN0Q2hpbGQtPmNoaWxkcmVuSW5saW5lKCkpCi0gICAg
ICAgICAgICB0b0Jsb2NrID0gdG9SZW5kZXJCbG9jayhsYXN0Q2hpbGQpOworICAgICAgICAgICAg
dG9CbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGQpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIHRvQmxvY2sgPSB0b0Jhc2UtPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7
CiAgICAgICAgICAgICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9jaywgbnVsbHB0
ciwgTm90aWZ5Q2hpbGRyZW4pOwpAQCAtMTE4LDggKzExOCw4IEBAIHZvaWQgUmVuZGVyUnVieUJh
c2U6Om1vdmVCbG9ja0NoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJlbmRlck9iamVj
dCogYmVmCiAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGRUaGVyZSA9IHRvQmFzZS0+bGFzdENo
aWxkKCk7CiAgICAgaWYgKGZpcnN0Q2hpbGRIZXJlLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmly
c3RDaGlsZEhlcmUtPmNoaWxkcmVuSW5saW5lKCkgCiAgICAgICAgICAgICAmJiBsYXN0Q2hpbGRU
aGVyZSAmJiBsYXN0Q2hpbGRUaGVyZS0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGxhc3RDaGlsZFRo
ZXJlLT5jaGlsZHJlbklubGluZSgpKSB7ICAgICAgICAgICAgCi0gICAgICAgIFJlbmRlckJsb2Nr
KiBhbm9uQmxvY2tIZXJlID0gdG9SZW5kZXJCbG9jayhmaXJzdENoaWxkSGVyZSk7Ci0gICAgICAg
IFJlbmRlckJsb2NrKiBhbm9uQmxvY2tUaGVyZSA9IHRvUmVuZGVyQmxvY2sobGFzdENoaWxkVGhl
cmUpOworICAgICAgICBSZW5kZXJCbG9jayogYW5vbkJsb2NrSGVyZSA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPihmaXJzdENoaWxkSGVyZSk7CisgICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2tU
aGVyZSA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGRUaGVyZSk7CiAgICAgICAgIGFu
b25CbG9ja0hlcmUtPm1vdmVBbGxDaGlsZHJlblRvKGFub25CbG9ja1RoZXJlLCB0cnVlKTsKICAg
ICAgICAgYW5vbkJsb2NrSGVyZS0+ZGVsZXRlTGluZXMoKTsKICAgICAgICAgYW5vbkJsb2NrSGVy
ZS0+ZGVzdHJveSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CmluZGV4IDMzNTU1NDZlZTY3NjU1YjNkZTBlOGZiN2I1YWRhYmM3OTdiM2U5YTguLjJiMmMzZjRh
ZmZkZWVkYTExYWNkN2NhNmEwNTI3NjEwYThiN2MwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTE4MjEsMTUgKzE4MjEsMTUgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCiB7
CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghby5pc1JlbmRlckJsb2NrKCkpCisgICAg
aWYgKCFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9ICp0b1JlbmRlckJsb2NrKCZvKTsK
KyAgICBjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4ocmVuZGVyZXIpOwogCiAgICAgTGF5b3V0VW5pdCBjb250ZW50V2lkdGggPSByZW5kZXJCbG9j
ay5jb250ZW50V2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHQgPSByZW5kZXJC
bG9jay5jb250ZW50SGVpZ2h0KCk7CkBAIC0xODc4LDEzICsxODc4LDExIEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QKIAogICAgIC8vIFdlIGNvdWxkIGRyYXcgdGhlIHNuYXBzaG90IHdpdGggdGhh
dCBjb29yZGluYXRlcywgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlCiAgICAgLy8gaXNu
J3QgYSBjb21wb3NpdGVkIGxheWVyIGJldHdlZW4gdXMgYW5kIHRoZSBwbHVnSW5SZW5kZXJlci4K
LSAgICBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KCZvKTsKLSAgICB3
aGlsZSAocmVuZGVyQm94ICE9IHBsdWdJblJlbmRlcmVyKSB7CisgICAgZm9yIChhdXRvKiByZW5k
ZXJCb3ggPSAmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7IHJlbmRlckJveCAhPSBwbHVn
SW5SZW5kZXJlcjsgcmVuZGVyQm94ID0gcmVuZGVyQm94LT5wYXJlbnRCb3goKSkgewogICAgICAg
ICBpZiAocmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKSAmJiByZW5k
ZXJCb3gtPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CiAgICAgICAgICAgICBzbmFwc2hvdEFi
c1BvcyA9IC1yZW5kZXJCb3gtPmxvY2F0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICByZW5kZXJCb3ggPSByZW5kZXJCb3gtPnBhcmVudEJveCgpOwogICAgIH0K
IAogICAgIExheW91dFNpemUgcGx1Z2luU2l6ZShwbHVnSW5SZW5kZXJlci0+Y29udGVudFdpZHRo
KCksIHBsdWdJblJlbmRlcmVyLT5jb250ZW50SGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDc0YzNjMGEwYmNjYTdlYzQ3YWFhYzljMzMz
NjZkMGZjMzk5MmQ1MGYuLmI3YjY0ZWE3ODRjYTE4NmEyNWY5NDFlZjRjMGY4YjYzZjU5MTgxY2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTEyNiw3
ICsxMjYsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVj
dCogbGF5b3V0Um9vdCkKICAgICB9CiAKICAgICAvLyBUaGUgbGF5b3V0Um9vdCBjb3VsZCBiZSBu
ZWl0aGVyIGEgY29udGFpbmVyIG5vciBhIGNsdXN0ZXIsIHNvIHdhbGsgdXAgdGhlIHRyZWUgdGls
bCB3ZSBmaW5kIGVhY2ggb2YgdGhlc2UuCi0gICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IGxh
eW91dFJvb3QtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2sobGF5b3V0Um9vdCkgOiBs
YXlvdXRSb290LT5jb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJCbG9jayogY29udGFpbmVy
ID0gaXM8UmVuZGVyQmxvY2s+KCpsYXlvdXRSb290KSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihs
YXlvdXRSb290KSA6IGxheW91dFJvb3QtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIHdoaWxlIChj
b250YWluZXIgJiYgIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIpKQogICAgICAgICBj
b250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCkBAIC0yMDQsMTQgKzIw
NCwxNCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlw
bGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVAogCiAgICAgUmVuZGVyT2JqZWN0KiBkZXNj
ZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKHN1
YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7CiAgICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsKLSAgICAg
ICAgaWYgKGRlc2NlbmRhbnQtPmlzVGV4dCgpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJUZXh0
PigqZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIGlmIChsb2NhbE11bHRpcGxpZXIgIT0gMSAm
JiBkZXNjZW5kYW50LT5zdHlsZSgpLT50ZXh0QXV0b3NpemluZ011bHRpcGxpZXIoKSA9PSAxKSB7
CiAgICAgICAgICAgICAgICAgc2V0TXVsdGlwbGllcihkZXNjZW5kYW50LCBsb2NhbE11bHRpcGxp
ZXIpOwogICAgICAgICAgICAgICAgIHNldE11bHRpcGxpZXIoZGVzY2VuZGFudC0+cGFyZW50KCks
IGxvY2FsTXVsdGlwbGllcik7IC8vIFBhcmVudCBkb2VzIGxpbmUgc3BhY2luZy4KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtlciBzaXplIHBy
b3BvcnRpb25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIo
ZGVzY2VuZGFudCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sg
PSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRl
c2NlbmRhbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihkZXNjZW5kYW50KTsKICAgICAg
ICAgICAgIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8gZGVzY2VuZGFudENsdXN0ZXJJbmZvKGRl
c2NlbmRhbnRCbG9jayk7CiAgICAgICAgICAgICBpZiAoaXNXaWRlckRlc2NlbmRhbnQoZGVzY2Vu
ZGFudEJsb2NrLCBjbHVzdGVySW5mbykgfHwgaXNJbmRlcGVuZGVudERlc2NlbmRhbnQoZGVzY2Vu
ZGFudEJsb2NrKSkKICAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50Q2x1
c3RlckluZm8sIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsK
QEAgLTQ5Niw3ICs0OTYsNyBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50
VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIFRleAogICAgICAgICBpZiAo
IXNraXBMb2NhbFRleHQgJiYgaXM8UmVuZGVyVGV4dD4oKmRlc2NlbmRhbnQpKQogICAgICAgICAg
ICAgdGV4dFdpZHRoICs9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpkZXNjZW5kYW50KS5yZW5kZXJl
ZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZvbnRTaXplKCk7
CiAgICAgICAgIGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewot
ICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2so
ZGVzY2VuZGFudCk7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGRlc2NlbmRhbnQpOwogICAgICAgICAgICAgaWYgKCFpc0F1
dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8pKQogICAgICAgICAg
ICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgY2x1c3Rl
ckluZm8sIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgfQpAQCAtNTQyLDggKzU0
Miw4IEBAIGNvbnN0IFJlbmRlckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2Nr
Q29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyCiAgICAgICAgIGxhc3ROb2RlID0gbGFzdE5v
ZGUtPnBhcmVudCgpOwogICAgIH0KIAotICAgIGlmIChmaXJzdE5vZGUtPmlzUmVuZGVyQmxvY2so
KSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyQmxvY2soZmlyc3ROb2RlKTsKKyAgICBpZiAoaXM8
UmVuZGVyQmxvY2s+KCpmaXJzdE5vZGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KGZpcnN0Tm9kZSk7CiAKICAgICAvLyBjb250YWluaW5nQmxvY2soKSBzaG91bGQgbmV2
ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNlIGl0IG9ubHkgc2tpcHMgYW5jZXN0b3JzIHdoZW4g
ZmluZGluZyB0aGUKICAgICAvLyBjb250YWluZXIgb2YgcG9zaXRpb246YWJzb2x1dGUvZml4ZWQg
YmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4aXN0IGJldHdlZW4gYSBjbHVzdGVyIGFuZCBpdHMg
dGV4dApAQCAtNTU4LDIxICs1NTgsMjAgQEAgY29uc3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6
ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXIKIGNvbnN0
IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQsIHNpemVfdCYgZGVwdGgsIFRyYXZlcnNhbERp
cmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYgKHBhcmVudC0+aXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gcGFyZW50LT5pc1RleHQoKSA/IHBhcmVudCA6IDA7CisgICAgICAgIHJldHVybiBp
czxSZW5kZXJUZXh0PigqcGFyZW50KSA/IHBhcmVudCA6IG51bGxwdHI7CiAKICAgICArK2RlcHRo
OwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQgPSAoZGlyZWN0aW9uID09IEZpcnN0VG9M
YXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFyZW50LT5sYXN0Q2hpbGQoKTsKICAgICB3
aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDb250YWluZXIoY2hpbGQp
IHx8ICFpc0luZGVwZW5kZW50RGVzY2VuZGFudCh0b1JlbmRlckJsb2NrKGNoaWxkKSkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90
SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIGlmIChsZWFm
KQorICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjaGlsZCkgfHwgIWlzSW5kZXBl
bmRlbnREZXNjZW5kYW50KGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkpKSB7CisgICAgICAg
ICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJ
bkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pKQogICAgICAgICAgICAgICAgIHJldHVy
biBsZWFmOwogICAgICAgICB9CiAgICAgICAgIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRv
TGFzdCkgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsK
ICAgICB9CiAgICAgLS1kZXB0aDsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggMjgwNjM5MDY4ZDU2YWQ5MGEyNzkyNDJm
NzVmOWE3MDk3OWU4NDQzNS4uYjYzYWNmNDExY2NhZDM1YjMwODY1MWUxOTA5M2MyYTA1NjcwN2Jl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojps
YXlvdXQoKQogICAgICAgICAgICAgYXV0byBpbmRleCA9IGluZGV4V3JhcHBlcigpOwogICAgICAg
ICAgICAgZmxvYXQgaW5kZXhIZWlnaHQgPSAwOwogICAgICAgICAgICAgaWYgKCFpbmRleC0+aXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIGluZGV4SGVpZ2h0ID0gdG9SZW5kZXJCbG9jayhpbmRl
eC0+Zmlyc3RDaGlsZCgpKS0+bG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgICAgIGluZGV4
SGVpZ2h0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCppbmRleC0+Zmlyc3RDaGlsZCgpKS5sb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgICAgICAgICBmbG9hdCBpbmRleFRvcE1hcmdpbiA9ICgxLjAgLSBt
X2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCkgKiByYWRpY2FsLT5zdHJldGNoU2l6ZSgpICsgcmFk
aWNhbFRvcE1hcmdpbiAtIGluZGV4SGVpZ2h0OwogICAgICAgICAgICAgaWYgKGluZGV4VG9wTWFy
Z2luIDwgMCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpbmRleCBpcyB0b28gdGFsbCwg
d2UgbXVzdCBhZGQgc3BhY2UgYXQgdGhlIHRvcCBvZiByZW5kZXJlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCA5NTY5
ODNiYWZiMjFlYmZiYTE3Zjg3MWEwYjBmN2MxZjNhZWIzYTViLi4zMDAxMDU5ZWYxMWRjNzNiYmFm
MDIyYWRlZTJiZjBhMGY1ODViNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC03NzQsNyArNzc0LDcgQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBwb2ludCwKICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgp
LnVzZXJTZWxlY3QoKSA9PSBTRUxFQ1RfTk9ORSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBpZiAocmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkgJiYgKHJlbmRlcmVyLT5pc1JlbmRl
ckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGlu
dWF0aW9uKCkpICYmICFyZW5kZXJlci0+aXNUYWJsZSgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5j
aGlsZHJlbklubGluZSgpICYmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSAmJiAhZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKSAm
JiAhcmVuZGVyZXItPmlzVGFibGUoKSkgewogICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRV
bml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25CYWNr
d2FyZCk7CiAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChBU1NFUlRfTk9f
RVhDRVBUSU9OKSkKICAgICAgICAgICAgIHJldHVybiByYW5nZTsKQEAgLTEzMTYsNyArMTMxNiw3
IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUo
UmFuZ2UqIGN1cnJlbnRSYW5nZSwgU2VsZWN0CiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRF
bGVtZW50KCk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkgJiYgKHJl
bmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxp
bmVFbGVtZW50Q29udGludWF0aW9uKCkpICYmICFyZW5kZXJlci0+aXNUYWJsZSgpKQorICAgIGlm
IChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAoaXM8UmVuZGVyQmxv
Y2s+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGlu
ZUVsZW1lbnRDb250aW51YXRpb24oKSkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCkpCiAgICAgICAg
IGZsYWdzID0gTm9uZTsKIAogICAgIHJldHVybiBiZXN0UmFuZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239496</attachid>
            <date>2014-10-08 14:51:40 -0700</date>
            <delta_ts>2014-10-08 15:49:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137512-20141008145142.patch</filename>
            <type>text/plain</type>
            <size>126187</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQwY2E4NTFmMWU2YWZh
NmE1OWQyMWU0MTViOTEzYmI1ZTJlNzU2Zi4uNjNhZDFjNmQ3NWRkNTdjYTA4YmY1NjQ2ZTllYzU1
NGVkODZiNzkyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNC0xMC0wNyAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQmxvY2sgb2JqZWN0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NTEyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3Ig
UmVuZGVyQmxvY2sgb2JqZWN0cyBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIHN1cnJvdW5kaW5n
IGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Omxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhcnRPZkNvbnRpbnVhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5k
T2ZDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkQmVmb3JlQ29uc2lkZXJp
bmdDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJl
bmRlclBhcmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVVJS2l0
RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBjb250YWluc09ubHlJbmxpbmVPYmpl
Y3RzXSk6CisgICAgICAgICgtW0RPTU5vZGUgaXNTZWxlY3RhYmxlQmxvY2tdKToKKyAgICAgICAg
KC1bRE9NSFRNTEVsZW1lbnQgc3RydWN0dXJhbENvbXBsZXhpdHlDb250cmlidXRpb25dKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnZhbHVlRm9yR3JpZFRyYWNrTGlzdCk6CisgICAgICAgICogZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnNob3VsZFJlcHJl
c2VudE5vZGVPZmZzZXRaZXJvKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpj
b250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRh
aW5pbmdCbG9ja0ZvckFic29sdXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFp
bmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzcGxpdEJsb2Nrcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpjYW5NZXJnZUFub255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bk1lcmdlQ29udGlndW91c0Fub255bW91c0Jsb2Nrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6YmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpi
bG9ja0JlZm9yZVdpdGhpblNlbGVjdGlvblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGls
ZEhpdFRlc3RDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpcnN0
TGluZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdExldHRlckJsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklubGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmspOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc01hcmdpbkFmdGVyUXVpcmspOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjptYXJnaW5CZWZv
cmVFc3RpbWF0ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93OjphZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZv
clBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3Rh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVsYXRlSW5GbG93UG9zaXRpb25PZmZzZXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRUbyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkcmVuVG8p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJl
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVT
dHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbnRp
bnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJlbnRPZkZpcnN0TGluZUJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2Vy
UmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6cG9z
aXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6Om1h
eFBhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVOb25GaXhlZEhlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNoZWNrQmxvY2tQb3NpdGlvbmVkT2JqZWN0c05lZWRMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3NpdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91
c1dyYXBwZXJzRm9ySW5saW5lc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSdWJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1YnlCZWZvcmVCbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpydWJ5QWZ0ZXJCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjptb3ZlSW5s
aW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVCbG9j
a0NoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJs
YXkpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVz
dGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KToKKwogMjAxNC0xMC0w
OCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IGZvbGxvdy11cCBmaXggZm9yIHIxNzQ0NjAuIERvIG5vdCByZWdpc3RlciBmb3IgS1ZPcyBpZiB0
aGUgb2JqZWN0IGRvZXMgbm90IHJlc3BvbmQgdG8gdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBmN2ViZTUzNTE0MjA2YTNjZTRhYWQ1NzkxMjRjODliYTRiZTY5NjM2Li4yMzcw
YWQzZDUzZmE2NzEzNTk5NTU5ZGEwOWY5NGM1NzVlYTEwYTVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTQtMTAtMDcgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9i
amVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NzUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSBp
czw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9iamVjdHMgYW5kIGNsZWFuIHVw
IHRoZSAKKyAgICAgICAgc3Vycm91bmRpbmcgY29kZS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFu
Z2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
Y29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZSk6CisKIDIwMTQtMTAtMDggIEFkYSBDaGFuICA8YWRh
Y2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IFdLUGFnZUlzUGxheWluZ0F1ZGlv
KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBlZjMyMThmNGFlM2YzMjQyYmZhMzY3ZDY3OWU4
NTI1MjBkNTU1YjJmLi5mNTc2OTE0NWE1MjA4M2E5MjkyMDFmNDBmYjRmYjVjYTJiN2IyMjEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE4NiwzNyArMTg2LDM1IEBAIHN0YXRpYyBpbmxpbmUg
UmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSW5Db250aW51YXRpb24oUmVuZGVySW5saW5lJiByZW5k
ZXJlcikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0Nv
bnRpbnVhdGlvbihSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIFJlbmRlck9iamVjdCog
Zmlyc3RDaGlsZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOworICAgIFJlbmRlck9iamVj
dCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLmZpcnN0Q2hpbGRTbG93KCk7CiAKLSAgICBpZiAoIWZp
cnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKHJlbmRlcmVyKSkKLSAgICAgICAg
Zmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRJbkNvbnRpbnVhdGlvbih0b1JlbmRlcklubGluZSgqcmVu
ZGVyZXIpKTsKKyAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9u
KCZyZW5kZXJlcikpCisgICAgICAgIGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkSW5Db250aW51YXRp
b24oZG93bmNhc3Q8UmVuZGVySW5saW5lPihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIGZpcnN0
Q2hpbGQ7CiB9CiAKIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZENvbnNp
ZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgaW5saW5l
IFJlbmRlck9iamVjdCogbGFzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCA9IHJlbmRlcmVy
LT5sYXN0Q2hpbGRTbG93KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2OwotICAgIFJlbmRlck9i
amVjdCogY3VyID0gcmVuZGVyZXI7CisgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KHJlbmRlcmVy
KSAmJiAhaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuICZyZW5kZXJl
cjsKIAotICAgIGlmICghY3VyLT5pc1JlbmRlcklubGluZSgpICYmICFjdXItPmlzUmVuZGVyQmxv
Y2soKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyOworICAgIFJlbmRlck9iamVjdCogbGFzdENo
aWxkID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXN0Q2hpbGQo
KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcHJldmlvdXM7CisgICAgZm9yIChhdXRvKiBj
dXJyZW50ID0gJmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcik7IGN1cnJl
bnQ7ICkgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CiAKLSAgICB3aGlsZSAoY3VyKSB7
Ci0gICAgICAgIHByZXYgPSBjdXI7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIG5ld0xhc3RD
aGlsZCA9IGN1cnJlbnQtPmxhc3RDaGlsZCgpKQorICAgICAgICAgICAgbGFzdENoaWxkID0gbmV3
TGFzdENoaWxkOwogCi0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGxjID0gY3VyLT5sYXN0Q2hp
bGRTbG93KCkpCi0gICAgICAgICAgICBsYXN0Q2hpbGQgPSBsYzsKLQotICAgICAgICBpZiAoY3Vy
LT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICBjdXIgPSB0b1JlbmRlcklubGluZShj
dXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKHByZXYsIGN1ciB8fCAhdG9SZW5kZXJJbmxpbmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsK
KyAgICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICBj
dXJyZW50ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVudCkuaW5saW5lRWxlbWVudENv
bnRpbnVhdGlvbigpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91cywgY3VycmVu
dCB8fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXIgPSB0b1JlbmRlckJsb2NrKGN1ciktPmlu
bGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAg
ICB9CiAKICAgICByZXR1cm4gbGFzdENoaWxkOwpAQCAtMjI3LDcgKzIyNSw3IEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25z
dAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0g
ICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGlu
dWF0aW9uKG1fcmVuZGVyZXIpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IGZpcnN0
Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbigqbV9yZW5kZXJlcik7CiAKICAgICAvLyBJZiBh
biBvYmplY3QgY2FuJ3QgaGF2ZSBjaGlsZHJlbiwgdGhlbiBpdCBpcyB1c2luZyB0aGlzIG1ldGhv
ZCB0byBoZWxwCiAgICAgLy8gY2FsY3VsYXRlIHNvbWUgaW50ZXJuYWwgcHJvcGVydHkgKGxpa2Ug
aXRzIGRlc2NyaXB0aW9uKS4KQEAgLTI0NCw3ICsyNDIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXN0Q2hpbGQoKSBjb25zdAogICAgIGlmICgh
bV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZW5kZXJPYmplY3Qq
IGxhc3RDaGlsZCA9IGxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKG1fcmVuZGVyZXIp
OworICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkID0gbGFzdENoaWxkQ29uc2lkZXJpbmdDb250
aW51YXRpb24oKm1fcmVuZGVyZXIpOwogCiAgICAgaWYgKCFsYXN0Q2hpbGQgJiYgIWNhbkhhdmVD
aGlsZHJlbigpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omxhc3RD
aGlsZCgpOwpAQCAtMjUyLDY3ICsyNTAsNjEgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bGFzdENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gYXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShsYXN0Q2hpbGQpOwogfQogCi1zdGF0aWMgaW5saW5lIFJl
bmRlcklubGluZSogc3RhcnRPZkNvbnRpbnVhdGlvbnMoUmVuZGVyT2JqZWN0KiByKQorc3RhdGlj
IGlubGluZSBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZDb250aW51YXRpb25zKFJlbmRlck9iamVjdCYg
cmVuZGVyZXIpCiB7Ci0gICAgaWYgKHItPmlzSW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKQot
ICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUoci0+bm9kZSgpLT5yZW5kZXJlcigpKTsKKyAg
ICBpZiAocmVuZGVyZXIuaXNJbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyLm5vZGUoKS0+cmVuZGVyZXIoKSk7
CiAKICAgICAvLyBCbG9ja3Mgd2l0aCBhIHByZXZpb3VzIGNvbnRpbnVhdGlvbiBhbHdheXMgaGF2
ZSBhIG5leHQgY29udGludWF0aW9uCi0gICAgaWYgKHItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1Jl
bmRlckJsb2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCi0gICAgICAgIHJldHVy
biB0b1JlbmRlcklubGluZSh0b1JlbmRlckJsb2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0
aW9uKCktPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPihy
ZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5pbmxpbmVFbGVtZW50
Q29udGludWF0aW9uKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KGRv
d25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigp
LT5lbGVtZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBlbmRPZkNvbnRpbnVhdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBlbmRPZkNvbnRpbnVhdGlv
bnMoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBy
ZW5kZXJlcjsKLSAgICBSZW5kZXJPYmplY3QqIGN1ciA9IHJlbmRlcmVyOwotCi0gICAgaWYgKCFj
dXItPmlzUmVuZGVySW5saW5lKCkgJiYgIWN1ci0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7CisgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKSAmJiAh
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuICZyZW5kZXJlcjsKIAot
ICAgIHdoaWxlIChjdXIpIHsKLSAgICAgICAgcHJldiA9IGN1cjsKLSAgICAgICAgaWYgKGN1ci0+
aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJJbmxpbmUoY3Vy
KS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOwotICAgICAgICAgICAgQVNTRVJUKGN1ciB8
fCAhdG9SZW5kZXJJbmxpbmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsKKyAgICBhdXRvKiBwcmV2
aW91cyA9ICZkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIpOworICAgIGZv
ciAoYXV0byogY3VycmVudCA9IHByZXZpb3VzOyBjdXJyZW50OyApIHsKKyAgICAgICAgcHJldmlv
dXMgPSBjdXJyZW50OworICAgICAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsK
KyAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KS5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudCB8
fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAg
ICAgICAgfSBlbHNlIAotICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJCbG9jayhjdXIpLT5pbmxp
bmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHByZXY7CisgICAgcmV0dXJuIHByZXZpb3VzOwogfQogCiAKLXN0YXRp
YyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9u
cyhSZW5kZXJJbmxpbmUqIHIsIFJlbmRlck9iamVjdCogY2hpbGQpCitzdGF0aWMgaW5saW5lIFJl
bmRlck9iamVjdCogY2hpbGRCZWZvcmVDb25zaWRlcmluZ0NvbnRpbnVhdGlvbnMoUmVuZGVySW5s
aW5lKiByZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKLSAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY3VyQ29udGFpbmVyID0gcjsKLSAgICBSZW5kZXJPYmplY3QqIGN1ciA9IG51bGxw
dHI7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gbnVsbHB0cjsKLQotICAgIHdoaWxlIChjdXJD
b250YWluZXIpIHsKLSAgICAgICAgaWYgKGN1ckNvbnRhaW5lci0+aXNSZW5kZXJJbmxpbmUoKSkg
ewotICAgICAgICAgICAgY3VyID0gY3VyQ29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAg
ICAgICB3aGlsZSAoY3VyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBjaGlsZCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7Ci0gICAgICAgICAgICAgICAgcHJldiA9IGN1
cjsKLSAgICAgICAgICAgICAgICBjdXIgPSBjdXItPm5leHRTaWJsaW5nKCk7CisgICAgUmVuZGVy
T2JqZWN0KiBwcmV2aW91cyA9IG51bGxwdHI7CisgICAgZm9yIChSZW5kZXJCb3hNb2RlbE9iamVj
dCogY3VycmVudENvbnRhaW5lciA9IHJlbmRlcmVyOyBjdXJyZW50Q29udGFpbmVyOyApIHsKKyAg
ICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnRDb250YWluZXIpKSB7CisgICAgICAg
ICAgICBhdXRvKiBjdXJyZW50ID0gY3VycmVudENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOworICAg
ICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9
PSBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOworICAgICAgICAg
ICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY3VyQ29u
dGFpbmVyID0gdG9SZW5kZXJJbmxpbmUoY3VyQ29udGFpbmVyKS0+Y29udGludWF0aW9uKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY3VyQ29udGFpbmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAg
ICAgICAgIGlmIChjdXJDb250YWluZXIgPT0gY2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHByZXY7CisgICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVySW5s
aW5lPigqY3VycmVudENvbnRhaW5lcikuY29udGludWF0aW9uKCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50Q29udGFpbmVyKSkgeworICAgICAgICAgICAgaWYg
KGN1cnJlbnRDb250YWluZXIgPT0gY2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZp
b3VzOwogCi0gICAgICAgICAgICBwcmV2ID0gY3VyQ29udGFpbmVyOwotICAgICAgICAgICAgY3Vy
Q29udGFpbmVyID0gdG9SZW5kZXJCbG9jayhjdXJDb250YWluZXIpLT5pbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCk7CisgICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnRDb250YWluZXI7Cisg
ICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJy
ZW50Q29udGFpbmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQogICAgIHJldHVybiBudWxscHRyOwog
fQogCkBAIC0zMzIsMTUgKzMyNCwxNSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgIC8vIENhc2UgMTog
VGhlIG5vZGUgaXMgYSBibG9jayBhbmQgaXMgYW4gaW5saW5lJ3MgY29udGludWF0aW9uLiBJbiB0
aGF0IGNhc2UsIHRoZSBpbmxpbmUncwogICAgIC8vIGxhc3QgY2hpbGQgaXMgb3VyIHByZXZpb3Vz
IHNpYmxpbmcgKG9yIGZ1cnRoZXIgYmFjayBpbiB0aGUgY29udGludWF0aW9uIGNoYWluKQogICAg
IFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRzOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRl
ckJsb2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVy
ZXIpKSkKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqbV9yZW5kZXJlcikgJiYgKHN0YXJ0T2ZDb250
cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyKSkpCiAgICAgICAgIHByZXZpb3Vz
U2libGluZyA9IGNoaWxkQmVmb3JlQ29uc2lkZXJpbmdDb250aW51YXRpb25zKHN0YXJ0T2ZDb250
cywgbV9yZW5kZXJlcik7CiAKICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQg
b2YgdGhlIGVuZCBvZiBhIGNvbnRpbnVhdGlvbiAtIHNraXAgYWxsIHRoZSB3YXkgdG8gYmVmb3Jl
CiAgICAgLy8gdGhlIHBhcmVudCBvZiB0aGUgc3RhcnQsIHNpbmNlIGV2ZXJ5dGhpbmcgaW4gYmV0
d2VlbiB3aWxsIGJlIGxpbmtlZCB1cCB2aWEgdGhlIGNvbnRpbnVhdGlvbi4KICAgICBlbHNlIGlm
IChtX3JlbmRlcmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmlyc3RDaGlsZElzSW5saW5lQ29u
dGludWF0aW9uKG1fcmVuZGVyZXIpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RQYXJl
bnQgPSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpKS0+
cGFyZW50KCk7CisgICAgICAgIGF1dG8qIGZpcnN0UGFyZW50ID0gc3RhcnRPZkNvbnRpbnVhdGlv
bnMoKm1fcmVuZGVyZXItPmZpcnN0Q2hpbGRTbG93KCkpLT5wYXJlbnQoKTsKICAgICAgICAgd2hp
bGUgKGZpcnN0Q2hpbGRJc0lubGluZUNvbnRpbnVhdGlvbihmaXJzdFBhcmVudCkpCi0gICAgICAg
ICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250aW51YXRpb25zKGZpcnN0UGFyZW50LT5maXJz
dENoaWxkU2xvdygpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0
T2ZDb250aW51YXRpb25zKCpmaXJzdFBhcmVudC0+Zmlyc3RDaGlsZCgpKS0+cGFyZW50KCk7CiAg
ICAgICAgIHByZXZpb3VzU2libGluZyA9IGZpcnN0UGFyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsK
ICAgICB9CiAKQEAgLTM1MCw3ICszNDIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogCiAgICAgLy8gQ2Fz
ZSA0OiBUaGlzIG5vZGUgaGFzIG5vIHByZXZpb3VzIHNpYmxpbmdzLCBidXQgaXRzIHBhcmVudCBp
cyBhbiBpbmxpbmUsCiAgICAgLy8gYW5kIGlzIGFub3RoZXIgbm9kZSdzIGlubGluZSBjb250aW51
dGF0aW9uLiBGb2xsb3cgdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4KLSAgICBlbHNlIGlmIChtX3Jl
bmRlcmVyLT5wYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSAmJiAoc3RhcnRPZkNvbnRzID0gc3Rh
cnRPZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlci0+cGFyZW50KCkpKSkKKyAgICBlbHNlIGlmIChp
czxSZW5kZXJJbmxpbmU+KCptX3JlbmRlcmVyLT5wYXJlbnQoKSkgJiYgKHN0YXJ0T2ZDb250cyA9
IHN0YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyLT5wYXJlbnQoKSkpKQogICAgICAgICBw
cmV2aW91c1NpYmxpbmcgPSBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9ucyhzdGFy
dE9mQ29udHMsIG1fcmVuZGVyZXItPnBhcmVudCgpLT5maXJzdENoaWxkKCkpOwogCiAgICAgaWYg
KCFwcmV2aW91c1NpYmxpbmcpCkBAIC0zNzUsMTUgKzM2NywxNSBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAg
Ly8gQ2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGhhcyBhbiBpbmxpbmUgY29udGludWF0aW9u
LiBOZXh0IHNpYmxpbmcgaXMgdGhlIGlubGluZSBjb250aW51YXRpb24ncwogICAgIC8vIGZpcnN0
IGNoaWxkLgogICAgIFJlbmRlcklubGluZSogaW5saW5lQ29udGludWF0aW9uOwotICAgIGlmICht
X3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKGlubGluZUNvbnRpbnVhdGlvbiA9IHRvUmVu
ZGVyQmxvY2sobV9yZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkpCi0gICAg
ICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKGlubGlu
ZUNvbnRpbnVhdGlvbik7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPigqbV9yZW5kZXJlcikgJiYg
KGlubGluZUNvbnRpbnVhdGlvbiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqbV9yZW5kZXJlciku
aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKSkKKyAgICAgICAgbmV4dFNpYmxpbmcgPSBmaXJz
dENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oKmlubGluZUNvbnRpbnVhdGlvbik7CiAKICAg
ICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2YgdGhlIHN0YXJ0IG9mIGEgY29u
dGludWF0aW9uIC0gc2tpcCBhbGwgdGhlIHdheSB0bwogICAgIC8vIGFmdGVyIHRoZSBwYXJlbnQg
b2YgdGhlIGVuZCwgc2luY2UgZXZlcnl0aGluZyBpbiBiZXR3ZWVuIHdpbGwgYmUgbGlua2VkIHVw
IHZpYSB0aGUgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKG1fcmVuZGVyZXItPmlzQW5vbnlt
b3VzQmxvY2soKSAmJiBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obV9yZW5kZXJlcikpIHsKLSAg
ICAgICAgUmVuZGVyRWxlbWVudCogbGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucyh0b1Jl
bmRlckJsb2NrKG1fcmVuZGVyZXIpLT5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOworICAgICAgICBS
ZW5kZXJFbGVtZW50KiBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKCpkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKm1fcmVuZGVyZXIpLmxhc3RDaGlsZCgpKS0+cGFyZW50KCk7CiAgICAgICAg
IHdoaWxlIChsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obGFzdFBhcmVudCkpCi0gICAgICAgICAg
ICBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKGxhc3RQYXJlbnQtPmxhc3RDaGlsZCgp
KS0+cGFyZW50KCk7CisgICAgICAgICAgICBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25z
KCpsYXN0UGFyZW50LT5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOwogICAgICAgICBuZXh0U2libGlu
ZyA9IGxhc3RQYXJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQogCkBAIC0zOTQsMTUgKzM4Niwx
NSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0
U2libGluZygpIGNvbnN0CiAgICAgLy8gQ2FzZSA0OiBub2RlIGlzIGFuIGlubGluZSB3aXRoIGEg
Y29udGludWF0aW9uLiBOZXh0IHNpYmxpbmcgaXMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZW5k
IAogICAgIC8vIG9mIHRoZSBjb250aW51YXRpb24gY2hhaW4uCiAgICAgZWxzZSBpZiAoaXNJbmxp
bmVXaXRoQ29udGludWF0aW9uKG1fcmVuZGVyZXIpKQotICAgICAgICBuZXh0U2libGluZyA9IGVu
ZE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyKS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbmV4
dFNpYmxpbmcgPSBlbmRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXIpLT5uZXh0U2libGluZygp
OwogCiAgICAgLy8gQ2FzZSA1OiBub2RlIGhhcyBubyBuZXh0IHNpYmxpbmcsIGFuZCBpdHMgcGFy
ZW50IGlzIGFuIGlubGluZSB3aXRoIGEgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKGlzSW5s
aW5lV2l0aENvbnRpbnVhdGlvbihtX3JlbmRlcmVyLT5wYXJlbnQoKSkpIHsKLSAgICAgICAgYXV0
byBjb250aW51YXRpb24gPSB0b1JlbmRlcklubGluZShtX3JlbmRlcmVyLT5wYXJlbnQoKSktPmNv
bnRpbnVhdGlvbigpOworICAgICAgICBhdXRvJiBjb250aW51YXRpb24gPSAqZG93bmNhc3Q8UmVu
ZGVySW5saW5lPigqbV9yZW5kZXJlci0+cGFyZW50KCkpLmNvbnRpbnVhdGlvbigpOwogICAgICAg
ICAKICAgICAgICAgLy8gQ2FzZSA1YTogY29udGludWF0aW9uIGlzIGEgYmxvY2sgLSBpbiB0aGlz
IGNhc2UgdGhlIGJsb2NrIGl0c2VsZiBpcyB0aGUgbmV4dCBzaWJsaW5nLgotICAgICAgICBpZiAo
Y29udGludWF0aW9uLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICBuZXh0U2libGluZyA9
IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihjb250aW51YXRpb24p
KQorICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSAmY29udGludWF0aW9uOwogICAgICAgICAvLyBD
YXNlIDViOiBjb250aW51YXRpb24gaXMgYW4gaW5saW5lIC0gaW4gdGhpcyBjYXNlIHRoZSBpbmxp
bmUncyBmaXJzdCBjaGlsZCBpcyB0aGUgbmV4dCBzaWJsaW5nCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKGNv
bnRpbnVhdGlvbik7CkBAIC00MTQsMTMgKzQwNiwxMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAgcmV0dXJu
IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOwogfQogCi1zdGF0aWMg
UmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKK3N0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCogbmV4dENvbnRpbnVhdGlvbihSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgaWYgKHJl
bmRlcmVyLT5pc1JlbmRlcklubGluZSgpICYmICFyZW5kZXJlci0+aXNSZXBsYWNlZCgpKQotICAg
ICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51YXRpb24oKTsKLSAg
ICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVy
QmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgaWYgKGlz
PFJlbmRlcklubGluZT4ocmVuZGVyZXIpICYmICFyZW5kZXJlci5pc1JlcGxhY2VkKCkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKS5jb250aW51YXRpb24o
KTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigp
OwogICAgIHJldHVybiBudWxscHRyOwogfQogICAgIApAQCAtNDM1LDEyICs0MjYsMTIgQEAgUmVu
ZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJQYXJlbnRPYmplY3Qo
KSBjb25zdAogICAgIC8vIGlzIHRoZSBzdGFydCBvZiB0aGUgY29udGludWF0aW9uIGNoYWluLgog
ICAgIFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRzID0gbnVsbHB0cjsKICAgICBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGQgPSBudWxscHRyOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJs
b2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXIp
KSkKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCptX3JlbmRlcmVyKSAmJiAoc3RhcnRPZkNvbnRz
ID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXIpKSkKICAgICAgICAgcGFyZW50ID0g
c3RhcnRPZkNvbnRzOwogCiAgICAgLy8gQ2FzZSAyOiBub2RlJ3MgcGFyZW50IGlzIGFuIGlubGlu
ZSB3aGljaCBpcyBzb21lIG5vZGUncyBjb250aW51YXRpb247IHBhcmVudCBpcyAKICAgICAvLyB0
aGUgZWFybGllc3Qgbm9kZSBpbiB0aGUgY29udGludWF0aW9uIGNoYWluLgotICAgIGVsc2UgaWYg
KHBhcmVudCAmJiBwYXJlbnQtPmlzUmVuZGVySW5saW5lKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0
YXJ0T2ZDb250aW51YXRpb25zKHBhcmVudCkpKQorICAgIGVsc2UgaWYgKGlzPFJlbmRlcklubGlu
ZT4ocGFyZW50KSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKnBhcmVu
dCkpKQogICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHM7CiAgICAgCiAgICAgLy8gQ2FzZSAz
OiBUaGUgZmlyc3Qgc2libGluZyBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgY29udGludWF0aW9uIGNo
YWluLiBGaW5kIHRoZSBvcmlnaW4gb2YgdGhhdCBjb250aW51YXRpb24uCkBAIC00NDgsNyArNDM5
LDcgQEAgUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJQYXJl
bnRPYmplY3QoKSBjb25zdAogICAgICAgICAvLyBHZXQgdGhlIG5vZGUncyByZW5kZXJlciBhbmQg
Zm9sbG93IHRoYXQgY29udGludWF0aW9uIGNoYWluIHVudGlsIHRoZSBmaXJzdCBjaGlsZCBpcyBm
b3VuZAogICAgICAgICBSZW5kZXJPYmplY3QqIG5vZGVSZW5kZXJGaXJzdENoaWxkID0gZmlyc3RD
aGlsZC0+bm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICB3aGlsZSAobm9kZVJlbmRlckZpcnN0
Q2hpbGQgIT0gZmlyc3RDaGlsZCkgewotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNv
bnRzVGVzdCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rlc3Q7IGNvbnRzVGVzdCA9IG5l
eHRDb250aW51YXRpb24oY29udHNUZXN0KSkgeworICAgICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNvbnRzVGVzdCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rlc3Q7IGNvbnRzVGVz
dCA9IG5leHRDb250aW51YXRpb24oKmNvbnRzVGVzdCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
Y29udHNUZXN0ID09IGZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g
bm9kZVJlbmRlckZpcnN0Q2hpbGQtPnBhcmVudCgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTU2NiwyNSArNTU3LDIzIEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIAotICAgIFJlbmRlck9iamVjdCogY3VyclJlbmRlcmVyOworICAgIFJl
bmRlck9iamVjdCogY3VycmVudFJlbmRlcmVyOwogICAgIAogICAgIC8vIFNlYXJjaCB1cCB0aGUg
cmVuZGVyIHRyZWUgZm9yIGEgUmVuZGVyT2JqZWN0IHdpdGggYSBET00gbm9kZS4gIERlZmVyIHRv
IGFuIGVhcmxpZXIgY29udGludWF0aW9uLCB0aG91Z2guCi0gICAgZm9yIChjdXJyUmVuZGVyZXIg
PSBtX3JlbmRlcmVyOyBjdXJyUmVuZGVyZXIgJiYgIWN1cnJSZW5kZXJlci0+bm9kZSgpOyBjdXJy
UmVuZGVyZXIgPSBjdXJyUmVuZGVyZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJyUmVu
ZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBj
b250aW51YXRpb24gPSB0b1JlbmRlckJsb2NrKGN1cnJSZW5kZXJlciktPmNvbnRpbnVhdGlvbigp
OwotICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICBmb3IgKGN1cnJlbnRSZW5kZXJl
ciA9IG1fcmVuZGVyZXI7IGN1cnJlbnRSZW5kZXJlciAmJiAhY3VycmVudFJlbmRlcmVyLT5ub2Rl
KCk7IGN1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlci0+cGFyZW50KCkpIHsKKyAgICAg
ICAgaWYgKGN1cnJlbnRSZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpKSB7CisgICAgICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBjb250aW51YXRpb24gPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KmN1cnJlbnRSZW5kZXJlcikuY29udGludWF0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhY2hlLT5nZXRPckNyZWF0ZShjb250aW51YXRpb24pLT5hbmNob3JFbGVtZW50KCk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gYmFpbCBpZiBub25lIGZvdW5kCi0gICAgaWYgKCFj
dXJyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghY3VycmVudFJlbmRlcmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBzZWFyY2ggdXAgdGhlIERP
TSB0cmVlIGZvciBhbiBhbmNob3IgZWxlbWVudAogICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0
aGF0IGFueSBub24taW1hZ2Ugd2l0aCBhbiBhbmNob3IgaXMgYW4gSFRNTEFuY2hvckVsZW1lbnQK
LSAgICBOb2RlKiBub2RlID0gY3VyclJlbmRlcmVyLT5ub2RlKCk7Ci0gICAgZm9yICggOyBub2Rl
OyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gY3Vy
cmVudFJlbmRlcmVyLT5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsK
ICAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkgfHwgKG5vZGUtPnJlbmRl
cmVyKCkgJiYgY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigp
KSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CkBA
IC0xNjc3LDE0ICsxNjY2LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHJldHVybjsKICAgICBFbGVtZW50
JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CiAKLSAg
ICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKKyAgICBpZiAoIWlzPFJlbmRl
ckJveE1vZGVsT2JqZWN0PigqbV9yZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVu
ZGVyZXIpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciA9IGRvd25jYXN0PFJl
bmRlckJveE1vZGVsT2JqZWN0PigqbV9yZW5kZXJlcik7CiAKICAgICAvLyBGSVhNRTogRG8gd2Ug
d2FudCB0byBkbyBhbnl0aGluZyBoZXJlIGZvciBBUklBIHRleHRib3hlcz8KLSAgICBpZiAocmVu
ZGVyZXItPmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisg
ICAgaWYgKHJlbmRlcmVyLmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxl
bWVudCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLnNldFZh
bHVlKHN0cmluZyk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXItPmlzVGV4dEFyZWEoKSAmJiBpczxI
VE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KSkKKyAgICBlbHNlIGlmIChyZW5kZXJlci5pc1Rl
eHRBcmVhKCkgJiYgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIGRv
d25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLnNldFZhbHVlKHN0cmluZyk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRl
bnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lv
bnMubW0KaW5kZXggYzU1ZGIwMTc3MzJiYTEwODAwMGQxMjhiZmFiNTU1NGIzYmU5ZGQ1OC4uY2Ew
ZDg4OTNiNjg3MzRkMjcyOWZmYjQyN2IzMDI5YjcwMWEzN2Q1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTIwNywxNyAr
MjA3LDE3IEBAIC0gKE5TQXJyYXkgKilib3JkZXJSYWRpaQogCiAtIChCT09MKWNvbnRhaW5zT25s
eUlubGluZU9iamVjdHMKIHsKLSAgICBSZW5kZXJPYmplY3QgKiByZW5kZXJlciA9IGNvcmUoc2Vs
ZiktPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuICAocmVuZGVyZXIgJiYKLSAgICAgICAgICAgICBy
ZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJgotICAgICAgICAgICAgIChyZW5kZXJlci0+aXNS
ZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCkgPT0gbmlsKSAmJgotICAgICAgICAgICAgICFyZW5kZXJlci0+aXNUYWJsZSgp
KTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXIKKyAgICAgICAgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5saW5l
KCkKKyAgICAgICAgJiYgKGlzPFJlbmRlckJsb2NrPigqcmVuZGVyZXIpICYmICFkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCisgICAg
ICAgICYmICFyZW5kZXJlci0+aXNUYWJsZSgpOwogfQogCiAtIChCT09MKWlzU2VsZWN0YWJsZUJs
b2NrCiB7Ci0gICAgUmVuZGVyT2JqZWN0ICogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJl
cigpOwotICAgIHJldHVybiAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxv
dygpIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVy
ZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgIT0gbmlsKSkpOworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5k
ZXJlciAmJiAoaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpIHx8IChpczxSZW5kZXJCbG9j
az4oKnJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCkgIT0gbmlsKSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFuZ2VP
ZkNvbnRhaW5pbmdQYXJhZ3JhcGgKQEAgLTM0NCwxMiArMzQ0LDEyIEBAIC0gKGludClzdHJ1Y3R1
cmFsQ29tcGxleGl0eUNvbnRyaWJ1dGlvbgogICAgICAgICAgICAgcmVzdWx0ID0gSU5UX01BWDsK
ICAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBy
ZXN1bHQgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxv
dygpIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVy
ZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgIT0gMCkpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikgfHwgKGlzPFJlbmRlckJsb2NrPigq
cmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVsZW1l
bnRDb250aW51YXRpb24oKSkpIHsKICAgICAgICAgICAgIEJPT0wgbm9Db3N0ID0gTk87Ci0gICAg
ICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJC
b3ggJmFzQm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0JveCgpOwotICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCAqcGFyZW50ID0gYXNCb3gucGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgUmVu
ZGVyQm94ICpwYXJlbnRSZW5kZXJCb3ggPSAocGFyZW50ICYmIHBhcmVudC0+aXNCb3goKSkgPyB0
b1JlbmRlckJveChwYXJlbnQpIDogMDsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpy
ZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gmIGFzQm94ID0gcmVuZGVyZXIt
PmVuY2xvc2luZ0JveCgpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0g
YXNCb3gucGFyZW50KCk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJC
b3ggPSBpczxSZW5kZXJCb3g+KHBhcmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHBhcmVudCkg
OiBudWxscHRyOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJCb3ggJiYgYXNCb3gu
d2lkdGgoKSA9PSBwYXJlbnRSZW5kZXJCb3gtPndpZHRoKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgbm9Db3N0ID0gWUVTOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggY2U1ZWU2ZTRlZTdj
Y2NjMmNiNDhiY2RjOWJmYTJlMWE5MDhiYzA4Ny4uZGEyM2QxM2RhNmVhNDY5OTA5MTQ5NzVjYTU3
YmY0YTJlYzBmNmNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEwMDcsNyArMTAwNyw3IEBAIHN0YXRpYyBQYXNzUmVm
PENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3QoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvCiB7CiAgICAgY29uc3QgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVz
ID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHlsZS0+Z3JpZENvbHVtbnMoKSA6IHN0eWxl
LT5ncmlkUm93cygpOwogICAgIGNvbnN0IE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCYgb3JkZXJl
ZE5hbWVkR3JpZExpbmVzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHlsZS0+b3JkZXJl
ZE5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZS0+b3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVz
KCk7Ci0gICAgYm9vbCBpc1JlbmRlckdyaWQgPSByZW5kZXJlciAmJiByZW5kZXJlci0+aXNSZW5k
ZXJHcmlkKCk7CisgICAgYm9vbCBpc1JlbmRlckdyaWQgPSBpczxSZW5kZXJHcmlkPihyZW5kZXJl
cik7CiAKICAgICAvLyBIYW5kbGUgdGhlICdub25lJyBjYXNlLgogICAgIGJvb2wgdHJhY2tMaXN0
SXNFbXB0eSA9IHRyYWNrU2l6ZXMuaXNFbXB0eSgpOwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAgc3Rh
dGljIFBhc3NSZWY8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFRyYWNrTGlzdChHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW8KICAgICAgICAgLy8gRm9yIGdyaWRzIHdlIHNob3VsZCBjb25z
aWRlciBldmVyeSBsaXN0ZWQgdHJhY2ssIHdoZXRoZXIgaW1wbGljaXRseSBvciBleHBsaWNpdGx5
IGNyZWF0ZWQuIElmIHdlIGRvbid0IGhhdmUKICAgICAgICAgLy8gYW55IGV4cGxpY2l0IHRyYWNr
IGFuZCB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gdGhlbiB0aGVyZSBhcmUgbm8gaW1wbGljaXQgdHJh
Y2tzLiBXZSBjYW5ub3Qgc2ltcGx5IGNoZWNrIHRoZQogICAgICAgICAvLyBudW1iZXIgb2Ygcm93
cy9jb2x1bW5zIGluIG91ciBpbnRlcm5hbCBncmlkIHJlcHJlc2VudGF0aW9uIGJlY2F1c2UgaXQn
cyBhbHdheXMgYXQgbGVhc3QgMXgxIChzZWUgcjE0MzMzMSkuCi0gICAgICAgIHRyYWNrTGlzdElz
RW1wdHkgPSAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
dHJhY2tMaXN0SXNFbXB0eSA9ICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5maXJz
dENoaWxkKCk7CiAgICAgfQogCiAgICAgaWYgKHRyYWNrTGlzdElzRW1wdHkpIHsKQEAgLTEwMjUs
NyArMTAyNSw3IEBAIHN0YXRpYyBQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xp
c3QoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvCiAKICAgICBhdXRvIGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgaWYgKGlzUmVuZGVyR3Jp
ZCkgewotICAgICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHRyYWNrUG9zaXRpb25zID0g
ZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyB0b1JlbmRlckdyaWQocmVuZGVyZXIpLT5jb2x1bW5Q
b3NpdGlvbnMoKSA6IHRvUmVuZGVyR3JpZChyZW5kZXJlciktPnJvd1Bvc2l0aW9ucygpOworICAg
ICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHRyYWNrUG9zaXRpb25zID0gZGlyZWN0aW9u
ID09IEZvckNvbHVtbnMgPyBkb3duY2FzdDxSZW5kZXJHcmlkPigqcmVuZGVyZXIpLmNvbHVtblBv
c2l0aW9ucygpIDogZG93bmNhc3Q8UmVuZGVyR3JpZD4oKnJlbmRlcmVyKS5yb3dQb3NpdGlvbnMo
KTsKICAgICAgICAgLy8gVGhlcmUgYXJlIGF0IGxlYXN0ICN0cmFja3MgKyAxIGdyaWQgbGluZXMg
KHRyYWNrUG9zaXRpb25zKS4gQXBhcnQgZnJvbSB0aGF0LCB0aGUgZ3JpZCBjb250YWluZXIgY2Fu
IGdlbmVyYXRlIGltcGxpY2l0IGdyaWQgdHJhY2tzLAogICAgICAgICAvLyBzbyB3ZSdsbCBoYXZl
IG1vcmUgdHJhY2tQb3NpdGlvbnMgdGhhbiB0cmFja1NpemVzIGFzIHRoZSBsYXR0ZXIgb25seSBj
b250YWluIHRoZSBleHBsaWNpdCBncmlkLgogICAgICAgICBBU1NFUlQodHJhY2tQb3NpdGlvbnMu
c2l6ZSgpIC0gMSA+PSB0cmFja1NpemVzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM0NjRjMjc1NTI5NDZlZDI5ODg3
MjliNzVmMGY4YmQzNDkyOGZmYmIuLjU4NDk0OGEzOTU0MWE1ZTBiNzk2NTNhNWVhZDgwMDc4Njk3
YWE5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCkBAIC01NSwxMCArNTUsMTAgQEAKICNpbmNsdWRlICJSZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tG
bG93LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKLSNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRl
ICJTY29wZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQu
aCIKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCkBAIC05MjksMjEgKzkyOSwyMSBA
QCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRCbG9ja1BsYWNl
aG9sZGVyKGNvbnN0IFBvc2l0aW9uJiBwbwogUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKEVsZW1lbnQqIGNvbnRhaW5lcikK
IHsKICAgICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb250YWluZXItPnJl
bmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tG
bG93KCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93Pihy
ZW5kZXJlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIC8vIGFwcGVuZCB0
aGUgcGxhY2Vob2xkZXIgdG8gbWFrZSBzdXJlIGl0IGZvbGxvd3MKICAgICAvLyBhbnkgdW5yZW5k
ZXJlZCBibG9ja3MKLSAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRl
cmVyKTsKLSAgICBpZiAoYmxvY2stPmhlaWdodCgpID09IDAgfHwgKGJsb2NrLT5pc0xpc3RJdGVt
KCkgJiYgYmxvY2stPmlzRW1wdHkoKSkpCisgICAgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3cg
PSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcik7CisgICAgaWYgKCFibG9ja0Zs
b3cuaGVpZ2h0KCkgfHwgKGJsb2NrRmxvdy5pc0xpc3RJdGVtKCkgJiYgYmxvY2tGbG93LmlzRW1w
dHkoKSkpCiAgICAgICAgIHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGNvbnRhaW5lcik7
CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gQXNzdW1lcyB0
aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIHBsYWNlaG9sZGVyIGFuZCBkb2VzIHRoZSByZW1vdmFs
IHdpdGhvdXQgbXVjaCBjaGVja2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcAppbmRleCA3MjVhODAyYzc3NjZlMzc4OTY4MGY5NGI4MjUzYjhkYjVkNTQzYWE3Li42YmU5
NzIzY2JkZDFhNTU2N2NhYTQwNGI4OWRkYThmOGYyZTIyYjU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC05NjMsNyArOTYzLDcgQEAgYm9vbCBUZXh0SXRlcmF0
b3I6OnNob3VsZFJlcHJlc2VudE5vZGVPZmZzZXRaZXJvKCkKICAgICAvLyBBZGRpdGlvbmFsbHks
IGlmIHRoZSByYW5nZSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgY29udGFpbnMgaHVnZSBzZWN0aW9u
cyBvZiB1bnJlbmRlcmVkIGNvbnRlbnQsIAogICAgIC8vIHdlIHdvdWxkIGNyZWF0ZSBWaXNpYmxl
UG9zaXRpb25zIG9uIGV2ZXJ5IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aXRob3V0IHRoaXMgY2hl
Y2suCiAgICAgaWYgKCFtX25vZGUtPnJlbmRlcmVyKCkgfHwgbV9ub2RlLT5yZW5kZXJlcigpLT5z
dHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFCi0gICAgICAgIHx8IChtX25vZGUtPnJlbmRl
cmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXRvUmVuZGVyQmxvY2sobV9ub2RlLT5yZW5k
ZXJlcigpKS0+aGVpZ2h0KCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkpCisgICAg
ICAgIHx8IChpczxSZW5kZXJCbG9ja0Zsb3c+KCptX25vZGUtPnJlbmRlcmVyKCkpICYmICFkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCptX25vZGUtPnJlbmRlcmVyKCkpLmhlaWdodCgpICYmICFp
czxIVE1MQm9keUVsZW1lbnQ+KCptX25vZGUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gVGhlIHN0YXJ0UG9zLmlzTm90TnVsbCgpIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRo
ZSBzdGFydCBjb3VsZCBiZSBiZWZvcmUgdGhlIGJvZHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCmluZGV4IGRkOTQzZWI0NDBkNDE2MjhjNjU1N2UyOTMzMWI0MmI1YTMyNTMxMTQuLjJh
YzRjZmRjMzM5MTg2ZDc4YzZhZDk0ZWM5MWIyZDBlNzllMzllZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCkBAIC01NTIsMTEgKzU1MiwxMSBAQCBpbnQgRnJhbWU6OnByZWZlcnJl
ZEhlaWdodCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGJvZHktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzUmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJC
bG9jayhyZW5kZXJlcik7Ci0gICAgcmV0dXJuIGJsb2NrLT5oZWlnaHQoKSArIGJsb2NrLT5tYXJn
aW5Ub3AoKSArIGJsb2NrLT5tYXJnaW5Cb3R0b20oKTsKKyAgICBSZW5kZXJCbG9jayYgYmxvY2sg
PSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKTsKKyAgICByZXR1cm4gYmxvY2suaGVp
Z2h0KCkgKyBibG9jay5tYXJnaW5Ub3AoKSArIGJsb2NrLm1hcmdpbkJvdHRvbSgpOwogfQogCiBp
bnQgRnJhbWU6OmlubmVyTGluZUhlaWdodChET01Ob2RlKiBkb21Ob2RlKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNo
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2Fj
aGVzLmgKaW5kZXggZmVjNTJmN2IxNDQ4MGQzMWE0ZmE5YWMyNGYyZGNkNDZmMDZmODg1Ni4uNTk4
MzllNmJlYjVhZDNjZGRjMzdmY2EwOTdiYmQ0MjY2ODgyYThiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oCkBA
IC00NCw3ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9j
a0ZvckZpeGVkUG9zaXRpb24oUmVuZGVyRWxlbWVudCogcGFyZW50CiAgICAgd2hpbGUgKG9iamVj
dCAmJiAhb2JqZWN0LT5jYW5Db250YWluRml4ZWRQb3NpdGlvbk9iamVjdHMoKSkKICAgICAgICAg
b2JqZWN0ID0gb2JqZWN0LT5wYXJlbnQoKTsKICAgICBBU1NFUlQoIW9iamVjdCB8fCAhb2JqZWN0
LT5pc0Fub255bW91c0Jsb2NrKCkpOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG9iamVjdCk7
CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPihvYmplY3QpOwogfQogCiBzdGF0aWMg
aW5saW5lIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKFJl
bmRlckVsZW1lbnQqIHBhcmVudCkKQEAgLTU3LDEzICs1NywxMyBAQCBzdGF0aWMgaW5saW5lIFJl
bmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKFJlbmRlckVsZW1l
bnQqIHBhcgogICAgIC8vIG5vdCB0aGUgaW5saW5lIGl0c2VsZiwgdG8gYXZvaWQgaGF2aW5nIGEg
cG9zaXRpb25lZCBvYmplY3RzIGxpc3QgaW4gYWxsIFJlbmRlcklubGluZXMKICAgICAvLyBhbmQg
dXNlIFJlbmRlckJsb2NrKiBhcyBSZW5kZXJFbGVtZW50Ojpjb250YWluaW5nQmxvY2sncyByZXR1
cm4gdHlwZS4KICAgICAvLyBVc2UgUmVuZGVyQmxvY2s6OmNvbnRhaW5lcigpIHRvIG9idGFpbiB0
aGUgaW5saW5lLgotICAgIGlmIChvYmplY3QgJiYgIW9iamVjdC0+aXNSZW5kZXJCbG9jaygpKQor
ICAgIGlmIChvYmplY3QgJiYgIWlzPFJlbmRlckJsb2NrPigqb2JqZWN0KSkKICAgICAgICAgb2Jq
ZWN0ID0gb2JqZWN0LT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIHdoaWxlIChvYmplY3QgJiYg
b2JqZWN0LT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+Y29u
dGFpbmluZ0Jsb2NrKCk7CiAKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvYmplY3QpOworICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4ob2JqZWN0KTsKIH0KIAogc3RhdGljIGlubGlu
ZSBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KFJlbmRlckVsZW1l
bnQqIHBhcmVudCkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJCbG9jayog
Y29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KFJlbmRlckVsZW1lbnQqIHBhcmVudCkKICAg
ICBSZW5kZXJFbGVtZW50KiBvYmplY3QgPSBwYXJlbnQ7CiAgICAgd2hpbGUgKG9iamVjdCAmJiBp
c05vblJlbmRlckJsb2NrSW5saW5lKCpvYmplY3QpKQogICAgICAgICBvYmplY3QgPSBvYmplY3Qt
PnBhcmVudCgpOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG9iamVjdCk7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlckJsb2NrPihvYmplY3QpOwogfQogCiBjbGFzcyBMb2dpY2FsU2VsZWN0
aW9uT2Zmc2V0Q2FjaGVzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CmluZGV4IGUxMmViYjUzMDEyNDhmOWQ1MzRiMDNkYzRhYjY3YWU5MjJlMDAwMGYuLjliOWQxY2Vh
Zjc4NDhiYjFkZTI4YTRlYzg5NWQ4MTMyNmU0MGM2MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjcyLDE3ICsyNzIsMTcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSYgbmV3U3QKICAgICAgICAgZWxzZSBpZiAob2xkU3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGlj
UG9zaXRpb24pIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSBvdXIgYWJzb2x1dGVseSBwb3NpdGlv
bmVkIGRlc2NlbmRhbnRzIGZyb20gdGhlaXIgY3VycmVudCBjb250YWluaW5nIGJsb2NrLgogICAg
ICAgICAgICAgLy8gVGhleSB3aWxsIGJlIGluc2VydGVkIGludG8gb3VyIHBvc2l0aW9uZWQgb2Jq
ZWN0cyBsaXN0IGR1cmluZyBsYXlvdXQuCi0gICAgICAgICAgICBhdXRvIGNiID0gcGFyZW50KCk7
Ci0gICAgICAgICAgICB3aGlsZSAoY2IgJiYgKGNiLT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gU3Rh
dGljUG9zaXRpb24gfHwgKGNiLT5pc0lubGluZSgpICYmICFjYi0+aXNSZXBsYWNlZCgpKSkgJiYg
IWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIGlmIChjYi0+c3R5bGUoKS5w
b3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgY2ItPmlzSW5saW5lKCkgJiYgIWNiLT5p
c1JlcGxhY2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Js
b2NrKCk7CisgICAgICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9jayA9IHBhcmVudCgpOworICAg
ICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAoY29udGFpbmluZ0Jsb2NrLT5zdHls
ZSgpLnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24gfHwgKGNvbnRhaW5pbmdCbG9jay0+aXNJ
bmxpbmUoKSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1JlcGxhY2VkKCkpKSAmJiAhY29udGFpbmlu
Z0Jsb2NrLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250YWluaW5n
QmxvY2stPnN0eWxlKCkucG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGNvbnRhaW5p
bmdCbG9jay0+aXNJbmxpbmUoKSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1JlcGxhY2VkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5j
b250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNiID0gY2ItPnBhcmVudCgpOworICAgICAgICAgICAg
ICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+cGFyZW50KCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjYi0+aXNSZW5kZXJCbG9jaygp
KQotICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2IpLT5yZW1vdmVQb3NpdGlvbmVkT2Jq
ZWN0cyh0aGlzLCBOZXdDb250YWluaW5nQmxvY2spOworICAgICAgICAgICAgaWYgKGlzPFJlbmRl
ckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHModGhpcywg
TmV3Q29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzMyLDE5ICszMzIs
MTcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjb250aW51YXRpb25CZWZvcmUoUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQt
PnBhcmVudCgpID09IHRoaXMpCiAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgUmVuZGVyQmxv
Y2sqIGN1cnIgPSB0b1JlbmRlckJsb2NrKGNvbnRpbnVhdGlvbigpKTsKICAgICBSZW5kZXJCbG9j
ayogbmV4dFRvTGFzdCA9IHRoaXM7CiAgICAgUmVuZGVyQmxvY2sqIGxhc3QgPSB0aGlzOwotICAg
IHdoaWxlIChjdXJyKSB7Ci0gICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+
cGFyZW50KCkgPT0gY3VycikgewotICAgICAgICAgICAgaWYgKGN1cnItPmZpcnN0Q2hpbGQoKSA9
PSBiZWZvcmVDaGlsZCkKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oY29udGludWF0aW9uKCkpOyBjdXJyZW50OyBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KGN1cnJlbnQtPmNvbnRpbnVhdGlvbigpKSkgeworICAgICAgICBpZiAoYmVmb3JlQ2hp
bGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IGN1cnJlbnQpIHsKKyAgICAgICAgICAgIGlm
IChjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gYmVmb3JlQ2hpbGQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGxhc3Q7Ci0gICAgICAgICAgICByZXR1cm4gY3VycjsKKyAgICAgICAgICAgIHJldHVy
biBjdXJyZW50OwogICAgICAgICB9CiAKICAgICAgICAgbmV4dFRvTGFzdCA9IGxhc3Q7Ci0gICAg
ICAgIGxhc3QgPSBjdXJyOwotICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhjdXJyLT5jb250
aW51YXRpb24oKSk7CisgICAgICAgIGxhc3QgPSBjdXJyZW50OwogICAgIH0KIAogICAgIGlmICgh
YmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQoKSkKQEAgLTQ0MCwxNyArNDM4LDE4IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnNwbGl0QmxvY2tzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJl
bmRlckJsb2NrKiB0b0Jsb2NrLAogCiAgICAgLy8gV2UgaGF2ZSBiZWVuIHJlcGFyZW50ZWQgYW5k
IGFyZSBub3cgdW5kZXIgdGhlIGZyb21CbG9jay4gIFdlIG5lZWQKICAgICAvLyB0byB3YWxrIHVw
IG91ciBibG9jayBwYXJlbnQgY2hhaW4gdW50aWwgd2UgaGl0IHRoZSBjb250YWluaW5nIGFub255
bW91cyBjb2x1bW5zIGJsb2NrLgotICAgIC8vIE9uY2Ugd2UgaGl0IHRoZSBhbm9ueW1vdXMgY29s
dW1ucyBibG9jayB3ZSdyZSBkb25lLgotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjdXJyID0g
dG9SZW5kZXJCb3hNb2RlbE9iamVjdChwYXJlbnQoKSk7CisgICAgLy8gT25jZSB3ZSBoaXQgdGhl
IGFub255bW91cyBjb2x1bW5zIGJsb2NrIHdlJ3JlIGRvbmUucmVudCA9IGRvd25jYXN0PFJlbmRl
ckJveE1vZGVsT2JqZWN0PihwYXJlbnQoKSk7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1
cnJDaGlsZCA9IHRoaXM7CiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyQ2hpbGROZXh0U2libGluZyA9
IGN1cnJDaGlsZC0+bmV4dFNpYmxpbmcoKTsKIAotICAgIHdoaWxlIChjdXJyICYmIGN1cnItPmlz
RGVzY2VuZGFudE9mKGZyb21CbG9jaykgJiYgY3VyciAhPSBmcm9tQmxvY2spIHsKLSAgICAgICAg
UmVuZGVyQmxvY2sqIGJsb2NrQ3VyciA9IHRvUmVuZGVyQmxvY2soY3Vycik7CisgICAgZm9yIChh
dXRvKiBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHBhcmVudCgpKTsK
KyAgICAgICAgY3VycmVudCAmJiBjdXJyZW50LT5pc0Rlc2NlbmRhbnRPZihmcm9tQmxvY2spICYm
IGN1cnJlbnQgIT0gZnJvbUJsb2NrOworICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+KGN1cnJlbnQtPnBhcmVudCgpKSkgeworICAgICAgICBSZW5kZXJCbG9j
ayYgY3VycmVudEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KTsKICAgICAg
ICAgCiAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbG9uZS4KICAgICAgICAgUmVuZGVyUHRyPFJl
bmRlckJsb2NrPiBjbG9uZUNoaWxkID0gV1RGOjptb3ZlKGNsb25lQmxvY2spOwotICAgICAgICBj
bG9uZUJsb2NrID0gYmxvY2tDdXJyLT5jbG9uZSgpOworICAgICAgICBjbG9uZUJsb2NrID0gY3Vy
cmVudEJsb2NrLmNsb25lKCk7CiAKICAgICAgICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9uZSBh
cyB0aGUgZmlyc3QgY2hpbGQuCiAgICAgICAgIGNsb25lQmxvY2stPmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oY2xvbmVDaGlsZC5sZWFrUHRyKCksIDApOwpAQCAtNDU5LDIwICs0NTgsMTkg
QEAgdm9pZCBSZW5kZXJCbG9jazo6c3BsaXRCbG9ja3MoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywg
UmVuZGVyQmxvY2sqIHRvQmxvY2ssCiAgICAgICAgIC8vIGFub255bW91cyBibG9ja3MgcG9zc2li
bHkgYXMgd2Ugd2FsayB1cCB0aGUgYmxvY2sgY2hhaW4uICBXaGVuIHdlIHNwbGl0IGFuCiAgICAg
ICAgIC8vIGFub255bW91cyBibG9jaywgdGhlcmUncyBubyBuZWVkIHRvIGRvIGFueSBjb250aW51
YXRpb24gaG9va3VwLCBzaW5jZSB3ZSBoYXZlbid0CiAgICAgICAgIC8vIGFjdHVhbGx5IHNwbGl0
IGEgcmVhbCBlbGVtZW50LgotICAgICAgICBpZiAoIWJsb2NrQ3Vyci0+aXNBbm9ueW1vdXNCbG9j
aygpKSB7Ci0gICAgICAgICAgICBvbGRDb250ID0gYmxvY2tDdXJyLT5jb250aW51YXRpb24oKTsK
LSAgICAgICAgICAgIGJsb2NrQ3Vyci0+c2V0Q29udGludWF0aW9uKGNsb25lQmxvY2suZ2V0KCkp
OworICAgICAgICBpZiAoIWN1cnJlbnRCbG9jay5pc0Fub255bW91c0Jsb2NrKCkpIHsKKyAgICAg
ICAgICAgIG9sZENvbnQgPSBjdXJyZW50QmxvY2suY29udGludWF0aW9uKCk7CisgICAgICAgICAg
ICBjdXJyZW50QmxvY2suc2V0Q29udGludWF0aW9uKGNsb25lQmxvY2suZ2V0KCkpOwogICAgICAg
ICAgICAgY2xvbmVCbG9jay0+c2V0Q29udGludWF0aW9uKG9sZENvbnQpOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIHN0YXJ0
aW5nIGZyb20gdGhlIGZpcnN0IGNoaWxkCiAgICAgICAgIC8vICphZnRlciogY3VyckNoaWxkIGFu
ZCBhcHBlbmQgdGhlbSBhbGwgdG8gdGhlIGNsb25lLgotICAgICAgICBibG9ja0N1cnItPm1vdmVD
aGlsZHJlblRvKGNsb25lQmxvY2suZ2V0KCksIGN1cnJDaGlsZE5leHRTaWJsaW5nLCAwLCB0cnVl
KTsKKyAgICAgICAgY3VycmVudEJsb2NrLm1vdmVDaGlsZHJlblRvKGNsb25lQmxvY2suZ2V0KCks
IGN1cnJDaGlsZE5leHRTaWJsaW5nLCAwLCB0cnVlKTsKIAogICAgICAgICAvLyBLZWVwIHdhbGtp
bmcgdXAgdGhlIGNoYWluLgotICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyOworICAgICAgICBjdXJy
Q2hpbGQgPSBjdXJyZW50OwogICAgICAgICBjdXJyQ2hpbGROZXh0U2libGluZyA9IGN1cnJDaGls
ZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgY3VyciA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
Y3Vyci0+cGFyZW50KCkpOwogICAgIH0KIAogICAgIC8vIE5vdyB3ZSBhcmUgYXQgdGhlIGNvbHVt
bnMgYmxvY2sgbGV2ZWwuIFdlIG5lZWQgdG8gcHV0IHRoZSBjbG9uZSBpbnRvIHRoZSB0b0Jsb2Nr
LgpAQCAtNTU5LDcgKzU1Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqCiAgICAgICAgIFJl
bmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZp
b3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CiAKICAgICAgICAgaWYgKGFmdGVyQ2hpbGQgJiYg
YWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlckJs
b2NrKGFmdGVyQ2hpbGQpLT5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKmFmdGVyQ2hpbGQpLmFkZENoaWxkKG5ld0NoaWxkKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01NzYsOCArNTc0LDggQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxk
LCBSZW5kZXJPYmoKIAogICAgIFJlbmRlckJveDo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNo
aWxkKTsKICAKLSAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIHBhcmVudCgpICYmIGlzQW5v
bnltb3VzQmxvY2soKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICB0b1Jl
bmRlckJsb2NrKHBhcmVudCgpKS0+cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlzKTsK
KyAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIGlzPFJlbmRlckJsb2NrPihwYXJlbnQoKSkg
JiYgaXNBbm9ueW1vdXNCbG9jaygpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBh
cmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMpOwogICAgIC8vIHRoaXMg
b2JqZWN0IG1heSBiZSBkZWFkIGhlcmUKIH0KIApAQCAtNzIyLDExICs3MjAsMTEgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayogY2hp
bGQpCiAgICAgY2hpbGQtPmRlc3Ryb3koKTsKIH0KIAotc3RhdGljIGJvb2wgY2FuTWVyZ2VBbm9u
eW1vdXNCbG9jayhSZW5kZXJCbG9jayogYW5vbnltb3VzQmxvY2spCitzdGF0aWMgYm9vbCBjYW5N
ZXJnZUFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrJiBhbm9ueW1vdXNCbG9jaykKIHsKLSAgICBp
ZiAoYW5vbnltb3VzQmxvY2stPmJlaW5nRGVzdHJveWVkKCkgfHwgYW5vbnltb3VzQmxvY2stPmNv
bnRpbnVhdGlvbigpKQorICAgIGlmIChhbm9ueW1vdXNCbG9jay5iZWluZ0Rlc3Ryb3llZCgpIHx8
IGFub255bW91c0Jsb2NrLmNvbnRpbnVhdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGFub255bW91c0Jsb2NrLT5pc1J1YnlSdW4oKSB8fCBhbm9ueW1vdXNCbG9jay0+aXNS
dWJ5QmFzZSgpKQorICAgIGlmIChhbm9ueW1vdXNCbG9jay5pc1J1YnlSdW4oKSB8fCBhbm9ueW1v
dXNCbG9jay5pc1J1YnlCYXNlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTczOSwyNCArNzM3LDI0IEBAIHN0YXRpYyBib29sIGNhbk1lcmdlQ29udGln
dW91c0Fub255bW91c0Jsb2NrcyhSZW5kZXJPYmplY3QmIG9sZENoaWxkLCBSZW5kZXJPYmplCiAg
ICAgaWYgKHByZXZpb3VzKSB7CiAgICAgICAgIGlmICghcHJldmlvdXMtPmlzQW5vbnltb3VzQmxv
Y2soKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIHBy
ZXZpb3VzQW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2NrKHByZXZpb3VzKTsKKyAgICAgICAg
UmVuZGVyQmxvY2smIHByZXZpb3VzQW5vbnltb3VzQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKnByZXZpb3VzKTsKICAgICAgICAgaWYgKCFjYW5NZXJnZUFub255bW91c0Jsb2NrKHByZXZp
b3VzQW5vbnltb3VzQmxvY2spKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICBpZiAobmV4dCkgewogICAgICAgICBpZiAoIW5leHQtPmlzQW5vbnltb3VzQmxvY2soKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRBbm9ueW1v
dXNCbG9jayA9IHRvUmVuZGVyQmxvY2sobmV4dCk7CisgICAgICAgIFJlbmRlckJsb2NrJiBuZXh0
QW5vbnltb3VzQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm5leHQpOwogICAgICAgICBp
ZiAoIWNhbk1lcmdlQW5vbnltb3VzQmxvY2sobmV4dEFub255bW91c0Jsb2NrKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwg
UmVuZGVyQmxvY2sqIGNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNC
b3hDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJCbG9jayogY2hpbGQpCiB7Ci0gICAg
cGFyZW50LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICBwYXJlbnQt
PnNldENoaWxkcmVuSW5saW5lKGNoaWxkLT5jaGlsZHJlbklubGluZSgpKTsKKyAgICBwYXJlbnQu
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcGFyZW50LnNldENoaWxk
cmVuSW5saW5lKGNoaWxkLT5jaGlsZHJlbklubGluZSgpKTsKICAgICBSZW5kZXJPYmplY3QqIG5l
eHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKICAgICBSZW5kZXJGbG93VGhyZWFk
KiBjaGlsZEZsb3dUaHJlYWQgPSBjaGlsZC0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwpA
QCAtNzY0LDggKzc2Miw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94
Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoCiAgICAgaWYgKGNoaWxk
Rmxvd1RocmVhZCAmJiBjaGlsZEZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkp
CiAgICAgICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKGNoaWxkRmxvd1RocmVhZCktPnJlbW92
ZUZsb3dDaGlsZEluZm8oY2hpbGQpOwogCi0gICAgcGFyZW50LT5yZW1vdmVDaGlsZEludGVybmFs
KCpjaGlsZCwgY2hpbGQtPmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlD
aGlsZHJlbik7Ci0gICAgY2hpbGQtPm1vdmVBbGxDaGlsZHJlblRvKHBhcmVudCwgbmV4dFNpYmxp
bmcsIGNoaWxkLT5oYXNMYXllcigpKTsKKyAgICBwYXJlbnQucmVtb3ZlQ2hpbGRJbnRlcm5hbCgq
Y2hpbGQsIGNoaWxkLT5oYXNMYXllcigpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hp
bGRyZW4pOworICAgIGNoaWxkLT5tb3ZlQWxsQ2hpbGRyZW5UbygmcGFyZW50LCBuZXh0U2libGlu
ZywgY2hpbGQtPmhhc0xheWVyKCkpOwogICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2Nr
J3MgbGluZXMgYW5kIG51a2UgaXQuCiAgICAgY2hpbGQtPmRlbGV0ZUxpbmVzKCk7CiAgICAgY2hp
bGQtPmRlc3Ryb3koKTsKQEAgLTc4Niw0NCArNzg0LDQ0IEBAIFJlbmRlck9iamVjdCogUmVuZGVy
QmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCiAgICAgYm9vbCBjYW5N
ZXJnZUFub255bW91c0Jsb2NrcyA9IGNhbk1lcmdlQ29udGlndW91c0Fub255bW91c0Jsb2Nrcyhv
bGRDaGlsZCwgcHJldiwgbmV4dCk7CiAgICAgaWYgKGNhbk1lcmdlQW5vbnltb3VzQmxvY2tzICYm
IHByZXYgJiYgbmV4dCkgewogICAgICAgICBwcmV2LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0
aHNSZWNhbGMoKTsKLSAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRCbG9jayA9IHRvUmVuZGVyQmxv
Y2sobmV4dCk7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBwcmV2QmxvY2sgPSB0b1JlbmRlckJsb2Nr
KHByZXYpOworICAgICAgICBSZW5kZXJCbG9jayYgbmV4dEJsb2NrID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KCpuZXh0KTsKKyAgICAgICAgUmVuZGVyQmxvY2smIHByZXZCbG9jayA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPigqcHJldik7CiAgICAgICAgCiAgICAgICAgIGlmIChwcmV2LT5jaGlsZHJl
bklubGluZSgpICE9IG5leHQtPmNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBpbmxpbmVDaGlsZHJlbkJsb2NrID0gcHJldi0+Y2hpbGRyZW5JbmxpbmUoKSA/IHBy
ZXZCbG9jayA6IG5leHRCbG9jazsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9ja0NoaWxk
cmVuQmxvY2sgPSBwcmV2LT5jaGlsZHJlbklubGluZSgpID8gbmV4dEJsb2NrIDogcHJldkJsb2Nr
OworICAgICAgICAgICAgUmVuZGVyQmxvY2smIGlubGluZUNoaWxkcmVuQmxvY2sgPSBwcmV2LT5j
aGlsZHJlbklubGluZSgpID8gcHJldkJsb2NrIDogbmV4dEJsb2NrOworICAgICAgICAgICAgUmVu
ZGVyQmxvY2smIGJsb2NrQ2hpbGRyZW5CbG9jayA9IHByZXYtPmNoaWxkcmVuSW5saW5lKCkgPyBu
ZXh0QmxvY2sgOiBwcmV2QmxvY2s7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFBsYWNl
IHRoZSBpbmxpbmUgY2hpbGRyZW4gYmxvY2sgaW5zaWRlIG9mIHRoZSBibG9jayBjaGlsZHJlbiBi
bG9jayBpbnN0ZWFkIG9mIGRlbGV0aW5nIGl0LgogICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8g
cmV1c2UgaXQsIHdlIGhhdmUgdG8gcmVzZXQgaXQgdG8ganVzdCBiZSBhIGdlbmVyaWMgYW5vbnlt
b3VzIGJsb2NrLiAgTWFrZSBzdXJlCiAgICAgICAgICAgICAvLyB0byBjbGVhciBvdXQgaW5oZXJp
dGVkIGNvbHVtbiBwcm9wZXJ0aWVzIGJ5IGp1c3QgbWFraW5nIGEgbmV3IHN0eWxlLCBhbmQgdG8g
YWxzbyBjbGVhciB0aGUKICAgICAgICAgICAgIC8vIGNvbHVtbiBzcGFuIGZsYWcgaWYgaXQgaXMg
c2V0LgotICAgICAgICAgICAgQVNTRVJUKCFpbmxpbmVDaGlsZHJlbkJsb2NrLT5jb250aW51YXRp
b24oKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlubGluZUNoaWxkcmVuQmxvY2suY29udGludWF0
aW9uKCkpOwogICAgICAgICAgICAgLy8gQ2FjaGUgdGhpcyB2YWx1ZSBhcyBpdCBtaWdodCBnZXQg
Y2hhbmdlZCBpbiBzZXRTdHlsZSgpIGNhbGwuCi0gICAgICAgICAgICBib29sIGlubGluZUNoaWxk
cmVuQmxvY2tIYXNMYXllciA9IGlubGluZUNoaWxkcmVuQmxvY2stPmhhc0xheWVyKCk7Ci0gICAg
ICAgICAgICBpbmxpbmVDaGlsZHJlbkJsb2NrLT5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
QW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgQkxPQ0spKTsKLSAgICAgICAgICAg
IHJlbW92ZUNoaWxkSW50ZXJuYWwoKmlubGluZUNoaWxkcmVuQmxvY2ssIGlubGluZUNoaWxkcmVu
QmxvY2tIYXNMYXllciA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKKyAg
ICAgICAgICAgIGJvb2wgaW5saW5lQ2hpbGRyZW5CbG9ja0hhc0xheWVyID0gaW5saW5lQ2hpbGRy
ZW5CbG9jay5oYXNMYXllcigpOworICAgICAgICAgICAgaW5saW5lQ2hpbGRyZW5CbG9jay5zZXRT
dHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUo
KSwgQkxPQ0spKTsKKyAgICAgICAgICAgIHJlbW92ZUNoaWxkSW50ZXJuYWwoaW5saW5lQ2hpbGRy
ZW5CbG9jaywgaW5saW5lQ2hpbGRyZW5CbG9ja0hhc0xheWVyID8gTm90aWZ5Q2hpbGRyZW4gOiBE
b250Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBOb3cganVz
dCBwdXQgdGhlIGlubGluZUNoaWxkcmVuQmxvY2sgaW5zaWRlIHRoZSBibG9ja0NoaWxkcmVuQmxv
Y2suCi0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gcHJldiA9PSBpbmxp
bmVDaGlsZHJlbkJsb2NrID8gYmxvY2tDaGlsZHJlbkJsb2NrLT5maXJzdENoaWxkKCkgOiBudWxs
cHRyOwotICAgICAgICAgICAgYmxvY2tDaGlsZHJlbkJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFs
KGlubGluZUNoaWxkcmVuQmxvY2ssIGJlZm9yZUNoaWxkLAotICAgICAgICAgICAgICAgIChpbmxp
bmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgfHwgYmxvY2tDaGlsZHJlbkJsb2NrLT5oYXNMYXllcigp
KSA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBwcmV2ID09ICZpbmxpbmVDaGlsZHJlbkJsb2NrID8g
YmxvY2tDaGlsZHJlbkJsb2NrLmZpcnN0Q2hpbGQoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBi
bG9ja0NoaWxkcmVuQmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbCgmaW5saW5lQ2hpbGRyZW5CbG9j
aywgYmVmb3JlQ2hpbGQsCisgICAgICAgICAgICAgICAgKGlubGluZUNoaWxkcmVuQmxvY2tIYXNM
YXllciB8fCBibG9ja0NoaWxkcmVuQmxvY2suaGFzTGF5ZXIoKSkgPyBOb3RpZnlDaGlsZHJlbiA6
IERvbnROb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBuZXh0LT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gaW5saW5l
Q2hpbGRyZW5CbG9jayBnb3QgcmVwYXJlbnRlZCB0byBibG9ja0NoaWxkcmVuQmxvY2ssIHNvIGl0
IGlzIG5vIGxvbmdlciBhIGNoaWxkCiAgICAgICAgICAgICAvLyBvZiAidGhpcyIuIHdlIG51bGwg
b3V0IHByZXYgb3IgbmV4dCBzbyB0aGF0IGlzIG5vdCB1c2VkIGxhdGVyIGluIHRoZSBmdW5jdGlv
bi4KLSAgICAgICAgICAgIGlmIChpbmxpbmVDaGlsZHJlbkJsb2NrID09IHByZXZCbG9jaykKLSAg
ICAgICAgICAgICAgICBwcmV2ID0gMDsKKyAgICAgICAgICAgIGlmICgmaW5saW5lQ2hpbGRyZW5C
bG9jayA9PSAmcHJldkJsb2NrKQorICAgICAgICAgICAgICAgIHByZXYgPSBudWxscHRyOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5leHQgPSAwOworICAgICAgICAgICAgICAg
IG5leHQgPSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGFrZSBh
bGwgdGhlIGNoaWxkcmVuIG91dCBvZiB0aGUgfG5leHR8IGJsb2NrIGFuZCBwdXQgdGhlbSBpbgog
ICAgICAgICAgICAgLy8gdGhlIHxwcmV2fCBibG9jay4KLSAgICAgICAgICAgIG5leHRCbG9jay0+
bW92ZUFsbENoaWxkcmVuSW5jbHVkaW5nRmxvYXRzVG8ocHJldkJsb2NrLCBuZXh0QmxvY2stPmhh
c0xheWVyKCkgfHwgcHJldkJsb2NrLT5oYXNMYXllcigpKTsKKyAgICAgICAgICAgIG5leHRCbG9j
ay5tb3ZlQWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbygmcHJldkJsb2NrLCBuZXh0QmxvY2su
aGFzTGF5ZXIoKSB8fCBwcmV2QmxvY2suaGFzTGF5ZXIoKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGluZXMgYW5kIG51a2UgaXQu
Ci0gICAgICAgICAgICBuZXh0QmxvY2stPmRlbGV0ZUxpbmVzKCk7Ci0gICAgICAgICAgICBuZXh0
QmxvY2stPmRlc3Ryb3koKTsKLSAgICAgICAgICAgIG5leHQgPSAwOworICAgICAgICAgICAgbmV4
dEJsb2NrLmRlbGV0ZUxpbmVzKCk7CisgICAgICAgICAgICBuZXh0QmxvY2suZGVzdHJveSgpOwor
ICAgICAgICAgICAgbmV4dCA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTgzNiwx
NyArODM0LDE3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRl
ck9iamVjdCYgb2xkQ2hpbGQpCiAgICAgICAgIC8vIFRoZSByZW1vdmFsIGhhcyBrbm9ja2VkIHVz
IGRvd24gdG8gY29udGFpbmluZyBvbmx5IGEgc2luZ2xlIGFub255bW91cwogICAgICAgICAvLyBi
b3guICBXZSBjYW4gZ28gYWhlYWQgYW5kIHB1bGwgdGhlIGNvbnRlbnQgcmlnaHQgYmFjayB1cCBp
bnRvIG91cgogICAgICAgICAvLyBib3guCi0gICAgICAgIGNvbGxhcHNlQW5vbnltb3VzQm94Q2hp
bGQodGhpcywgdG9SZW5kZXJCbG9jayhjaGlsZCkpOworICAgICAgICBjb2xsYXBzZUFub255bW91
c0JveENoaWxkKCp0aGlzLCBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpKTsKICAgICAgICAg
bmV4dFNpYmxpbmcgPSBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoKChwcmV2ICYmIHByZXYtPmlz
QW5vbnltb3VzQmxvY2soKSkgfHwgKG5leHQgJiYgbmV4dC0+aXNBbm9ueW1vdXNCbG9jaygpKSkg
JiYgY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkpIHsKICAgICAgICAgLy8gSXQncyBw
b3NzaWJsZSB0aGF0IHRoZSByZW1vdmFsIGhhcyBrbm9ja2VkIHVzIGRvd24gdG8gYSBzaW5nbGUg
YW5vbnltb3VzCiAgICAgICAgIC8vIGJsb2NrIHdpdGggcHNldWRvLXN0eWxlIGVsZW1lbnQgc2li
bGluZ3MgKGUuZy4gZmlyc3QtbGV0dGVyKS4gSWYgdGhlc2UKICAgICAgICAgLy8gYXJlIGZsb2F0
aW5nLCB0aGVuIHdlIG5lZWQgdG8gcHVsbCB0aGUgY29udGVudCB1cCBhbHNvLgotICAgICAgICBS
ZW5kZXJCbG9jayogYW5vbkJsb2NrID0gdG9SZW5kZXJCbG9jaygocHJldiAmJiBwcmV2LT5pc0Fu
b255bW91c0Jsb2NrKCkpID8gcHJldiA6IG5leHQpOworICAgICAgICBSZW5kZXJCbG9jayogYW5v
bkJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KChwcmV2ICYmIHByZXYtPmlzQW5vbnltb3Vz
QmxvY2soKSkgPyBwcmV2IDogbmV4dCk7CiAgICAgICAgIGlmICgoYW5vbkJsb2NrLT5wcmV2aW91
c1NpYmxpbmcoKSB8fCBhbm9uQmxvY2stPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAmJiAo
IWFub25CbG9jay0+cHJldmlvdXNTaWJsaW5nKCkgfHwgKGFub25CbG9jay0+cHJldmlvdXNTaWJs
aW5nKCktPnN0eWxlKCkuc3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8gJiYgYW5vbkJsb2NrLT5wcmV2
aW91c1NpYmxpbmcoKS0+aXNGbG9hdGluZygpICYmICFhbm9uQmxvY2stPnByZXZpb3VzU2libGlu
ZygpLT5wcmV2aW91c1NpYmxpbmcoKSkpCiAgICAgICAgICAgICAmJiAoIWFub25CbG9jay0+bmV4
dFNpYmxpbmcoKSB8fCAoYW5vbkJsb2NrLT5uZXh0U2libGluZygpLT5zdHlsZSgpLnN0eWxlVHlw
ZSgpICE9IE5PUFNFVURPICYmIGFub25CbG9jay0+bmV4dFNpYmxpbmcoKS0+aXNGbG9hdGluZygp
ICYmICFhbm9uQmxvY2stPm5leHRTaWJsaW5nKCktPm5leHRTaWJsaW5nKCkpKSkgewotICAgICAg
ICAgICAgY29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCh0aGlzLCBhbm9uQmxvY2spOworICAgICAg
ICAgICAgY29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCgqdGhpcywgYW5vbkJsb2NrKTsKICAgICAg
ICAgICAgIG5leHRTaWJsaW5nID0gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KQEAgLTg2NCwy
MyArODYyLDIzIEBAIFJlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRl
ck9iamVjdCYgb2xkQ2hpbGQpCiAgICAgICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0lnbm9y
aW5nQW5vbnltb3VzID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY29u
dGFpbmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMgJiYgY29udGFpbmluZ0Jsb2NrSWdub3JpbmdB
bm9ueW1vdXMtPmlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAgICAgICAgICBjb250YWluaW5n
QmxvY2tJZ25vcmluZ0Fub255bW91cyA9IGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5vbnltb3Vz
LT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPnByZXZpb3VzSW5QcmVPcmRlcihjb250YWluaW5n
QmxvY2tJZ25vcmluZ0Fub255bW91cykpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3Vyci0+dmly
dHVhbENvbnRpbnVhdGlvbigpICE9IHRoaXMpCisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVj
dCogY3VycmVudCA9IHRoaXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wcmV2aW91c0lu
UHJlT3JkZXIoY29udGFpbmluZ0Jsb2NrSWdub3JpbmdBbm9ueW1vdXMpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnQtPnZpcnR1YWxDb250aW51YXRpb24oKSAhPSB0aGlzKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIC8vIEZvdW5kIG91ciBw
cmV2aW91cyBjb250aW51YXRpb24uIFdlIGp1c3QgbmVlZCB0byBwb2ludCBpdCB0bwogICAgICAg
ICAgICAgICAgIC8vIHx0aGlzfCdzIG5leHQgY29udGludWF0aW9uLgogICAgICAgICAgICAgICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHRvUmVuZGVySW5saW5lKGN1cnIpLT5zZXRDb250aW51YXRpb24obmV4dENvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJCbG9jaygp
KQotICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGN1cnIpLT5zZXRDb250aW51YXRp
b24obmV4dENvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlcklubGlu
ZT4oKmN1cnJlbnQpKQorICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJJbmxpbmU+
KCpjdXJyZW50KS5zZXRDb250aW51YXRpb24obmV4dENvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50KSkKKyAgICAgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5zZXRDb250aW51YXRpb24obmV4
dENvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc2V0Q29udGludWF0aW9uKDApOworICAgICAgICAgICAgc2V0
Q29udGludWF0aW9uKG51bGxwdHIpOwogICAgICAgICAgICAgZGVzdHJveSgpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMTc0MSwxMSArMTczOSwxMSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6
OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGN1cnJlbnRDb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKICAgICBpZiAoIWN1
cnJlbnRDb250aW51YXRpb24gfHwgY3VycmVudENvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyQmxvY2sqIG5leHRDb250aW51YXRpb24gPSB0b1Jl
bmRlckJsb2NrKGN1cnJlbnRDb250aW51YXRpb24pOwotICAgIGlmIChuZXh0Q29udGludWF0aW9u
LT5pc0Fub255bW91c0Jsb2NrKCkpCi0gICAgICAgIHJldHVybiBuZXh0Q29udGludWF0aW9uLT5i
bG9ja0VsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICByZXR1cm4gbmV4dENvbnRpbnVhdGlvbjsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVuZGVyQmxvY2smIG5leHRDb250aW51YXRp
b24gPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRDb250aW51YXRpb24pOworICAgIGlm
IChuZXh0Q29udGludWF0aW9uLmlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIG5l
eHRDb250aW51YXRpb24uYmxvY2tFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgcmV0dXJuICZu
ZXh0Q29udGludWF0aW9uOwogfQogICAgIAogc3RhdGljIENvbnRpbnVhdGlvbk91dGxpbmVUYWJs
ZU1hcCogY29udGludWF0aW9uT3V0bGluZVRhYmxlKCkKQEAgLTIwNDIsNyArMjA0MCw3IEBAIEdh
cFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RC
bG9jaywgY29uc3QgTGF5b3V0UG9pCiAgICAgICAgICAgICBsYXN0TG9naWNhbFJpZ2h0ID0gbG9n
aWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+bG9naWNhbEJvdHRvbSgp
LCBjYWNoZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25Ob25l
KSB7CiAgICAgICAgICAgICAvLyBXZSBtdXN0IGJlIGEgYmxvY2sgdGhhdCBoYXMgc29tZSBzZWxl
Y3RlZCBvYmplY3QgaW5zaWRlIGl0LiAgR28gYWhlYWQgYW5kIHJlY3VyLgotICAgICAgICAgICAg
cmVzdWx0LnVuaXRlKHRvUmVuZGVyQmxvY2soY3VyciktPnNlbGVjdGlvbkdhcHMocm9vdEJsb2Nr
LCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRTaXplKG9mZnNldEZyb21Sb290Qmxv
Y2sud2lkdGgoKSArIGN1cnItPngoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKSArIGN1
cnItPnkoKSksIAorICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGRvd25jYXN0PFJlbmRlckJsb2Nr
PigqY3Vycikuc2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRp
b24sIExheW91dFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+eCgpLCBv
ZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgY3Vyci0+eSgpKSwKICAgICAgICAgICAgICAg
ICBsYXN0TG9naWNhbFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBjaGls
ZENhY2hlLCBwYWludEluZm8pKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxNjIsMjkgKzIxNjAs
MjkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0
KFJlbmRlckJsb2NrJiByb290QmxvY2ssIExheW8KIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6
YmxvY2tCZWZvcmVXaXRoaW5TZWxlY3Rpb25Sb290KExheW91dFNpemUmIG9mZnNldCkgY29uc3QK
IHsKICAgICBpZiAoaXNTZWxlY3Rpb25Sb290KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IFJlbmRlckVsZW1lbnQqIG9iamVjdCA9IHRo
aXM7CiAgICAgUmVuZGVyT2JqZWN0KiBzaWJsaW5nOwogICAgIGRvIHsKICAgICAgICAgc2libGlu
ZyA9IG9iamVjdC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYm
ICghc2libGluZy0+aXNSZW5kZXJCbG9jaygpIHx8IHRvUmVuZGVyQmxvY2soc2libGluZyktPmlz
U2VsZWN0aW9uUm9vdCgpKSkKKyAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgKCFpczxSZW5kZXJC
bG9jaz4oKnNpYmxpbmcpIHx8IGRvd25jYXN0PFJlbmRlckJsb2NrPigqc2libGluZykuaXNTZWxl
Y3Rpb25Sb290KCkpKQogICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzU2li
bGluZygpOwogCi0gICAgICAgIG9mZnNldCAtPSBMYXlvdXRTaXplKHRvUmVuZGVyQmxvY2sob2Jq
ZWN0KS0+bG9naWNhbExlZnQoKSwgdG9SZW5kZXJCbG9jayhvYmplY3QpLT5sb2dpY2FsVG9wKCkp
OworICAgICAgICBvZmZzZXQgLT0gTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm9i
amVjdCkubG9naWNhbExlZnQoKSwgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvYmplY3QpLmxvZ2lj
YWxUb3AoKSk7CiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+cGFyZW50KCk7Ci0gICAgfSB3aGls
ZSAoIXNpYmxpbmcgJiYgb2JqZWN0ICYmIG9iamVjdC0+aXNSZW5kZXJCbG9jaygpICYmICF0b1Jl
bmRlckJsb2NrKG9iamVjdCktPmlzU2VsZWN0aW9uUm9vdCgpKTsKKyAgICB9IHdoaWxlICghc2li
bGluZyAmJiBpczxSZW5kZXJCbG9jaz4ob2JqZWN0KSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KCpvYmplY3QpLmlzU2VsZWN0aW9uUm9vdCgpKTsKIAogICAgIGlmICghc2libGluZykKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVuZGVyQmxvY2sq
IGJlZm9yZUJsb2NrID0gdG9SZW5kZXJCbG9jayhzaWJsaW5nKTsKKyAgICBSZW5kZXJCbG9jayog
YmVmb3JlQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oc2libGluZyk7CiAKICAgICBvZmZz
ZXQgKz0gTGF5b3V0U2l6ZShiZWZvcmVCbG9jay0+bG9naWNhbExlZnQoKSwgYmVmb3JlQmxvY2st
PmxvZ2ljYWxUb3AoKSk7CiAKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gYmVmb3JlQmxvY2st
Pmxhc3RDaGlsZCgpOwotICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC0+aXNSZW5kZXJCbG9jaygp
KSB7Ci0gICAgICAgIGJlZm9yZUJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7CisgICAgd2hp
bGUgKGlzPFJlbmRlckJsb2NrPihjaGlsZCkpIHsKKyAgICAgICAgYmVmb3JlQmxvY2sgPSBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpOwogICAgICAgICBvZmZzZXQgKz0gTGF5b3V0U2l6ZShi
ZWZvcmVCbG9jay0+bG9naWNhbExlZnQoKSwgYmVmb3JlQmxvY2stPmxvZ2ljYWxUb3AoKSk7CiAg
ICAgICAgIGNoaWxkID0gYmVmb3JlQmxvY2stPmxhc3RDaGlsZCgpOwogICAgIH0KQEAgLTI2ODIs
NyArMjY4MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoaWxkSGl0VGVzdENhbmRpZGF0ZShj
b25zdCBSZW5kZXJCb3gmIGJveCwgY29uc3QgUmVuZGVyUmVnCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIXJlZ2lvbikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgUmVu
ZGVyQmxvY2smIGJsb2NrID0gYm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soYm94
KSA6ICpib3guY29udGFpbmluZ0Jsb2NrKCk7CisgICAgY29uc3QgUmVuZGVyQmxvY2smIGJsb2Nr
ID0gaXM8UmVuZGVyQmxvY2s+KGJveCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oYm94KSA6ICpi
b3guY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgcmV0dXJuIGJsb2NrLnJlZ2lvbkF0QmxvY2tPZmZz
ZXQocG9pbnQueSgpKSA9PSByZWdpb247CiB9CiAKQEAgLTMwNDIsMTEgKzMwNDAsMTEgQEAgUmVu
ZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiAgICAgICAgIGlm
IChmaXJzdExpbmVCbG9jay0+aXNSZXBsYWNlZCgpIHx8IGZpcnN0TGluZUJsb2NrLT5pc0Zsb2F0
aW5nKCkKICAgICAgICAgICAgIHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9jay0+Zmlyc3RD
aGlsZCgpICE9IGZpcnN0TGluZUJsb2NrIHx8ICFpc1JlbmRlckJsb2NrRmxvd09yUmVuZGVyQnV0
dG9uKCpwYXJlbnRCbG9jaykpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZmlyc3RMaW5l
QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudEJsb2NrKTsKKyAgICAgICAgZmlyc3RMaW5lQmxv
Y2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocGFyZW50QmxvY2spOwogICAgIH0gCiAgICAgCiAg
ICAgaWYgKCFoYXNQc2V1ZG8pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAKICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CkBAIC0zMTI1LDExICsz
MTIzLDExIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIGZpbmRGaXJzdExldHRlckJsb2Nr
KFJlbmRlckJsb2NrKiBzdGFydCkKICAgICAgICAgUmVuZGVyRWxlbWVudCogcGFyZW50QmxvY2sg
PSBmaXJzdExldHRlckJsb2NrLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKGZpcnN0TGV0dGVyQmxv
Y2stPmlzUmVwbGFjZWQoKSB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hp
bGQoKSAhPSBmaXJzdExldHRlckJsb2NrCiAgICAgICAgICAgICB8fCAhaXNSZW5kZXJCbG9ja0Zs
b3dPclJlbmRlckJ1dHRvbigqcGFyZW50QmxvY2spKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIGZpcnN0TGV0dGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudEJsb2NrKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBmaXJzdExldHRlckJsb2NrID0gZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KHBhcmVudEJsb2NrKTsKICAgICB9IAogCi0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0
TGV0dGVyU3R5bGUoUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJPYmplY3Qq
IGN1cnJlbnRDaGlsZCkKQEAgLTM0MjEsOCArMzQxOSw4IEBAIGNvbnN0IFJlbmRlclN0eWxlJiBS
ZW5kZXJCbG9jazo6b3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNvbnN0CiB2b2lkIFJlbmRlckJs
b2NrOjpjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqKQogewogICAgIG1ha2VDaGls
ZHJlbk5vbklubGluZSgpOwotICAgIGlmIChpc0Fub255bW91c0Jsb2NrKCkgJiYgcGFyZW50KCkg
JiYgcGFyZW50KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgdG9SZW5kZXJCbG9jayhwYXJl
bnQoKSktPnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CisgICAgaWYgKGlzQW5v
bnltb3VzQmxvY2soKSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpKQorICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2Nr
KHRoaXMpOwogICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVhZCBoZXJlCiB9CiAKQEAgLTM2NzEsMTIg
KzM2NjksMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmsoY29uc3Qg
UmVuZGVyQm94JiBjaGlsZCkgY29uc3QKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSBzYW1l
IGRpcmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBpdHMKICAg
ICAvLyBtYXJnaW4gcXVpcmsuCiAgICAgaWYgKCFjaGlsZC5pc1dyaXRpbmdNb2RlUm9vdCgpKQot
ICAgICAgICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGls
ZCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3Jl
UXVpcmsoKTsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oY2hpbGQpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCkgOiBjaGlsZC5zdHls
ZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCk7CiAgICAgCiAgICAgLy8gVGhlIGNoaWxkIGhhcyBh
IGRpZmZlcmVudCBkaXJlY3Rpb25hbGl0eS4gSWYgdGhlIGNoaWxkIGlzIHBhcmFsbGVsLCB0aGVu
IGl0J3MganVzdAogICAgIC8vIGZsaXBwZWQgcmVsYXRpdmUgdG8gdXMuIFdlIGNhbiB1c2UgdGhl
IG9wcG9zaXRlIGVkZ2UuCiAgICAgaWYgKGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLmlzUmVu
ZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA6
IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpOworICAgICAgICByZXR1cm4gaXM8
UmVuZGVyQmxvY2s+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFzTWFy
Z2luQWZ0ZXJRdWlyaygpIDogY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCk7CiAg
ICAgCiAgICAgLy8gVGhlIGNoaWxkIGlzIHBlcnBlbmRpY3VsYXIgdG8gdXMgYW5kIGJveCBzaWRl
cyBhcmUgbmV2ZXIgcXVpcmt5IGluIGh0bWwuY3NzLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUg
YWJvdXQKICAgICAvLyB3aGV0aGVyIG9yIG5vdCBhdXRob3JzIHNwZWNpZmllZCBxdWlya3kgZW1z
LCBzaW5jZSB0aGV5J3JlIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KQEAgLTM2ODgsMTIgKzM2
ODYsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzTWFyZ2luQWZ0ZXJRdWlyayhjb25zdCBSZW5k
ZXJCb3gmIGNoaWxkKSBjb25zdAogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHNhbWUgZGly
ZWN0aW9uYWxpdHkgYXMgd2UgZG8sIHRoZW4gd2UgY2FuIGp1c3QgcmV0dXJuIGl0cwogICAgIC8v
IG1hcmdpbiBxdWlyay4KICAgICBpZiAoIWNoaWxkLmlzV3JpdGluZ01vZGVSb290KCkpCi0gICAg
ICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKS5o
YXNNYXJnaW5BZnRlclF1aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhhc01hcmdpbkFmdGVyUXVpcmso
KTsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oY2hpbGQpLmhhc01hcmdpbkFmdGVyUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFz
TWFyZ2luQWZ0ZXJRdWlyaygpOwogICAgIAogICAgIC8vIFRoZSBjaGlsZCBoYXMgYSBkaWZmZXJl
bnQgZGlyZWN0aW9uYWxpdHkuIElmIHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdzIGp1
c3QKICAgICAvLyBmbGlwcGVkIHJlbGF0aXZlIHRvIHVzLiBXZSBjYW4gdXNlIHRoZSBvcHBvc2l0
ZSBlZGdlLgogICAgIGlmIChjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJsb2Nr
KCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hpbGQu
c3R5bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpOworICAgICAgICByZXR1cm4gaXM8UmVuZGVy
QmxvY2s+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkuaGFzTWFyZ2luQmVm
b3JlUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKTsKICAgICAK
ICAgICAvLyBUaGUgY2hpbGQgaXMgcGVycGVuZGljdWxhciB0byB1cyBhbmQgYm94IHNpZGVzIGFy
ZSBuZXZlciBxdWlya3kgaW4gaHRtbC5jc3MsIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91
dAogICAgIC8vIHdoZXRoZXIgb3Igbm90IGF1dGhvcnMgc3BlY2lmaWVkIHF1aXJreSBlbXMsIHNp
bmNlIHRoZXkncmUgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAppbmRleCA2NDAwZGI2ZjU1OTI5NGE3Y2Y2MTE5YWY3MjRjOTdjYTAy
N2YyNGQyLi5hYTQyNWI3M2JjYjc3ZGViNDMzNWE5NmM1NWYwZWYwOGUyMWM2NjAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMTk1LDcgKzE5NSw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJl
bmRlcmVyQW5kRGlzcGxheShjb25zdCBSZW5kZXJPYmplY3QqLCBFRGlzcGxheSA9IEJMT0NLKTsK
ICAgICBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgZGlzcGxheSA9
IEJMT0NLKSBjb25zdCB7IHJldHVybiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXJB
bmREaXNwbGF5KHRoaXMsIGRpc3BsYXkpOyB9Ci0gICAgc3RhdGljIHZvaWQgY29sbGFwc2VBbm9u
eW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayogcGFyZW50LCBSZW5kZXJCbG9jayogY2hpbGQpOwor
ICAgIHN0YXRpYyB2b2lkIGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2smIHBh
cmVudCwgUmVuZGVyQmxvY2sqIGNoaWxkKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyQm94KiBjcmVh
dGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTUzMCw4ICs1MzAsNiBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBib29sIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZzsKIH07CiAKLVJFTkRFUl9PQkpF
Q1RfVFlQRV9DQVNUUyhSZW5kZXJCbG9jaywgaXNSZW5kZXJCbG9jaygpKQotCiBMYXlvdXRVbml0
IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91
dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spOwogTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25P
ZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJv
bVJvb3RCbG9jayk7CiBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdF
ZGl0aW5nQm91bmRhcmllcyhSZW5kZXJCbG9jayYsIFJlbmRlckJveCYsIGNvbnN0IExheW91dFBv
aW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmlu
ZGV4IGQ4NWJkODIyNjA1MmQzMjc5YThlODQxNjlkOWQ1OGQyOWI5MDdmMjMuLmZmOTZkNTE2OWUx
Y2Q3Mzk2NjRmNDA2OTgxZmQ4MTQ3MmViNGE4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0xMjE5LDEwICsxMjE5LDEwIEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjptYXJnaW5CZWZvcmVFc3RpbWF0ZUZvckNoaWxkKFJlbmRlckJveCYgY2hp
bGQsIExheW91dFVuaXQmCiAgICAgLy8gTWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYmxvY2sgbWFy
Z2lucyBub3cgZm9yIHRoZSBncmFuZGNoaWxkIGJveCBzbyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQg
Y3VycmVudCB2YWx1ZXMuCiAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPm5lZWRzTGF5b3V0KCkpIHsK
ICAgICAgICAgZ3JhbmRjaGlsZEJveC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lu
cyh0aGlzKTsKLSAgICAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPmlzUmVuZGVyQmxvY2soKSkgewot
ICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGdyYW5kY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxvY2so
Z3JhbmRjaGlsZEJveCk7Ci0gICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01hcmdp
bkJlZm9yZVF1aXJrKGdyYW5kY2hpbGRCb3gtPnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmso
KSk7Ci0gICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01hcmdpbkFmdGVyUXVpcmso
Z3JhbmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOworICAgICAgICBp
ZiAoaXM8UmVuZGVyQmxvY2s+KCpncmFuZGNoaWxkQm94KSkgeworICAgICAgICAgICAgUmVuZGVy
QmxvY2smIGdyYW5kY2hpbGRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqZ3JhbmRjaGls
ZEJveCk7CisgICAgICAgICAgICBncmFuZGNoaWxkQmxvY2suc2V0SGFzTWFyZ2luQmVmb3JlUXVp
cmsoZ3JhbmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKTsKKyAgICAg
ICAgICAgIGdyYW5kY2hpbGRCbG9jay5zZXRIYXNNYXJnaW5BZnRlclF1aXJrKGdyYW5kY2hpbGRC
b3gtPnN0eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTI3NCw4ICsxMjc0LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmVzdGltYXRl
TG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IE0KICAgICAgICAgLy8g
Rm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBz
aGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJl
bnQgb25lLgogICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0dGFi
bGVDaGlsZChjaGlsZCwgbG9naWNhbFRvcEVzdGltYXRlKTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghY2hpbGQuc2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hpbGQuaXNSZW5kZXJCbG9jaygpKQotICAg
ICAgICAgICAgbG9naWNhbFRvcEVzdGltYXRlICs9IHRvUmVuZGVyQmxvY2soY2hpbGQpLnBhZ2lu
YXRpb25TdHJ1dCgpOworICAgICAgICBpZiAoIWNoaWxkLnNlbGZOZWVkc0xheW91dCgpICYmIGlz
PFJlbmRlckJsb2NrPihjaGlsZCkpCisgICAgICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUgKz0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKS5wYWdpbmF0aW9uU3RydXQoKTsKICAgICB9CiAK
ICAgICByZXR1cm4gbG9naWNhbFRvcEVzdGltYXRlOwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gmIGNoaWxk
LCBMYXlvdXRVbml0IGxvZ2ljYWwKIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVz
dEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKExheW91dFVuaXQgbG9naWNhbFRvcEFmdGVyQ2xlYXIs
IExheW91dFVuaXQgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiwgUmVuZGVyQm94JiBjaGlsZCwg
Ym9vbCBhdEJlZm9yZVNpZGVPZkJsb2NrKQogewotICAgIFJlbmRlckJsb2NrKiBjaGlsZFJlbmRl
ckJsb2NrID0gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jaygmY2hpbGQpIDog
bnVsbHB0cjsKKyAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGlzPFJlbmRlckJs
b2NrPihjaGlsZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CiAK
ICAgICBpZiAoZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiAhPSBsb2dpY2FsVG9wQWZ0ZXJDbGVh
cikgewogICAgICAgICAvLyBPdXIgZ3Vlc3MgcHJpb3IgdG8gcGFnaW5hdGlvbiBtb3ZlbWVudCB3
YXMgd3JvbmcuIEJlZm9yZSB3ZSBhdHRlbXB0IHRvIHBhZ2luYXRlLCBsZXQncyB0cnkgYWdhaW4g
YXQgdGhlIG5ldwpAQCAtMjQ1Nyw3ICsyNDU3LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBv
c2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgcGFnaW5h
dGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRvd24gZnVydGhlci4KICAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hpbGQgY2FuJ3QgYWxzbyBoYXZlIGEg
cGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcwogICAgICAgICAgICAgLy8gZXhjbHVzaXZlIHdp
dGggdGhlIGNhc2UgYWJvdmUuCi0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9
IGNoaWxkQm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soJmNoaWxkQm94KSA6IG51
bGxwdHI7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IGlzPFJlbmRlckJs
b2NrPihjaGlsZEJveCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkQm94KSA6IG51bGxw
dHI7CiAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0aW9u
U3RydXQoKSkgewogICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gY2hpbGRCbG9jay0+
cGFnaW5hdGlvblN0cnV0KCk7CiAgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0UGFnaW5h
dGlvblN0cnV0KDApOwpAQCAtMjcyOSwxNiArMjcyOSwxNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxv
dzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1v
dmUpCiAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKIAogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dDsgbmV4dCA9IG5leHQtPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFuZXh0LT5pc1JlbmRlckJsb2NrRmxvdygpIHx8
IG5leHQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCB0b1JlbmRlckJsb2Nr
KG5leHQpLT5hdm9pZHNGbG9hdHMoKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+
KCpuZXh0KSB8fCBuZXh0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqbmV4dCkuYXZvaWRzRmxvYXRzKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBSZW5kZXJCbG9ja0Zsb3cqIG5leHRCbG9jayA9IHRvUmVu
ZGVyQmxvY2tGbG93KG5leHQpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIG5leHRCbG9jayA9
IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm5leHQpOwogICAgICAgICBmb3IgKGF1dG8gaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIFJlbmRlckJveCYgZmxvYXRpbmdCb3ggPSAoKml0KS0+cmVuZGVyZXIoKTsKICAgICAgICAg
ICAgIGlmIChmbG9hdFRvUmVtb3ZlICYmICZmbG9hdGluZ0JveCAhPSBmbG9hdFRvUmVtb3ZlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5leHRCbG9jay0+Y29u
dGFpbnNGbG9hdChmbG9hdGluZ0JveCkpCi0gICAgICAgICAgICAgICAgbmV4dEJsb2NrLT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCZmbG9hdGluZ0JveCk7CisgICAgICAg
ICAgICBpZiAobmV4dEJsb2NrLmNvbnRhaW5zRmxvYXQoZmxvYXRpbmdCb3gpKQorICAgICAgICAg
ICAgICAgIG5leHRCbG9jay5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCZm
bG9hdGluZ0JveCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IGI4MmU3NTY4MDRjM2Jl
ZTEyYThiMWU2NjY2MTI2YWM2YTM1MDQzZTguLjFhMzlkZTc3NGE0M2I4YWMzZmM3YTIxZTZmMDM5
YTBjYmMwZTZkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xODk0LDggKzE4OTQsOCBAQCBib29sIFJlbmRlckJsb2Nr
Rmxvdzo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZs
b2F0aW5nTwogCiAgICAgICAgICAgICBpZiAodXBkYXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChm
bG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgZmxvYXRCb3guc2V0
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGZsb2F0Qm94
LmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGZsb2F0Qm94
KS5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBlbHNlIGlm
IChpczxSZW5kZXJCbG9jaz4oZmxvYXRCb3gpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFJl
bmRlckJsb2NrPihmbG9hdEJveCkuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwog
ICAgICAgICAgICAgZmxvYXRCb3gubGF5b3V0SWZOZWVkZWQoKTsKIAogICAgICAgICAgICAgLy8g
U2F2ZSB0aGUgb2xkIGxvZ2ljYWwgdG9wIGJlZm9yZSBjYWxsaW5nIHJlbW92ZVBsYWNlZE9iamVj
dCB3aGljaCB3aWxsIHNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRl
eCBlMWRlNDIwNzZmMTNjMzRiNzg4NjA5NDVlNmE4MjFmYzFhNWY4Y2ViLi42OTIwODY3NzkxMGZm
MzY1YmNkZDlkMjhhNGVhZGVkODQyNzc3MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtMjk0NywyMCArMjk0NywyMCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0KSBj
bwogICAgICAgICBjYXNlIENhbGN1bGF0ZWQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8g
Y2IgPSBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDogY29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgICAgICAgICB3aGlsZSAoY2ItPmlzQW5vbnltb3VzKCkgJiYgIWNiLT5pc1Jl
bmRlclZpZXcoKSkgeworICAgICAgICAgICAgd2hpbGUgKGNiLT5pc0Fub255bW91cygpICYmICFp
czxSZW5kZXJWaWV3PigqY2IpKSB7CiAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjYiktPmFkZFBlcmNlbnRI
ZWlnaHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpKTsKKyAgICAgICAg
ICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudChjb25zdF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKSk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGN1bGF0aW9uIGlzIG5vdCBwYXRjaGVkIGZvciBi
bG9jay1mbG93IHlldC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NjUwMAogICAgICAgICAgICAgaWYgKGNiLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSAmJiBjYi0+c3R5bGUoKS5oZWlnaHQoKS5pc0F1dG8oKSAmJiAhKGNiLT5zdHlsZSgp
LnRvcCgpLmlzQXV0bygpIHx8IGNiLT5zdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNiLT5pc1JlbmRl
ckJsb2NrKCkpOwotICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVy
QmxvY2soY2IpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPigqY2IpOwogICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRl
ZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAgICAgICAgICAgICAgICBibG9jay0+Y29tcHV0ZUxv
Z2ljYWxIZWlnaHQoYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOwot
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50IC0gYmxvY2stPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgLSBi
bG9jay0+c2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgbmV3SGVpZ2h0ID0gYmxvY2stPmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94
U2l6aW5nKG5ld0NvbnRlbnRIZWlnaHQpOworICAgICAgICAgICAgICAgIGJsb2NrLmNvbXB1dGVM
b2dpY2FsSGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOwor
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50IC0gYmxvY2suYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJs
b2NrLnNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IG5ld0hlaWdodCA9IGJsb2NrLmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6
aW5nKG5ld0NvbnRlbnRIZWlnaHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RDb250
ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZyh2YWx1ZUZvckxlbmd0aChsb2dpY2FsSGVp
Z2h0LCBuZXdIZWlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjk4NCw3
ICsyOTg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxI
ZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCkgY28KICAgICAgICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJsZUhlaWdodCA9IHN0ZDo6bWF4KGF2YWlsYWJsZUhlaWdodCwgaW50cmluc2lj
TG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZUZv
ckxlbmd0aChsb2dpY2FsSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLSBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB0b1JlbmRlckJsb2NrKGNiKS0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3Rf
Y2FzdDxSZW5kZXJCb3gmPigqdGhpcykpOworICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9jYXN0PFJl
bmRlckJveCY+KCp0aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5p
bmdCbG9jaygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMwMjMsMTEg
KzMwMjMsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRV
c2luZyhjb25zdCBMZW5ndGgmIGgsIEF2YWlsYWJsZUxvZ2kKIAogICAgIC8vIEZJWE1FOiBDaGVj
ayBsb2dpY2FsVG9wL2xvZ2ljYWxCb3R0b20gaGVyZSB0byBjb3JyZWN0bHkgaGFuZGxlIHZlcnRp
Y2FsIHdyaXRpbmctbW9kZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDY1MDAKLSAgICBpZiAoaXNSZW5kZXJCbG9jaygpICYmIGlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmIHN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgIShzdHlsZSgpLnRvcCgp
LmlzQXV0bygpIHx8IHN0eWxlKCkuYm90dG9tKCkuaXNBdXRvKCkpKSB7Ci0gICAgICAgIFJlbmRl
ckJsb2NrKiBibG9jayA9IGNvbnN0X2Nhc3Q8UmVuZGVyQmxvY2sqPih0b1JlbmRlckJsb2NrKHRo
aXMpKTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCp0aGlzKSAmJiBpc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSAmJiBzdHlsZSgpLmhlaWdodCgpLmlzQXV0bygpICYmICEoc3R5bGUoKS50b3AoKS5p
c0F1dG8oKSB8fCBzdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgeworICAgICAgICBSZW5kZXJC
bG9jayYgYmxvY2sgPSBjb25zdF9jYXN0PFJlbmRlckJsb2NrJj4oZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KCp0aGlzKSk7CiAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRl
ZFZhbHVlczsKLSAgICAgICAgYmxvY2stPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLT5sb2dp
Y2FsSGVpZ2h0KCksIDAsIGNvbXB1dGVkVmFsdWVzKTsKLSAgICAgICAgTGF5b3V0VW5pdCBuZXdD
b250ZW50SGVpZ2h0ID0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBibG9jay0+Ym9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrLT5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7
CisgICAgICAgIGJsb2NrLmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWlnaHQo
KSwgMCwgY29tcHV0ZWRWYWx1ZXMpOworICAgICAgICBMYXlvdXRVbml0IG5ld0NvbnRlbnRIZWln
aHQgPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCAtIGJsb2NrLmJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsSGVpZ2h0KCkgLSBibG9jay5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIHJl
dHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZyhuZXdDb250ZW50
SGVpZ2h0KTsKICAgICB9CiAKQEAgLTMwNzIsMzkgKzMwNzIsMzkgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVu
ZGVyQm94TW8KICAgICBpZiAoY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgJiYgY29u
dGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0
Rm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsKIAotICAgIGlmIChjb250YWlu
aW5nQmxvY2stPmlzQm94KCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqY29udGFpbmluZ0Js
b2NrKSkgewogICAgICAgICBib29sIGlzRml4ZWRQb3NpdGlvbiA9IHN0eWxlKCkucG9zaXRpb24o
KSA9PSBGaXhlZFBvc2l0aW9uOwogCiAgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGlmICghZmxvd1RocmVh
ZCkgewotICAgICAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxvY2st
PmlzUmVuZGVyVmlldygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclZpZXcoY29u
dGFpbmluZ0Jsb2NrKS0+Y2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOworICAg
ICAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBpczxSZW5kZXJWaWV3PigqY29udGFpbmlu
Z0Jsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVmlldz4oKmNv
bnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOwogCi0g
ICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goY29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50TG9n
aWNhbFdpZHRoKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqY29u
dGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChpc0ZpeGVkUG9zaXRpb24gJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlck5hbWVkRmxv
d1RocmVhZCgpKQorICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlck5hbWVk
Rmxvd1RocmVhZD4oKmNvbnRhaW5pbmdCbG9jaykpCiAgICAgICAgICAgICByZXR1cm4gY29udGFp
bmluZ0Jsb2NrLT52aWV3KCkuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAKLSAgICAgICAgaWYgKCFj
b250YWluaW5nQmxvY2stPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgIHJldHVybiB0b1Jl
bmRlckJveCgqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAg
aWYgKCFpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lk
dGgoKTsKIAotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGNv
bnRhaW5pbmdCbG9jayk7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSAw
OworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8g
PSBudWxscHRyOwogICAgICAgICBpZiAoIXJlZ2lvbikgewogICAgICAgICAgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNoZWNrRm9yUGVycGVuZGljdWxh
cldyaXRpbmdNb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dUaHJlYWQo
Y29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24oKTsKICAg
ICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSgpOwotICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi0+cmVnaW9u
QXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQg
Y2JQYWdlT2Zmc2V0ID0gY2Iub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOworICAg
ICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi5yZWdpb25BdEJsb2NrT2Zm
c2V0KGNiUGFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGNiUmVnaW9uKQotICAgICAg
ICAgICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24p
OworICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5mbyhj
YlJlZ2lvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYmIGZs
b3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNv
bnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lv
bik7Ci0gICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFp
bmluZ0Jsb2NrUmVnaW9uKTsKKyAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Js
b2NrUmVnaW9uID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgICAg
ICAgICAgYm94SW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2NrUmVn
aW9uKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKGJveEluZm8pID8gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgY2ItPmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLT5sb2dpY2FsV2lkdGgo
KSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi0+Y2xpZW50TG9naWNhbFdpZHRoKCk7
CisgICAgICAgIHJldHVybiAoYm94SW5mbykgPyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjYi5j
bGllbnRMb2dpY2FsV2lkdGgoKSAtIChjYi5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxvZ2lj
YWxXaWR0aCgpKSkgOiBjYi5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICB9CiAKICAgICBBU1NF
UlQoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlcklubGluZSgpICYmIGNvbnRhaW5pbmdCbG9jay0+
aXNJbkZsb3dQb3NpdGlvbmVkKCkpOwpAQCAtMzEzMywzNyArMzEzMywzNyBAQCBMYXlvdXRVbml0
IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25z
dCBSZW5kZXJCb3hNbwogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWlu
aW5nQmxvY2ssIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0CiB7
CiAgICAgaWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlICYmIGNvbnRhaW5pbmdC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQotICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRp
b25lZChjb250YWluaW5nQmxvY2ssIDAsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRy
LCBmYWxzZSk7CiAKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CiAgICAgICAg
IGJvb2wgaXNGaXhlZFBvc2l0aW9uID0gc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRp
b247CiAKLSAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxvY2stPmlz
UmVuZGVyVmlldygpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVmlldyhjb250YWluaW5n
QmxvY2spLT5jbGllbnRMb2dpY2FsSGVpZ2h0Rm9yRml4ZWRQb3NpdGlvbigpOworICAgICAgICBp
ZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKQor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2sp
LmNsaWVudExvZ2ljYWxIZWlnaHRGb3JGaXhlZFBvc2l0aW9uKCk7CiAKLSAgICAgICAgY29uc3Qg
UmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckJsb2NrKCkgPyB0b1Jl
bmRlckJsb2NrKGNvbnRhaW5pbmdCbG9jaykgOiBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdC
bG9jaygpOworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSBpczxSZW5kZXJCbG9jaz4o
KmNvbnRhaW5pbmdCbG9jaykgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Jsb2Nr
KSA6IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIExheW91dFVu
aXQgcmVzdWx0ID0gY2ItPmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgUmVuZGVyRmxv
d1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICAg
ICAgaWYgKGZsb3dUaHJlYWQgJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckZsb3dUaHJlYWQo
KSAmJiBmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBpc0ZpeGVkUG9zaXRpb24p
CisgICAgICAgIGlmIChmbG93VGhyZWFkICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWlu
aW5nQmxvY2spICYmIGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29u
dGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKSAmJiBpc0ZpeGVk
UG9zaXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+dmlldygp
LmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dU
aHJlYWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9u
KCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKmNvbnRh
aW5pbmdCbG9jaykuY29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIEFTU0VSVChj
b250YWluaW5nQmxvY2stPmlzUmVuZGVySW5saW5lKCkgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0lu
Rmxvd1Bvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlcklubGluZT4oKmNvbnRhaW5p
bmdCbG9jaykgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7CiAKLSAg
ICBjb25zdCBSZW5kZXJJbmxpbmUqIGZsb3cgPSB0b1JlbmRlcklubGluZShjb250YWluaW5nQmxv
Y2spOwotICAgIElubGluZUZsb3dCb3gqIGZpcnN0ID0gZmxvdy0+Zmlyc3RMaW5lQm94KCk7Ci0g
ICAgSW5saW5lRmxvd0JveCogbGFzdCA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CisgICAgY29uc3Qg
UmVuZGVySW5saW5lJiBmbG93ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY29udGFpbmluZ0Js
b2NrKTsKKyAgICBJbmxpbmVGbG93Qm94KiBmaXJzdCA9IGZsb3cuZmlyc3RMaW5lQm94KCk7Cisg
ICAgSW5saW5lRmxvd0JveCogbGFzdCA9IGZsb3cubGFzdExpbmVCb3goKTsKIAogICAgIC8vIElm
IHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGVtcHR5LCByZXR1cm4gYSBoZWlnaHQgb2YgMC4KICAg
ICBpZiAoIWZpcnN0IHx8ICFsYXN0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIExheW91dFVu
aXQgaGVpZ2h0UmVzdWx0OwotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBmbG93LT5saW5l
c0JvdW5kaW5nQm94KCk7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGZsb3cubGluZXNC
b3VuZGluZ0JveCgpOwogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCiAgICAgICAgIGhlaWdodFJlc3VsdCA9IGJvdW5kaW5nQm94LmhlaWdodCgpOwog
ICAgIGVsc2UKQEAgLTMxODAsMTMgKzMxODAsMTMgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGlu
ZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2gK
ICAgICAvLyBGSVhNRTogVGhlIHN0YXRpYyBkaXN0YW5jZSBjb21wdXRhdGlvbiBoYXMgbm90IGJl
ZW4gcGF0Y2hlZCBmb3IgbWl4ZWQgd3JpdGluZyBtb2RlcyB5ZXQuCiAgICAgaWYgKGNoaWxkLT5w
YXJlbnQoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgTGF5b3V0VW5p
dCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigp
IC0gY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgIGZvciAoYXV0
byBjdXJyID0gY2hpbGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxvY2s7
IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94
KCkpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSB0b1JlbmRlckJveChjdXJy
KS0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uICYmIHRvUmVuZGVy
Qm94KGN1cnIpLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJC
b3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAgICAgIGZvciAoYXV0byBjdXJyZW50ID0gY2hpbGQt
PnBhcmVudCgpOyBjdXJyZW50ICYmIGN1cnJlbnQgIT0gY29udGFpbmVyQmxvY2s7IGN1cnJlbnQg
PSBjdXJyZW50LT5jb250YWluZXIoKSkgeworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4o
KmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gZG93bmNhc3Q8
UmVuZGVyQm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVnaW9uICYmIGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVuZGVyQmxvY2smIGN1cnJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGN1cnJlbnRCbG9jay5j
bGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CisgICAgICAgICAgICAgICAgICAgIFJl
bmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjdXJyZW50QmxvY2sucmVuZGVyQm94UmVnaW9u
SW5mbyhyZWdpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94SW5mbykKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzE5NiwyNSArMzE5NiwyNSBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBs
b2dpY2FsUmlnaAogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlbmRlckJveCYgZW5jbG9zaW5nQm94
ID0gY2hpbGQtPnBhcmVudCgpLT5lbmNsb3NpbmdCb3goKTsKICAgICAgICAgTGF5b3V0VW5pdCBz
dGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpICsg
Y29udGFpbmVyTG9naWNhbFdpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0
KCk7Ci0gICAgICAgIGZvciAoUmVuZGVyRWxlbWVudCogY3VyciA9ICZlbmNsb3NpbmdCb3g7IGN1
cnI7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnItPmlz
Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyciAhPSBjb250YWluZXJCbG9jaykKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gdG9SZW5kZXJCb3goY3VyciktPmxv
Z2ljYWxMZWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0JveCkK
KyAgICAgICAgZm9yIChSZW5kZXJFbGVtZW50KiBjdXJyZW50ID0gJmVuY2xvc2luZ0JveDsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmNvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBpZiAo
aXM8UmVuZGVyQm94PigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCAh
PSBjb250YWluZXJCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0g
ZG93bmNhc3Q8UmVuZGVyQm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudCA9PSAmZW5jbG9zaW5nQm94KQogICAgICAgICAgICAgICAgICAgICBz
dGF0aWNQb3NpdGlvbiAtPSBlbmNsb3NpbmdCb3gubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlZ2lvbiAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMo
cmVnaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5m
byA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAgICAgICAgICAgICAgaWYg
KHJlZ2lvbiAmJiBpczxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlbmRlckJsb2NrJiBjdXJyZW50QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKmN1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjdXJyZW50QmxvY2su
Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY3VycmVudEJsb2NrLnJlbmRlckJveFJlZ2lv
bkluZm8ocmVnaW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyICE9IGNvbnRhaW5lckJsb2NrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGNiLT5sb2dpY2FsV2lkdGgoKSAt
IChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRoKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0JveCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGN1cnJlbnRCbG9jay5sb2dpY2Fs
V2lkdGgoKSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRo
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJmVuY2xvc2luZ0Jv
eCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBlbmNsb3Np
bmdCb3gubG9naWNhbFdpZHRoKCkgLSBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChjdXJyID09IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAgICAgaWYgKGN1cnJlbnQg
PT0gY29udGFpbmVyQmxvY2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgbG9naWNhbFJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CkBAIC0z
MzM4LDE0ICszMzM4LDE0IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1CiAgICAgLy8gQWRqdXN0
IGxvZ2ljYWxMZWZ0IGlmIHdlIG5lZWQgdG8gZm9yIHRoZSBmbGlwcGVkIHZlcnNpb24gb2Ygb3Vy
IHdyaXRpbmcgbW9kZSBpbiByZWdpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
b3RoZXIgdHlwZXMgb2Ygb2JqZWN0cyBhcyBjb250YWluZXJCbG9jaywgbm90IG9ubHkgUmVuZGVy
QmxvY2suCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKLSAgICBpZiAoZmxvd1RocmVhZCAmJiAhcmVnaW9uICYmIGlzV3JpdGlu
Z01vZGVSb290KCkgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluZXJCbG9j
ay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250YWluZXJCbG9jay0+aXNSZW5kZXJC
bG9jaygpKSB7CisgICAgaWYgKGZsb3dUaHJlYWQgJiYgIXJlZ2lvbiAmJiBpc1dyaXRpbmdNb2Rl
Um9vdCgpICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxvY2stPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgaXM8UmVuZGVyQmxvY2s+KCpjb250YWluZXJCbG9j
aykpIHsKICAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrLT5jYW5IYXZlQm94SW5mb0luUmVn
aW9uKCkpOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UG9zID0gY29tcHV0ZWRWYWx1
ZXMubV9wb3NpdGlvbjsKLSAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJC
bG9jayhjb250YWluZXJCbG9jayk7Ci0gICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zmc2V0ID0g
Y2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICAgICAgUmVuZGVyUmVn
aW9uKiBjYlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7Cisg
ICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPigqY29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9
IHJlbmRlckJsb2NrLm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAgICAg
UmVuZGVyUmVnaW9uKiBjYlJlZ2lvbiA9IHJlbmRlckJsb2NrLnJlZ2lvbkF0QmxvY2tPZmZzZXQo
Y2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7Ci0gICAgICAgICAgICBSZW5k
ZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdp
b24pOworICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRlckJs
b2NrLnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJveElu
Zm8pIHsKICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSBib3hJbmZvLT5sb2dpY2Fs
TGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBsb2dp
Y2FsTGVmdFBvczsKQEAgLTM2NTUsMTQgKzM2NTUsMTQgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNv
bXAKICAgICAvLyBBZGp1c3QgbG9naWNhbFRvcCBpZiB3ZSBuZWVkIHRvIGZvciBwZXJwZW5kaWN1
bGFyIHdyaXRpbmcgbW9kZXMgaW4gcmVnaW9ucy4KICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG90aGVyIHR5cGVzIG9mIG9iamVjdHMgYXMgY29udGFpbmVyQmxvY2ssIG5vdCBvbmx5IFJl
bmRlckJsb2NrLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAm
JiBjb250YWluZXJCbG9jay0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgaWYgKGZsb3dUaHJlYWQg
JiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSAmJiBpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5lckJsb2NrKSkgewog
ICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2stPmNhbkhhdmVCb3hJbmZvSW5SZWdpb24oKSk7
CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1fcG9z
aXRpb247Ci0gICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29u
dGFpbmVyQmxvY2spOwotICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLT5vZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dpY2FsTGVmdCgpOwotICAgICAgICBS
ZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zm
c2V0KTsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlckJveCA9IGRvd25jYXN0PFJl
bmRlckJsb2NrPigqY29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9m
ZnNldCA9IHJlbmRlckJveC5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dp
Y2FsTGVmdCgpOworICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gcmVuZGVyQm94LnJl
Z2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7
Ci0gICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJv
eFJlZ2lvbkluZm8oY2JSZWdpb24pOworICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyog
Ym94SW5mbyA9IHJlbmRlckJveC5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAg
ICAgICAgIGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAgICAgbG9naWNhbFRvcFBvcyArPSBi
b3hJbmZvLT5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1f
cG9zaXRpb24gPSBsb2dpY2FsVG9wUG9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYmFmZDg0YjI0ZjMxZjg5NDQwMWQ0YmRi
YzQ5MTM3MDNhNGMyYWI0OS4uNzNmM2VlNDVhZDRhMDI5OTBkNDgxMzNkZDkzY2U4MDhjZTM3YmM2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0aWMgTGF5b3V0U2l6ZSBhY2N1bXVsYXRl
SW5GbG93UG9zaXRpb25PZmZzZXRzKGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQpCiAgICAgaWYg
KCFjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpIHx8ICFjaGlsZC0+aXNJbkZsb3dQb3NpdGlvbmVk
KCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXQ7
Ci0gICAgUmVuZGVyRWxlbWVudCogcCA9IHRvUmVuZGVyQmxvY2soY2hpbGQpLT5pbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCk7Ci0gICAgd2hpbGUgKHAgJiYgcC0+aXNSZW5kZXJJbmxpbmUoKSkg
eworICAgIFJlbmRlckVsZW1lbnQqIHAgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNoaWxkKS5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgd2hpbGUgKGlzPFJlbmRlcklubGluZT4o
cCkpIHsKICAgICAgICAgaWYgKHAtPmlzSW5GbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAg
ICBSZW5kZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHApOwotICAgICAg
ICAgICAgb2Zmc2V0ICs9IHJlbmRlcklubGluZS0+b2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKTsK
KyAgICAgICAgICAgIFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPigqcCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gcmVuZGVySW5saW5lLm9mZnNldEZv
ckluRmxvd1Bvc2l0aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgcCA9IHAtPnBhcmVudCgpOwog
ICAgIH0KQEAgLTI2NzQsNyArMjY3NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1v
dmVDaGlsZFRvKFJlbmRlckJveE1vZGVsT2JqZWN0KiB0b0JveE1vZGVsT2JqZWN0LCBSCiB7CiAg
ICAgLy8gV2UgYXNzdW1lIHRoYXQgY2FsbGVycyBoYXZlIGNsZWFyZWQgdGhlaXIgcG9zaXRpb25l
ZCBvYmplY3RzIGxpc3QgZm9yIGNoaWxkIG1vdmVzICghZnVsbFJlbW92ZUluc2VydCkgc28gdGhl
CiAgICAgLy8gcG9zaXRpb25lZCByZW5kZXJlciBtYXBzIGRvbid0IGJlY29tZSBzdGFsZS4gSXQg
d291bGQgYmUgdG9vIHNsb3cgdG8gZG8gdGhlIG1hcCBsb29rdXAgb24gZWFjaCBjYWxsLgotICAg
IEFTU0VSVCghZnVsbFJlbW92ZUluc2VydCB8fCAhaXNSZW5kZXJCbG9jaygpIHx8ICF0b1JlbmRl
ckJsb2NrKHRoaXMpLT5oYXNQb3NpdGlvbmVkT2JqZWN0cygpKTsKKyAgICBBU1NFUlQoIWZ1bGxS
ZW1vdmVJbnNlcnQgfHwgIWlzPFJlbmRlckJsb2NrPigqdGhpcykgfHwgIWRvd25jYXN0PFJlbmRl
ckJsb2NrPigqdGhpcykuaGFzUG9zaXRpb25lZE9iamVjdHMoKSk7CiAKICAgICBBU1NFUlQodGhp
cyA9PSBjaGlsZC0+cGFyZW50KCkpOwogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9Cb3hN
b2RlbE9iamVjdCA9PSBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwpAQCAtMjY5NSwxMCArMjY5NSwx
MCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRyZW5UbyhSZW5kZXJCb3hN
b2RlbE9iamVjdCogdG9Cb3hNb2RlbE9iamVjdAogICAgIC8vIFRoaXMgY29uZGl0aW9uIGlzIHJh
cmVseSBoaXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBvbgogICAgIC8v
IGFub255bW91cyBibG9ja3Mgd2hpY2ggY2FuIG5vIGxvbmdlciBjYXJyeSBwb3NpdGlvbmVkIG9i
amVjdHMgKHNlZSByMTIwNzYxKQogICAgIC8vIG9yIHdoZW4gZnVsbFJlbW92ZUluc2VydCBpcyBm
YWxzZS4KLSAgICBpZiAoZnVsbFJlbW92ZUluc2VydCAmJiBpc1JlbmRlckJsb2NrKCkpIHsKLSAg
ICAgICAgdG9SZW5kZXJCbG9jayh0aGlzKS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7Ci0g
ICAgICAgIGlmIChpc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9j
a0Zsb3codGhpcyktPnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOyAKKyAgICBpZiAoZnVsbFJlbW92
ZUluc2VydCAmJiBpczxSZW5kZXJCbG9jaz4oKnRoaXMpKSB7CisgICAgICAgIGRvd25jYXN0PFJl
bmRlckJsb2NrPigqdGhpcykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7CisgICAg
ICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKSkKKyAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrRmxvdz4oKnRoaXMpLnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOwogICAgIH0K
IAogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9Cb3hNb2RlbE9iamVjdCA9PSBiZWZvcmVD
aGlsZC0+cGFyZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwCmluZGV4IDhmNGY0NWU5NTdkM2MxZTRiZDRmOTQ5MDQzNWQ3NjgxM2EzOWM2NWEuLjA4Mjdj
YWE3MGU1NGQ3ZmRiOTU1MGQ3OThjMWI0ODQ0YTY4OGVjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIFJlbmRl
ckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3BhZ2F0
aW9uVHlwZSBwcm9wYQogICAgICAgICBpZiAoIWVsZW1lbnRDaGlsZC5pc0Fub255bW91cygpIHx8
IGVsZW1lbnRDaGlsZC5zdHlsZSgpLnN0eWxlVHlwZSgpICE9IE5PUFNFVURPKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHByb3BhZ2F0aW9uVHlwZSA9PSBQcm9wYWdhdGVU
b0Jsb2NrQ2hpbGRyZW5Pbmx5ICYmICFlbGVtZW50Q2hpbGQuaXNSZW5kZXJCbG9jaygpKQorICAg
ICAgICBpZiAocHJvcGFnYXRpb25UeXBlID09IFByb3BhZ2F0ZVRvQmxvY2tDaGlsZHJlbk9ubHkg
JiYgIWlzPFJlbmRlckJsb2NrPihlbGVtZW50Q2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7
CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC03NzEsNyArNzcxLDcgQEAgdm9pZCBS
ZW5kZXJFbGVtZW50Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oU3R5bGVQcm9w
YWdhdGlvblR5cGUgcHJvcGEKICNlbmRpZgogCiAgICAgICAgIC8vIFJlbmRlckZsb3dUaHJlYWRz
IGFyZSB1cGRhdGVkIHRocm91Z2ggdGhlIFJlbmRlclZpZXc6OnN0eWxlRGlkQ2hhbmdlIGZ1bmN0
aW9uLgotICAgICAgICBpZiAoZWxlbWVudENoaWxkLmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAg
ICAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oZWxlbWVudENoaWxkKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
QW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgZWxlbWVudENoaWxkLnN0eWxlKCku
ZGlzcGxheSgpKTsKQEAgLTc4NCw3ICs3ODQsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnByb3Bh
Z2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3BhZ2F0aW9uVHlwZSBwcm9wYQog
CiAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBwb3NpdGlvbiBzdHlsZSBvZiBhbm9ueW1vdXMgYmxv
Y2sgY29udGludWF0aW9ucyBhcyB0aGV5IGNhbiBoYXZlIHJlbGF0aXZlIG9yIHN0aWNreSBwb3Np
dGlvbiB3aGVuCiAgICAgICAgIC8vIHRoZXkgY29udGFpbiBibG9jayBkZXNjZW5kYW50cyBvZiBy
ZWxhdGl2ZSBvciBzdGlja3kgcG9zaXRpb25lZCBpbmxpbmVzLgotICAgICAgICBpZiAoZWxlbWVu
dENoaWxkLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIHRvUmVuZGVyQmxvY2soZWxlbWVudENoaWxk
KS5pc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIGlmIChlbGVtZW50Q2hp
bGQuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGVsZW1lbnRD
aGlsZCkuaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKQogICAgICAgICAgICAgbmV3U3R5
bGUuZ2V0KCkuc2V0UG9zaXRpb24oZWxlbWVudENoaWxkLnN0eWxlKCkucG9zaXRpb24oKSk7CiAK
ICAgICAgICAgZWxlbWVudENoaWxkLnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGYxZjVi
MzJhNTNkNjY4YWI2MTllMzQ1ZTQ4ZTA5NmUxNzFkNGExNzcuLmE4NjAwOTY3NGI2Y2U4OGM3Njc2
ZjBlNmRkN2UwZDlkNjc3Mzc1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAKQEAgLTQ3MywxNiArNDczLDE2IEBAIExheW91dFBvaW50IFJlbmRl
ckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0
IFJlbmRlCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdldCB0aGUgbG9naWNhbCB0b3Ag
Y29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBvYmplY3QuCiAgICAgICAgICAgICBMYXlvdXRVbml0
IHRvcCA9IDA7Ci0gICAgICAgICAgICBpZiAoYm94TW9kZWxPYmplY3QuaXNSZW5kZXJCbG9jaygp
KQotICAgICAgICAgICAgICAgIHRvcCA9IHRvUmVuZGVyQmxvY2soYm94TW9kZWxPYmplY3QpLm9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJCbG9jaz4oYm94TW9kZWxPYmplY3QpKQorICAgICAgICAgICAgICAgIHRvcCA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPihib3hNb2RlbE9iamVjdCkub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGJveE1vZGVs
T2JqZWN0LmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgICAgICB0b3AgPSBib3hN
b2RlbE9iamVjdC5jb250YWluaW5nQmxvY2soKS0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChib3hNb2RlbE9i
amVjdC5pc0JveCgpKQotICAgICAgICAgICAgICAgICAgICB0b3AgKz0gdG9SZW5kZXJCb3goYm94
TW9kZWxPYmplY3QpLnRvcExlZnRMb2NhdGlvbigpLnkoKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChib3hNb2RlbE9iamVjdC5pc1JlbmRlcklubGluZSgpKQotICAgICAgICAgICAgICAgICAg
ICB0b3AgLT0gdG9SZW5kZXJJbmxpbmUoYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOworICAg
ICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGJveE1vZGVsT2JqZWN0KSkKKyAgICAgICAg
ICAgICAgICAgICAgdG9wICs9IGRvd25jYXN0PFJlbmRlckJveD4oYm94TW9kZWxPYmplY3QpLnRv
cExlZnRMb2NhdGlvbigpLnkoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJJ
bmxpbmU+KGJveE1vZGVsT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgdG9wIC09IGRvd25j
YXN0PFJlbmRlcklubGluZT4oYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGxvZ2ljYWwgdG9wIG9m
IHRoZSByZWdpb24gdGhpcyBvYmplY3Qgc3RhcnRzIGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKaW5kZXggNjQ0MzNmYzVkMjYzNGU5MGQwMzc3ZDYy
MDE4ZjRkNzBlZmU0ZDU0NC4uNzQ1MTIyMWMyY2MxNTBiMGQ5MjI4M2IwZjYzOTk5YmUxOTczNjBl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcApA
QCAtMTQ5LDE0ICsxNDksMTQgQEAgdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjp1bndyYXBSZW5kZXJl
cihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKQogICAgICAgICBpZiAoY2hpbGQgIT0g
bGFzdENoaWxkKCkpCiAgICAgICAgICAgICByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkID0gdHJ1
ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQgJiYgY2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSkg
ewotICAgICAgICAgICAgYXV0byYgYW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2NrKCpjaGls
ZCk7CisgICAgICAgICAgICBhdXRvJiBhbm9ueW1vdXNCbG9jayA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPigqY2hpbGQpOwogICAgICAgICAgICAgaWYgKGFub255bW91c0Jsb2NrLmZpcnN0Q2hpbGQo
KSAhPSBhbm9ueW1vdXNCbG9jay5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgICAgICByZXF1aXJl
c1JlbmRlclRyZWVSZWJ1aWxkID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIHdoaWxlICgo
Y2hpbGQgPSBmaXJzdENoaWxkKCkpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQW5vbnlt
b3VzQmxvY2soKSAmJiAhcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZCkgewotICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiBub25Bbm9ueW1vdXNDaGlsZCA9IHRvUmVuZGVyQmxvY2soKmNoaWxkKS5m
aXJzdENoaWxkKCkpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG5vbkFub255bW91c0NoaWxk
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCkuZmlyc3RDaGlsZCgpKQogICAgICAgICAg
ICAgICAgICAgICBjaGlsZCA9IG5vbkFub255bW91c0NoaWxkOwogICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBmMzdmNTM3NDg4MWE3
MzNiZjM3MTMzMTE0NmIyYTc2YmJiN2RmNWVhLi4xZmQzNmFhYTk0YzUyYzc1NTc2OTAyNzdlOWY3
MWE2ZGM3YmJmYzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cApAQCAtMTIxLDEwICsxMjEsMTAgQEAgUmVuZGVySW5saW5lKiBSZW5kZXJJbmxpbmU6OmlubGlu
ZUVsZW1lbnRDb250aW51YXRpb24oKSBjb25zdAogICAgIGlmICghY29udGludWF0aW9uKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChjb250aW51YXRpb24tPmlzUmVuZGVySW5s
aW5lKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlcklubGluZShjb250aW51YXRpb24pOworICAg
IGlmIChpczxSZW5kZXJJbmxpbmU+KCpjb250aW51YXRpb24pKQorICAgICAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVySW5saW5lPihjb250aW51YXRpb24pOwogCi0gICAgcmV0dXJuIGNvbnRpbnVh
dGlvbi0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjb250aW51YXRpb24pLT5pbmxp
bmVFbGVtZW50Q29udGludWF0aW9uKCkgOiBudWxscHRyOworICAgIHJldHVybiBpczxSZW5kZXJC
bG9jaz4oKmNvbnRpbnVhdGlvbikgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRpbnVhdGlv
bikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBSZW5k
ZXJJbmxpbmU6OnVwZGF0ZUZyb21TdHlsZSgpCkBAIC0xNTIsMjEgKzE1MiwyMSBAQCBzdGF0aWMg
dm9pZCB1cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKFJlbmRlckJveCog
Ym94LCBjb25zdCBSZW5kZQogICAgICAgICBpZiAoYm94LT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0g
bmV3U3R5bGUtPnBvc2l0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghYm94LT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgIGlmICghaXM8UmVuZGVy
QmxvY2s+KCpib3gpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUmVuZGVyQmxv
Y2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhib3gpOwotICAgICAgICBpZiAoIWJsb2NrLT5pc0Fu
b255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9
IGRvd25jYXN0PFJlbmRlckJsb2NrPigqYm94KTsKKyAgICAgICAgaWYgKCFibG9jay5pc0Fub255
bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
CiAgICAgICAgIC8vIElmIHdlIGFyZSBubyBsb25nZXIgaW4tZmxvdyBwb3NpdGlvbmVkIGJ1dCBv
dXIgZGVzY2VuZGFudCBibG9jayhzKSBzdGlsbCBoYXZlIGFuIGluLWZsb3cgcG9zaXRpb25lZCBh
bmNlc3RvciB0aGVuCiAgICAgICAgIC8vIHRoZWlyIGNvbnRhaW5pbmcgYW5vbnltb3VzIGJsb2Nr
IHNob3VsZCBrZWVwIGl0cyBpbi1mbG93IHBvc2l0aW9uaW5nLiAKLSAgICAgICAgUmVuZGVySW5s
aW5lKiBjb250ID0gYmxvY2stPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICAgICAg
aWYgKG9sZFN0eWxlLT5oYXNJbkZsb3dQb3NpdGlvbigpICYmIGluRmxvd1Bvc2l0aW9uZWRJbmxp
bmVBbmNlc3Rvcihjb250KSkKKyAgICAgICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBi
bG9jay5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgIGlmIChvbGRTdHlsZS0+
aGFzSW5GbG93UG9zaXRpb24oKSAmJiBpbkZsb3dQb3NpdGlvbmVkSW5saW5lQW5jZXN0b3IoY29u
dGludWF0aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIGJsb2NrU3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmYmxvY2st
PnN0eWxlKCksIEJMT0NLKTsKKyAgICAgICAgYXV0byBibG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6
OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJmJsb2NrLnN0eWxlKCksIEJMT0NLKTsK
ICAgICAgICAgYmxvY2tTdHlsZS5nZXQoKS5zZXRQb3NpdGlvbihuZXdTdHlsZS0+cG9zaXRpb24o
KSk7Ci0gICAgICAgIGJsb2NrLT5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOworICAg
ICAgICBibG9jay5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOwogICAgIH0KIH0KIApA
QCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAgICAgICAgIC8vIElm
IGFueSBkZXNjZW5kYW50IGJsb2NrcyBleGlzdCB0aGVuIHRoZXkgd2lsbCBiZSBpbiB0aGUgbmV4
dCBhbm9ueW1vdXMgYmxvY2sgYW5kIGl0cyBzaWJsaW5ncy4KICAgICAgICAgUmVuZGVyT2JqZWN0
KiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpLT5uZXh0U2libGluZygpOwogICAgICAgICBBU1NF
UlQoYmxvY2sgJiYgYmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSk7Ci0gICAgICAgIHVwZGF0ZVN0
eWxlT2ZBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbnModG9SZW5kZXJCbG9jayhibG9jayksICZu
ZXdTdHlsZSwgb2xkU3R5bGUpOworICAgICAgICB1cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxvY2tD
b250aW51YXRpb25zKGRvd25jYXN0PFJlbmRlckJsb2NrPihibG9jayksICZuZXdTdHlsZSwgb2xk
U3R5bGUpOwogICAgIH0KIAogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpIHsKQEAg
LTI3Nyw5ICsyNzcsOSBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIAogc3RhdGljIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
Ci0gICAgaWYgKHJlbmRlcmVyLT5pc0lubGluZSgpICYmICFyZW5kZXJlci0+aXNSZXBsYWNlZCgp
KQotICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51YXRpb24o
KTsKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250
aW51YXRpb24oKTsKKyAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqcmVuZGVyZXIpICYmICFyZW5k
ZXJlci0+aXNSZXBsYWNlZCgpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5saW5l
PigqcmVuZGVyZXIpLmNvbnRpbnVhdGlvbigpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiB9CiAKIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgUmVuZGVySW5saW5l
OjpzcGxpdElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxv
Y2ssCiB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQp
CiB7Ci0gICAgUmVuZGVyQmxvY2sqIHByZSA9IDA7CisgICAgUmVuZGVyQmxvY2sqIHByZSA9IG51
bGxwdHI7CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAg
CiAgICAgLy8gRGVsZXRlIG91ciBsaW5lIGJveGVzIGJlZm9yZSB3ZSBkbyB0aGUgaW5saW5lIHNw
bGl0IGludG8gY29udGludWF0aW9ucy4KQEAgLTQ1MywxMiArNDUzLDEyIEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sq
IG5ld0Jsb2NrQm94CiAgICAgaWYgKGJsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgKCFibG9j
ay0+cGFyZW50KCkgfHwgIWJsb2NrLT5wYXJlbnQoKS0+Y3JlYXRlc0Fub255bW91c1dyYXBwZXIo
KSkpIHsKICAgICAgICAgLy8gV2UgY2FuIHJldXNlIHRoaXMgYmxvY2sgYW5kIG1ha2UgaXQgdGhl
IHByZUJsb2NrIG9mIHRoZSBuZXh0IGNvbnRpbnVhdGlvbi4KICAgICAgICAgcHJlID0gYmxvY2s7
Ci0gICAgICAgIHByZS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7CisgICAgICAgIHByZS0+
cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7CiAgICAgICAgIC8vIEZJWE1FLUJMT0NL
RkxPVzogVGhlIGVuY2xvc2luZyBtZXRob2Qgc2hvdWxkIGxpa2VseSBiZSBzd2l0Y2hlZCBvdmVy
CiAgICAgICAgIC8vIHRvIG9ubHkgd29yayBvbiBSZW5kZXJCbG9ja0Zsb3csIGluIHdoaWNoIGNh
c2UgdGhpcyBjb252ZXJzaW9uIGNhbiBiZQogICAgICAgICAvLyByZW1vdmVkLgotICAgICAgICBp
ZiAocHJlLT5pc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9ja0Zs
b3cocHJlKS0+cmVtb3ZlRmxvYXRpbmdPYmplY3RzKCk7CisgICAgICAgIGlmIChpczxSZW5kZXJC
bG9ja0Zsb3c+KCpwcmUpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pigq
cHJlKS5yZW1vdmVGbG9hdGluZ09iamVjdHMoKTsKICAgICAgICAgYmxvY2sgPSBibG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm8gYW5vbnltb3VzIGJs
b2NrIGF2YWlsYWJsZSBmb3IgdXNlLiAgTWFrZSBvbmUuCkBAIC00NjYsMTMgKzQ2NiwxMyBAQCB2
b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJl
bmRlckJsb2NrKiBuZXdCbG9ja0JveAogICAgICAgICBtYWRlTmV3QmVmb3JlQmxvY2sgPSB0cnVl
OwogICAgIH0KIAotICAgIFJlbmRlckJsb2NrKiBwb3N0ID0gdG9SZW5kZXJCbG9jayhwcmUtPmNy
ZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGJsb2NrKSk7CisgICAgUmVuZGVyQmxvY2sm
IHBvc3QgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0
aFNhbWVUeXBlQXMoYmxvY2spKTsKIAogICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3QgPSBtYWRl
TmV3QmVmb3JlQmxvY2sgPyBibG9jay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2libGluZygp
OwogICAgIGlmIChtYWRlTmV3QmVmb3JlQmxvY2spCiAgICAgICAgIGJsb2NrLT5pbnNlcnRDaGls
ZEludGVybmFsKHByZSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKICAgICBibG9jay0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbChuZXdCbG9ja0JveCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsK
LSAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwb3N0LCBib3hGaXJzdCwgTm90aWZ5Q2hp
bGRyZW4pOworICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKCZwb3N0LCBib3hGaXJzdCwg
Tm90aWZ5Q2hpbGRyZW4pOwogICAgIGJsb2NrLT5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7CiAg
ICAgCiAgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykgewpAQCAtNDg2LDcgKzQ4Niw3IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVu
ZGVyQmxvY2sqIG5ld0Jsb2NrQm94CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzcGxpdElubGlu
ZXMocHJlLCBwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOworICAgIHNw
bGl0SW5saW5lcyhwcmUsICZwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQp
OwogCiAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdCbG9ja0JveCBpc24ndCBnb2luZyB0
byBjb250YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0aW5nCiAgICAgLy8gdGltZSBpbiBt
YWtlQ2hpbGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5nIHRoaXMgZXhwbGljaXRseSB1cCBm
cm9udC4KQEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveAogICAgIC8v
IG1ha2UgbmV3IGxpbmUgYm94ZXMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgbGluZSBib3hl
cyBhcm91bmQuCiAgICAgcHJlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
ICAgICBibG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgcG9z
dC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcG9zdC5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OmFk
ZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKQEAgLTg1MywyMSArODUzLDIxIEBAIGJvb2wgUmVuZGVySW5saW5lOjpo
aXRUZXN0Q3VsbGVkSW5saW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0
IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAg
Ly8gRklYTUU6IERvZXMgbm90IGRlYWwgd2l0aCByZWxhdGl2ZSBvciBzdGlja3kgcG9zaXRpb25l
ZCBpbmxpbmVzIChzaG91bGQgaXQ/KQotICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdC
bG9jaygpOworICAgIFJlbmRlckJsb2NrJiBjb250YWluaW5nQmxvY2sgPSAqdGhpcy0+Y29udGFp
bmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZpcnN0TGluZUJveCgpKSB7CiAgICAgICAgIC8vIFRoaXMg
aW5saW5lIGFjdHVhbGx5IGhhcyBhIGxpbmUgYm94LiAgV2UgbXVzdCBoYXZlIGNsaWNrZWQgaW4g
dGhlIGJvcmRlci9wYWRkaW5nIG9mIG9uZSBvZiB0aGVzZSBib3hlcy4gIFdlCiAgICAgICAgIC8v
IHNob3VsZCB0cnkgdG8gZmluZCBhIHJlc3VsdCBieSBhc2tpbmcgb3VyIGNvbnRhaW5pbmcgYmxv
Y2suCi0gICAgICAgIHJldHVybiBjYi0+cG9zaXRpb25Gb3JQb2ludChwb2ludCwgcmVnaW9uKTsK
KyAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay5wb3NpdGlvbkZvclBvaW50KHBvaW50LCBy
ZWdpb24pOwogICAgIH0KIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29vcmRzIGZyb20gdGhlIHBy
ZS1hbm9ueW1vdXMgYmxvY2sgdG8gdGhlIHBvc3QtYW5vbnltb3VzIGJsb2NrLgotICAgIExheW91
dFBvaW50IHBhcmVudEJsb2NrUG9pbnQgPSBjYi0+bG9jYXRpb24oKSArIHBvaW50OyAgCi0gICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGMgPSBjb250aW51YXRpb24oKTsKLSAgICB3aGlsZSAoYykg
ewotICAgICAgICBSZW5kZXJCb3gqIGNvbnRCbG9jayA9IGMtPmlzSW5saW5lKCkgPyBjLT5jb250
YWluaW5nQmxvY2soKSA6IHRvUmVuZGVyQmxvY2soYyk7Ci0gICAgICAgIGlmIChjLT5pc0lubGlu
ZSgpIHx8IGMtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiBjLT5wb3NpdGlvbkZv
clBvaW50KHBhcmVudEJsb2NrUG9pbnQgLSBjb250QmxvY2stPmxvY2F0aW9uT2Zmc2V0KCksIHJl
Z2lvbik7Ci0gICAgICAgIGMgPSB0b1JlbmRlckJsb2NrKGMpLT5pbmxpbmVFbGVtZW50Q29udGlu
dWF0aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgcGFyZW50QmxvY2tQb2ludCA9IGNvbnRhaW5pbmdC
bG9jay5sb2NhdGlvbigpICsgcG9pbnQ7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRp
bnVhdGlvbiA9IHRoaXMtPmNvbnRpbnVhdGlvbigpOworICAgIHdoaWxlIChjb250aW51YXRpb24p
IHsKKyAgICAgICAgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbi0+aXNJ
bmxpbmUoKSA/IGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCkgOiBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbi0+aXNJbmxp
bmUoKSB8fCBjb250aW51YXRpb24tPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVybiBj
b250aW51YXRpb24tPnBvc2l0aW9uRm9yUG9pbnQocGFyZW50QmxvY2tQb2ludCAtIGN1cnJlbnRC
bG9jay0+bG9jYXRpb25PZmZzZXQoKSwgcmVnaW9uKTsKKyAgICAgICAgY29udGludWF0aW9uID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250aW51YXRpb24pLmlubGluZUVsZW1lbnRDb250aW51
YXRpb24oKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
b3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKaW5kZXggNDlhZmYxYzQ2NTU1ODIwY2EwZDBkZWZkNDIyYTE5ZTE2MmFl
YmUwMi4uNzE4OWJmYjNmMGMzNjZhNTI0ZmU1MjE0MzkyYTZiNzliNGQ0ZmMxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjk4LDggKzMyOTgsOCBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQogICAgICAgICAg
ICAgICAgIC8vIE91ciBwcm9wcmlldGFyeSBvdmVyZmxvdzogb3ZlcmxheSB2YWx1ZSBkb2Vzbid0
IHRyaWdnZXIgYSBsYXlvdXQuCiAgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09u
bHlUaGlzKTsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlckJsb2NrKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gdG9SZW5kZXJCbG9j
ayhyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRl
cmVyKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICAgICAgYmxvY2su
c2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVy
dGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKICAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5b3V0
QmxvY2sodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC01NDE3LDcgKzU0MTcsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0
JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmVCeShMYXlvdXRQb2ludChmbG93
VGhyZWFkLT53aWR0aCgpLCAwKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZW5k
ZXJCbG9jayogcmVuZGVyZXJDb250YWluaW5nQmxvY2sgPSBib3hNb2RlbE9iamVjdC5lbmNsb3Np
bmdCb3goKS5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKCZib3hNb2RlbE9iamVjdC5l
bmNsb3NpbmdCb3goKSkgOiAwOworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIHJlbmRlcmVyQ29u
dGFpbmluZ0Jsb2NrID0gaXM8UmVuZGVyQmxvY2s+KGJveE1vZGVsT2JqZWN0LmVuY2xvc2luZ0Jv
eCgpKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9jaz4oYm94TW9kZWxPYmplY3QuZW5jbG9zaW5nQm94
KCkpIDogbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChyZW5kZXJlckNvbnRhaW5pbmdCbG9jaykK
ICAgICAgICAgICAgICAgICByZW5kZXJlckNvbnRhaW5pbmdCbG9jay0+ZmxpcEZvcldyaXRpbmdN
b2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggZWE3ZjIxODg1MTgxZTRi
MWNiY2QwNGRlM2YyY2E1MDI5ODQ5MjAzMS4uNjJmNzQ1ZjUyOWFlMjQ5OTNjZThjYWQzZTNlOTNm
ZTMzMzA2ZTk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIK
ICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIyNywyNSArMjI5LDI0
IEBAIHN0YXRpYyBSZW5kZXJCbG9jayogZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goUmVuZGVyQmxv
Y2sqIGN1cnIsIFJlbmRlck9iamVjdCogbWFyCiAgICAgICAgIGlmIChjdXJyQ2hpbGQgPT0gbWFy
a2VyKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNJ
bmxpbmUoKSAmJiAoIWN1cnJDaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSB8fCBjdXJyLT5nZW5lcmF0
ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGlsZChjdXJyQ2hpbGQpKSkKKyAgICAgICAgaWYgKGN1cnJD
aGlsZC0+aXNJbmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGluZT4oKmN1cnJDaGlsZCkgfHwgY3Vy
ci0+Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoY3VyckNoaWxkKSkpCiAgICAgICAg
ICAgICByZXR1cm4gY3VycjsKIAogICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0Zsb2F0aW5nKCkg
fHwgY3VyckNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzVGFibGUoKSB8fCAhY3VyckNoaWxkLT5p
c1JlbmRlckJsb2NrKCkgfHwgKGN1cnJDaGlsZC0+aXNCb3goKSAmJiB0b1JlbmRlckJveChjdXJy
Q2hpbGQpLT5pc1dyaXRpbmdNb2RlUm9vdCgpKSkKKyAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNU
YWJsZSgpIHx8ICFpczxSZW5kZXJCbG9jaz4oKmN1cnJDaGlsZCkgfHwgKGlzPFJlbmRlckJveD4o
KmN1cnJDaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqY3VyckNoaWxkKS5pc1dyaXRpbmdN
b2RlUm9vdCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChjdXJyLT5pc0xp
c3RJdGVtKCkgJiYgaW5RdWlya3NNb2RlICYmIGN1cnJDaGlsZC0+bm9kZSgpICYmCi0gICAgICAg
ICAgICAoY3VyckNoaWxkLT5ub2RlKCktPmhhc1RhZ05hbWUodWxUYWcpfHwgY3VyckNoaWxkLT5u
b2RlKCktPmhhc1RhZ05hbWUob2xUYWcpKSkKKyAgICAgICAgICAgIChpczxIVE1MVUxpc3RFbGVt
ZW50PigqY3VyckNoaWxkLT5ub2RlKCkpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCpjdXJyQ2hp
bGQtPm5vZGUoKSkpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgUmVuZGVyQmxvY2sq
IGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0b1JlbmRlckJsb2NrKGN1cnJDaGls
ZCksIG1hcmtlcik7Ci0gICAgICAgIGlmIChsaW5lQm94KQorICAgICAgICBpZiAoUmVuZGVyQmxv
Y2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChkb3duY2FzdDxSZW5kZXJCbG9j
az4oY3VyckNoaWxkKSwgbWFya2VyKSkKICAgICAgICAgICAgIHJldHVybiBsaW5lQm94OwogICAg
IH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIFJlbmRl
ckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCkBAIC0yOTQsNyArMjk1LDcgQEAgdm9pZCBSZW5kZXJM
aXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2VyUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgIG5l
d1BhcmVudC0+YWRkQ2hpbGQobV9tYXJrZXIuZ2V0KCksIGZpcnN0Tm9uTWFya2VyQ2hpbGQobmV3
UGFyZW50KSk7CiAgICAgICAgIG1fbWFya2VyLT51cGRhdGVNYXJnaW5zQW5kQ29udGVudCgpOwog
ICAgICAgICAvLyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhhdCBo
YXMgbG9zdCBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0LgotICAgICAgICBpZiAoY3VycmVu
dFBhcmVudCAmJiBjdXJyZW50UGFyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWN1cnJlbnRQ
YXJlbnQtPmZpcnN0Q2hpbGQoKSAmJiAhdG9SZW5kZXJCbG9jayhjdXJyZW50UGFyZW50KS0+Y29u
dGludWF0aW9uKCkpCisgICAgICAgIGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQt
PmlzQW5vbnltb3VzQmxvY2soKSAmJiAhY3VycmVudFBhcmVudC0+Zmlyc3RDaGlsZCgpICYmICFk
b3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRQYXJlbnQpLmNvbnRpbnVhdGlvbigpKQogICAg
ICAgICAgICAgY3VycmVudFBhcmVudC0+ZGVzdHJveSgpOwogICAgIH0KIApAQCAtNDA2LDExICs0
MDcsMTEgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKCkKICAgICAg
ICAgICAgICAgICBvID0gby0+cGFyZW50Qm94KCk7CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhh
c092ZXJmbG93Q2xpcCgpKQogICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVWaXN1YWxPdmVy
ZmxvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpvKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0b1JlbmRlckJsb2NrKG8pLT5hZGRWaXN1YWxPdmVyZmxvdyhtYXJrZXJSZWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqbykuYWRkVmlzdWFs
T3ZlcmZsb3cobWFya2VyUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wYWdhdGVM
YXlvdXRPdmVyZmxvdykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2sobykt
PmFkZExheW91dE92ZXJmbG93KG1hcmtlclJlY3QpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvKS5hZGRMYXlvdXRPdmVyZmxvdyhtYXJrZXJSZWN0KTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xp
cCgpKQogICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVMYXlvdXRPdmVyZmxvdyA9IGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudC5jcHAKaW5kZXggNjEzNjJlZTcxY2E0MWJkZDdmN2NiZmEzMDk3OGYxYTJhNWRhMDY2MC4u
MTY2NGQ0N2IwYTI1NTU3Y2E1N2NlYWZhODAxNWUzOWFmMDVjOGNkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCkBAIC0x
ODQsNyArMTg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bWF4UGFn
ZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgIEFTU0VSVChwYXJlbnQoKSk7CiAKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHBhcmVudCgpLT5zdHlsZSgpOwotICAgIHJldHVy
biBzdHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gUmVuZGVyRmxv
d1RocmVhZDo6bWF4TG9naWNhbEhlaWdodCgpIDogdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPmNv
bXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWln
aHQoKSk7CisgICAgcmV0dXJuIHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZp
bmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0KCkgOiBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5jb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmco
c3R5bGVUb1VzZS5sb2dpY2FsTWF4SGVpZ2h0KCkpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50OjpmbG93VGhyZWFkUG9ydGlvblJlY3RGb3JDbGlwcGluZyhib29sIGlz
Rmlyc3RSZWdpb25JblJhbmdlLCBib29sIGlzTGFzdFJlZ2lvbkluUmFuZ2UpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGNjNjQyNWZiNmM1ZWMz
MTIzYmY5ODI5ZTc2Y2IyZTQxNTkzZDg5M2EuLmQ5NTNjZTUyMTI5YTAwNjY3NmUxMDU0N2U2MjA3
YWVkOTE3YjQyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0zOTksMTUgKzM5OSwxNSBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6dHJhdmVy
c2VOZXh0KGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbiwgVHJhdmVycwogICAgIHJldHVy
biAwOwogfQogCi1zdGF0aWMgUmVuZGVyT2JqZWN0OjpCbG9ja0NvbnRlbnRIZWlnaHRUeXBlIGlu
Y2x1ZGVOb25GaXhlZEhlaWdodChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcikKK3N0YXRpYyBS
ZW5kZXJPYmplY3Q6OkJsb2NrQ29udGVudEhlaWdodFR5cGUgaW5jbHVkZU5vbkZpeGVkSGVpZ2h0
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlID0gcmVuZGVyLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9
IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIGlmIChzdHlsZS5oZWlnaHQoKS50eXBlKCkgPT0gRml4
ZWQpIHsKLSAgICAgICAgaWYgKHJlbmRlci0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcik7CisgICAg
ICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSkgewogICAgICAgICAgICAgLy8gRm9y
IGZpeGVkIGhlaWdodCBzdHlsZXMsIGlmIHRoZSBvdmVyZmxvdyBzaXplIG9mIHRoZSBlbGVtZW50
IHNwaWxscyBvdXQgb2YgdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgLy8gaGVpZ2h0LCBhc3N1
bWUgd2UgY2FuIGFwcGx5IHRleHQgYXV0by1zaXppbmcuCi0gICAgICAgICAgICBpZiAoc3R5bGUu
b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUuaGVpZ2h0KCkudmFsdWUoKSA8IGJsb2Nr
LT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhZKCkpCisgICAgICAgICAgICBpZiAoc3R5bGUub3Zl
cmZsb3dZKCkgPT0gT1ZJU0lCTEUKKyAgICAgICAgICAgICAgICAmJiBzdHlsZS5oZWlnaHQoKS52
YWx1ZSgpIDwgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKS5tYXhZKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6T3ZlcmZs
b3dIZWlnaHQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Rml4ZWRI
ZWlnaHQ7CkBAIC02NzIsOCArNjcyLDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNoZWNrQmxvY2tQ
b3NpdGlvbmVkT2JqZWN0c05lZWRMYXlvdXQoKQogewogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQo
KSk7CiAKLSAgICBpZiAoaXNSZW5kZXJCbG9jaygpKQotICAgICAgICB0b1JlbmRlckJsb2NrKHRo
aXMpLT5jaGVja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91dCgpOworICAgIGlmIChpczxSZW5k
ZXJCbG9jaz4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnRoaXMpLmNo
ZWNrUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiB9CiAjZW5kaWYKIApAQCAtNzIwLDIy
ICs3MjAsMjIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldExheWVyTmVlZHNGdWxsUmVwYWludEZv
clBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpCiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6
OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0byBvID0gcGFyZW50KCk7Ci0gICAg
aWYgKCFvICYmIGlzUmVuZGVyU2Nyb2xsYmFyUGFydCgpKQotICAgICAgICBvID0gdG9SZW5kZXJT
Y3JvbGxiYXJQYXJ0KHRoaXMpLT5yZW5kZXJlck93bmluZ1Njcm9sbGJhcigpOworICAgIGF1dG8g
cGFyZW50ID0gdGhpcy0+cGFyZW50KCk7CisgICAgaWYgKCFwYXJlbnQgJiYgaXM8UmVuZGVyU2Ny
b2xsYmFyUGFydD4oKnRoaXMpKQorICAgICAgICBwYXJlbnQgPSBkb3duY2FzdDxSZW5kZXJTY3Jv
bGxiYXJQYXJ0PigqdGhpcykucmVuZGVyZXJPd25pbmdTY3JvbGxiYXIoKTsKIAogICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0gICAgaWYgKCFpc1RleHQoKSAm
JiBzdHlsZS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIG8gPSBjb250YWlu
aW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKG8pOwotICAgIGVsc2UgaWYgKCFpc1RleHQoKSAmJiBz
dHlsZS5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24pCi0gICAgICAgIG8gPSBjb250YWlu
aW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKG8pOworICAgIGlmICghaXM8UmVuZGVyVGV4dD4o
KnRoaXMpICYmIHN0eWxlLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAgcGFy
ZW50ID0gY29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbihwYXJlbnQpOworICAgIGVsc2Ug
aWYgKCFpczxSZW5kZXJUZXh0PigqdGhpcykgJiYgc3R5bGUucG9zaXRpb24oKSA9PSBBYnNvbHV0
ZVBvc2l0aW9uKQorICAgICAgICBwYXJlbnQgPSBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBv
c2l0aW9uKHBhcmVudCk7CiAgICAgZWxzZQotICAgICAgICBvID0gY29udGFpbmluZ0Jsb2NrRm9y
T2JqZWN0SW5GbG93KG8pOworICAgICAgICBwYXJlbnQgPSBjb250YWluaW5nQmxvY2tGb3JPYmpl
Y3RJbkZsb3cocGFyZW50KTsKIAotICAgIGlmICghbyB8fCAhby0+aXNSZW5kZXJCbG9jaygpKQot
ICAgICAgICByZXR1cm4gMDsgLy8gVGhpcyBjYW4gc3RpbGwgaGFwcGVuIGluIGNhc2Ugb2YgYW4g
b3JwaGFuZWQgdHJlZQorICAgIGlmICghaXM8UmVuZGVyQmxvY2s+KHBhcmVudCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOyAvLyBUaGlzIGNhbiBzdGlsbCBoYXBwZW4gaW4gY2FzZSBvZiBhbiBv
cnBoYW5lZCB0cmVlCiAKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHBhcmVudCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0Ojpk
cmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZsb2F0
IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLApAQCAtMTY3OSwxMCArMTY3OSwxMCBA
QCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2UoKQog
ICAgIHNldElubGluZShzdHlsZSgpLmlzRGlzcGxheUlubGluZVR5cGUoKSk7CiAgICAgaWYgKGlz
SW5saW5lKCkgIT0gcGFyZW50KCktPmNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgaWYgKCFp
c0lubGluZSgpKQotICAgICAgICAgICAgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChwYXJlbnQoKSkt
PmNoaWxkQmVjYW1lTm9uSW5saW5lKHRoaXMpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+KCpwYXJlbnQoKSkuY2hpbGRCZWNhbWVOb25JbmxpbmUodGhpcyk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2NrIG11c3QgYmUg
bWFkZSB0byB3cmFwIHRoaXMgaW5saW5lLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2Nr
ID0gdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAg
ICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVu
dCgpKS5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwogICAgICAgICAgICAgcGFyZW50KCktPmluc2Vy
dENoaWxkSW50ZXJuYWwoYmxvY2ssIHRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxkcmVu
KTsKICAgICAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZEludGVybmFsKCp0aGlzLCBSZW5k
ZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBibG9jay0+aW5zZXJ0Q2hp
bGRJbnRlcm5hbCh0aGlzLCBudWxscHRyLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7
CkBAIC0xNjkyLDggKzE2OTIsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zs
b2F0UG9zaXRpb25DaGFuZ2UoKQogCiB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlQW5vbnltb3Vz
V3JhcHBlcnNGb3JJbmxpbmVzSWZOZWNlc3NhcnkoKQogewotICAgIFJlbmRlckJsb2NrKiBwYXJl
bnRCbG9jayA9IHRvUmVuZGVyQmxvY2socGFyZW50KCkpOwotICAgIGlmICghcGFyZW50QmxvY2st
PmNhbkNvbGxhcHNlQW5vbnltb3VzQmxvY2tDaGlsZCgpKQorICAgIFJlbmRlckJsb2NrJiBwYXJl
bnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpOworICAgIGlmICghcGFy
ZW50QmxvY2suY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFdlIGhhdmUgY2hhbmdlZCB0byBmbG9hdGVkIG9yIG91dC1vZi1mbG93IHBv
c2l0aW9uaW5nIHNvIG1heWJlIGFsbCBvdXIgcGFyZW50J3MKQEAgLTE3MDEsMTkgKzE3MDEsMTgg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91c1dyYXBwZXJzRm9ySW5saW5lc0lm
TmVjZXNzYXJ5KCkKICAgICAvLyBvdGhlcndpc2Ugd2UgY2FuIHByb2NlZWQgdG8gc3RyaXBwaW5n
IHNvbGl0YXJ5IGFub255bW91cyB3cmFwcGVycyBmcm9tIHRoZSBpbmxpbmVzLgogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgc3BsaXQgaW5saW5lcyBoZXJlIC0gd2UgZXhjbHVk
ZSB0aGVtIGF0IHRoZSBtb21lbnQgYnkgcmV0dXJuaW5nCiAgICAgLy8gaWYgd2UgZmluZCBhIGNv
bnRpbnVhdGlvbi4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKS0+Zmlyc3RDaGls
ZCgpOwotICAgIHdoaWxlIChjdXJyICYmICgoY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpICYmICF0
b1JlbmRlckJsb2NrKGN1cnIpLT5pc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpIHx8IGN1
cnItPnN0eWxlKCkuaXNGbG9hdGluZygpIHx8IGN1cnItPnN0eWxlKCkuaGFzT3V0T2ZGbG93UG9z
aXRpb24oKSkpCi0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOworICAgIFJlbmRl
ck9iamVjdCogY3VycmVudCA9IHBhcmVudCgpLT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGN1
cnJlbnQgJiYgKChjdXJyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY3VycmVudCkuaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKSB8fCBjdXJy
ZW50LT5zdHlsZSgpLmlzRmxvYXRpbmcoKSB8fCBjdXJyZW50LT5zdHlsZSgpLmhhc091dE9mRmxv
d1Bvc2l0aW9uKCkpKQorICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsK
IAotICAgIGlmIChjdXJyKQorICAgIGlmIChjdXJyZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjdXJyID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY3VycikgewotICAg
ICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAgICBp
ZiAoY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICAgICAgcGFyZW50QmxvY2stPmNv
bGxhcHNlQW5vbnltb3VzQm94Q2hpbGQocGFyZW50QmxvY2ssIHRvUmVuZGVyQmxvY2soY3Vycikp
OwotICAgICAgICBjdXJyID0gbmV4dDsKKyAgICBSZW5kZXJPYmplY3QqIG5leHQ7CisgICAgZm9y
IChjdXJyZW50ID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IG5l
eHQpIHsKKyAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGlm
IChjdXJyZW50LT5pc0Fub255bW91c0Jsb2NrKCkpCisgICAgICAgICAgICBwYXJlbnRCbG9jay5j
b2xsYXBzZUFub255bW91c0JveENoaWxkKHBhcmVudEJsb2NrLCBkb3duY2FzdDxSZW5kZXJCbG9j
az4oY3VycmVudCkpOwogICAgIH0KIH0KIApAQCAtMjI3MCwxMiArMjI2OSwxMiBAQCBzdGF0aWMg
Q29sb3IgZGVjb3JhdGlvbkNvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSkKIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9yJiB1bmRl
cmxpbmUsIENvbG9yJiBvdmVybGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2xvciYgbGluZXRocm91Z2gsIGJvb2wgcXVpcmtzTW9kZSwgYm9vbCBmaXJz
dGxpbmVTdHlsZSkKIHsKLSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSB0aGlzOwotICAgIFJlbmRl
clN0eWxlKiBzdHlsZVRvVXNlID0gMDsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSB0aGlz
OworICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3Jh
dGlvbiBjdXJyRGVjcyA9IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xv
cjsKICAgICBkbyB7Ci0gICAgICAgIHN0eWxlVG9Vc2UgPSBmaXJzdGxpbmVTdHlsZSA/ICZjdXJy
LT5maXJzdExpbmVTdHlsZSgpIDogJmN1cnItPnN0eWxlKCk7CisgICAgICAgIHN0eWxlVG9Vc2Ug
PSBmaXJzdGxpbmVTdHlsZSA/ICZjdXJyZW50LT5maXJzdExpbmVTdHlsZSgpIDogJmN1cnJlbnQt
PnN0eWxlKCk7CiAgICAgICAgIGN1cnJEZWNzID0gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRpb24o
KTsKICAgICAgICAgcmVzdWx0Q29sb3IgPSBkZWNvcmF0aW9uQ29sb3Ioc3R5bGVUb1VzZSk7CiAg
ICAgICAgIC8vIFBhcmFtZXRlciAnZGVjb3JhdGlvbnMnIGlzIGNhc3QgYXMgYW4gaW50IHRvIGVu
YWJsZSB0aGUgYml0d2lzZSBvcGVyYXRpb25zIGJlbG93LgpAQCAtMjI5MywxNiArMjI5MiwxNiBA
QCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMoaW50IGRlY29yYXRp
b25zLCBDb2xvciYgdW5kZXJsaW5lLCBDbwogICAgICAgICAgICAgICAgIGxpbmV0aHJvdWdoID0g
cmVzdWx0Q29sb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnIt
PmlzUnVieVRleHQoKSkKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzUnVieVRleHQoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwotICAgICAgICBp
ZiAoY3VyciAmJiBjdXJyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhjdXJy
KS0+Y29udGludWF0aW9uKCkpCi0gICAgICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhjdXJy
KS0+Y29udGludWF0aW9uKCk7Ci0gICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAo
IXF1aXJrc01vZGUgfHwgIWN1cnItPm5vZGUoKSB8fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50Pigq
Y3Vyci0+bm9kZSgpKSAmJiAhY3Vyci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOwor
ICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7CisgICAgICAgIGlmIChjdXJyZW50
ICYmIGN1cnJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KmN1cnJlbnQpLmNvbnRpbnVhdGlvbigpKQorICAgICAgICAgICAgY3VycmVudCA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPigqY3VycmVudCkuY29udGludWF0aW9uKCk7CisgICAgfSB3aGlsZSAoY3Vy
cmVudCAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnJlbnQtPm5vZGUoKSB8
fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50PigqY3VycmVudC0+bm9kZSgpKSAmJiAhY3VycmVudC0+
bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOwogCiAgICAgLy8gSWYgd2UgYmFpbGVkIG91
dCwgdXNlIHRoZSBlbGVtZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBhIDxmb250PiBv
ciA8YT4gZWxlbWVudCkuCi0gICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsKLSAgICAgICAg
c3R5bGVUb1VzZSA9IGZpcnN0bGluZVN0eWxlID8gJmN1cnItPmZpcnN0TGluZVN0eWxlKCkgOiAm
Y3Vyci0+c3R5bGUoKTsKKyAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3VycmVudCkgeworICAgICAg
ICBzdHlsZVRvVXNlID0gZmlyc3RsaW5lU3R5bGUgPyAmY3VycmVudC0+Zmlyc3RMaW5lU3R5bGUo
KSA6ICZjdXJyZW50LT5zdHlsZSgpOwogICAgICAgICByZXN1bHRDb2xvciA9IGRlY29yYXRpb25D
b2xvcihzdHlsZVRvVXNlKTsKICAgICAgICAgaWYgKGRlY29yYXRpb25zICYgVGV4dERlY29yYXRp
b25VbmRlcmxpbmUpCiAgICAgICAgICAgICB1bmRlcmxpbmUgPSByZXN1bHRDb2xvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAppbmRleCA1MWIwZDFjMDdhNjdlMGIyMTUx
MGRhZjU0YjA1YWQ5Y2U0MDEzZWE4Li5jZGVjNTlhMDVhYjY1ZWM3NWM5ODgxYjc5ODhlMzNjYTVh
YTE2MTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCkBAIC03NSwx
MyArNzUsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGlzUnVieUFmdGVyQmxvY2soY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QmVmb3Jl
QmxvY2soY29uc3QgUmVuZGVyRWxlbWVudCogcnVieSkKIHsKICAgICBSZW5kZXJPYmplY3QqIGNo
aWxkID0gcnVieS0+Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiBpc1J1YnlCZWZvcmVCbG9jayhj
aGlsZCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAgcmV0dXJuIGlzUnVieUJlZm9y
ZUJsb2NrKGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkgOiBudWxscHRyOwog
fQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QWZ0ZXJCbG9jayhjb25zdCBSZW5k
ZXJFbGVtZW50KiBydWJ5KQogewogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0
Q2hpbGQoKTsKLSAgICByZXR1cm4gaXNSdWJ5QWZ0ZXJCbG9jayhjaGlsZCkgPyB0b1JlbmRlckJs
b2NrKGNoaWxkKSA6IDA7CisgICAgcmV0dXJuIGlzUnVieUFmdGVyQmxvY2soY2hpbGQpID8gZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBSZW5kZXJC
bG9jayogY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKFJlbmRlck9iamVjdCYgcnVieSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCmluZGV4IDdkYmUx
NDViNTg1NzRhNTZiODY3MzgyNDU1NzI3MjNmNjM0Y2Q4N2UuLmVhMGNkNjM4NDRlNGM2NmUwZGUx
NTY2YWJjNjYyMzUyODQwNDQ4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3Zl
SW5saW5lQ2hpbGRyZW4oUmVuZGVyUnVieUJhc2UqIHRvQmFzZSwgUmVuZGVyT2JqZWN0KiBiZQog
ICAgICAgICAvLyBJZiB0b0Jhc2UgaGFzIGEgc3VpdGFibGUgYmxvY2ssIHdlIHJlLXVzZSBpdCwg
b3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmUuCiAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdENo
aWxkID0gdG9CYXNlLT5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0
Q2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiBsYXN0Q2hpbGQtPmNoaWxkcmVuSW5saW5lKCkp
Ci0gICAgICAgICAgICB0b0Jsb2NrID0gdG9SZW5kZXJCbG9jayhsYXN0Q2hpbGQpOworICAgICAg
ICAgICAgdG9CbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGQpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIHRvQmxvY2sgPSB0b0Jhc2UtPmNyZWF0ZUFub255bW91c0Js
b2NrKCk7CiAgICAgICAgICAgICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9jaywg
bnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwpAQCAtMTE4LDggKzExOCw4IEBAIHZvaWQgUmVuZGVy
UnVieUJhc2U6Om1vdmVCbG9ja0NoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJlbmRl
ck9iamVjdCogYmVmCiAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGRUaGVyZSA9IHRvQmFzZS0+
bGFzdENoaWxkKCk7CiAgICAgaWYgKGZpcnN0Q2hpbGRIZXJlLT5pc0Fub255bW91c0Jsb2NrKCkg
JiYgZmlyc3RDaGlsZEhlcmUtPmNoaWxkcmVuSW5saW5lKCkgCiAgICAgICAgICAgICAmJiBsYXN0
Q2hpbGRUaGVyZSAmJiBsYXN0Q2hpbGRUaGVyZS0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGxhc3RD
aGlsZFRoZXJlLT5jaGlsZHJlbklubGluZSgpKSB7ICAgICAgICAgICAgCi0gICAgICAgIFJlbmRl
ckJsb2NrKiBhbm9uQmxvY2tIZXJlID0gdG9SZW5kZXJCbG9jayhmaXJzdENoaWxkSGVyZSk7Ci0g
ICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2tUaGVyZSA9IHRvUmVuZGVyQmxvY2sobGFzdENo
aWxkVGhlcmUpOworICAgICAgICBSZW5kZXJCbG9jayogYW5vbkJsb2NrSGVyZSA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPihmaXJzdENoaWxkSGVyZSk7CisgICAgICAgIFJlbmRlckJsb2NrKiBhbm9u
QmxvY2tUaGVyZSA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGRUaGVyZSk7CiAgICAg
ICAgIGFub25CbG9ja0hlcmUtPm1vdmVBbGxDaGlsZHJlblRvKGFub25CbG9ja1RoZXJlLCB0cnVl
KTsKICAgICAgICAgYW5vbkJsb2NrSGVyZS0+ZGVsZXRlTGluZXMoKTsKICAgICAgICAgYW5vbkJs
b2NrSGVyZS0+ZGVzdHJveSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCmluZGV4IDMzNTU1NDZlZTY3NjU1YjNkZTBlOGZiN2I1YWRhYmM3OTdiM2U5YTguLjJi
MmMzZjRhZmZkZWVkYTExYWNkN2NhNmEwNTI3NjEwYThiN2MwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTE4MjEsMTUgKzE4MjEsMTUgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2JqZWN0
JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYpCiB7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQmxvY2tCYWNrZ3Jv
dW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghby5pc1JlbmRlckJsb2NrKCkp
CisgICAgaWYgKCFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9ICp0b1JlbmRlckJsb2Nr
KCZvKTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyQmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIpOwogCiAgICAgTGF5b3V0VW5pdCBjb250ZW50V2lkdGggPSByZW5k
ZXJCbG9jay5jb250ZW50V2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHQgPSBy
ZW5kZXJCbG9jay5jb250ZW50SGVpZ2h0KCk7CkBAIC0xODc4LDEzICsxODc4LDExIEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QKIAogICAgIC8vIFdlIGNvdWxkIGRyYXcgdGhlIHNuYXBzaG90IHdp
dGggdGhhdCBjb29yZGluYXRlcywgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlCiAgICAg
Ly8gaXNuJ3QgYSBjb21wb3NpdGVkIGxheWVyIGJldHdlZW4gdXMgYW5kIHRoZSBwbHVnSW5SZW5k
ZXJlci4KLSAgICBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KCZvKTsK
LSAgICB3aGlsZSAocmVuZGVyQm94ICE9IHBsdWdJblJlbmRlcmVyKSB7CisgICAgZm9yIChhdXRv
KiByZW5kZXJCb3ggPSAmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7IHJlbmRlckJveCAh
PSBwbHVnSW5SZW5kZXJlcjsgcmVuZGVyQm94ID0gcmVuZGVyQm94LT5wYXJlbnRCb3goKSkgewog
ICAgICAgICBpZiAocmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKSAm
JiByZW5kZXJCb3gtPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CiAgICAgICAgICAgICBzbmFw
c2hvdEFic1BvcyA9IC1yZW5kZXJCb3gtPmxvY2F0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICByZW5kZXJCb3ggPSByZW5kZXJCb3gtPnBhcmVudEJveCgpOwog
ICAgIH0KIAogICAgIExheW91dFNpemUgcGx1Z2luU2l6ZShwbHVnSW5SZW5kZXJlci0+Y29udGVu
dFdpZHRoKCksIHBsdWdJblJlbmRlcmVyLT5jb250ZW50SGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDc0YzNjMGEwYmNjYTdlYzQ3YWFh
YzljMzMzNjZkMGZjMzk5MmQ1MGYuLmI3YjY0ZWE3ODRjYTE4NmEyNWY5NDFlZjRjMGY4YjYzZjU5
MTgxY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAg
LTEyNiw3ICsxMjYsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRl
ck9iamVjdCogbGF5b3V0Um9vdCkKICAgICB9CiAKICAgICAvLyBUaGUgbGF5b3V0Um9vdCBjb3Vs
ZCBiZSBuZWl0aGVyIGEgY29udGFpbmVyIG5vciBhIGNsdXN0ZXIsIHNvIHdhbGsgdXAgdGhlIHRy
ZWUgdGlsbCB3ZSBmaW5kIGVhY2ggb2YgdGhlc2UuCi0gICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5l
ciA9IGxheW91dFJvb3QtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2sobGF5b3V0Um9v
dCkgOiBsYXlvdXRSb290LT5jb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJCbG9jayogY29u
dGFpbmVyID0gaXM8UmVuZGVyQmxvY2s+KCpsYXlvdXRSb290KSA/IGRvd25jYXN0PFJlbmRlckJs
b2NrPihsYXlvdXRSb290KSA6IGxheW91dFJvb3QtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIHdo
aWxlIChjb250YWluZXIgJiYgIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIpKQogICAg
ICAgICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCkBAIC0yMDQs
MTQgKzIwNCwxNCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQg
bXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVAogCiAgICAgUmVuZGVyT2JqZWN0
KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWlu
ZXJzKHN1YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7CiAgICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsK
LSAgICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzVGV4dCgpKSB7CisgICAgICAgIGlmIChpczxSZW5k
ZXJUZXh0PigqZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIGlmIChsb2NhbE11bHRpcGxpZXIg
IT0gMSAmJiBkZXNjZW5kYW50LT5zdHlsZSgpLT50ZXh0QXV0b3NpemluZ011bHRpcGxpZXIoKSA9
PSAxKSB7CiAgICAgICAgICAgICAgICAgc2V0TXVsdGlwbGllcihkZXNjZW5kYW50LCBsb2NhbE11
bHRpcGxpZXIpOwogICAgICAgICAgICAgICAgIHNldE11bHRpcGxpZXIoZGVzY2VuZGFudC0+cGFy
ZW50KCksIGxvY2FsTXVsdGlwbGllcik7IC8vIFBhcmVudCBkb2VzIGxpbmUgc3BhY2luZy4KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtlciBz
aXplIHByb3BvcnRpb25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250
YWluZXIoZGVzY2VuZGFudCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50
QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOworICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGRlc2NlbmRhbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihkZXNjZW5kYW50KTsK
ICAgICAgICAgICAgIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8gZGVzY2VuZGFudENsdXN0ZXJJ
bmZvKGRlc2NlbmRhbnRCbG9jayk7CiAgICAgICAgICAgICBpZiAoaXNXaWRlckRlc2NlbmRhbnQo
ZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbykgfHwgaXNJbmRlcGVuZGVudERlc2NlbmRhbnQo
ZGVzY2VuZGFudEJsb2NrKSkKICAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5k
YW50Q2x1c3RlckluZm8sIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJ
bmZvKTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNj
ZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIFRleAogICAgICAg
ICBpZiAoIXNraXBMb2NhbFRleHQgJiYgaXM8UmVuZGVyVGV4dD4oKmRlc2NlbmRhbnQpKQogICAg
ICAgICAgICAgdGV4dFdpZHRoICs9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpkZXNjZW5kYW50KS5y
ZW5kZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZvbnRT
aXplKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50
KSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVy
QmxvY2soZGVzY2VuZGFudCk7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJs
b2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGRlc2NlbmRhbnQpOwogICAgICAgICAgICAgaWYg
KCFpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8pKQogICAg
ICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywg
Y2x1c3RlckluZm8sIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgfQpAQCAtNTQy
LDggKzU0Miw4IEBAIGNvbnN0IFJlbmRlckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVz
dEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyCiAgICAgICAgIGxhc3ROb2RlID0g
bGFzdE5vZGUtPnBhcmVudCgpOwogICAgIH0KIAotICAgIGlmIChmaXJzdE5vZGUtPmlzUmVuZGVy
QmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyQmxvY2soZmlyc3ROb2RlKTsKKyAgICBp
ZiAoaXM8UmVuZGVyQmxvY2s+KCpmaXJzdE5vZGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KGZpcnN0Tm9kZSk7CiAKICAgICAvLyBjb250YWluaW5nQmxvY2soKSBzaG91
bGQgbmV2ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNlIGl0IG9ubHkgc2tpcHMgYW5jZXN0b3Jz
IHdoZW4gZmluZGluZyB0aGUKICAgICAvLyBjb250YWluZXIgb2YgcG9zaXRpb246YWJzb2x1dGUv
Zml4ZWQgYmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4aXN0IGJldHdlZW4gYSBjbHVzdGVyIGFu
ZCBpdHMgdGV4dApAQCAtNTU4LDIxICs1NTgsMjAgQEAgY29uc3QgUmVuZGVyQmxvY2sqIFRleHRB
dXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXIK
IGNvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJ
bkNsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQsIHNpemVfdCYgZGVwdGgsIFRyYXZl
cnNhbERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYgKHBhcmVudC0+aXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gcGFyZW50LT5pc1RleHQoKSA/IHBhcmVudCA6IDA7CisgICAgICAgIHJl
dHVybiBpczxSZW5kZXJUZXh0PigqcGFyZW50KSA/IHBhcmVudCA6IG51bGxwdHI7CiAKICAgICAr
K2RlcHRoOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQgPSAoZGlyZWN0aW9uID09IEZp
cnN0VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFyZW50LT5sYXN0Q2hpbGQoKTsK
ICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDb250YWluZXIo
Y2hpbGQpIHx8ICFpc0luZGVwZW5kZW50RGVzY2VuZGFudCh0b1JlbmRlckJsb2NrKGNoaWxkKSkp
IHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRGaXJzdFRleHRM
ZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIGlm
IChsZWFmKQorICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjaGlsZCkgfHwgIWlz
SW5kZXBlbmRlbnREZXNjZW5kYW50KGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkpKSB7Cisg
ICAgICAgICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0VGV4dExl
YWZOb3RJbkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pKQogICAgICAgICAgICAgICAg
IHJldHVybiBsZWFmOwogICAgICAgICB9CiAgICAgICAgIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBG
aXJzdFRvTGFzdCkgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6IGNoaWxkLT5wcmV2aW91c1NpYmxp
bmcoKTsKICAgICB9CiAgICAgLS1kZXB0aDsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggMjgwNjM5MDY4ZDU2YWQ5MGEy
NzkyNDJmNzVmOWE3MDk3OWU4NDQzNS4uYjYzYWNmNDExY2NhZDM1YjMwODY1MWUxOTA5M2MyYTA1
NjcwN2JlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvb3QuY3BwCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
b290OjpsYXlvdXQoKQogICAgICAgICAgICAgYXV0byBpbmRleCA9IGluZGV4V3JhcHBlcigpOwog
ICAgICAgICAgICAgZmxvYXQgaW5kZXhIZWlnaHQgPSAwOwogICAgICAgICAgICAgaWYgKCFpbmRl
eC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGluZGV4SGVpZ2h0ID0gdG9SZW5kZXJCbG9j
ayhpbmRleC0+Zmlyc3RDaGlsZCgpKS0+bG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgICAg
IGluZGV4SGVpZ2h0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCppbmRleC0+Zmlyc3RDaGlsZCgp
KS5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgICAgICBmbG9hdCBpbmRleFRvcE1hcmdpbiA9ICgx
LjAgLSBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCkgKiByYWRpY2FsLT5zdHJldGNoU2l6ZSgp
ICsgcmFkaWNhbFRvcE1hcmdpbiAtIGluZGV4SGVpZ2h0OwogICAgICAgICAgICAgaWYgKGluZGV4
VG9wTWFyZ2luIDwgMCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpbmRleCBpcyB0b28g
dGFsbCwgd2UgbXVzdCBhZGQgc3BhY2UgYXQgdGhlIHRvcCBvZiByZW5kZXJlci4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRl
eCA5NTY5ODNiYWZiMjFlYmZiYTE3Zjg3MWEwYjBmN2MxZjNhZWIzYTViLi4zMDAxMDU5ZWYxMWRj
NzNiYmFmMDIyYWRlZTJiZjBhMGY1ODViNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC03NzQsNyArNzc0LDcgQEAg
UGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9u
KGNvbnN0IEludFBvaW50JiBwb2ludCwKICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5z
dHlsZSgpLnVzZXJTZWxlY3QoKSA9PSBTRUxFQ1RfTk9ORSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBpZiAocmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkgJiYgKHJlbmRlcmVyLT5p
c1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50
Q29udGludWF0aW9uKCkpICYmICFyZW5kZXJlci0+aXNUYWJsZSgpKSB7CisgICAgaWYgKHJlbmRl
cmVyLT5jaGlsZHJlbklubGluZSgpICYmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSAmJiAh
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlv
bigpKSAmJiAhcmVuZGVyZXItPmlzVGFibGUoKSkgewogICAgICAgICByYW5nZSA9IGVuY2xvc2lu
Z1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rp
b25CYWNrd2FyZCk7CiAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChBU1NF
UlRfTk9fRVhDRVBUSU9OKSkKICAgICAgICAgICAgIHJldHVybiByYW5nZTsKQEAgLTEzMTYsNyAr
MTMxNiw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZyb21I
YW5kbGUoUmFuZ2UqIGN1cnJlbnRSYW5nZSwgU2VsZWN0CiAgICAgICAgIG5vZGUgPSBub2RlLT5w
YXJlbnRFbGVtZW50KCk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVu
ZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkg
JiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVyZXIp
LT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpICYmICFyZW5kZXJlci0+aXNUYWJsZSgpKQor
ICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAoaXM8UmVu
ZGVyQmxvY2s+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIp
LmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCkpCiAg
ICAgICAgIGZsYWdzID0gTm9uZTsKIAogICAgIHJldHVybiBiZXN0UmFuZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239499</attachid>
            <date>2014-10-08 15:49:16 -0700</date>
            <delta_ts>2014-10-08 16:35:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137512-20141008154917.patch</filename>
            <type>text/plain</type>
            <size>127501</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQwY2E4NTFmMWU2YWZh
NmE1OWQyMWU0MTViOTEzYmI1ZTJlNzU2Zi4uNjNhZDFjNmQ3NWRkNTdjYTA4YmY1NjQ2ZTllYzU1
NGVkODZiNzkyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNC0xMC0wNyAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQmxvY2sgb2JqZWN0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NTEyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3Ig
UmVuZGVyQmxvY2sgb2JqZWN0cyBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIHN1cnJvdW5kaW5n
IGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Omxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhcnRPZkNvbnRpbnVhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5k
T2ZDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkQmVmb3JlQ29uc2lkZXJp
bmdDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJl
bmRlclBhcmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVVJS2l0
RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBjb250YWluc09ubHlJbmxpbmVPYmpl
Y3RzXSk6CisgICAgICAgICgtW0RPTU5vZGUgaXNTZWxlY3RhYmxlQmxvY2tdKToKKyAgICAgICAg
KC1bRE9NSFRNTEVsZW1lbnQgc3RydWN0dXJhbENvbXBsZXhpdHlDb250cmlidXRpb25dKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnZhbHVlRm9yR3JpZFRyYWNrTGlzdCk6CisgICAgICAgICogZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnNob3VsZFJlcHJl
c2VudE5vZGVPZmZzZXRaZXJvKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpj
b250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRh
aW5pbmdCbG9ja0ZvckFic29sdXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFp
bmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzcGxpdEJsb2Nrcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpjYW5NZXJnZUFub255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bk1lcmdlQ29udGlndW91c0Fub255bW91c0Jsb2Nrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6YmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpi
bG9ja0JlZm9yZVdpdGhpblNlbGVjdGlvblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGls
ZEhpdFRlc3RDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpcnN0
TGluZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdExldHRlckJsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklubGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzTWFyZ2luQmVmb3JlUXVpcmspOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc01hcmdpbkFmdGVyUXVpcmspOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjptYXJnaW5CZWZv
cmVFc3RpbWF0ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93OjphZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZv
clBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3Rh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVsYXRlSW5GbG93UG9zaXRpb25PZmZzZXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRUbyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkcmVuVG8p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJl
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVT
dHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbnRp
bnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJlbnRPZkZpcnN0TGluZUJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2Vy
UmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6cG9z
aXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6Om1h
eFBhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVOb25GaXhlZEhlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNoZWNrQmxvY2tQb3NpdGlvbmVkT2JqZWN0c05lZWRMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3NpdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91
c1dyYXBwZXJzRm9ySW5saW5lc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSdWJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1YnlCZWZvcmVCbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpydWJ5QWZ0ZXJCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjptb3ZlSW5s
aW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVCbG9j
a0NoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJs
YXkpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVz
dGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KToKKwogMjAxNC0xMC0w
OCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IGZvbGxvdy11cCBmaXggZm9yIHIxNzQ0NjAuIERvIG5vdCByZWdpc3RlciBmb3IgS1ZPcyBpZiB0
aGUgb2JqZWN0IGRvZXMgbm90IHJlc3BvbmQgdG8gdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBmN2ViZTUzNTE0MjA2YTNjZTRhYWQ1NzkxMjRjODliYTRiZTY5NjM2Li4yMzcw
YWQzZDUzZmE2NzEzNTk5NTU5ZGEwOWY5NGM1NzVlYTEwYTVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTQtMTAtMDcgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9i
amVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NzUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSBp
czw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9iamVjdHMgYW5kIGNsZWFuIHVw
IHRoZSAKKyAgICAgICAgc3Vycm91bmRpbmcgY29kZS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFu
Z2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
Y29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZSk6CisKIDIwMTQtMTAtMDggIEFkYSBDaGFuICA8YWRh
Y2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IFdLUGFnZUlzUGxheWluZ0F1ZGlv
KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBlZjMyMThmNGFlM2YzMjQyYmZhMzY3ZDY3OWU4
NTI1MjBkNTU1YjJmLi5mNTc2OTE0NWE1MjA4M2E5MjkyMDFmNDBmYjRmYjVjYTJiN2IyMjEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE4NiwzNyArMTg2LDM1IEBAIHN0YXRpYyBpbmxpbmUg
UmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSW5Db250aW51YXRpb24oUmVuZGVySW5saW5lJiByZW5k
ZXJlcikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0Nv
bnRpbnVhdGlvbihSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIFJlbmRlck9iamVjdCog
Zmlyc3RDaGlsZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOworICAgIFJlbmRlck9iamVj
dCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLmZpcnN0Q2hpbGRTbG93KCk7CiAKLSAgICBpZiAoIWZp
cnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKHJlbmRlcmVyKSkKLSAgICAgICAg
Zmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRJbkNvbnRpbnVhdGlvbih0b1JlbmRlcklubGluZSgqcmVu
ZGVyZXIpKTsKKyAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9u
KCZyZW5kZXJlcikpCisgICAgICAgIGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkSW5Db250aW51YXRp
b24oZG93bmNhc3Q8UmVuZGVySW5saW5lPihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIGZpcnN0
Q2hpbGQ7CiB9CiAKIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZENvbnNp
ZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgaW5saW5l
IFJlbmRlck9iamVjdCogbGFzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCA9IHJlbmRlcmVy
LT5sYXN0Q2hpbGRTbG93KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2OwotICAgIFJlbmRlck9i
amVjdCogY3VyID0gcmVuZGVyZXI7CisgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KHJlbmRlcmVy
KSAmJiAhaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuICZyZW5kZXJl
cjsKIAotICAgIGlmICghY3VyLT5pc1JlbmRlcklubGluZSgpICYmICFjdXItPmlzUmVuZGVyQmxv
Y2soKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyOworICAgIFJlbmRlck9iamVjdCogbGFzdENo
aWxkID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXN0Q2hpbGQo
KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcHJldmlvdXM7CisgICAgZm9yIChhdXRvKiBj
dXJyZW50ID0gJmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcik7IGN1cnJl
bnQ7ICkgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CiAKLSAgICB3aGlsZSAoY3VyKSB7
Ci0gICAgICAgIHByZXYgPSBjdXI7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIG5ld0xhc3RD
aGlsZCA9IGN1cnJlbnQtPmxhc3RDaGlsZCgpKQorICAgICAgICAgICAgbGFzdENoaWxkID0gbmV3
TGFzdENoaWxkOwogCi0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGxjID0gY3VyLT5sYXN0Q2hp
bGRTbG93KCkpCi0gICAgICAgICAgICBsYXN0Q2hpbGQgPSBsYzsKLQotICAgICAgICBpZiAoY3Vy
LT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICBjdXIgPSB0b1JlbmRlcklubGluZShj
dXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKHByZXYsIGN1ciB8fCAhdG9SZW5kZXJJbmxpbmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsK
KyAgICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICBj
dXJyZW50ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVudCkuaW5saW5lRWxlbWVudENv
bnRpbnVhdGlvbigpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91cywgY3VycmVu
dCB8fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXIgPSB0b1JlbmRlckJsb2NrKGN1ciktPmlu
bGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAg
ICB9CiAKICAgICByZXR1cm4gbGFzdENoaWxkOwpAQCAtMjI3LDcgKzIyNSw3IEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25z
dAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0g
ICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGlu
dWF0aW9uKG1fcmVuZGVyZXIpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IGZpcnN0
Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbigqbV9yZW5kZXJlcik7CiAKICAgICAvLyBJZiBh
biBvYmplY3QgY2FuJ3QgaGF2ZSBjaGlsZHJlbiwgdGhlbiBpdCBpcyB1c2luZyB0aGlzIG1ldGhv
ZCB0byBoZWxwCiAgICAgLy8gY2FsY3VsYXRlIHNvbWUgaW50ZXJuYWwgcHJvcGVydHkgKGxpa2Ug
aXRzIGRlc2NyaXB0aW9uKS4KQEAgLTI0NCw3ICsyNDIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXN0Q2hpbGQoKSBjb25zdAogICAgIGlmICgh
bV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZW5kZXJPYmplY3Qq
IGxhc3RDaGlsZCA9IGxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKG1fcmVuZGVyZXIp
OworICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkID0gbGFzdENoaWxkQ29uc2lkZXJpbmdDb250
aW51YXRpb24oKm1fcmVuZGVyZXIpOwogCiAgICAgaWYgKCFsYXN0Q2hpbGQgJiYgIWNhbkhhdmVD
aGlsZHJlbigpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omxhc3RD
aGlsZCgpOwpAQCAtMjUyLDY3ICsyNTAsNjEgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bGFzdENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gYXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShsYXN0Q2hpbGQpOwogfQogCi1zdGF0aWMgaW5saW5lIFJl
bmRlcklubGluZSogc3RhcnRPZkNvbnRpbnVhdGlvbnMoUmVuZGVyT2JqZWN0KiByKQorc3RhdGlj
IGlubGluZSBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZDb250aW51YXRpb25zKFJlbmRlck9iamVjdCYg
cmVuZGVyZXIpCiB7Ci0gICAgaWYgKHItPmlzSW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKQot
ICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUoci0+bm9kZSgpLT5yZW5kZXJlcigpKTsKKyAg
ICBpZiAocmVuZGVyZXIuaXNJbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyLm5vZGUoKS0+cmVuZGVyZXIoKSk7
CiAKICAgICAvLyBCbG9ja3Mgd2l0aCBhIHByZXZpb3VzIGNvbnRpbnVhdGlvbiBhbHdheXMgaGF2
ZSBhIG5leHQgY29udGludWF0aW9uCi0gICAgaWYgKHItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1Jl
bmRlckJsb2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCi0gICAgICAgIHJldHVy
biB0b1JlbmRlcklubGluZSh0b1JlbmRlckJsb2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0
aW9uKCktPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPihy
ZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5pbmxpbmVFbGVtZW50
Q29udGludWF0aW9uKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KGRv
d25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigp
LT5lbGVtZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBlbmRPZkNvbnRpbnVhdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBlbmRPZkNvbnRpbnVhdGlv
bnMoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBy
ZW5kZXJlcjsKLSAgICBSZW5kZXJPYmplY3QqIGN1ciA9IHJlbmRlcmVyOwotCi0gICAgaWYgKCFj
dXItPmlzUmVuZGVySW5saW5lKCkgJiYgIWN1ci0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7CisgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKSAmJiAh
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuICZyZW5kZXJlcjsKIAot
ICAgIHdoaWxlIChjdXIpIHsKLSAgICAgICAgcHJldiA9IGN1cjsKLSAgICAgICAgaWYgKGN1ci0+
aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJJbmxpbmUoY3Vy
KS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOwotICAgICAgICAgICAgQVNTRVJUKGN1ciB8
fCAhdG9SZW5kZXJJbmxpbmUocHJldiktPmNvbnRpbnVhdGlvbigpKTsKKyAgICBhdXRvKiBwcmV2
aW91cyA9ICZkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIpOworICAgIGZv
ciAoYXV0byogY3VycmVudCA9IHByZXZpb3VzOyBjdXJyZW50OyApIHsKKyAgICAgICAgcHJldmlv
dXMgPSBjdXJyZW50OworICAgICAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsK
KyAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KS5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudCB8
fCAhZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcHJldmlvdXMpLmNvbnRpbnVhdGlvbigpKTsKICAg
ICAgICAgfSBlbHNlIAotICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJCbG9jayhjdXIpLT5pbmxp
bmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KCpjdXJyZW50KS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHByZXY7CisgICAgcmV0dXJuIHByZXZpb3VzOwogfQogCiAKLXN0YXRp
YyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9u
cyhSZW5kZXJJbmxpbmUqIHIsIFJlbmRlck9iamVjdCogY2hpbGQpCitzdGF0aWMgaW5saW5lIFJl
bmRlck9iamVjdCogY2hpbGRCZWZvcmVDb25zaWRlcmluZ0NvbnRpbnVhdGlvbnMoUmVuZGVySW5s
aW5lKiByZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKLSAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY3VyQ29udGFpbmVyID0gcjsKLSAgICBSZW5kZXJPYmplY3QqIGN1ciA9IG51bGxw
dHI7Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gbnVsbHB0cjsKLQotICAgIHdoaWxlIChjdXJD
b250YWluZXIpIHsKLSAgICAgICAgaWYgKGN1ckNvbnRhaW5lci0+aXNSZW5kZXJJbmxpbmUoKSkg
ewotICAgICAgICAgICAgY3VyID0gY3VyQ29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAg
ICAgICB3aGlsZSAoY3VyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBjaGlsZCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7Ci0gICAgICAgICAgICAgICAgcHJldiA9IGN1
cjsKLSAgICAgICAgICAgICAgICBjdXIgPSBjdXItPm5leHRTaWJsaW5nKCk7CisgICAgUmVuZGVy
T2JqZWN0KiBwcmV2aW91cyA9IG51bGxwdHI7CisgICAgZm9yIChSZW5kZXJCb3hNb2RlbE9iamVj
dCogY3VycmVudENvbnRhaW5lciA9IHJlbmRlcmVyOyBjdXJyZW50Q29udGFpbmVyOyApIHsKKyAg
ICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnRDb250YWluZXIpKSB7CisgICAgICAg
ICAgICBhdXRvKiBjdXJyZW50ID0gY3VycmVudENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOworICAg
ICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9
PSBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOworICAgICAgICAg
ICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY3VyQ29u
dGFpbmVyID0gdG9SZW5kZXJJbmxpbmUoY3VyQ29udGFpbmVyKS0+Y29udGludWF0aW9uKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY3VyQ29udGFpbmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAg
ICAgICAgIGlmIChjdXJDb250YWluZXIgPT0gY2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHByZXY7CisgICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVySW5s
aW5lPigqY3VycmVudENvbnRhaW5lcikuY29udGludWF0aW9uKCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50Q29udGFpbmVyKSkgeworICAgICAgICAgICAgaWYg
KGN1cnJlbnRDb250YWluZXIgPT0gY2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZp
b3VzOwogCi0gICAgICAgICAgICBwcmV2ID0gY3VyQ29udGFpbmVyOwotICAgICAgICAgICAgY3Vy
Q29udGFpbmVyID0gdG9SZW5kZXJCbG9jayhjdXJDb250YWluZXIpLT5pbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCk7CisgICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnRDb250YWluZXI7Cisg
ICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJy
ZW50Q29udGFpbmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQogICAgIHJldHVybiBudWxscHRyOwog
fQogCkBAIC0zMzIsMTUgKzMyNCwxNSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgIC8vIENhc2UgMTog
VGhlIG5vZGUgaXMgYSBibG9jayBhbmQgaXMgYW4gaW5saW5lJ3MgY29udGludWF0aW9uLiBJbiB0
aGF0IGNhc2UsIHRoZSBpbmxpbmUncwogICAgIC8vIGxhc3QgY2hpbGQgaXMgb3VyIHByZXZpb3Vz
IHNpYmxpbmcgKG9yIGZ1cnRoZXIgYmFjayBpbiB0aGUgY29udGludWF0aW9uIGNoYWluKQogICAg
IFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRzOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRl
ckJsb2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVy
ZXIpKSkKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqbV9yZW5kZXJlcikgJiYgKHN0YXJ0T2ZDb250
cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyKSkpCiAgICAgICAgIHByZXZpb3Vz
U2libGluZyA9IGNoaWxkQmVmb3JlQ29uc2lkZXJpbmdDb250aW51YXRpb25zKHN0YXJ0T2ZDb250
cywgbV9yZW5kZXJlcik7CiAKICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQg
b2YgdGhlIGVuZCBvZiBhIGNvbnRpbnVhdGlvbiAtIHNraXAgYWxsIHRoZSB3YXkgdG8gYmVmb3Jl
CiAgICAgLy8gdGhlIHBhcmVudCBvZiB0aGUgc3RhcnQsIHNpbmNlIGV2ZXJ5dGhpbmcgaW4gYmV0
d2VlbiB3aWxsIGJlIGxpbmtlZCB1cCB2aWEgdGhlIGNvbnRpbnVhdGlvbi4KICAgICBlbHNlIGlm
IChtX3JlbmRlcmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmlyc3RDaGlsZElzSW5saW5lQ29u
dGludWF0aW9uKG1fcmVuZGVyZXIpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RQYXJl
bnQgPSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpKS0+
cGFyZW50KCk7CisgICAgICAgIGF1dG8qIGZpcnN0UGFyZW50ID0gc3RhcnRPZkNvbnRpbnVhdGlv
bnMoKm1fcmVuZGVyZXItPmZpcnN0Q2hpbGRTbG93KCkpLT5wYXJlbnQoKTsKICAgICAgICAgd2hp
bGUgKGZpcnN0Q2hpbGRJc0lubGluZUNvbnRpbnVhdGlvbihmaXJzdFBhcmVudCkpCi0gICAgICAg
ICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250aW51YXRpb25zKGZpcnN0UGFyZW50LT5maXJz
dENoaWxkU2xvdygpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0
T2ZDb250aW51YXRpb25zKCpmaXJzdFBhcmVudC0+Zmlyc3RDaGlsZCgpKS0+cGFyZW50KCk7CiAg
ICAgICAgIHByZXZpb3VzU2libGluZyA9IGZpcnN0UGFyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsK
ICAgICB9CiAKQEAgLTM1MCw3ICszNDIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogCiAgICAgLy8gQ2Fz
ZSA0OiBUaGlzIG5vZGUgaGFzIG5vIHByZXZpb3VzIHNpYmxpbmdzLCBidXQgaXRzIHBhcmVudCBp
cyBhbiBpbmxpbmUsCiAgICAgLy8gYW5kIGlzIGFub3RoZXIgbm9kZSdzIGlubGluZSBjb250aW51
dGF0aW9uLiBGb2xsb3cgdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4KLSAgICBlbHNlIGlmIChtX3Jl
bmRlcmVyLT5wYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSAmJiAoc3RhcnRPZkNvbnRzID0gc3Rh
cnRPZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlci0+cGFyZW50KCkpKSkKKyAgICBlbHNlIGlmIChp
czxSZW5kZXJJbmxpbmU+KCptX3JlbmRlcmVyLT5wYXJlbnQoKSkgJiYgKHN0YXJ0T2ZDb250cyA9
IHN0YXJ0T2ZDb250aW51YXRpb25zKCptX3JlbmRlcmVyLT5wYXJlbnQoKSkpKQogICAgICAgICBw
cmV2aW91c1NpYmxpbmcgPSBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9ucyhzdGFy
dE9mQ29udHMsIG1fcmVuZGVyZXItPnBhcmVudCgpLT5maXJzdENoaWxkKCkpOwogCiAgICAgaWYg
KCFwcmV2aW91c1NpYmxpbmcpCkBAIC0zNzUsMTUgKzM2NywxNSBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAg
Ly8gQ2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGhhcyBhbiBpbmxpbmUgY29udGludWF0aW9u
LiBOZXh0IHNpYmxpbmcgaXMgdGhlIGlubGluZSBjb250aW51YXRpb24ncwogICAgIC8vIGZpcnN0
IGNoaWxkLgogICAgIFJlbmRlcklubGluZSogaW5saW5lQ29udGludWF0aW9uOwotICAgIGlmICht
X3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKGlubGluZUNvbnRpbnVhdGlvbiA9IHRvUmVu
ZGVyQmxvY2sobV9yZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkpCi0gICAg
ICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKGlubGlu
ZUNvbnRpbnVhdGlvbik7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPigqbV9yZW5kZXJlcikgJiYg
KGlubGluZUNvbnRpbnVhdGlvbiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqbV9yZW5kZXJlciku
aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpKSkKKyAgICAgICAgbmV4dFNpYmxpbmcgPSBmaXJz
dENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oKmlubGluZUNvbnRpbnVhdGlvbik7CiAKICAg
ICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2YgdGhlIHN0YXJ0IG9mIGEgY29u
dGludWF0aW9uIC0gc2tpcCBhbGwgdGhlIHdheSB0bwogICAgIC8vIGFmdGVyIHRoZSBwYXJlbnQg
b2YgdGhlIGVuZCwgc2luY2UgZXZlcnl0aGluZyBpbiBiZXR3ZWVuIHdpbGwgYmUgbGlua2VkIHVw
IHZpYSB0aGUgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKG1fcmVuZGVyZXItPmlzQW5vbnlt
b3VzQmxvY2soKSAmJiBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obV9yZW5kZXJlcikpIHsKLSAg
ICAgICAgUmVuZGVyRWxlbWVudCogbGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucyh0b1Jl
bmRlckJsb2NrKG1fcmVuZGVyZXIpLT5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOworICAgICAgICBS
ZW5kZXJFbGVtZW50KiBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKCpkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKm1fcmVuZGVyZXIpLmxhc3RDaGlsZCgpKS0+cGFyZW50KCk7CiAgICAgICAg
IHdoaWxlIChsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obGFzdFBhcmVudCkpCi0gICAgICAgICAg
ICBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKGxhc3RQYXJlbnQtPmxhc3RDaGlsZCgp
KS0+cGFyZW50KCk7CisgICAgICAgICAgICBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25z
KCpsYXN0UGFyZW50LT5sYXN0Q2hpbGQoKSktPnBhcmVudCgpOwogICAgICAgICBuZXh0U2libGlu
ZyA9IGxhc3RQYXJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQogCkBAIC0zOTQsMTUgKzM4Niwx
NSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0
U2libGluZygpIGNvbnN0CiAgICAgLy8gQ2FzZSA0OiBub2RlIGlzIGFuIGlubGluZSB3aXRoIGEg
Y29udGludWF0aW9uLiBOZXh0IHNpYmxpbmcgaXMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZW5k
IAogICAgIC8vIG9mIHRoZSBjb250aW51YXRpb24gY2hhaW4uCiAgICAgZWxzZSBpZiAoaXNJbmxp
bmVXaXRoQ29udGludWF0aW9uKG1fcmVuZGVyZXIpKQotICAgICAgICBuZXh0U2libGluZyA9IGVu
ZE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyKS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbmV4
dFNpYmxpbmcgPSBlbmRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXIpLT5uZXh0U2libGluZygp
OwogCiAgICAgLy8gQ2FzZSA1OiBub2RlIGhhcyBubyBuZXh0IHNpYmxpbmcsIGFuZCBpdHMgcGFy
ZW50IGlzIGFuIGlubGluZSB3aXRoIGEgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKGlzSW5s
aW5lV2l0aENvbnRpbnVhdGlvbihtX3JlbmRlcmVyLT5wYXJlbnQoKSkpIHsKLSAgICAgICAgYXV0
byBjb250aW51YXRpb24gPSB0b1JlbmRlcklubGluZShtX3JlbmRlcmVyLT5wYXJlbnQoKSktPmNv
bnRpbnVhdGlvbigpOworICAgICAgICBhdXRvJiBjb250aW51YXRpb24gPSAqZG93bmNhc3Q8UmVu
ZGVySW5saW5lPigqbV9yZW5kZXJlci0+cGFyZW50KCkpLmNvbnRpbnVhdGlvbigpOwogICAgICAg
ICAKICAgICAgICAgLy8gQ2FzZSA1YTogY29udGludWF0aW9uIGlzIGEgYmxvY2sgLSBpbiB0aGlz
IGNhc2UgdGhlIGJsb2NrIGl0c2VsZiBpcyB0aGUgbmV4dCBzaWJsaW5nLgotICAgICAgICBpZiAo
Y29udGludWF0aW9uLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICBuZXh0U2libGluZyA9
IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihjb250aW51YXRpb24p
KQorICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSAmY29udGludWF0aW9uOwogICAgICAgICAvLyBD
YXNlIDViOiBjb250aW51YXRpb24gaXMgYW4gaW5saW5lIC0gaW4gdGhpcyBjYXNlIHRoZSBpbmxp
bmUncyBmaXJzdCBjaGlsZCBpcyB0aGUgbmV4dCBzaWJsaW5nCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKGNv
bnRpbnVhdGlvbik7CkBAIC00MTQsMTMgKzQwNiwxMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAgcmV0dXJu
IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOwogfQogCi1zdGF0aWMg
UmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKK3N0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCogbmV4dENvbnRpbnVhdGlvbihSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgaWYgKHJl
bmRlcmVyLT5pc1JlbmRlcklubGluZSgpICYmICFyZW5kZXJlci0+aXNSZXBsYWNlZCgpKQotICAg
ICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51YXRpb24oKTsKLSAg
ICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVy
QmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgaWYgKGlz
PFJlbmRlcklubGluZT4ocmVuZGVyZXIpICYmICFyZW5kZXJlci5pc1JlcGxhY2VkKCkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKS5jb250aW51YXRpb24o
KTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigp
OwogICAgIHJldHVybiBudWxscHRyOwogfQogICAgIApAQCAtNDM1LDEyICs0MjYsMTIgQEAgUmVu
ZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJQYXJlbnRPYmplY3Qo
KSBjb25zdAogICAgIC8vIGlzIHRoZSBzdGFydCBvZiB0aGUgY29udGludWF0aW9uIGNoYWluLgog
ICAgIFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRzID0gbnVsbHB0cjsKICAgICBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGQgPSBudWxscHRyOwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJs
b2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXIp
KSkKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCptX3JlbmRlcmVyKSAmJiAoc3RhcnRPZkNvbnRz
ID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKm1fcmVuZGVyZXIpKSkKICAgICAgICAgcGFyZW50ID0g
c3RhcnRPZkNvbnRzOwogCiAgICAgLy8gQ2FzZSAyOiBub2RlJ3MgcGFyZW50IGlzIGFuIGlubGlu
ZSB3aGljaCBpcyBzb21lIG5vZGUncyBjb250aW51YXRpb247IHBhcmVudCBpcyAKICAgICAvLyB0
aGUgZWFybGllc3Qgbm9kZSBpbiB0aGUgY29udGludWF0aW9uIGNoYWluLgotICAgIGVsc2UgaWYg
KHBhcmVudCAmJiBwYXJlbnQtPmlzUmVuZGVySW5saW5lKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0
YXJ0T2ZDb250aW51YXRpb25zKHBhcmVudCkpKQorICAgIGVsc2UgaWYgKGlzPFJlbmRlcklubGlu
ZT4ocGFyZW50KSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoKnBhcmVu
dCkpKQogICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHM7CiAgICAgCiAgICAgLy8gQ2FzZSAz
OiBUaGUgZmlyc3Qgc2libGluZyBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgY29udGludWF0aW9uIGNo
YWluLiBGaW5kIHRoZSBvcmlnaW4gb2YgdGhhdCBjb250aW51YXRpb24uCkBAIC00NDgsNyArNDM5
LDcgQEAgUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJQYXJl
bnRPYmplY3QoKSBjb25zdAogICAgICAgICAvLyBHZXQgdGhlIG5vZGUncyByZW5kZXJlciBhbmQg
Zm9sbG93IHRoYXQgY29udGludWF0aW9uIGNoYWluIHVudGlsIHRoZSBmaXJzdCBjaGlsZCBpcyBm
b3VuZAogICAgICAgICBSZW5kZXJPYmplY3QqIG5vZGVSZW5kZXJGaXJzdENoaWxkID0gZmlyc3RD
aGlsZC0+bm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICB3aGlsZSAobm9kZVJlbmRlckZpcnN0
Q2hpbGQgIT0gZmlyc3RDaGlsZCkgewotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNv
bnRzVGVzdCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rlc3Q7IGNvbnRzVGVzdCA9IG5l
eHRDb250aW51YXRpb24oY29udHNUZXN0KSkgeworICAgICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNvbnRzVGVzdCA9IG5vZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rlc3Q7IGNvbnRzVGVz
dCA9IG5leHRDb250aW51YXRpb24oKmNvbnRzVGVzdCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
Y29udHNUZXN0ID09IGZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g
bm9kZVJlbmRlckZpcnN0Q2hpbGQtPnBhcmVudCgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTU2NiwyNSArNTU3LDIzIEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIAotICAgIFJlbmRlck9iamVjdCogY3VyclJlbmRlcmVyOworICAgIFJl
bmRlck9iamVjdCogY3VycmVudFJlbmRlcmVyOwogICAgIAogICAgIC8vIFNlYXJjaCB1cCB0aGUg
cmVuZGVyIHRyZWUgZm9yIGEgUmVuZGVyT2JqZWN0IHdpdGggYSBET00gbm9kZS4gIERlZmVyIHRv
IGFuIGVhcmxpZXIgY29udGludWF0aW9uLCB0aG91Z2guCi0gICAgZm9yIChjdXJyUmVuZGVyZXIg
PSBtX3JlbmRlcmVyOyBjdXJyUmVuZGVyZXIgJiYgIWN1cnJSZW5kZXJlci0+bm9kZSgpOyBjdXJy
UmVuZGVyZXIgPSBjdXJyUmVuZGVyZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJyUmVu
ZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBj
b250aW51YXRpb24gPSB0b1JlbmRlckJsb2NrKGN1cnJSZW5kZXJlciktPmNvbnRpbnVhdGlvbigp
OwotICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICBmb3IgKGN1cnJlbnRSZW5kZXJl
ciA9IG1fcmVuZGVyZXI7IGN1cnJlbnRSZW5kZXJlciAmJiAhY3VycmVudFJlbmRlcmVyLT5ub2Rl
KCk7IGN1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlci0+cGFyZW50KCkpIHsKKyAgICAg
ICAgaWYgKGN1cnJlbnRSZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpKSB7CisgICAgICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBjb250aW51YXRpb24gPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KmN1cnJlbnRSZW5kZXJlcikuY29udGludWF0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhY2hlLT5nZXRPckNyZWF0ZShjb250aW51YXRpb24pLT5hbmNob3JFbGVtZW50KCk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gYmFpbCBpZiBub25lIGZvdW5kCi0gICAgaWYgKCFj
dXJyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghY3VycmVudFJlbmRlcmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBzZWFyY2ggdXAgdGhlIERP
TSB0cmVlIGZvciBhbiBhbmNob3IgZWxlbWVudAogICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0
aGF0IGFueSBub24taW1hZ2Ugd2l0aCBhbiBhbmNob3IgaXMgYW4gSFRNTEFuY2hvckVsZW1lbnQK
LSAgICBOb2RlKiBub2RlID0gY3VyclJlbmRlcmVyLT5ub2RlKCk7Ci0gICAgZm9yICggOyBub2Rl
OyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gY3Vy
cmVudFJlbmRlcmVyLT5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsK
ICAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pigqbm9kZSkgfHwgKG5vZGUtPnJlbmRl
cmVyKCkgJiYgY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigp
KSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CkBA
IC0xNjc3LDE0ICsxNjY2LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHJldHVybjsKICAgICBFbGVtZW50
JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CiAKLSAg
ICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKKyAgICBpZiAoIWlzPFJlbmRl
ckJveE1vZGVsT2JqZWN0PigqbV9yZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVu
ZGVyZXIpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciA9IGRvd25jYXN0PFJl
bmRlckJveE1vZGVsT2JqZWN0PigqbV9yZW5kZXJlcik7CiAKICAgICAvLyBGSVhNRTogRG8gd2Ug
d2FudCB0byBkbyBhbnl0aGluZyBoZXJlIGZvciBBUklBIHRleHRib3hlcz8KLSAgICBpZiAocmVu
ZGVyZXItPmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisg
ICAgaWYgKHJlbmRlcmVyLmlzVGV4dEZpZWxkKCkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxl
bWVudCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLnNldFZh
bHVlKHN0cmluZyk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXItPmlzVGV4dEFyZWEoKSAmJiBpczxI
VE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KSkKKyAgICBlbHNlIGlmIChyZW5kZXJlci5pc1Rl
eHRBcmVhKCkgJiYgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIGRv
d25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpLnNldFZhbHVlKHN0cmluZyk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRl
bnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lv
bnMubW0KaW5kZXggYzU1ZGIwMTc3MzJiYTEwODAwMGQxMjhiZmFiNTU1NGIzYmU5ZGQ1OC4uY2Ew
ZDg4OTNiNjg3MzRkMjcyOWZmYjQyN2IzMDI5YjcwMWEzN2Q1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTIwNywxNyAr
MjA3LDE3IEBAIC0gKE5TQXJyYXkgKilib3JkZXJSYWRpaQogCiAtIChCT09MKWNvbnRhaW5zT25s
eUlubGluZU9iamVjdHMKIHsKLSAgICBSZW5kZXJPYmplY3QgKiByZW5kZXJlciA9IGNvcmUoc2Vs
ZiktPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuICAocmVuZGVyZXIgJiYKLSAgICAgICAgICAgICBy
ZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJgotICAgICAgICAgICAgIChyZW5kZXJlci0+aXNS
ZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCkgPT0gbmlsKSAmJgotICAgICAgICAgICAgICFyZW5kZXJlci0+aXNUYWJsZSgp
KTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXIKKyAgICAgICAgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5saW5l
KCkKKyAgICAgICAgJiYgKGlzPFJlbmRlckJsb2NrPigqcmVuZGVyZXIpICYmICFkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCisgICAg
ICAgICYmICFyZW5kZXJlci0+aXNUYWJsZSgpOwogfQogCiAtIChCT09MKWlzU2VsZWN0YWJsZUJs
b2NrCiB7Ci0gICAgUmVuZGVyT2JqZWN0ICogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJl
cigpOwotICAgIHJldHVybiAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxv
dygpIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVy
ZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgIT0gbmlsKSkpOworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5k
ZXJlciAmJiAoaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpIHx8IChpczxSZW5kZXJCbG9j
az4oKnJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCkgIT0gbmlsKSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFuZ2VP
ZkNvbnRhaW5pbmdQYXJhZ3JhcGgKQEAgLTM0NCwxMiArMzQ0LDEyIEBAIC0gKGludClzdHJ1Y3R1
cmFsQ29tcGxleGl0eUNvbnRyaWJ1dGlvbgogICAgICAgICAgICAgcmVzdWx0ID0gSU5UX01BWDsK
ICAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBy
ZXN1bHQgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxv
dygpIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVy
ZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgIT0gMCkpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikgfHwgKGlzPFJlbmRlckJsb2NrPigq
cmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUVsZW1l
bnRDb250aW51YXRpb24oKSkpIHsKICAgICAgICAgICAgIEJPT0wgbm9Db3N0ID0gTk87Ci0gICAg
ICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJC
b3ggJmFzQm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0JveCgpOwotICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCAqcGFyZW50ID0gYXNCb3gucGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgUmVu
ZGVyQm94ICpwYXJlbnRSZW5kZXJCb3ggPSAocGFyZW50ICYmIHBhcmVudC0+aXNCb3goKSkgPyB0
b1JlbmRlckJveChwYXJlbnQpIDogMDsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpy
ZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gmIGFzQm94ID0gcmVuZGVyZXIt
PmVuY2xvc2luZ0JveCgpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0g
YXNCb3gucGFyZW50KCk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJC
b3ggPSBpczxSZW5kZXJCb3g+KHBhcmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHBhcmVudCkg
OiBudWxscHRyOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJCb3ggJiYgYXNCb3gu
d2lkdGgoKSA9PSBwYXJlbnRSZW5kZXJCb3gtPndpZHRoKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgbm9Db3N0ID0gWUVTOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggY2U1ZWU2ZTRlZTdj
Y2NjMmNiNDhiY2RjOWJmYTJlMWE5MDhiYzA4Ny4uZGEyM2QxM2RhNmVhNDY5OTA5MTQ5NzVjYTU3
YmY0YTJlYzBmNmNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEwMDcsNyArMTAwNyw3IEBAIHN0YXRpYyBQYXNzUmVm
PENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3QoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvCiB7CiAgICAgY29uc3QgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVz
ID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHlsZS0+Z3JpZENvbHVtbnMoKSA6IHN0eWxl
LT5ncmlkUm93cygpOwogICAgIGNvbnN0IE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCYgb3JkZXJl
ZE5hbWVkR3JpZExpbmVzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHlsZS0+b3JkZXJl
ZE5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZS0+b3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVz
KCk7Ci0gICAgYm9vbCBpc1JlbmRlckdyaWQgPSByZW5kZXJlciAmJiByZW5kZXJlci0+aXNSZW5k
ZXJHcmlkKCk7CisgICAgYm9vbCBpc1JlbmRlckdyaWQgPSBpczxSZW5kZXJHcmlkPihyZW5kZXJl
cik7CiAKICAgICAvLyBIYW5kbGUgdGhlICdub25lJyBjYXNlLgogICAgIGJvb2wgdHJhY2tMaXN0
SXNFbXB0eSA9IHRyYWNrU2l6ZXMuaXNFbXB0eSgpOwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAgc3Rh
dGljIFBhc3NSZWY8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFRyYWNrTGlzdChHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW8KICAgICAgICAgLy8gRm9yIGdyaWRzIHdlIHNob3VsZCBjb25z
aWRlciBldmVyeSBsaXN0ZWQgdHJhY2ssIHdoZXRoZXIgaW1wbGljaXRseSBvciBleHBsaWNpdGx5
IGNyZWF0ZWQuIElmIHdlIGRvbid0IGhhdmUKICAgICAgICAgLy8gYW55IGV4cGxpY2l0IHRyYWNr
IGFuZCB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gdGhlbiB0aGVyZSBhcmUgbm8gaW1wbGljaXQgdHJh
Y2tzLiBXZSBjYW5ub3Qgc2ltcGx5IGNoZWNrIHRoZQogICAgICAgICAvLyBudW1iZXIgb2Ygcm93
cy9jb2x1bW5zIGluIG91ciBpbnRlcm5hbCBncmlkIHJlcHJlc2VudGF0aW9uIGJlY2F1c2UgaXQn
cyBhbHdheXMgYXQgbGVhc3QgMXgxIChzZWUgcjE0MzMzMSkuCi0gICAgICAgIHRyYWNrTGlzdElz
RW1wdHkgPSAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
dHJhY2tMaXN0SXNFbXB0eSA9ICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKS5maXJz
dENoaWxkKCk7CiAgICAgfQogCiAgICAgaWYgKHRyYWNrTGlzdElzRW1wdHkpIHsKQEAgLTEwMjUs
NyArMTAyNSw3IEBAIHN0YXRpYyBQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xp
c3QoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvCiAKICAgICBhdXRvIGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgaWYgKGlzUmVuZGVyR3Jp
ZCkgewotICAgICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHRyYWNrUG9zaXRpb25zID0g
ZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyB0b1JlbmRlckdyaWQocmVuZGVyZXIpLT5jb2x1bW5Q
b3NpdGlvbnMoKSA6IHRvUmVuZGVyR3JpZChyZW5kZXJlciktPnJvd1Bvc2l0aW9ucygpOworICAg
ICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHRyYWNrUG9zaXRpb25zID0gZGlyZWN0aW9u
ID09IEZvckNvbHVtbnMgPyBkb3duY2FzdDxSZW5kZXJHcmlkPigqcmVuZGVyZXIpLmNvbHVtblBv
c2l0aW9ucygpIDogZG93bmNhc3Q8UmVuZGVyR3JpZD4oKnJlbmRlcmVyKS5yb3dQb3NpdGlvbnMo
KTsKICAgICAgICAgLy8gVGhlcmUgYXJlIGF0IGxlYXN0ICN0cmFja3MgKyAxIGdyaWQgbGluZXMg
KHRyYWNrUG9zaXRpb25zKS4gQXBhcnQgZnJvbSB0aGF0LCB0aGUgZ3JpZCBjb250YWluZXIgY2Fu
IGdlbmVyYXRlIGltcGxpY2l0IGdyaWQgdHJhY2tzLAogICAgICAgICAvLyBzbyB3ZSdsbCBoYXZl
IG1vcmUgdHJhY2tQb3NpdGlvbnMgdGhhbiB0cmFja1NpemVzIGFzIHRoZSBsYXR0ZXIgb25seSBj
b250YWluIHRoZSBleHBsaWNpdCBncmlkLgogICAgICAgICBBU1NFUlQodHJhY2tQb3NpdGlvbnMu
c2l6ZSgpIC0gMSA+PSB0cmFja1NpemVzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM0NjRjMjc1NTI5NDZlZDI5ODg3
MjliNzVmMGY4YmQzNDkyOGZmYmIuLjU4NDk0OGEzOTU0MWE1ZTBiNzk2NTNhNWVhZDgwMDc4Njk3
YWE5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCkBAIC01NSwxMCArNTUsMTAgQEAKICNpbmNsdWRlICJSZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tG
bG93LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKLSNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRl
ICJTY29wZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQu
aCIKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCkBAIC05MjksMjEgKzkyOSwyMSBA
QCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRCbG9ja1BsYWNl
aG9sZGVyKGNvbnN0IFBvc2l0aW9uJiBwbwogUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKEVsZW1lbnQqIGNvbnRhaW5lcikK
IHsKICAgICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb250YWluZXItPnJl
bmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tG
bG93KCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93Pihy
ZW5kZXJlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIC8vIGFwcGVuZCB0
aGUgcGxhY2Vob2xkZXIgdG8gbWFrZSBzdXJlIGl0IGZvbGxvd3MKICAgICAvLyBhbnkgdW5yZW5k
ZXJlZCBibG9ja3MKLSAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRl
cmVyKTsKLSAgICBpZiAoYmxvY2stPmhlaWdodCgpID09IDAgfHwgKGJsb2NrLT5pc0xpc3RJdGVt
KCkgJiYgYmxvY2stPmlzRW1wdHkoKSkpCisgICAgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3cg
PSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcik7CisgICAgaWYgKCFibG9ja0Zs
b3cuaGVpZ2h0KCkgfHwgKGJsb2NrRmxvdy5pc0xpc3RJdGVtKCkgJiYgYmxvY2tGbG93LmlzRW1w
dHkoKSkpCiAgICAgICAgIHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGNvbnRhaW5lcik7
CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gQXNzdW1lcyB0
aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIHBsYWNlaG9sZGVyIGFuZCBkb2VzIHRoZSByZW1vdmFs
IHdpdGhvdXQgbXVjaCBjaGVja2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcAppbmRleCA3MjVhODAyYzc3NjZlMzc4OTY4MGY5NGI4MjUzYjhkYjVkNTQzYWE3Li42YmU5
NzIzY2JkZDFhNTU2N2NhYTQwNGI4OWRkYThmOGYyZTIyYjU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC05NjMsNyArOTYzLDcgQEAgYm9vbCBUZXh0SXRlcmF0
b3I6OnNob3VsZFJlcHJlc2VudE5vZGVPZmZzZXRaZXJvKCkKICAgICAvLyBBZGRpdGlvbmFsbHks
IGlmIHRoZSByYW5nZSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgY29udGFpbnMgaHVnZSBzZWN0aW9u
cyBvZiB1bnJlbmRlcmVkIGNvbnRlbnQsIAogICAgIC8vIHdlIHdvdWxkIGNyZWF0ZSBWaXNpYmxl
UG9zaXRpb25zIG9uIGV2ZXJ5IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aXRob3V0IHRoaXMgY2hl
Y2suCiAgICAgaWYgKCFtX25vZGUtPnJlbmRlcmVyKCkgfHwgbV9ub2RlLT5yZW5kZXJlcigpLT5z
dHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFCi0gICAgICAgIHx8IChtX25vZGUtPnJlbmRl
cmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXRvUmVuZGVyQmxvY2sobV9ub2RlLT5yZW5k
ZXJlcigpKS0+aGVpZ2h0KCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkpCisgICAg
ICAgIHx8IChpczxSZW5kZXJCbG9ja0Zsb3c+KCptX25vZGUtPnJlbmRlcmVyKCkpICYmICFkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCptX25vZGUtPnJlbmRlcmVyKCkpLmhlaWdodCgpICYmICFp
czxIVE1MQm9keUVsZW1lbnQ+KCptX25vZGUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gVGhlIHN0YXJ0UG9zLmlzTm90TnVsbCgpIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRo
ZSBzdGFydCBjb3VsZCBiZSBiZWZvcmUgdGhlIGJvZHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCmluZGV4IGRkOTQzZWI0NDBkNDE2MjhjNjU1N2UyOTMzMWI0MmI1YTMyNTMxMTQuLjJh
YzRjZmRjMzM5MTg2ZDc4YzZhZDk0ZWM5MWIyZDBlNzllMzllZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCkBAIC01NTIsMTEgKzU1MiwxMSBAQCBpbnQgRnJhbWU6OnByZWZlcnJl
ZEhlaWdodCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGJvZHktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzUmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJC
bG9jayhyZW5kZXJlcik7Ci0gICAgcmV0dXJuIGJsb2NrLT5oZWlnaHQoKSArIGJsb2NrLT5tYXJn
aW5Ub3AoKSArIGJsb2NrLT5tYXJnaW5Cb3R0b20oKTsKKyAgICBSZW5kZXJCbG9jayYgYmxvY2sg
PSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKTsKKyAgICByZXR1cm4gYmxvY2suaGVp
Z2h0KCkgKyBibG9jay5tYXJnaW5Ub3AoKSArIGJsb2NrLm1hcmdpbkJvdHRvbSgpOwogfQogCiBp
bnQgRnJhbWU6OmlubmVyTGluZUhlaWdodChET01Ob2RlKiBkb21Ob2RlKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNo
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Mb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2Fj
aGVzLmgKaW5kZXggZmVjNTJmN2IxNDQ4MGQzMWE0ZmE5YWMyNGYyZGNkNDZmMDZmODg1Ni4uNTk4
MzllNmJlYjVhZDNjZGRjMzdmY2EwOTdiYmQ0MjY2ODgyYThiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oCkBA
IC00NCw3ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9j
a0ZvckZpeGVkUG9zaXRpb24oUmVuZGVyRWxlbWVudCogcGFyZW50CiAgICAgd2hpbGUgKG9iamVj
dCAmJiAhb2JqZWN0LT5jYW5Db250YWluRml4ZWRQb3NpdGlvbk9iamVjdHMoKSkKICAgICAgICAg
b2JqZWN0ID0gb2JqZWN0LT5wYXJlbnQoKTsKICAgICBBU1NFUlQoIW9iamVjdCB8fCAhb2JqZWN0
LT5pc0Fub255bW91c0Jsb2NrKCkpOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG9iamVjdCk7
CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPihvYmplY3QpOwogfQogCiBzdGF0aWMg
aW5saW5lIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKFJl
bmRlckVsZW1lbnQqIHBhcmVudCkKQEAgLTU3LDEzICs1NywxMyBAQCBzdGF0aWMgaW5saW5lIFJl
bmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKFJlbmRlckVsZW1l
bnQqIHBhcgogICAgIC8vIG5vdCB0aGUgaW5saW5lIGl0c2VsZiwgdG8gYXZvaWQgaGF2aW5nIGEg
cG9zaXRpb25lZCBvYmplY3RzIGxpc3QgaW4gYWxsIFJlbmRlcklubGluZXMKICAgICAvLyBhbmQg
dXNlIFJlbmRlckJsb2NrKiBhcyBSZW5kZXJFbGVtZW50Ojpjb250YWluaW5nQmxvY2sncyByZXR1
cm4gdHlwZS4KICAgICAvLyBVc2UgUmVuZGVyQmxvY2s6OmNvbnRhaW5lcigpIHRvIG9idGFpbiB0
aGUgaW5saW5lLgotICAgIGlmIChvYmplY3QgJiYgIW9iamVjdC0+aXNSZW5kZXJCbG9jaygpKQor
ICAgIGlmIChvYmplY3QgJiYgIWlzPFJlbmRlckJsb2NrPigqb2JqZWN0KSkKICAgICAgICAgb2Jq
ZWN0ID0gb2JqZWN0LT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIHdoaWxlIChvYmplY3QgJiYg
b2JqZWN0LT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+Y29u
dGFpbmluZ0Jsb2NrKCk7CiAKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvYmplY3QpOworICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4ob2JqZWN0KTsKIH0KIAogc3RhdGljIGlubGlu
ZSBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KFJlbmRlckVsZW1l
bnQqIHBhcmVudCkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJCbG9jayog
Y29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KFJlbmRlckVsZW1lbnQqIHBhcmVudCkKICAg
ICBSZW5kZXJFbGVtZW50KiBvYmplY3QgPSBwYXJlbnQ7CiAgICAgd2hpbGUgKG9iamVjdCAmJiBp
c05vblJlbmRlckJsb2NrSW5saW5lKCpvYmplY3QpKQogICAgICAgICBvYmplY3QgPSBvYmplY3Qt
PnBhcmVudCgpOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG9iamVjdCk7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlckJsb2NrPihvYmplY3QpOwogfQogCiBjbGFzcyBMb2dpY2FsU2VsZWN0
aW9uT2Zmc2V0Q2FjaGVzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CmluZGV4IGUxMmViYjUzMDEyNDhmOWQ1MzRiMDNkYzRhYjY3YWU5MjJlMDAwMGYuLmFhMTU1MWY2
NjhmODIxYjEyODJjODU5Nzk1ZjBhYTcxODc4MTE4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjcyLDE3ICsyNzIsMTcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSYgbmV3U3QKICAgICAgICAgZWxzZSBpZiAob2xkU3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGlj
UG9zaXRpb24pIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSBvdXIgYWJzb2x1dGVseSBwb3NpdGlv
bmVkIGRlc2NlbmRhbnRzIGZyb20gdGhlaXIgY3VycmVudCBjb250YWluaW5nIGJsb2NrLgogICAg
ICAgICAgICAgLy8gVGhleSB3aWxsIGJlIGluc2VydGVkIGludG8gb3VyIHBvc2l0aW9uZWQgb2Jq
ZWN0cyBsaXN0IGR1cmluZyBsYXlvdXQuCi0gICAgICAgICAgICBhdXRvIGNiID0gcGFyZW50KCk7
Ci0gICAgICAgICAgICB3aGlsZSAoY2IgJiYgKGNiLT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gU3Rh
dGljUG9zaXRpb24gfHwgKGNiLT5pc0lubGluZSgpICYmICFjYi0+aXNSZXBsYWNlZCgpKSkgJiYg
IWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIGlmIChjYi0+c3R5bGUoKS5w
b3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgY2ItPmlzSW5saW5lKCkgJiYgIWNiLT5p
c1JlcGxhY2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Js
b2NrKCk7CisgICAgICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9jayA9IHBhcmVudCgpOworICAg
ICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAoY29udGFpbmluZ0Jsb2NrLT5zdHls
ZSgpLnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24gfHwgKGNvbnRhaW5pbmdCbG9jay0+aXNJ
bmxpbmUoKSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1JlcGxhY2VkKCkpKSAmJiAhY29udGFpbmlu
Z0Jsb2NrLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250YWluaW5n
QmxvY2stPnN0eWxlKCkucG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGNvbnRhaW5p
bmdCbG9jay0+aXNJbmxpbmUoKSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc1JlcGxhY2VkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5j
b250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNiID0gY2ItPnBhcmVudCgpOworICAgICAgICAgICAg
ICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+cGFyZW50KCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjYi0+aXNSZW5kZXJCbG9jaygp
KQotICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2IpLT5yZW1vdmVQb3NpdGlvbmVkT2Jq
ZWN0cyh0aGlzLCBOZXdDb250YWluaW5nQmxvY2spOworICAgICAgICAgICAgaWYgKGlzPFJlbmRl
ckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHModGhpcywg
TmV3Q29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzMyLDE5ICszMzIs
MTcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjb250aW51YXRpb25CZWZvcmUoUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQt
PnBhcmVudCgpID09IHRoaXMpCiAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgUmVuZGVyQmxv
Y2sqIGN1cnIgPSB0b1JlbmRlckJsb2NrKGNvbnRpbnVhdGlvbigpKTsKICAgICBSZW5kZXJCbG9j
ayogbmV4dFRvTGFzdCA9IHRoaXM7CiAgICAgUmVuZGVyQmxvY2sqIGxhc3QgPSB0aGlzOwotICAg
IHdoaWxlIChjdXJyKSB7Ci0gICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+
cGFyZW50KCkgPT0gY3VycikgewotICAgICAgICAgICAgaWYgKGN1cnItPmZpcnN0Q2hpbGQoKSA9
PSBiZWZvcmVDaGlsZCkKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oY29udGludWF0aW9uKCkpOyBjdXJyZW50OyBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KGN1cnJlbnQtPmNvbnRpbnVhdGlvbigpKSkgeworICAgICAgICBpZiAoYmVmb3JlQ2hp
bGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IGN1cnJlbnQpIHsKKyAgICAgICAgICAgIGlm
IChjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gYmVmb3JlQ2hpbGQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGxhc3Q7Ci0gICAgICAgICAgICByZXR1cm4gY3VycjsKKyAgICAgICAgICAgIHJldHVy
biBjdXJyZW50OwogICAgICAgICB9CiAKICAgICAgICAgbmV4dFRvTGFzdCA9IGxhc3Q7Ci0gICAg
ICAgIGxhc3QgPSBjdXJyOwotICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhjdXJyLT5jb250
aW51YXRpb24oKSk7CisgICAgICAgIGxhc3QgPSBjdXJyZW50OwogICAgIH0KIAogICAgIGlmICgh
YmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQoKSkKQEAgLTQxMyw3NyArNDExLDYgQEAg
UmVuZGVyUHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y2xvbmUoKSBjb25zdAogICAgIHJl
dHVybiBjbG9uZUJsb2NrOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpzcGxpdEJsb2NrcyhSZW5k
ZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJCbG9jayogdG9CbG9jaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBtaWRkbGVCbG9jaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBvbGRDb250KQotewotICAgIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgaW5saW5l
LgotICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY2xvbmVCbG9jayA9IGNsb25lKCk7Ci0gICAg
aWYgKCFpc0Fub255bW91c0Jsb2NrKCkpCi0gICAgICAgIGNsb25lQmxvY2stPnNldENvbnRpbnVh
dGlvbihvbGRDb250KTsKLQotICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgaXNBZnRlckNvbnRlbnQo
bGFzdENoaWxkKCkpKQotICAgICAgICBiZWZvcmVDaGlsZCA9IGxhc3RDaGlsZCgpOwotCi0gICAg
Ly8gSWYgd2UgYXJlIG1vdmluZyBpbmxpbmUgY2hpbGRyZW4gZnJvbSB8dGhpc3wgdG8gY2xvbmVC
bG9jaywgdGhlbiB3ZSBuZWVkCi0gICAgLy8gdG8gY2xlYXIgb3VyIGxpbmUgYm94IHRyZWUuCi0g
ICAgaWYgKGJlZm9yZUNoaWxkICYmIGNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAgIGRlbGV0ZUxp
bmVzKCk7Ci0KLSAgICAvLyBOb3cgdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIGZyb20gYmVmb3Jl
Q2hpbGQgdG8gdGhlIGVuZCBhbmQgcmVtb3ZlCi0gICAgLy8gdGhlbSBmcm9tIHx0aGlzfCBhbmQg
cGxhY2UgdGhlbSBpbiB0aGUgY2xvbmUuCi0gICAgbW92ZUNoaWxkcmVuVG8oY2xvbmVCbG9jay5n
ZXQoKSwgYmVmb3JlQ2hpbGQsIDAsIHRydWUpOwotICAgIAotICAgIC8vIEhvb2sgfGNsb25lfCB1
cCBhcyB0aGUgY29udGludWF0aW9uIG9mIHRoZSBtaWRkbGUgYmxvY2suCi0gICAgaWYgKCFjbG9u
ZUJsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkpCi0gICAgICAgIG1pZGRsZUJsb2NrLT5zZXRDb250
aW51YXRpb24oY2xvbmVCbG9jay5nZXQoKSk7Ci0KLSAgICAvLyBXZSBoYXZlIGJlZW4gcmVwYXJl
bnRlZCBhbmQgYXJlIG5vdyB1bmRlciB0aGUgZnJvbUJsb2NrLiAgV2UgbmVlZAotICAgIC8vIHRv
IHdhbGsgdXAgb3VyIGJsb2NrIHBhcmVudCBjaGFpbiB1bnRpbCB3ZSBoaXQgdGhlIGNvbnRhaW5p
bmcgYW5vbnltb3VzIGNvbHVtbnMgYmxvY2suCi0gICAgLy8gT25jZSB3ZSBoaXQgdGhlIGFub255
bW91cyBjb2x1bW5zIGJsb2NrIHdlJ3JlIGRvbmUuCi0gICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGN1cnIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHBhcmVudCgpKTsKLSAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogY3VyckNoaWxkID0gdGhpczsKLSAgICBSZW5kZXJPYmplY3QqIGN1cnJDaGls
ZE5leHRTaWJsaW5nID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwotCi0gICAgd2hpbGUgKGN1
cnIgJiYgY3Vyci0+aXNEZXNjZW5kYW50T2YoZnJvbUJsb2NrKSAmJiBjdXJyICE9IGZyb21CbG9j
aykgewotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2tDdXJyID0gdG9SZW5kZXJCbG9jayhjdXJy
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbG9uZS4KLSAgICAgICAgUmVu
ZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9uZUNoaWxkID0gV1RGOjptb3ZlKGNsb25lQmxvY2spOwot
ICAgICAgICBjbG9uZUJsb2NrID0gYmxvY2tDdXJyLT5jbG9uZSgpOwotCi0gICAgICAgIC8vIElu
c2VydCBvdXIgY2hpbGQgY2xvbmUgYXMgdGhlIGZpcnN0IGNoaWxkLgotICAgICAgICBjbG9uZUJs
b2NrLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGNsb25lQ2hpbGQubGVha1B0cigpLCAw
KTsKLQotICAgICAgICAvLyBIb29rIHRoZSBjbG9uZSB1cCBhcyBhIGNvbnRpbnVhdGlvbiBvZiB8
Y3VycnwuICBOb3RlIHdlIGRvIGVuY291bnRlcgotICAgICAgICAvLyBhbm9ueW1vdXMgYmxvY2tz
IHBvc3NpYmx5IGFzIHdlIHdhbGsgdXAgdGhlIGJsb2NrIGNoYWluLiAgV2hlbiB3ZSBzcGxpdCBh
bgotICAgICAgICAvLyBhbm9ueW1vdXMgYmxvY2ssIHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBhbnkg
Y29udGludWF0aW9uIGhvb2t1cCwgc2luY2Ugd2UgaGF2ZW4ndAotICAgICAgICAvLyBhY3R1YWxs
eSBzcGxpdCBhIHJlYWwgZWxlbWVudC4KLSAgICAgICAgaWYgKCFibG9ja0N1cnItPmlzQW5vbnlt
b3VzQmxvY2soKSkgewotICAgICAgICAgICAgb2xkQ29udCA9IGJsb2NrQ3Vyci0+Y29udGludWF0
aW9uKCk7Ci0gICAgICAgICAgICBibG9ja0N1cnItPnNldENvbnRpbnVhdGlvbihjbG9uZUJsb2Nr
LmdldCgpKTsKLSAgICAgICAgICAgIGNsb25lQmxvY2stPnNldENvbnRpbnVhdGlvbihvbGRDb250
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHRha2UgYWxsIG9mIHRo
ZSBjaGlsZHJlbiBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBjaGlsZAotICAgICAgICAvLyAqYWZ0
ZXIqIGN1cnJDaGlsZCBhbmQgYXBwZW5kIHRoZW0gYWxsIHRvIHRoZSBjbG9uZS4KLSAgICAgICAg
YmxvY2tDdXJyLT5tb3ZlQ2hpbGRyZW5UbyhjbG9uZUJsb2NrLmdldCgpLCBjdXJyQ2hpbGROZXh0
U2libGluZywgMCwgdHJ1ZSk7Ci0KLSAgICAgICAgLy8gS2VlcCB3YWxraW5nIHVwIHRoZSBjaGFp
bi4KLSAgICAgICAgY3VyckNoaWxkID0gY3VycjsKLSAgICAgICAgY3VyckNoaWxkTmV4dFNpYmxp
bmcgPSBjdXJyQ2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGN1cnIgPSB0b1JlbmRlckJv
eE1vZGVsT2JqZWN0KGN1cnItPnBhcmVudCgpKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgd2UgYXJl
IGF0IHRoZSBjb2x1bW5zIGJsb2NrIGxldmVsLiBXZSBuZWVkIHRvIHB1dCB0aGUgY2xvbmUgaW50
byB0aGUgdG9CbG9jay4KLSAgICB0b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKGNsb25lQmxv
Y2subGVha1B0cigpLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7Ci0KLSAgICAvLyBOb3cgdGFr
ZSBhbGwgdGhlIGNoaWxkcmVuIGFmdGVyIGN1cnJDaGlsZCBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB0
aGUgZnJvbUJsb2NrCi0gICAgLy8gYW5kIHB1dCB0aGVtIGluIHRoZSB0b0Jsb2NrLgotICAgIGlm
IChjdXJyQ2hpbGROZXh0U2libGluZyAmJiBjdXJyQ2hpbGROZXh0U2libGluZy0+cGFyZW50KCkg
PT0gZnJvbUJsb2NrKQotICAgICAgICBmcm9tQmxvY2stPm1vdmVDaGlsZHJlblRvKHRvQmxvY2ss
IGN1cnJDaGlsZE5leHRTaWJsaW5nLCAwLCB0cnVlKTsKLX0KLQogdm9pZCBSZW5kZXJCbG9jazo6
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkKIHsKICAgICBpZiAoY29udGludWF0aW9uKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKQEAg
LTU1OSw3ICs0ODYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iagogICAgICAgICBSZW5kZXJP
YmplY3QqIGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1Np
YmxpbmcoKSA6IGxhc3RDaGlsZCgpOwogCiAgICAgICAgIGlmIChhZnRlckNoaWxkICYmIGFmdGVy
Q2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhh
ZnRlckNoaWxkKS0+YWRkQ2hpbGQobmV3Q2hpbGQpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KCphZnRlckNoaWxkKS5hZGRDaGlsZChuZXdDaGlsZCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtNTc2LDggKzUwMyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVu
ZGVyT2JqCiAKICAgICBSZW5kZXJCb3g6OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7
CiAgCi0gICAgaWYgKG1hZGVCb3hlc05vbklubGluZSAmJiBwYXJlbnQoKSAmJiBpc0Fub255bW91
c0Jsb2NrKCkgJiYgcGFyZW50KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgdG9SZW5kZXJC
bG9jayhwYXJlbnQoKSktPnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CisgICAg
aWYgKG1hZGVCb3hlc05vbklubGluZSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpICYmIGlz
QW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQo
KSkucmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlzKTsKICAgICAvLyB0aGlzIG9iamVj
dCBtYXkgYmUgZGVhZCBoZXJlCiB9CiAKQEAgLTcyMiwxMSArNjQ5LDExIEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVyQmxvY2sqIGNoaWxkKQog
ICAgIGNoaWxkLT5kZXN0cm95KCk7CiB9CiAKLXN0YXRpYyBib29sIGNhbk1lcmdlQW5vbnltb3Vz
QmxvY2soUmVuZGVyQmxvY2sqIGFub255bW91c0Jsb2NrKQorc3RhdGljIGJvb2wgY2FuTWVyZ2VB
bm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayYgYW5vbnltb3VzQmxvY2spCiB7Ci0gICAgaWYgKGFu
b255bW91c0Jsb2NrLT5iZWluZ0Rlc3Ryb3llZCgpIHx8IGFub255bW91c0Jsb2NrLT5jb250aW51
YXRpb24oKSkKKyAgICBpZiAoYW5vbnltb3VzQmxvY2suYmVpbmdEZXN0cm95ZWQoKSB8fCBhbm9u
eW1vdXNCbG9jay5jb250aW51YXRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChhbm9ueW1vdXNCbG9jay0+aXNSdWJ5UnVuKCkgfHwgYW5vbnltb3VzQmxvY2stPmlzUnVieUJh
c2UoKSkKKyAgICBpZiAoYW5vbnltb3VzQmxvY2suaXNSdWJ5UnVuKCkgfHwgYW5vbnltb3VzQmxv
Y2suaXNSdWJ5QmFzZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC03MzksMjQgKzY2NiwyNCBAQCBzdGF0aWMgYm9vbCBjYW5NZXJnZUNvbnRpZ3VvdXNB
bm9ueW1vdXNCbG9ja3MoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCwgUmVuZGVyT2JqZQogICAgIGlm
IChwcmV2aW91cykgewogICAgICAgICBpZiAoIXByZXZpb3VzLT5pc0Fub255bW91c0Jsb2NrKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBwcmV2aW91
c0Fub255bW91c0Jsb2NrID0gdG9SZW5kZXJCbG9jayhwcmV2aW91cyk7CisgICAgICAgIFJlbmRl
ckJsb2NrJiBwcmV2aW91c0Fub255bW91c0Jsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpw
cmV2aW91cyk7CiAgICAgICAgIGlmICghY2FuTWVyZ2VBbm9ueW1vdXNCbG9jayhwcmV2aW91c0Fu
b255bW91c0Jsb2NrKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYg
KG5leHQpIHsKICAgICAgICAgaWYgKCFuZXh0LT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBuZXh0QW5vbnltb3VzQmxv
Y2sgPSB0b1JlbmRlckJsb2NrKG5leHQpOworICAgICAgICBSZW5kZXJCbG9jayYgbmV4dEFub255
bW91c0Jsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpuZXh0KTsKICAgICAgICAgaWYgKCFj
YW5NZXJnZUFub255bW91c0Jsb2NrKG5leHRBbm9ueW1vdXNCbG9jaykpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlckJs
b2NrOjpjb2xsYXBzZUFub255bW91c0JveENoaWxkKFJlbmRlckJsb2NrKiBwYXJlbnQsIFJlbmRl
ckJsb2NrKiBjaGlsZCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hp
bGQoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoaWxkKQogewotICAgIHBhcmVu
dC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgcGFyZW50LT5zZXRD
aGlsZHJlbklubGluZShjaGlsZC0+Y2hpbGRyZW5JbmxpbmUoKSk7CisgICAgcGFyZW50LnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAgIHBhcmVudC5zZXRDaGlsZHJlbklu
bGluZShjaGlsZC0+Y2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2li
bGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogY2hp
bGRGbG93VGhyZWFkID0gY2hpbGQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTc2
NCw4ICs2OTEsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZUFub255bW91c0JveENoaWxk
KFJlbmRlckJsb2NrKiBwYXJlbnQsIFJlbmRlckJsb2NrKiBjaAogICAgIGlmIChjaGlsZEZsb3dU
aHJlYWQgJiYgY2hpbGRGbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQogICAg
ICAgICB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChjaGlsZEZsb3dUaHJlYWQpLT5yZW1vdmVGbG93
Q2hpbGRJbmZvKGNoaWxkKTsKIAotICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY2hp
bGQsIGNoaWxkLT5oYXNMYXllcigpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRy
ZW4pOwotICAgIGNoaWxkLT5tb3ZlQWxsQ2hpbGRyZW5UbyhwYXJlbnQsIG5leHRTaWJsaW5nLCBj
aGlsZC0+aGFzTGF5ZXIoKSk7CisgICAgcGFyZW50LnJlbW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxk
LCBjaGlsZC0+aGFzTGF5ZXIoKSA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVu
KTsKKyAgICBjaGlsZC0+bW92ZUFsbENoaWxkcmVuVG8oJnBhcmVudCwgbmV4dFNpYmxpbmcsIGNo
aWxkLT5oYXNMYXllcigpKTsKICAgICAvLyBEZWxldGUgdGhlIG5vdy1lbXB0eSBibG9jaydzIGxp
bmVzIGFuZCBudWtlIGl0LgogICAgIGNoaWxkLT5kZWxldGVMaW5lcygpOwogICAgIGNoaWxkLT5k
ZXN0cm95KCk7CkBAIC03ODYsNDQgKzcxMyw0NCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJsb2Nr
OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogICAgIGJvb2wgY2FuTWVyZ2VB
bm9ueW1vdXNCbG9ja3MgPSBjYW5NZXJnZUNvbnRpZ3VvdXNBbm9ueW1vdXNCbG9ja3Mob2xkQ2hp
bGQsIHByZXYsIG5leHQpOwogICAgIGlmIChjYW5NZXJnZUFub255bW91c0Jsb2NrcyAmJiBwcmV2
ICYmIG5leHQpIHsKICAgICAgICAgcHJldi0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBuZXh0QmxvY2sgPSB0b1JlbmRlckJsb2NrKG5l
eHQpOwotICAgICAgICBSZW5kZXJCbG9jayogcHJldkJsb2NrID0gdG9SZW5kZXJCbG9jayhwcmV2
KTsKKyAgICAgICAgUmVuZGVyQmxvY2smIG5leHRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PigqbmV4dCk7CisgICAgICAgIFJlbmRlckJsb2NrJiBwcmV2QmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKnByZXYpOwogICAgICAgIAogICAgICAgICBpZiAocHJldi0+Y2hpbGRyZW5Jbmxp
bmUoKSAhPSBuZXh0LT5jaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9j
ayogaW5saW5lQ2hpbGRyZW5CbG9jayA9IHByZXYtPmNoaWxkcmVuSW5saW5lKCkgPyBwcmV2Qmxv
Y2sgOiBuZXh0QmxvY2s7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2tDaGlsZHJlbkJs
b2NrID0gcHJldi0+Y2hpbGRyZW5JbmxpbmUoKSA/IG5leHRCbG9jayA6IHByZXZCbG9jazsKKyAg
ICAgICAgICAgIFJlbmRlckJsb2NrJiBpbmxpbmVDaGlsZHJlbkJsb2NrID0gcHJldi0+Y2hpbGRy
ZW5JbmxpbmUoKSA/IHByZXZCbG9jayA6IG5leHRCbG9jazsKKyAgICAgICAgICAgIFJlbmRlckJs
b2NrJiBibG9ja0NoaWxkcmVuQmxvY2sgPSBwcmV2LT5jaGlsZHJlbklubGluZSgpID8gbmV4dEJs
b2NrIDogcHJldkJsb2NrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBQbGFjZSB0aGUg
aW5saW5lIGNoaWxkcmVuIGJsb2NrIGluc2lkZSBvZiB0aGUgYmxvY2sgY2hpbGRyZW4gYmxvY2sg
aW5zdGVhZCBvZiBkZWxldGluZyBpdC4KICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIHJldXNl
IGl0LCB3ZSBoYXZlIHRvIHJlc2V0IGl0IHRvIGp1c3QgYmUgYSBnZW5lcmljIGFub255bW91cyBi
bG9jay4gIE1ha2Ugc3VyZQogICAgICAgICAgICAgLy8gdG8gY2xlYXIgb3V0IGluaGVyaXRlZCBj
b2x1bW4gcHJvcGVydGllcyBieSBqdXN0IG1ha2luZyBhIG5ldyBzdHlsZSwgYW5kIHRvIGFsc28g
Y2xlYXIgdGhlCiAgICAgICAgICAgICAvLyBjb2x1bW4gc3BhbiBmbGFnIGlmIGl0IGlzIHNldC4K
LSAgICAgICAgICAgIEFTU0VSVCghaW5saW5lQ2hpbGRyZW5CbG9jay0+Y29udGludWF0aW9uKCkp
OworICAgICAgICAgICAgQVNTRVJUKCFpbmxpbmVDaGlsZHJlbkJsb2NrLmNvbnRpbnVhdGlvbigp
KTsKICAgICAgICAgICAgIC8vIENhY2hlIHRoaXMgdmFsdWUgYXMgaXQgbWlnaHQgZ2V0IGNoYW5n
ZWQgaW4gc2V0U3R5bGUoKSBjYWxsLgotICAgICAgICAgICAgYm9vbCBpbmxpbmVDaGlsZHJlbkJs
b2NrSGFzTGF5ZXIgPSBpbmxpbmVDaGlsZHJlbkJsb2NrLT5oYXNMYXllcigpOwotICAgICAgICAg
ICAgaW5saW5lQ2hpbGRyZW5CbG9jay0+c2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255
bW91c1N0eWxlV2l0aERpc3BsYXkoJnN0eWxlKCksIEJMT0NLKSk7Ci0gICAgICAgICAgICByZW1v
dmVDaGlsZEludGVybmFsKCppbmxpbmVDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGlsZHJlbkJsb2Nr
SGFzTGF5ZXIgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CisgICAgICAg
ICAgICBib29sIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA9IGlubGluZUNoaWxkcmVuQmxv
Y2suaGFzTGF5ZXIoKTsKKyAgICAgICAgICAgIGlubGluZUNoaWxkcmVuQmxvY2suc2V0U3R5bGUo
UmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJnN0eWxlKCksIEJM
T0NLKSk7CisgICAgICAgICAgICByZW1vdmVDaGlsZEludGVybmFsKGlubGluZUNoaWxkcmVuQmxv
Y2ssIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5v
dGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTm93IGp1c3QgcHV0
IHRoZSBpbmxpbmVDaGlsZHJlbkJsb2NrIGluc2lkZSB0aGUgYmxvY2tDaGlsZHJlbkJsb2NrLgot
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IHByZXYgPT0gaW5saW5lQ2hp
bGRyZW5CbG9jayA/IGJsb2NrQ2hpbGRyZW5CbG9jay0+Zmlyc3RDaGlsZCgpIDogbnVsbHB0cjsK
LSAgICAgICAgICAgIGJsb2NrQ2hpbGRyZW5CbG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChpbmxp
bmVDaGlsZHJlbkJsb2NrLCBiZWZvcmVDaGlsZCwKLSAgICAgICAgICAgICAgICAoaW5saW5lQ2hp
bGRyZW5CbG9ja0hhc0xheWVyIHx8IGJsb2NrQ2hpbGRyZW5CbG9jay0+aGFzTGF5ZXIoKSkgPyBO
b3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAgICBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gcHJldiA9PSAmaW5saW5lQ2hpbGRyZW5CbG9jayA/IGJsb2Nr
Q2hpbGRyZW5CbG9jay5maXJzdENoaWxkKCkgOiBudWxscHRyOworICAgICAgICAgICAgYmxvY2tD
aGlsZHJlbkJsb2NrLmluc2VydENoaWxkSW50ZXJuYWwoJmlubGluZUNoaWxkcmVuQmxvY2ssIGJl
Zm9yZUNoaWxkLAorICAgICAgICAgICAgICAgIChpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIg
fHwgYmxvY2tDaGlsZHJlbkJsb2NrLmhhc0xheWVyKCkpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250
Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAgbmV4dC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGlubGluZUNoaWxk
cmVuQmxvY2sgZ290IHJlcGFyZW50ZWQgdG8gYmxvY2tDaGlsZHJlbkJsb2NrLCBzbyBpdCBpcyBu
byBsb25nZXIgYSBjaGlsZAogICAgICAgICAgICAgLy8gb2YgInRoaXMiLiB3ZSBudWxsIG91dCBw
cmV2IG9yIG5leHQgc28gdGhhdCBpcyBub3QgdXNlZCBsYXRlciBpbiB0aGUgZnVuY3Rpb24uCi0g
ICAgICAgICAgICBpZiAoaW5saW5lQ2hpbGRyZW5CbG9jayA9PSBwcmV2QmxvY2spCi0gICAgICAg
ICAgICAgICAgcHJldiA9IDA7CisgICAgICAgICAgICBpZiAoJmlubGluZUNoaWxkcmVuQmxvY2sg
PT0gJnByZXZCbG9jaykKKyAgICAgICAgICAgICAgICBwcmV2ID0gbnVsbHB0cjsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0ID0gMDsKKyAgICAgICAgICAgICAgICBuZXh0
ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRha2UgYWxsIHRo
ZSBjaGlsZHJlbiBvdXQgb2YgdGhlIHxuZXh0fCBibG9jayBhbmQgcHV0IHRoZW0gaW4KICAgICAg
ICAgICAgIC8vIHRoZSB8cHJldnwgYmxvY2suCi0gICAgICAgICAgICBuZXh0QmxvY2stPm1vdmVB
bGxDaGlsZHJlbkluY2x1ZGluZ0Zsb2F0c1RvKHByZXZCbG9jaywgbmV4dEJsb2NrLT5oYXNMYXll
cigpIHx8IHByZXZCbG9jay0+aGFzTGF5ZXIoKSk7CisgICAgICAgICAgICBuZXh0QmxvY2subW92
ZUFsbENoaWxkcmVuSW5jbHVkaW5nRmxvYXRzVG8oJnByZXZCbG9jaywgbmV4dEJsb2NrLmhhc0xh
eWVyKCkgfHwgcHJldkJsb2NrLmhhc0xheWVyKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBEZWxldGUgdGhlIG5vdy1lbXB0eSBibG9jaydzIGxpbmVzIGFuZCBudWtlIGl0LgotICAg
ICAgICAgICAgbmV4dEJsb2NrLT5kZWxldGVMaW5lcygpOwotICAgICAgICAgICAgbmV4dEJsb2Nr
LT5kZXN0cm95KCk7Ci0gICAgICAgICAgICBuZXh0ID0gMDsKKyAgICAgICAgICAgIG5leHRCbG9j
ay5kZWxldGVMaW5lcygpOworICAgICAgICAgICAgbmV4dEJsb2NrLmRlc3Ryb3koKTsKKyAgICAg
ICAgICAgIG5leHQgPSBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogCkBAIC04MzYsMTcgKzc2
MywxNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmpl
Y3QmIG9sZENoaWxkKQogICAgICAgICAvLyBUaGUgcmVtb3ZhbCBoYXMga25vY2tlZCB1cyBkb3du
IHRvIGNvbnRhaW5pbmcgb25seSBhIHNpbmdsZSBhbm9ueW1vdXMKICAgICAgICAgLy8gYm94LiAg
V2UgY2FuIGdvIGFoZWFkIGFuZCBwdWxsIHRoZSBjb250ZW50IHJpZ2h0IGJhY2sgdXAgaW50byBv
dXIKICAgICAgICAgLy8gYm94LgotICAgICAgICBjb2xsYXBzZUFub255bW91c0JveENoaWxkKHRo
aXMsIHRvUmVuZGVyQmxvY2soY2hpbGQpKTsKKyAgICAgICAgY29sbGFwc2VBbm9ueW1vdXNCb3hD
aGlsZCgqdGhpcywgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSk7CiAgICAgICAgIG5leHRT
aWJsaW5nID0gbnVsbHB0cjsKICAgICB9IGVsc2UgaWYgKCgocHJldiAmJiBwcmV2LT5pc0Fub255
bW91c0Jsb2NrKCkpIHx8IChuZXh0ICYmIG5leHQtPmlzQW5vbnltb3VzQmxvY2soKSkpICYmIGNh
bkNvbGxhcHNlQW5vbnltb3VzQmxvY2tDaGlsZCgpKSB7CiAgICAgICAgIC8vIEl0J3MgcG9zc2li
bGUgdGhhdCB0aGUgcmVtb3ZhbCBoYXMga25vY2tlZCB1cyBkb3duIHRvIGEgc2luZ2xlIGFub255
bW91cwogICAgICAgICAvLyBibG9jayB3aXRoIHBzZXVkby1zdHlsZSBlbGVtZW50IHNpYmxpbmdz
IChlLmcuIGZpcnN0LWxldHRlcikuIElmIHRoZXNlCiAgICAgICAgIC8vIGFyZSBmbG9hdGluZywg
dGhlbiB3ZSBuZWVkIHRvIHB1bGwgdGhlIGNvbnRlbnQgdXAgYWxzby4KLSAgICAgICAgUmVuZGVy
QmxvY2sqIGFub25CbG9jayA9IHRvUmVuZGVyQmxvY2soKHByZXYgJiYgcHJldi0+aXNBbm9ueW1v
dXNCbG9jaygpKSA/IHByZXYgOiBuZXh0KTsKKyAgICAgICAgUmVuZGVyQmxvY2sqIGFub25CbG9j
ayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigocHJldiAmJiBwcmV2LT5pc0Fub255bW91c0Jsb2Nr
KCkpID8gcHJldiA6IG5leHQpOwogICAgICAgICBpZiAoKGFub25CbG9jay0+cHJldmlvdXNTaWJs
aW5nKCkgfHwgYW5vbkJsb2NrLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgJiYgKCFhbm9u
QmxvY2stPnByZXZpb3VzU2libGluZygpIHx8IChhbm9uQmxvY2stPnByZXZpb3VzU2libGluZygp
LT5zdHlsZSgpLnN0eWxlVHlwZSgpICE9IE5PUFNFVURPICYmIGFub25CbG9jay0+cHJldmlvdXNT
aWJsaW5nKCktPmlzRmxvYXRpbmcoKSAmJiAhYW5vbkJsb2NrLT5wcmV2aW91c1NpYmxpbmcoKS0+
cHJldmlvdXNTaWJsaW5nKCkpKQogICAgICAgICAgICAgJiYgKCFhbm9uQmxvY2stPm5leHRTaWJs
aW5nKCkgfHwgKGFub25CbG9jay0+bmV4dFNpYmxpbmcoKS0+c3R5bGUoKS5zdHlsZVR5cGUoKSAh
PSBOT1BTRVVETyAmJiBhbm9uQmxvY2stPm5leHRTaWJsaW5nKCktPmlzRmxvYXRpbmcoKSAmJiAh
YW5vbkJsb2NrLT5uZXh0U2libGluZygpLT5uZXh0U2libGluZygpKSkpIHsKLSAgICAgICAgICAg
IGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQodGhpcywgYW5vbkJsb2NrKTsKKyAgICAgICAgICAg
IGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoKnRoaXMsIGFub25CbG9jayk7CiAgICAgICAgICAg
ICBuZXh0U2libGluZyA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBAIC04NjQsMjMgKzc5
MSwyMyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmpl
Y3QmIG9sZENoaWxkKQogICAgICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tJZ25vcmluZ0Fu
b255bW91cyA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5p
bmdCbG9ja0lnbm9yaW5nQW5vbnltb3VzICYmIGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5vbnlt
b3VzLT5pc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2Nr
SWdub3JpbmdBbm9ueW1vdXMgPSBjb250YWluaW5nQmxvY2tJZ25vcmluZ0Fub255bW91cy0+Y29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IHRo
aXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2aW91c0luUHJlT3JkZXIoY29udGFpbmluZ0Jsb2Nr
SWdub3JpbmdBbm9ueW1vdXMpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnItPnZpcnR1YWxD
b250aW51YXRpb24oKSAhPSB0aGlzKQorICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnJlbnQgPSB0aGlzOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cHJldmlvdXNJblByZU9y
ZGVyKGNvbnRhaW5pbmdCbG9ja0lnbm9yaW5nQW5vbnltb3VzKSkgeworICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50LT52aXJ0dWFsQ29udGludWF0aW9uKCkgIT0gdGhpcykKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAvLyBGb3VuZCBvdXIgcHJldmlv
dXMgY29udGludWF0aW9uLiBXZSBqdXN0IG5lZWQgdG8gcG9pbnQgaXQgdG8KICAgICAgICAgICAg
ICAgICAvLyB8dGhpc3wncyBuZXh0IGNvbnRpbnVhdGlvbi4KICAgICAgICAgICAgICAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogbmV4dENvbnRpbnVhdGlvbiA9IGNvbnRpbnVhdGlvbigpOwotICAg
ICAgICAgICAgICAgIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKQotICAgICAgICAgICAgICAg
ICAgICB0b1JlbmRlcklubGluZShjdXJyKS0+c2V0Q29udGludWF0aW9uKG5leHRDb250aW51YXRp
b24pOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPmlzUmVuZGVyQmxvY2soKSkKLSAg
ICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjdXJyKS0+c2V0Q29udGludWF0aW9uKG5l
eHRDb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpj
dXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3Vy
cmVudCkuc2V0Q29udGludWF0aW9uKG5leHRDb250aW51YXRpb24pOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpCisgICAgICAgICAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudCkuc2V0Q29udGludWF0aW9uKG5leHRDb250
aW51YXRpb24pOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHNldENvbnRpbnVhdGlvbigwKTsKKyAgICAgICAgICAgIHNldENvbnRp
bnVhdGlvbihudWxscHRyKTsKICAgICAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTE3NDEsMTEgKzE2NjgsMTEgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpibG9j
a0VsZW1lbnRDb250aW51YXRpb24oKSBjb25zdAogewogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBjdXJyZW50Q29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7CiAgICAgaWYgKCFjdXJyZW50
Q29udGludWF0aW9uIHx8IGN1cnJlbnRDb250aW51YXRpb24tPmlzSW5saW5lKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIFJlbmRlckJsb2NrKiBuZXh0Q29udGludWF0aW9uID0gdG9SZW5kZXJC
bG9jayhjdXJyZW50Q29udGludWF0aW9uKTsKLSAgICBpZiAobmV4dENvbnRpbnVhdGlvbi0+aXNB
bm9ueW1vdXNCbG9jaygpKQotICAgICAgICByZXR1cm4gbmV4dENvbnRpbnVhdGlvbi0+YmxvY2tF
bGVtZW50Q29udGludWF0aW9uKCk7Ci0gICAgcmV0dXJuIG5leHRDb250aW51YXRpb247CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIFJlbmRlckJsb2NrJiBuZXh0Q29udGludWF0aW9uID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50Q29udGludWF0aW9uKTsKKyAgICBpZiAobmV4
dENvbnRpbnVhdGlvbi5pc0Fub255bW91c0Jsb2NrKCkpCisgICAgICAgIHJldHVybiBuZXh0Q29u
dGludWF0aW9uLmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgIHJldHVybiAmbmV4dENv
bnRpbnVhdGlvbjsKIH0KICAgICAKIHN0YXRpYyBDb250aW51YXRpb25PdXRsaW5lVGFibGVNYXAq
IGNvbnRpbnVhdGlvbk91dGxpbmVUYWJsZSgpCkBAIC0yMDQyLDcgKzE5NjksNyBAQCBHYXBSZWN0
cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ss
IGNvbnN0IExheW91dFBvaQogICAgICAgICAgICAgbGFzdExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxS
aWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGN1cnItPmxvZ2ljYWxCb3R0b20oKSwgY2Fj
aGUpOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxkU3RhdGUgIT0gU2VsZWN0aW9uTm9uZSkgewog
ICAgICAgICAgICAgLy8gV2UgbXVzdCBiZSBhIGJsb2NrIHRoYXQgaGFzIHNvbWUgc2VsZWN0ZWQg
b2JqZWN0IGluc2lkZSBpdC4gIEdvIGFoZWFkIGFuZCByZWN1ci4KLSAgICAgICAgICAgIHJlc3Vs
dC51bml0ZSh0b1JlbmRlckJsb2NrKGN1cnIpLT5zZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgcm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2NrLndp
ZHRoKCkgKyBjdXJyLT54KCksIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyBjdXJyLT55
KCkpLCAKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZShkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1
cnIpLnNlbGVjdGlvbkdhcHMocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBM
YXlvdXRTaXplKG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIGN1cnItPngoKSwgb2Zmc2V0
RnJvbVJvb3RCbG9jay5oZWlnaHQoKSArIGN1cnItPnkoKSksCiAgICAgICAgICAgICAgICAgbGFz
dExvZ2ljYWxUb3AsIGxhc3RMb2dpY2FsTGVmdCwgbGFzdExvZ2ljYWxSaWdodCwgY2hpbGRDYWNo
ZSwgcGFpbnRJbmZvKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTYyLDI5ICsyMDg5LDI5IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5k
ZXJCbG9jayYgcm9vdEJsb2NrLCBMYXlvCiBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmJsb2Nr
QmVmb3JlV2l0aGluU2VsZWN0aW9uUm9vdChMYXlvdXRTaXplJiBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzU2VsZWN0aW9uUm9vdCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QgPSB0aGlzOwog
ICAgIFJlbmRlck9iamVjdCogc2libGluZzsKICAgICBkbyB7CiAgICAgICAgIHNpYmxpbmcgPSBv
YmplY3QtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICB3aGlsZSAoc2libGluZyAmJiAoIXNp
YmxpbmctPmlzUmVuZGVyQmxvY2soKSB8fCB0b1JlbmRlckJsb2NrKHNpYmxpbmcpLT5pc1NlbGVj
dGlvblJvb3QoKSkpCisgICAgICAgIHdoaWxlIChzaWJsaW5nICYmICghaXM8UmVuZGVyQmxvY2s+
KCpzaWJsaW5nKSB8fCBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnNpYmxpbmcpLmlzU2VsZWN0aW9u
Um9vdCgpKSkKICAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmco
KTsKIAotICAgICAgICBvZmZzZXQgLT0gTGF5b3V0U2l6ZSh0b1JlbmRlckJsb2NrKG9iamVjdCkt
PmxvZ2ljYWxMZWZ0KCksIHRvUmVuZGVyQmxvY2sob2JqZWN0KS0+bG9naWNhbFRvcCgpKTsKKyAg
ICAgICAgb2Zmc2V0IC09IExheW91dFNpemUoZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvYmplY3Qp
LmxvZ2ljYWxMZWZ0KCksIGRvd25jYXN0PFJlbmRlckJsb2NrPigqb2JqZWN0KS5sb2dpY2FsVG9w
KCkpOwogICAgICAgICBvYmplY3QgPSBvYmplY3QtPnBhcmVudCgpOwotICAgIH0gd2hpbGUgKCFz
aWJsaW5nICYmIG9iamVjdCAmJiBvYmplY3QtPmlzUmVuZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJC
bG9jayhvYmplY3QpLT5pc1NlbGVjdGlvblJvb3QoKSk7CisgICAgfSB3aGlsZSAoIXNpYmxpbmcg
JiYgaXM8UmVuZGVyQmxvY2s+KG9iamVjdCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqb2Jq
ZWN0KS5pc1NlbGVjdGlvblJvb3QoKSk7CiAKICAgICBpZiAoIXNpYmxpbmcpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlbmRlckJsb2NrKiBiZWZv
cmVCbG9jayA9IHRvUmVuZGVyQmxvY2soc2libGluZyk7CisgICAgUmVuZGVyQmxvY2sqIGJlZm9y
ZUJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHNpYmxpbmcpOwogCiAgICAgb2Zmc2V0ICs9
IExheW91dFNpemUoYmVmb3JlQmxvY2stPmxvZ2ljYWxMZWZ0KCksIGJlZm9yZUJsb2NrLT5sb2dp
Y2FsVG9wKCkpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGJlZm9yZUJsb2NrLT5sYXN0
Q2hpbGQoKTsKLSAgICB3aGlsZSAoY2hpbGQgJiYgY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkgewot
ICAgICAgICBiZWZvcmVCbG9jayA9IHRvUmVuZGVyQmxvY2soY2hpbGQpOworICAgIHdoaWxlIChp
czxSZW5kZXJCbG9jaz4oY2hpbGQpKSB7CisgICAgICAgIGJlZm9yZUJsb2NrID0gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KGNoaWxkKTsKICAgICAgICAgb2Zmc2V0ICs9IExheW91dFNpemUoYmVmb3Jl
QmxvY2stPmxvZ2ljYWxMZWZ0KCksIGJlZm9yZUJsb2NrLT5sb2dpY2FsVG9wKCkpOwogICAgICAg
ICBjaGlsZCA9IGJlZm9yZUJsb2NrLT5sYXN0Q2hpbGQoKTsKICAgICB9CkBAIC0yNjgyLDcgKzI2
MDksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUoY29uc3Qg
UmVuZGVyQm94JiBib3gsIGNvbnN0IFJlbmRlclJlZwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKCFyZWdpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFJlbmRlckJs
b2NrJiBibG9jayA9IGJveC5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGJveCkgOiAq
Ym94LmNvbnRhaW5pbmdCbG9jaygpOworICAgIGNvbnN0IFJlbmRlckJsb2NrJiBibG9jayA9IGlz
PFJlbmRlckJsb2NrPihib3gpID8gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGJveCkgOiAqYm94LmNv
bnRhaW5pbmdCbG9jaygpOwogICAgIHJldHVybiBibG9jay5yZWdpb25BdEJsb2NrT2Zmc2V0KHBv
aW50LnkoKSkgPT0gcmVnaW9uOwogfQogCkBAIC0zMDQyLDExICsyOTY5LDExIEBAIFJlbmRlckJs
b2NrKiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAogICAgICAgICBpZiAoZmly
c3RMaW5lQmxvY2stPmlzUmVwbGFjZWQoKSB8fCBmaXJzdExpbmVCbG9jay0+aXNGbG9hdGluZygp
CiAgICAgICAgICAgICB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hpbGQo
KSAhPSBmaXJzdExpbmVCbG9jayB8fCAhaXNSZW5kZXJCbG9ja0Zsb3dPclJlbmRlckJ1dHRvbigq
cGFyZW50QmxvY2spKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGZpcnN0TGluZUJsb2Nr
ID0gdG9SZW5kZXJCbG9jayhwYXJlbnRCbG9jayk7CisgICAgICAgIGZpcnN0TGluZUJsb2NrID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHBhcmVudEJsb2NrKTsKICAgICB9IAogICAgIAogICAgIGlm
ICghaGFzUHNldWRvKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrOwogfQpAQCAtMzEyNSwxMSArMzA1Miwx
MSBAQCBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBmaW5kRmlyc3RMZXR0ZXJCbG9jayhSZW5k
ZXJCbG9jayogc3RhcnQpCiAgICAgICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudEJsb2NrID0gZmly
c3RMZXR0ZXJCbG9jay0+cGFyZW50KCk7CiAgICAgICAgIGlmIChmaXJzdExldHRlckJsb2NrLT5p
c1JlcGxhY2VkKCkgfHwgIXBhcmVudEJsb2NrIHx8IHBhcmVudEJsb2NrLT5maXJzdENoaWxkKCkg
IT0gZmlyc3RMZXR0ZXJCbG9jawogICAgICAgICAgICAgfHwgIWlzUmVuZGVyQmxvY2tGbG93T3JS
ZW5kZXJCdXR0b24oKnBhcmVudEJsb2NrKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICBmaXJzdExldHRlckJsb2NrID0gdG9SZW5kZXJCbG9jayhwYXJlbnRCbG9jayk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgZmlyc3RMZXR0ZXJCbG9jayA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPihwYXJlbnRCbG9jayk7CiAgICAgfSAKIAotICAgIHJldHVybiAwOworICAg
IHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRl
clN0eWxlKFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0KiBjdXJy
ZW50Q2hpbGQpCkBAIC0zNDIxLDggKzMzNDgsOCBAQCBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVy
QmxvY2s6Om91dGxpbmVTdHlsZUZvclJlcGFpbnQoKSBjb25zdAogdm9pZCBSZW5kZXJCbG9jazo6
Y2hpbGRCZWNhbWVOb25JbmxpbmUoUmVuZGVyT2JqZWN0KikKIHsKICAgICBtYWtlQ2hpbGRyZW5O
b25JbmxpbmUoKTsKLSAgICBpZiAoaXNBbm9ueW1vdXNCbG9jaygpICYmIHBhcmVudCgpICYmIHBh
cmVudCgpLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIHRvUmVuZGVyQmxvY2socGFyZW50KCkp
LT5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMpOworICAgIGlmIChpc0Fub255bW91
c0Jsb2NrKCkgJiYgaXM8UmVuZGVyQmxvY2s+KHBhcmVudCgpKSkKKyAgICAgICAgZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkucmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlz
KTsKICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlYWQgaGVyZQogfQogCkBAIC0zNjcxLDEyICszNTk4
LDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc01hcmdpbkJlZm9yZVF1aXJrKGNvbnN0IFJlbmRl
ckJveCYgY2hpbGQpIGNvbnN0CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyB0aGUgc2FtZSBkaXJl
Y3Rpb25hbGl0eSBhcyB3ZSBkbywgdGhlbiB3ZSBjYW4ganVzdCByZXR1cm4gaXRzCiAgICAgLy8g
bWFyZ2luIHF1aXJrLgogICAgIGlmICghY2hpbGQuaXNXcml0aW5nTW9kZVJvb3QoKSkKLSAgICAg
ICAgcmV0dXJuIGNoaWxkLmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpLmhh
c01hcmdpbkJlZm9yZVF1aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJr
KCk7CisgICAgICAgIHJldHVybiBpczxSZW5kZXJCbG9jaz4oY2hpbGQpID8gZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KGNoaWxkKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpIDogY2hpbGQuc3R5bGUoKS5o
YXNNYXJnaW5CZWZvcmVRdWlyaygpOwogICAgIAogICAgIC8vIFRoZSBjaGlsZCBoYXMgYSBkaWZm
ZXJlbnQgZGlyZWN0aW9uYWxpdHkuIElmIHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdz
IGp1c3QKICAgICAvLyBmbGlwcGVkIHJlbGF0aXZlIHRvIHVzLiBXZSBjYW4gdXNlIHRoZSBvcHBv
c2l0ZSBlZGdlLgogICAgIGlmIChjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJs
b2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkgOiBjaGls
ZC5zdHlsZSgpLmhhc01hcmdpbkFmdGVyUXVpcmsoKTsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRl
ckJsb2NrPihjaGlsZCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpLmhhc01hcmdpbkFm
dGVyUXVpcmsoKSA6IGNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpOwogICAgIAog
ICAgIC8vIFRoZSBjaGlsZCBpcyBwZXJwZW5kaWN1bGFyIHRvIHVzIGFuZCBib3ggc2lkZXMgYXJl
IG5ldmVyIHF1aXJreSBpbiBodG1sLmNzcywgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0
CiAgICAgLy8gd2hldGhlciBvciBub3QgYXV0aG9ycyBzcGVjaWZpZWQgcXVpcmt5IGVtcywgc2lu
Y2UgdGhleSdyZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCkBAIC0zNjg4LDEyICszNjE1LDEy
IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc01hcmdpbkFmdGVyUXVpcmsoY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkgY29uc3QKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSBzYW1lIGRpcmVjdGlv
bmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBpdHMKICAgICAvLyBtYXJn
aW4gcXVpcmsuCiAgICAgaWYgKCFjaGlsZC5pc1dyaXRpbmdNb2RlUm9vdCgpKQotICAgICAgICBy
ZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkuaGFzTWFy
Z2luQWZ0ZXJRdWlyaygpIDogY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCk7Cisg
ICAgICAgIHJldHVybiBpczxSZW5kZXJCbG9jaz4oY2hpbGQpID8gZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KGNoaWxkKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhhc01hcmdp
bkFmdGVyUXVpcmsoKTsKICAgICAKICAgICAvLyBUaGUgY2hpbGQgaGFzIGEgZGlmZmVyZW50IGRp
cmVjdGlvbmFsaXR5LiBJZiB0aGUgY2hpbGQgaXMgcGFyYWxsZWwsIHRoZW4gaXQncyBqdXN0CiAg
ICAgLy8gZmxpcHBlZCByZWxhdGl2ZSB0byB1cy4gV2UgY2FuIHVzZSB0aGUgb3Bwb3NpdGUgZWRn
ZS4KICAgICBpZiAoY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8g
dG9SZW5kZXJCbG9jayhjaGlsZCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSA6IGNoaWxkLnN0eWxl
KCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKTsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJsb2Nr
PihjaGlsZCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpLmhhc01hcmdpbkJlZm9yZVF1
aXJrKCkgOiBjaGlsZC5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1aXJrKCk7CiAgICAgCiAgICAg
Ly8gVGhlIGNoaWxkIGlzIHBlcnBlbmRpY3VsYXIgdG8gdXMgYW5kIGJveCBzaWRlcyBhcmUgbmV2
ZXIgcXVpcmt5IGluIGh0bWwuY3NzLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQKICAg
ICAvLyB3aGV0aGVyIG9yIG5vdCBhdXRob3JzIHNwZWNpZmllZCBxdWlya3kgZW1zLCBzaW5jZSB0
aGV5J3JlIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKaW5kZXggNjQwMGRiNmY1NTkyOTRhN2NmNjExOWFmNzI0Yzk3Y2EwMjdmMjRk
Mi4uYjc5Zjg4ZWUxNWIwNDU0NDg3YzM5NzhjZDJlNDgxNWIzZWU3OTU3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTE5NSw3ICsxOTUsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJl
ckFuZERpc3BsYXkoY29uc3QgUmVuZGVyT2JqZWN0KiwgRURpc3BsYXkgPSBCTE9DSyk7CiAgICAg
UmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c0Jsb2NrKEVEaXNwbGF5IGRpc3BsYXkgPSBCTE9D
SykgY29uc3QgeyByZXR1cm4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5kRGlz
cGxheSh0aGlzLCBkaXNwbGF5KTsgfQotICAgIHN0YXRpYyB2b2lkIGNvbGxhcHNlQW5vbnltb3Vz
Qm94Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoaWxkKTsKKyAgICBz
dGF0aWMgdm9pZCBjb2xsYXBzZUFub255bW91c0JveENoaWxkKFJlbmRlckJsb2NrJiBwYXJlbnQs
IFJlbmRlckJsb2NrKiBjaGlsZCk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckJveCogY3JlYXRlQW5v
bnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQpIGNvbnN0
IG92ZXJyaWRlOwogCkBAIC00ODYsMTAgKzQ4Niw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGV4
cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0OwogCi0gICAgdm9pZCBzcGxp
dEJsb2NrcyhSZW5kZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJCbG9jayogdG9CbG9jaywgUmVu
ZGVyQmxvY2sqIG1pZGRsZUJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOwotICAgIHZvaWQg
c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9j
a0JveCwKLSAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogb2xkQ29udCk7CiAgICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9u
ZSgpIGNvbnN0OwogICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCk7CiAKQEAgLTUzMCw4ICs1MjYsNiBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZzsKIH07CiAKLVJFTkRFUl9P
QkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJCbG9jaywgaXNSZW5kZXJCbG9jaygpKQotCiBMYXlvdXRV
bml0IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spOwogTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rp
b25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
RnJvbVJvb3RCbG9jayk7CiBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3Rp
bmdFZGl0aW5nQm91bmRhcmllcyhSZW5kZXJCbG9jayYsIFJlbmRlckJveCYsIGNvbnN0IExheW91
dFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CmluZGV4IGQ4NWJkODIyNjA1MmQzMjc5YThlODQxNjlkOWQ1OGQyOWI5MDdmMjMuLmZmOTZkNTE2
OWUxY2Q3Mzk2NjRmNDA2OTgxZmQ4MTQ3MmViNGE4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0xMjE5LDEwICsxMjE5LDEwIEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93OjptYXJnaW5CZWZvcmVFc3RpbWF0ZUZvckNoaWxkKFJlbmRlckJveCYg
Y2hpbGQsIExheW91dFVuaXQmCiAgICAgLy8gTWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYmxvY2sg
bWFyZ2lucyBub3cgZm9yIHRoZSBncmFuZGNoaWxkIGJveCBzbyB0aGF0IHdlJ3JlIGxvb2tpbmcg
YXQgY3VycmVudCB2YWx1ZXMuCiAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPm5lZWRzTGF5b3V0KCkp
IHsKICAgICAgICAgZ3JhbmRjaGlsZEJveC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFy
Z2lucyh0aGlzKTsKLSAgICAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPmlzUmVuZGVyQmxvY2soKSkg
ewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGdyYW5kY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxv
Y2soZ3JhbmRjaGlsZEJveCk7Ci0gICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01h
cmdpbkJlZm9yZVF1aXJrKGdyYW5kY2hpbGRCb3gtPnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVp
cmsoKSk7Ci0gICAgICAgICAgICBncmFuZGNoaWxkQmxvY2stPnNldEhhc01hcmdpbkFmdGVyUXVp
cmsoZ3JhbmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOworICAgICAg
ICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpncmFuZGNoaWxkQm94KSkgeworICAgICAgICAgICAgUmVu
ZGVyQmxvY2smIGdyYW5kY2hpbGRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqZ3JhbmRj
aGlsZEJveCk7CisgICAgICAgICAgICBncmFuZGNoaWxkQmxvY2suc2V0SGFzTWFyZ2luQmVmb3Jl
UXVpcmsoZ3JhbmRjaGlsZEJveC0+c3R5bGUoKS5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKTsKKyAg
ICAgICAgICAgIGdyYW5kY2hpbGRCbG9jay5zZXRIYXNNYXJnaW5BZnRlclF1aXJrKGdyYW5kY2hp
bGRCb3gtPnN0eWxlKCkuaGFzTWFyZ2luQWZ0ZXJRdWlyaygpKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTI3NCw4ICsxMjc0LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmVzdGlt
YXRlTG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IE0KICAgICAgICAg
Ly8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0
byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1
cnJlbnQgb25lLgogICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0
dGFibGVDaGlsZChjaGlsZCwgbG9naWNhbFRvcEVzdGltYXRlKTsKICAgICAgICAgCi0gICAgICAg
IGlmICghY2hpbGQuc2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hpbGQuaXNSZW5kZXJCbG9jaygpKQot
ICAgICAgICAgICAgbG9naWNhbFRvcEVzdGltYXRlICs9IHRvUmVuZGVyQmxvY2soY2hpbGQpLnBh
Z2luYXRpb25TdHJ1dCgpOworICAgICAgICBpZiAoIWNoaWxkLnNlbGZOZWVkc0xheW91dCgpICYm
IGlzPFJlbmRlckJsb2NrPihjaGlsZCkpCisgICAgICAgICAgICBsb2dpY2FsVG9wRXN0aW1hdGUg
Kz0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKS5wYWdpbmF0aW9uU3RydXQoKTsKICAgICB9
CiAKICAgICByZXR1cm4gbG9naWNhbFRvcEVzdGltYXRlOwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gmIGNo
aWxkLCBMYXlvdXRVbml0IGxvZ2ljYWwKIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFk
anVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKExheW91dFVuaXQgbG9naWNhbFRvcEFmdGVyQ2xl
YXIsIExheW91dFVuaXQgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiwgUmVuZGVyQm94JiBjaGls
ZCwgYm9vbCBhdEJlZm9yZVNpZGVPZkJsb2NrKQogewotICAgIFJlbmRlckJsb2NrKiBjaGlsZFJl
bmRlckJsb2NrID0gY2hpbGQuaXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jaygmY2hpbGQp
IDogbnVsbHB0cjsKKyAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGlzPFJlbmRl
ckJsb2NrPihjaGlsZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7
CiAKICAgICBpZiAoZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbiAhPSBsb2dpY2FsVG9wQWZ0ZXJD
bGVhcikgewogICAgICAgICAvLyBPdXIgZ3Vlc3MgcHJpb3IgdG8gcGFnaW5hdGlvbiBtb3ZlbWVu
dCB3YXMgd3JvbmcuIEJlZm9yZSB3ZSBhdHRlbXB0IHRvIHBhZ2luYXRlLCBsZXQncyB0cnkgYWdh
aW4gYXQgdGhlIG5ldwpAQCAtMjQ1Nyw3ICsyNDU3LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6
OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgcGFn
aW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRvd24gZnVydGhlci4KICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hpbGQgY2FuJ3QgYWxzbyBoYXZl
IGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcwogICAgICAgICAgICAgLy8gZXhjbHVzaXZl
IHdpdGggdGhlIGNhc2UgYWJvdmUuCi0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9j
ayA9IGNoaWxkQm94LmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soJmNoaWxkQm94KSA6
IG51bGxwdHI7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IGlzPFJlbmRl
ckJsb2NrPihjaGlsZEJveCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkQm94KSA6IG51
bGxwdHI7CiAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0
aW9uU3RydXQoKSkgewogICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gY2hpbGRCbG9j
ay0+cGFnaW5hdGlvblN0cnV0KCk7CiAgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0UGFn
aW5hdGlvblN0cnV0KDApOwpAQCAtMjcyOSwxNiArMjcyOSwxNiBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9S
ZW1vdmUpCiAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKIAogICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dDsgbmV4dCA9IG5leHQt
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFuZXh0LT5pc1JlbmRlckJsb2NrRmxvdygp
IHx8IG5leHQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCB0b1JlbmRlckJs
b2NrKG5leHQpLT5hdm9pZHNGbG9hdHMoKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zs
b3c+KCpuZXh0KSB8fCBuZXh0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwg
ZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqbmV4dCkuYXZvaWRzRmxvYXRzKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBSZW5kZXJCbG9ja0Zsb3cqIG5leHRCbG9jayA9IHRv
UmVuZGVyQmxvY2tGbG93KG5leHQpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIG5leHRCbG9j
ayA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm5leHQpOwogICAgICAgICBmb3IgKGF1dG8g
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIFJlbmRlckJveCYgZmxvYXRpbmdCb3ggPSAoKml0KS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgICAgIGlmIChmbG9hdFRvUmVtb3ZlICYmICZmbG9hdGluZ0JveCAhPSBmbG9hdFRvUmVtb3Zl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5leHRCbG9jay0+
Y29udGFpbnNGbG9hdChmbG9hdGluZ0JveCkpCi0gICAgICAgICAgICAgICAgbmV4dEJsb2NrLT5t
YXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCZmbG9hdGluZ0JveCk7CisgICAg
ICAgICAgICBpZiAobmV4dEJsb2NrLmNvbnRhaW5zRmxvYXQoZmxvYXRpbmdCb3gpKQorICAgICAg
ICAgICAgICAgIG5leHRCbG9jay5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0
KCZmbG9hdGluZ0JveCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IGI4MmU3NTY4MDRj
M2JlZTEyYThiMWU2NjY2MTI2YWM2YTM1MDQzZTguLjFhMzlkZTc3NGE0M2I4YWMzZmM3YTIxZTZm
MDM5YTBjYmMwZTZkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xODk0LDggKzE4OTQsOCBAQCBib29sIFJlbmRlckJs
b2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQs
IEZsb2F0aW5nTwogCiAgICAgICAgICAgICBpZiAodXBkYXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGls
ZChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgZmxvYXRCb3gu
c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGZsb2F0
Qm94LmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGZsb2F0
Qm94KS5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBlbHNl
IGlmIChpczxSZW5kZXJCbG9jaz4oZmxvYXRCb3gpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPihmbG9hdEJveCkuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMp
OwogICAgICAgICAgICAgZmxvYXRCb3gubGF5b3V0SWZOZWVkZWQoKTsKIAogICAgICAgICAgICAg
Ly8gU2F2ZSB0aGUgb2xkIGxvZ2ljYWwgdG9wIGJlZm9yZSBjYWxsaW5nIHJlbW92ZVBsYWNlZE9i
amVjdCB3aGljaCB3aWxsIHNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApp
bmRleCBlMWRlNDIwNzZmMTNjMzRiNzg4NjA5NDVlNmE4MjFmYzFhNWY4Y2ViLi42OTIwODY3Nzkx
MGZmMzY1YmNkZDlkMjhhNGVhZGVkODQyNzc3MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcApAQCAtMjk0NywyMCArMjk0NywyMCBAQCBMYXlvdXRVbml0IFJlbmRlckJv
eDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0
KSBjbwogICAgICAgICBjYXNlIENhbGN1bGF0ZWQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1
dG8gY2IgPSBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDogY29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgICAgICAgICB3aGlsZSAoY2ItPmlzQW5vbnltb3VzKCkgJiYgIWNiLT5p
c1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgd2hpbGUgKGNiLT5pc0Fub255bW91cygpICYm
ICFpczxSZW5kZXJWaWV3PigqY2IpKSB7CiAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjYiktPmFkZFBlcmNl
bnRIZWlnaHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpKTsKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudChjb25zdF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGN1bGF0aW9uIGlzIG5vdCBwYXRjaGVkIGZv
ciBibG9jay1mbG93IHlldC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjUwMAogICAgICAgICAgICAgaWYgKGNiLT5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSAmJiBjYi0+c3R5bGUoKS5oZWlnaHQoKS5pc0F1dG8oKSAmJiAhKGNiLT5zdHls
ZSgpLnRvcCgpLmlzQXV0bygpIHx8IGNiLT5zdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgewog
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNiLT5pc1Jl
bmRlckJsb2NrKCkpOwotICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVu
ZGVyQmxvY2soY2IpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPigqY2IpOwogICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAgICAgICAgICAgICAgICBibG9jay0+Y29tcHV0
ZUxvZ2ljYWxIZWlnaHQoYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMp
OwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVk
VmFsdWVzLm1fZXh0ZW50IC0gYmxvY2stPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkg
LSBibG9jay0+c2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIExheW91
dFVuaXQgbmV3SGVpZ2h0ID0gYmxvY2stPmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9y
Qm94U2l6aW5nKG5ld0NvbnRlbnRIZWlnaHQpOworICAgICAgICAgICAgICAgIGJsb2NrLmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMp
OworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbmV3Q29udGVudEhlaWdodCA9IGNvbXB1dGVk
VmFsdWVzLm1fZXh0ZW50IC0gYmxvY2suYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAt
IGJsb2NrLnNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IG5ld0hlaWdodCA9IGJsb2NrLmFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94
U2l6aW5nKG5ld0NvbnRlbnRIZWlnaHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RD
b250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZyh2YWx1ZUZvckxlbmd0aChsb2dpY2Fs
SGVpZ2h0LCBuZXdIZWlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjk4
NCw3ICsyOTg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCkgY28KICAgICAgICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IHN0ZDo6bWF4KGF2YWlsYWJsZUhlaWdodCwgaW50cmlu
c2ljTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZUZvckxlbmd0aChsb2dpY2FsSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLSBib3JkZXJBbmRQYWRk
aW5nTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB0b1JlbmRlckJsb2NrKGNiKS0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29u
c3RfY2FzdDxSZW5kZXJCb3gmPigqdGhpcykpOworICAgICAgICAgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKmNiKS5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChjb25zdF9jYXN0
PFJlbmRlckJveCY+KCp0aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRh
aW5pbmdCbG9jaygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMwMjMs
MTEgKzMwMjMsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWln
aHRVc2luZyhjb25zdCBMZW5ndGgmIGgsIEF2YWlsYWJsZUxvZ2kKIAogICAgIC8vIEZJWE1FOiBD
aGVjayBsb2dpY2FsVG9wL2xvZ2ljYWxCb3R0b20gaGVyZSB0byBjb3JyZWN0bHkgaGFuZGxlIHZl
cnRpY2FsIHdyaXRpbmctbW9kZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDY1MDAKLSAgICBpZiAoaXNSZW5kZXJCbG9jaygpICYmIGlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpICYmIHN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgIShzdHlsZSgpLnRv
cCgpLmlzQXV0bygpIHx8IHN0eWxlKCkuYm90dG9tKCkuaXNBdXRvKCkpKSB7Ci0gICAgICAgIFJl
bmRlckJsb2NrKiBibG9jayA9IGNvbnN0X2Nhc3Q8UmVuZGVyQmxvY2sqPih0b1JlbmRlckJsb2Nr
KHRoaXMpKTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCp0aGlzKSAmJiBpc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSAmJiBzdHlsZSgpLmhlaWdodCgpLmlzQXV0bygpICYmICEoc3R5bGUoKS50b3Ao
KS5pc0F1dG8oKSB8fCBzdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygpKSkgeworICAgICAgICBSZW5k
ZXJCbG9jayYgYmxvY2sgPSBjb25zdF9jYXN0PFJlbmRlckJsb2NrJj4oZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KCp0aGlzKSk7CiAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21w
dXRlZFZhbHVlczsKLSAgICAgICAgYmxvY2stPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLT5s
b2dpY2FsSGVpZ2h0KCksIDAsIGNvbXB1dGVkVmFsdWVzKTsKLSAgICAgICAgTGF5b3V0VW5pdCBu
ZXdDb250ZW50SGVpZ2h0ID0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBibG9jay0+Ym9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrLT5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0
KCk7CisgICAgICAgIGJsb2NrLmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGJsb2NrLmxvZ2ljYWxIZWln
aHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOworICAgICAgICBMYXlvdXRVbml0IG5ld0NvbnRlbnRI
ZWlnaHQgPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCAtIGJsb2NrLmJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCkgLSBibG9jay5zY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAg
IHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNpemluZyhuZXdDb250
ZW50SGVpZ2h0KTsKICAgICB9CiAKQEAgLTMwNzIsMzkgKzMwNzIsMzkgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3Qg
UmVuZGVyQm94TW8KICAgICBpZiAoY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgJiYg
Y29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVp
Z2h0Rm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsKIAotICAgIGlmIChjb250
YWluaW5nQmxvY2stPmlzQm94KCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqY29udGFpbmlu
Z0Jsb2NrKSkgewogICAgICAgICBib29sIGlzRml4ZWRQb3NpdGlvbiA9IHN0eWxlKCkucG9zaXRp
b24oKSA9PSBGaXhlZFBvc2l0aW9uOwogCiAgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGlmICghZmxvd1Ro
cmVhZCkgewotICAgICAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxv
Y2stPmlzUmVuZGVyVmlldygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclZpZXco
Y29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBpczxSZW5kZXJWaWV3PigqY29udGFp
bmluZ0Jsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVmlldz4o
KmNvbnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOwog
Ci0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goY29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50
TG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94Pigq
Y29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChpc0ZpeGVkUG9zaXRpb24gJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlck5hbWVk
Rmxvd1RocmVhZCgpKQorICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlck5h
bWVkRmxvd1RocmVhZD4oKmNvbnRhaW5pbmdCbG9jaykpCiAgICAgICAgICAgICByZXR1cm4gY29u
dGFpbmluZ0Jsb2NrLT52aWV3KCkuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAKLSAgICAgICAgaWYg
KCFjb250YWluaW5nQmxvY2stPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgIHJldHVybiB0
b1JlbmRlckJveCgqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAg
ICAgaWYgKCFpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2Fs
V2lkdGgoKTsKIAotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2Nr
KGNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8g
PSAwOworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IgPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveElu
Zm8gPSBudWxscHRyOwogICAgICAgICBpZiAoIXJlZ2lvbikgewogICAgICAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNoZWNrRm9yUGVycGVuZGlj
dWxhcldyaXRpbmdNb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dUaHJl
YWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24oKTsK
ICAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7Ci0gICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpOwotICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi0+cmVn
aW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOworICAgICAgICAgICAgICAgIExheW91dFVu
aXQgY2JQYWdlT2Zmc2V0ID0gY2Iub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwor
ICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi5yZWdpb25BdEJsb2Nr
T2Zmc2V0KGNiUGFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGNiUmVnaW9uKQotICAg
ICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdp
b24pOworICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5m
byhjYlJlZ2lvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYm
IGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2Nr
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJSZWdpb24q
IGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJl
Z2lvbik7Ci0gICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29u
dGFpbmluZ0Jsb2NrUmVnaW9uKTsKKyAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmlu
Z0Jsb2NrUmVnaW9uID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAg
ICAgICAgICAgYm94SW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2Nr
UmVnaW9uKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKGJveEluZm8pID8gc3RkOjptYXg8
TGF5b3V0VW5pdD4oMCwgY2ItPmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLT5sb2dpY2FsV2lk
dGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi0+Y2xpZW50TG9naWNhbFdpZHRo
KCk7CisgICAgICAgIHJldHVybiAoYm94SW5mbykgPyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBj
Yi5jbGllbnRMb2dpY2FsV2lkdGgoKSAtIChjYi5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxv
Z2ljYWxXaWR0aCgpKSkgOiBjYi5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICB9CiAKICAgICBB
U1NFUlQoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlcklubGluZSgpICYmIGNvbnRhaW5pbmdCbG9j
ay0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpOwpAQCAtMzEzMywzNyArMzEzMywzNyBAQCBMYXlvdXRV
bml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChj
b25zdCBSZW5kZXJCb3hNbwogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250
YWluaW5nQmxvY2ssIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0
CiB7CiAgICAgaWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlICYmIGNvbnRhaW5p
bmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQotICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9z
aXRpb25lZChjb250YWluaW5nQmxvY2ssIDAsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCBudWxs
cHRyLCBmYWxzZSk7CiAKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CiAgICAg
ICAgIGJvb2wgaXNGaXhlZFBvc2l0aW9uID0gc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9z
aXRpb247CiAKLSAgICAgICAgaWYgKGlzRml4ZWRQb3NpdGlvbiAmJiBjb250YWluaW5nQmxvY2st
PmlzUmVuZGVyVmlldygpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVmlldyhjb250YWlu
aW5nQmxvY2spLT5jbGllbnRMb2dpY2FsSGVpZ2h0Rm9yRml4ZWRQb3NpdGlvbigpOworICAgICAg
ICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2sp
KQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxv
Y2spLmNsaWVudExvZ2ljYWxIZWlnaHRGb3JGaXhlZFBvc2l0aW9uKCk7CiAKLSAgICAgICAgY29u
c3QgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckJsb2NrKCkgPyB0
b1JlbmRlckJsb2NrKGNvbnRhaW5pbmdCbG9jaykgOiBjb250YWluaW5nQmxvY2stPmNvbnRhaW5p
bmdCbG9jaygpOworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSBpczxSZW5kZXJCbG9j
az4oKmNvbnRhaW5pbmdCbG9jaykgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Js
b2NrKSA6IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIExheW91
dFVuaXQgcmVzdWx0ID0gY2ItPmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAg
ICAgICAgaWYgKGZsb3dUaHJlYWQgJiYgY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckZsb3dUaHJl
YWQoKSAmJiBmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5p
bmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBpc0ZpeGVkUG9zaXRp
b24pCisgICAgICAgIGlmIChmbG93VGhyZWFkICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpjb250
YWluaW5nQmxvY2spICYmIGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0g
Y29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKSAmJiBpc0Zp
eGVkUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+dmll
dygpLmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZs
b3dUaHJlYWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVn
aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKmNv
bnRhaW5pbmdCbG9jaykuY29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIEFTU0VS
VChjb250YWluaW5nQmxvY2stPmlzUmVuZGVySW5saW5lKCkgJiYgY29udGFpbmluZ0Jsb2NrLT5p
c0luRmxvd1Bvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlcklubGluZT4oKmNvbnRh
aW5pbmdCbG9jaykgJiYgY29udGFpbmluZ0Jsb2NrLT5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7CiAK
LSAgICBjb25zdCBSZW5kZXJJbmxpbmUqIGZsb3cgPSB0b1JlbmRlcklubGluZShjb250YWluaW5n
QmxvY2spOwotICAgIElubGluZUZsb3dCb3gqIGZpcnN0ID0gZmxvdy0+Zmlyc3RMaW5lQm94KCk7
Ci0gICAgSW5saW5lRmxvd0JveCogbGFzdCA9IGZsb3ctPmxhc3RMaW5lQm94KCk7CisgICAgY29u
c3QgUmVuZGVySW5saW5lJiBmbG93ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY29udGFpbmlu
Z0Jsb2NrKTsKKyAgICBJbmxpbmVGbG93Qm94KiBmaXJzdCA9IGZsb3cuZmlyc3RMaW5lQm94KCk7
CisgICAgSW5saW5lRmxvd0JveCogbGFzdCA9IGZsb3cubGFzdExpbmVCb3goKTsKIAogICAgIC8v
IElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGVtcHR5LCByZXR1cm4gYSBoZWlnaHQgb2YgMC4K
ICAgICBpZiAoIWZpcnN0IHx8ICFsYXN0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIExheW91
dFVuaXQgaGVpZ2h0UmVzdWx0OwotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBmbG93LT5s
aW5lc0JvdW5kaW5nQm94KCk7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGZsb3cubGlu
ZXNCb3VuZGluZ0JveCgpOwogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCiAgICAgICAgIGhlaWdodFJlc3VsdCA9IGJvdW5kaW5nQm94LmhlaWdodCgp
OwogICAgIGVsc2UKQEAgLTMxODAsMTMgKzMxODAsMTMgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlu
bGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJp
Z2gKICAgICAvLyBGSVhNRTogVGhlIHN0YXRpYyBkaXN0YW5jZSBjb21wdXRhdGlvbiBoYXMgbm90
IGJlZW4gcGF0Y2hlZCBmb3IgbWl4ZWQgd3JpdGluZyBtb2RlcyB5ZXQuCiAgICAgaWYgKGNoaWxk
LT5wYXJlbnQoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgTGF5b3V0
VW5pdCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlv
bigpIC0gY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgIGZvciAo
YXV0byBjdXJyID0gY2hpbGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxv
Y2s7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnItPmlz
Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSB0b1JlbmRlckJveChj
dXJyKS0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uICYmIHRvUmVu
ZGVyQm94KGN1cnIpLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5k
ZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAgICAgIGZvciAoYXV0byBjdXJyZW50ID0gY2hp
bGQtPnBhcmVudCgpOyBjdXJyZW50ICYmIGN1cnJlbnQgIT0gY29udGFpbmVyQmxvY2s7IGN1cnJl
bnQgPSBjdXJyZW50LT5jb250YWluZXIoKSkgeworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJv
eD4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gZG93bmNh
c3Q8UmVuZGVyQm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVnaW9uICYmIGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyQmxvY2smIGN1cnJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGN1cnJlbnRCbG9j
ay5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CisgICAgICAgICAgICAgICAgICAg
IFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjdXJyZW50QmxvY2sucmVuZGVyQm94UmVn
aW9uSW5mbyhyZWdpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94SW5mbykKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0
KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzE5NiwyNSArMzE5NiwyNSBAQCBzdGF0aWMgdm9p
ZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3Ro
JiBsb2dpY2FsUmlnaAogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlbmRlckJveCYgZW5jbG9zaW5n
Qm94ID0gY2hpbGQtPnBhcmVudCgpLT5lbmNsb3NpbmdCb3goKTsKICAgICAgICAgTGF5b3V0VW5p
dCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigp
ICsgY29udGFpbmVyTG9naWNhbFdpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxM
ZWZ0KCk7Ci0gICAgICAgIGZvciAoUmVuZGVyRWxlbWVudCogY3VyciA9ICZlbmNsb3NpbmdCb3g7
IGN1cnI7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1cnIt
PmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyciAhPSBjb250YWluZXJCbG9jaykK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gdG9SZW5kZXJCb3goY3Vycikt
PmxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0Jv
eCkKKyAgICAgICAgZm9yIChSZW5kZXJFbGVtZW50KiBjdXJyZW50ID0gJmVuY2xvc2luZ0JveDsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmNvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyQm94PigqY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dCAhPSBjb250YWluZXJCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24g
LT0gZG93bmNhc3Q8UmVuZGVyQm94PigqY3VycmVudCkubG9naWNhbExlZnQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSAmZW5jbG9zaW5nQm94KQogICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNQb3NpdGlvbiAtPSBlbmNsb3NpbmdCb3gubG9naWNhbFdpZHRoKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlZ2lvbiAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lv
bnMocmVnaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94
SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAgICAgICAgICAgICAg
aWYgKHJlZ2lvbiAmJiBpczxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiBjdXJyZW50QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKmN1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjdXJyZW50Qmxv
Y2suY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY3VycmVudEJsb2NrLnJlbmRlckJveFJl
Z2lvbkluZm8ocmVnaW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyICE9IGNvbnRhaW5lckJsb2NrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGNiLT5sb2dpY2FsV2lkdGgo
KSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRoKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gJmVuY2xvc2luZ0JveCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IGNvbnRhaW5lckJsb2NrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGN1cnJlbnRCbG9jay5sb2dp
Y2FsV2lkdGgoKSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdp
ZHRoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJmVuY2xvc2lu
Z0JveCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBlbmNs
b3NpbmdCb3gubG9naWNhbFdpZHRoKCkgLSBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChjdXJyID09IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gY29udGFpbmVyQmxvY2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgbG9naWNhbFJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CkBA
IC0zMzM4LDE0ICszMzM4LDE0IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1CiAgICAgLy8gQWRq
dXN0IGxvZ2ljYWxMZWZ0IGlmIHdlIG5lZWQgdG8gZm9yIHRoZSBmbGlwcGVkIHZlcnNpb24gb2Yg
b3VyIHdyaXRpbmcgbW9kZSBpbiByZWdpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb3RoZXIgdHlwZXMgb2Ygb2JqZWN0cyBhcyBjb250YWluZXJCbG9jaywgbm90IG9ubHkgUmVu
ZGVyQmxvY2suCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoZmxvd1RocmVhZCAmJiAhcmVnaW9uICYmIGlzV3Jp
dGluZ01vZGVSb290KCkgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluZXJC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250YWluZXJCbG9jay0+aXNSZW5k
ZXJCbG9jaygpKSB7CisgICAgaWYgKGZsb3dUaHJlYWQgJiYgIXJlZ2lvbiAmJiBpc1dyaXRpbmdN
b2RlUm9vdCgpICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxvY2st
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgaXM8UmVuZGVyQmxvY2s+KCpjb250YWluZXJC
bG9jaykpIHsKICAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrLT5jYW5IYXZlQm94SW5mb0lu
UmVnaW9uKCkpOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UG9zID0gY29tcHV0ZWRW
YWx1ZXMubV9wb3NpdGlvbjsKLSAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5k
ZXJCbG9jayhjb250YWluZXJCbG9jayk7Ci0gICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zmc2V0
ID0gY2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICAgICAgUmVuZGVy
UmVnaW9uKiBjYlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7
CisgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNl
dCA9IHJlbmRlckJsb2NrLm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAg
ICAgUmVuZGVyUmVnaW9uKiBjYlJlZ2lvbiA9IHJlbmRlckJsb2NrLnJlZ2lvbkF0QmxvY2tPZmZz
ZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7Ci0gICAgICAgICAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JS
ZWdpb24pOworICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRl
ckJsb2NrLnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJv
eEluZm8pIHsKICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSBib3hJbmZvLT5sb2dp
Y2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBs
b2dpY2FsTGVmdFBvczsKQEAgLTM2NTUsMTQgKzM2NTUsMTQgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXAKICAgICAvLyBBZGp1c3QgbG9naWNhbFRvcCBpZiB3ZSBuZWVkIHRvIGZvciBwZXJwZW5k
aWN1bGFyIHdyaXRpbmcgbW9kZXMgaW4gcmVnaW9ucy4KICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIG90aGVyIHR5cGVzIG9mIG9iamVjdHMgYXMgY29udGFpbmVyQmxvY2ssIG5vdCBvbmx5
IFJlbmRlckJsb2NrLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSAmJiBjb250YWluZXJCbG9jay0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgaWYgKGZsb3dUaHJl
YWQgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAmJiBpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5lckJsb2NrKSkg
ewogICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2stPmNhbkhhdmVCb3hJbmZvSW5SZWdpb24o
KSk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1f
cG9zaXRpb247Ci0gICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2so
Y29udGFpbmVyQmxvY2spOwotICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLT5v
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dpY2FsTGVmdCgpOwotICAgICAg
ICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdl
T2Zmc2V0KTsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlckJveCA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPigqY29udGFpbmVyQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGNiUGFn
ZU9mZnNldCA9IHJlbmRlckJveC5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBs
b2dpY2FsTGVmdCgpOworICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gcmVuZGVyQm94
LnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9u
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRl
ckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOworICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5m
byogYm94SW5mbyA9IHJlbmRlckJveC5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAg
ICAgICAgICAgIGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAgICAgbG9naWNhbFRvcFBvcyAr
PSBib3hJbmZvLT5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVz
Lm1fcG9zaXRpb24gPSBsb2dpY2FsVG9wUG9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYmFmZDg0YjI0ZjMxZjg5NDQwMWQ0
YmRiYzQ5MTM3MDNhNGMyYWI0OS4uNzNmM2VlNDVhZDRhMDI5OTBkNDgxMzNkZDkzY2U4MDhjZTM3
YmM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0aWMgTGF5b3V0U2l6ZSBhY2N1bXVs
YXRlSW5GbG93UG9zaXRpb25PZmZzZXRzKGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQpCiAgICAg
aWYgKCFjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpIHx8ICFjaGlsZC0+aXNJbkZsb3dQb3NpdGlv
bmVkKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXQ7Ci0gICAgUmVuZGVyRWxlbWVudCogcCA9IHRvUmVuZGVyQmxvY2soY2hpbGQpLT5pbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCk7Ci0gICAgd2hpbGUgKHAgJiYgcC0+aXNSZW5kZXJJbmxpbmUo
KSkgeworICAgIFJlbmRlckVsZW1lbnQqIHAgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNoaWxk
KS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgd2hpbGUgKGlzPFJlbmRlcklubGlu
ZT4ocCkpIHsKICAgICAgICAgaWYgKHAtPmlzSW5GbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHApOwotICAg
ICAgICAgICAgb2Zmc2V0ICs9IHJlbmRlcklubGluZS0+b2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24o
KTsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVu
ZGVySW5saW5lPigqcCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gcmVuZGVySW5saW5lLm9mZnNl
dEZvckluRmxvd1Bvc2l0aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgcCA9IHAtPnBhcmVudCgp
OwogICAgIH0KQEAgLTI2NzQsNyArMjY3NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
Om1vdmVDaGlsZFRvKFJlbmRlckJveE1vZGVsT2JqZWN0KiB0b0JveE1vZGVsT2JqZWN0LCBSCiB7
CiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgY2FsbGVycyBoYXZlIGNsZWFyZWQgdGhlaXIgcG9zaXRp
b25lZCBvYmplY3RzIGxpc3QgZm9yIGNoaWxkIG1vdmVzICghZnVsbFJlbW92ZUluc2VydCkgc28g
dGhlCiAgICAgLy8gcG9zaXRpb25lZCByZW5kZXJlciBtYXBzIGRvbid0IGJlY29tZSBzdGFsZS4g
SXQgd291bGQgYmUgdG9vIHNsb3cgdG8gZG8gdGhlIG1hcCBsb29rdXAgb24gZWFjaCBjYWxsLgot
ICAgIEFTU0VSVCghZnVsbFJlbW92ZUluc2VydCB8fCAhaXNSZW5kZXJCbG9jaygpIHx8ICF0b1Jl
bmRlckJsb2NrKHRoaXMpLT5oYXNQb3NpdGlvbmVkT2JqZWN0cygpKTsKKyAgICBBU1NFUlQoIWZ1
bGxSZW1vdmVJbnNlcnQgfHwgIWlzPFJlbmRlckJsb2NrPigqdGhpcykgfHwgIWRvd25jYXN0PFJl
bmRlckJsb2NrPigqdGhpcykuaGFzUG9zaXRpb25lZE9iamVjdHMoKSk7CiAKICAgICBBU1NFUlQo
dGhpcyA9PSBjaGlsZC0+cGFyZW50KCkpOwogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9C
b3hNb2RlbE9iamVjdCA9PSBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwpAQCAtMjY5NSwxMCArMjY5
NSwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRyZW5UbyhSZW5kZXJC
b3hNb2RlbE9iamVjdCogdG9Cb3hNb2RlbE9iamVjdAogICAgIC8vIFRoaXMgY29uZGl0aW9uIGlz
IHJhcmVseSBoaXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBvbgogICAg
IC8vIGFub255bW91cyBibG9ja3Mgd2hpY2ggY2FuIG5vIGxvbmdlciBjYXJyeSBwb3NpdGlvbmVk
IG9iamVjdHMgKHNlZSByMTIwNzYxKQogICAgIC8vIG9yIHdoZW4gZnVsbFJlbW92ZUluc2VydCBp
cyBmYWxzZS4KLSAgICBpZiAoZnVsbFJlbW92ZUluc2VydCAmJiBpc1JlbmRlckJsb2NrKCkpIHsK
LSAgICAgICAgdG9SZW5kZXJCbG9jayh0aGlzKS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7
Ci0gICAgICAgIGlmIChpc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJC
bG9ja0Zsb3codGhpcyktPnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOyAKKyAgICBpZiAoZnVsbFJl
bW92ZUluc2VydCAmJiBpczxSZW5kZXJCbG9jaz4oKnRoaXMpKSB7CisgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPigqdGhpcykucmVtb3ZlUG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKSkKKyAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlckJsb2NrRmxvdz4oKnRoaXMpLnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOwogICAg
IH0KIAogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgdG9Cb3hNb2RlbE9iamVjdCA9PSBiZWZv
cmVDaGlsZC0+cGFyZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCmluZGV4IDhmNGY0NWU5NTdkM2MxZTRiZDRmOTQ5MDQzNWQ3NjgxM2EzOWM2NWEuLjA4
MjdjYWE3MGU1NGQ3ZmRiOTU1MGQ3OThjMWI0ODQ0YTY4OGVjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIFJl
bmRlckVsZW1lbnQ6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3Bh
Z2F0aW9uVHlwZSBwcm9wYQogICAgICAgICBpZiAoIWVsZW1lbnRDaGlsZC5pc0Fub255bW91cygp
IHx8IGVsZW1lbnRDaGlsZC5zdHlsZSgpLnN0eWxlVHlwZSgpICE9IE5PUFNFVURPKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHByb3BhZ2F0aW9uVHlwZSA9PSBQcm9wYWdh
dGVUb0Jsb2NrQ2hpbGRyZW5Pbmx5ICYmICFlbGVtZW50Q2hpbGQuaXNSZW5kZXJCbG9jaygpKQor
ICAgICAgICBpZiAocHJvcGFnYXRpb25UeXBlID09IFByb3BhZ2F0ZVRvQmxvY2tDaGlsZHJlbk9u
bHkgJiYgIWlzPFJlbmRlckJsb2NrPihlbGVtZW50Q2hpbGQpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC03NzEsNyArNzcxLDcgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oU3R5bGVQ
cm9wYWdhdGlvblR5cGUgcHJvcGEKICNlbmRpZgogCiAgICAgICAgIC8vIFJlbmRlckZsb3dUaHJl
YWRzIGFyZSB1cGRhdGVkIHRocm91Z2ggdGhlIFJlbmRlclZpZXc6OnN0eWxlRGlkQ2hhbmdlIGZ1
bmN0aW9uLgotICAgICAgICBpZiAoZWxlbWVudENoaWxkLmlzUmVuZGVyRmxvd1RocmVhZCgpKQor
ICAgICAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oZWxlbWVudENoaWxkKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgZWxlbWVudENoaWxkLnN0eWxl
KCkuZGlzcGxheSgpKTsKQEAgLTc4NCw3ICs3ODQsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnBy
b3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihTdHlsZVByb3BhZ2F0aW9uVHlwZSBwcm9w
YQogCiAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBwb3NpdGlvbiBzdHlsZSBvZiBhbm9ueW1vdXMg
YmxvY2sgY29udGludWF0aW9ucyBhcyB0aGV5IGNhbiBoYXZlIHJlbGF0aXZlIG9yIHN0aWNreSBw
b3NpdGlvbiB3aGVuCiAgICAgICAgIC8vIHRoZXkgY29udGFpbiBibG9jayBkZXNjZW5kYW50cyBv
ZiByZWxhdGl2ZSBvciBzdGlja3kgcG9zaXRpb25lZCBpbmxpbmVzLgotICAgICAgICBpZiAoZWxl
bWVudENoaWxkLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIHRvUmVuZGVyQmxvY2soZWxlbWVudENo
aWxkKS5pc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIGlmIChlbGVtZW50
Q2hpbGQuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGVsZW1l
bnRDaGlsZCkuaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKQogICAgICAgICAgICAgbmV3
U3R5bGUuZ2V0KCkuc2V0UG9zaXRpb24oZWxlbWVudENoaWxkLnN0eWxlKCkucG9zaXRpb24oKSk7
CiAKICAgICAgICAgZWxlbWVudENoaWxkLnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGYx
ZjViMzJhNTNkNjY4YWI2MTllMzQ1ZTQ4ZTA5NmUxNzFkNGExNzcuLmE4NjAwOTY3NGI2Y2U4OGM3
Njc2ZjBlNmRkN2UwZDlkNjc3Mzc1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTQ3MywxNiArNDczLDE2IEBAIExheW91dFBvaW50IFJl
bmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNv
bnN0IFJlbmRlCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdldCB0aGUgbG9naWNhbCB0
b3AgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBvYmplY3QuCiAgICAgICAgICAgICBMYXlvdXRV
bml0IHRvcCA9IDA7Ci0gICAgICAgICAgICBpZiAoYm94TW9kZWxPYmplY3QuaXNSZW5kZXJCbG9j
aygpKQotICAgICAgICAgICAgICAgIHRvcCA9IHRvUmVuZGVyQmxvY2soYm94TW9kZWxPYmplY3Qp
Lm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKKyAgICAgICAgICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4oYm94TW9kZWxPYmplY3QpKQorICAgICAgICAgICAgICAgIHRvcCA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPihib3hNb2RlbE9iamVjdCkub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGJveE1v
ZGVsT2JqZWN0LmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgICAgICB0b3AgPSBi
b3hNb2RlbE9iamVjdC5jb250YWluaW5nQmxvY2soKS0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChib3hNb2Rl
bE9iamVjdC5pc0JveCgpKQotICAgICAgICAgICAgICAgICAgICB0b3AgKz0gdG9SZW5kZXJCb3go
Ym94TW9kZWxPYmplY3QpLnRvcExlZnRMb2NhdGlvbigpLnkoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChib3hNb2RlbE9iamVjdC5pc1JlbmRlcklubGluZSgpKQotICAgICAgICAgICAgICAg
ICAgICB0b3AgLT0gdG9SZW5kZXJJbmxpbmUoYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOwor
ICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGJveE1vZGVsT2JqZWN0KSkKKyAgICAg
ICAgICAgICAgICAgICAgdG9wICs9IGRvd25jYXN0PFJlbmRlckJveD4oYm94TW9kZWxPYmplY3Qp
LnRvcExlZnRMb2NhdGlvbigpLnkoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5k
ZXJJbmxpbmU+KGJveE1vZGVsT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgdG9wIC09IGRv
d25jYXN0PFJlbmRlcklubGluZT4oYm94TW9kZWxPYmplY3QpLmJvcmRlclRvcCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGxvZ2ljYWwgdG9w
IG9mIHRoZSByZWdpb24gdGhpcyBvYmplY3Qgc3RhcnRzIGluCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKaW5kZXggNjQ0MzNmYzVkMjYzNGU5MGQwMzc3
ZDYyMDE4ZjRkNzBlZmU0ZDU0NC4uNzQ1MTIyMWMyY2MxNTBiMGQ5MjI4M2IwZjYzOTk5YmUxOTcz
NjBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3Jl
ZW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNw
cApAQCAtMTQ5LDE0ICsxNDksMTQgQEAgdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjp1bndyYXBSZW5k
ZXJlcihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKQogICAgICAgICBpZiAoY2hpbGQg
IT0gbGFzdENoaWxkKCkpCiAgICAgICAgICAgICByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkID0g
dHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQgJiYgY2hpbGQtPmlzQW5vbnltb3VzQmxvY2so
KSkgewotICAgICAgICAgICAgYXV0byYgYW5vbnltb3VzQmxvY2sgPSB0b1JlbmRlckJsb2NrKCpj
aGlsZCk7CisgICAgICAgICAgICBhdXRvJiBhbm9ueW1vdXNCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY2hpbGQpOwogICAgICAgICAgICAgaWYgKGFub255bW91c0Jsb2NrLmZpcnN0Q2hp
bGQoKSAhPSBhbm9ueW1vdXNCbG9jay5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgICAgICByZXF1
aXJlc1JlbmRlclRyZWVSZWJ1aWxkID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIHdoaWxl
ICgoY2hpbGQgPSBmaXJzdENoaWxkKCkpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQW5v
bnltb3VzQmxvY2soKSAmJiAhcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZCkgewotICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBub25Bbm9ueW1vdXNDaGlsZCA9IHRvUmVuZGVyQmxvY2soKmNoaWxk
KS5maXJzdENoaWxkKCkpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG5vbkFub255bW91c0No
aWxkID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCkuZmlyc3RDaGlsZCgpKQogICAgICAg
ICAgICAgICAgICAgICBjaGlsZCA9IG5vbkFub255bW91c0NoaWxkOwogICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBmMzdmNTM3NDg4
MWE3MzNiZjM3MTMzMTE0NmIyYTc2YmJiN2RmNWVhLi4xZmQzNmFhYTk0YzUyYzc1NTc2OTAyNzdl
OWY3MWE2ZGM3YmJmYzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcApAQCAtMTIxLDEwICsxMjEsMTAgQEAgUmVuZGVySW5saW5lKiBSZW5kZXJJbmxpbmU6Omlu
bGluZUVsZW1lbnRDb250aW51YXRpb24oKSBjb25zdAogICAgIGlmICghY29udGludWF0aW9uKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChjb250aW51YXRpb24tPmlzUmVuZGVy
SW5saW5lKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlcklubGluZShjb250aW51YXRpb24pOwor
ICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjb250aW51YXRpb24pKQorICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVySW5saW5lPihjb250aW51YXRpb24pOwogCi0gICAgcmV0dXJuIGNvbnRp
bnVhdGlvbi0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjb250aW51YXRpb24pLT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgOiBudWxscHRyOworICAgIHJldHVybiBpczxSZW5k
ZXJCbG9jaz4oKmNvbnRpbnVhdGlvbikgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRpbnVh
dGlvbikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUZyb21TdHlsZSgpCkBAIC0xNTIsMjEgKzE1MiwyMSBAQCBzdGF0
aWMgdm9pZCB1cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxvY2tDb250aW51YXRpb25zKFJlbmRlckJv
eCogYm94LCBjb25zdCBSZW5kZQogICAgICAgICBpZiAoYm94LT5zdHlsZSgpLnBvc2l0aW9uKCkg
PT0gbmV3U3R5bGUtPnBvc2l0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Ci0gICAgICAgIGlmICghYm94LT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgIGlmICghaXM8UmVu
ZGVyQmxvY2s+KCpib3gpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUmVuZGVy
QmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhib3gpOwotICAgICAgICBpZiAoIWJsb2NrLT5p
c0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCisgICAgICAgIFJlbmRlckJsb2NrJiBibG9j
ayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqYm94KTsKKyAgICAgICAgaWYgKCFibG9jay5pc0Fu
b255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgCiAgICAgICAgIC8vIElmIHdlIGFyZSBubyBsb25nZXIgaW4tZmxvdyBwb3NpdGlvbmVkIGJ1
dCBvdXIgZGVzY2VuZGFudCBibG9jayhzKSBzdGlsbCBoYXZlIGFuIGluLWZsb3cgcG9zaXRpb25l
ZCBhbmNlc3RvciB0aGVuCiAgICAgICAgIC8vIHRoZWlyIGNvbnRhaW5pbmcgYW5vbnltb3VzIGJs
b2NrIHNob3VsZCBrZWVwIGl0cyBpbi1mbG93IHBvc2l0aW9uaW5nLiAKLSAgICAgICAgUmVuZGVy
SW5saW5lKiBjb250ID0gYmxvY2stPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKLSAgICAg
ICAgaWYgKG9sZFN0eWxlLT5oYXNJbkZsb3dQb3NpdGlvbigpICYmIGluRmxvd1Bvc2l0aW9uZWRJ
bmxpbmVBbmNlc3Rvcihjb250KSkKKyAgICAgICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24g
PSBibG9jay5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgICAgIGlmIChvbGRTdHls
ZS0+aGFzSW5GbG93UG9zaXRpb24oKSAmJiBpbkZsb3dQb3NpdGlvbmVkSW5saW5lQW5jZXN0b3Io
Y29udGludWF0aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIGJsb2Nr
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmYmxv
Y2stPnN0eWxlKCksIEJMT0NLKTsKKyAgICAgICAgYXV0byBibG9ja1N0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJmJsb2NrLnN0eWxlKCksIEJMT0NL
KTsKICAgICAgICAgYmxvY2tTdHlsZS5nZXQoKS5zZXRQb3NpdGlvbihuZXdTdHlsZS0+cG9zaXRp
b24oKSk7Ci0gICAgICAgIGJsb2NrLT5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOwor
ICAgICAgICBibG9jay5zZXRTdHlsZShXVEY6Om1vdmUoYmxvY2tTdHlsZSkpOwogICAgIH0KIH0K
IApAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAgICAgICAgIC8v
IElmIGFueSBkZXNjZW5kYW50IGJsb2NrcyBleGlzdCB0aGVuIHRoZXkgd2lsbCBiZSBpbiB0aGUg
bmV4dCBhbm9ueW1vdXMgYmxvY2sgYW5kIGl0cyBzaWJsaW5ncy4KICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpLT5uZXh0U2libGluZygpOwogICAgICAgICBB
U1NFUlQoYmxvY2sgJiYgYmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSk7Ci0gICAgICAgIHVwZGF0
ZVN0eWxlT2ZBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbnModG9SZW5kZXJCbG9jayhibG9jayks
ICZuZXdTdHlsZSwgb2xkU3R5bGUpOworICAgICAgICB1cGRhdGVTdHlsZU9mQW5vbnltb3VzQmxv
Y2tDb250aW51YXRpb25zKGRvd25jYXN0PFJlbmRlckJsb2NrPihibG9jayksICZuZXdTdHlsZSwg
b2xkU3R5bGUpOwogICAgIH0KIAogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpIHsK
QEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIAogc3RhdGljIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7Ci0gICAgaWYgKHJlbmRlcmVyLT5pc0lubGluZSgpICYmICFyZW5kZXJlci0+aXNSZXBsYWNl
ZCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51YXRp
b24oKTsKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmlubGluZUVsZW1lbnRD
b250aW51YXRpb24oKTsKKyAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqcmVuZGVyZXIpICYmICFy
ZW5kZXJlci0+aXNSZXBsYWNlZCgpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5s
aW5lPigqcmVuZGVyZXIpLmNvbnRpbnVhdGlvbigpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKnJlbmRlcmVyKS5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiB9CiAKIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbkJlZm9yZShSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRv
QmxvY2ssCiB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENv
bnQpCiB7Ci0gICAgUmVuZGVyQmxvY2sqIHByZSA9IDA7CisgICAgUmVuZGVyQmxvY2sqIHByZSA9
IG51bGxwdHI7CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgCiAgICAgLy8gRGVsZXRlIG91ciBsaW5lIGJveGVzIGJlZm9yZSB3ZSBkbyB0aGUgaW5saW5l
IHNwbGl0IGludG8gY29udGludWF0aW9ucy4KQEAgLTQ1MywxMiArNDUzLDEyIEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxv
Y2sqIG5ld0Jsb2NrQm94CiAgICAgaWYgKGJsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgKCFi
bG9jay0+cGFyZW50KCkgfHwgIWJsb2NrLT5wYXJlbnQoKS0+Y3JlYXRlc0Fub255bW91c1dyYXBw
ZXIoKSkpIHsKICAgICAgICAgLy8gV2UgY2FuIHJldXNlIHRoaXMgYmxvY2sgYW5kIG1ha2UgaXQg
dGhlIHByZUJsb2NrIG9mIHRoZSBuZXh0IGNvbnRpbnVhdGlvbi4KICAgICAgICAgcHJlID0gYmxv
Y2s7Ci0gICAgICAgIHByZS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7CisgICAgICAgIHBy
ZS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMobnVsbHB0cik7CiAgICAgICAgIC8vIEZJWE1FLUJM
T0NLRkxPVzogVGhlIGVuY2xvc2luZyBtZXRob2Qgc2hvdWxkIGxpa2VseSBiZSBzd2l0Y2hlZCBv
dmVyCiAgICAgICAgIC8vIHRvIG9ubHkgd29yayBvbiBSZW5kZXJCbG9ja0Zsb3csIGluIHdoaWNo
IGNhc2UgdGhpcyBjb252ZXJzaW9uIGNhbiBiZQogICAgICAgICAvLyByZW1vdmVkLgotICAgICAg
ICBpZiAocHJlLT5pc1JlbmRlckJsb2NrRmxvdygpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9j
a0Zsb3cocHJlKS0+cmVtb3ZlRmxvYXRpbmdPYmplY3RzKCk7CisgICAgICAgIGlmIChpczxSZW5k
ZXJCbG9ja0Zsb3c+KCpwcmUpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93
PigqcHJlKS5yZW1vdmVGbG9hdGluZ09iamVjdHMoKTsKICAgICAgICAgYmxvY2sgPSBibG9jay0+
Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm8gYW5vbnltb3Vz
IGJsb2NrIGF2YWlsYWJsZSBmb3IgdXNlLiAgTWFrZSBvbmUuCkBAIC00NjYsMTMgKzQ2NiwxMyBA
QCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQs
IFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveAogICAgICAgICBtYWRlTmV3QmVmb3JlQmxvY2sgPSB0
cnVlOwogICAgIH0KIAotICAgIFJlbmRlckJsb2NrKiBwb3N0ID0gdG9SZW5kZXJCbG9jayhwcmUt
PmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGJsb2NrKSk7CisgICAgUmVuZGVyQmxv
Y2smIHBvc3QgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnByZS0+Y3JlYXRlQW5vbnltb3VzQm94
V2l0aFNhbWVUeXBlQXMoYmxvY2spKTsKIAogICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3QgPSBt
YWRlTmV3QmVmb3JlQmxvY2sgPyBibG9jay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2libGlu
ZygpOwogICAgIGlmIChtYWRlTmV3QmVmb3JlQmxvY2spCiAgICAgICAgIGJsb2NrLT5pbnNlcnRD
aGlsZEludGVybmFsKHByZSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKICAgICBibG9jay0+
aW5zZXJ0Q2hpbGRJbnRlcm5hbChuZXdCbG9ja0JveCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVu
KTsKLSAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwb3N0LCBib3hGaXJzdCwgTm90aWZ5
Q2hpbGRyZW4pOworICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKCZwb3N0LCBib3hGaXJz
dCwgTm90aWZ5Q2hpbGRyZW4pOwogICAgIGJsb2NrLT5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7
CiAgICAgCiAgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykgewpAQCAtNDg2LDcgKzQ4Niw3IEBA
IHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwg
UmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzcGxpdElu
bGluZXMocHJlLCBwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOworICAg
IHNwbGl0SW5saW5lcyhwcmUsICZwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENv
bnQpOwogCiAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdCbG9ja0JveCBpc24ndCBnb2lu
ZyB0byBjb250YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0aW5nCiAgICAgLy8gdGltZSBp
biBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5nIHRoaXMgZXhwbGljaXRseSB1
cCBmcm9udC4KQEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93
KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveAogICAg
IC8vIG1ha2UgbmV3IGxpbmUgYm94ZXMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgbGluZSBi
b3hlcyBhcm91bmQuCiAgICAgcHJlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKICAgICBibG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAg
cG9zdC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcG9zdC5zZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6
OmFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKQEAgLTg1MywyMSArODUzLDIxIEBAIGJvb2wgUmVuZGVySW5saW5l
OjpoaXRUZXN0Q3VsbGVkSW5saW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAg
ICAgLy8gRklYTUU6IERvZXMgbm90IGRlYWwgd2l0aCByZWxhdGl2ZSBvciBzdGlja3kgcG9zaXRp
b25lZCBpbmxpbmVzIChzaG91bGQgaXQ/KQotICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5p
bmdCbG9jaygpOworICAgIFJlbmRlckJsb2NrJiBjb250YWluaW5nQmxvY2sgPSAqdGhpcy0+Y29u
dGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZpcnN0TGluZUJveCgpKSB7CiAgICAgICAgIC8vIFRo
aXMgaW5saW5lIGFjdHVhbGx5IGhhcyBhIGxpbmUgYm94LiAgV2UgbXVzdCBoYXZlIGNsaWNrZWQg
aW4gdGhlIGJvcmRlci9wYWRkaW5nIG9mIG9uZSBvZiB0aGVzZSBib3hlcy4gIFdlCiAgICAgICAg
IC8vIHNob3VsZCB0cnkgdG8gZmluZCBhIHJlc3VsdCBieSBhc2tpbmcgb3VyIGNvbnRhaW5pbmcg
YmxvY2suCi0gICAgICAgIHJldHVybiBjYi0+cG9zaXRpb25Gb3JQb2ludChwb2ludCwgcmVnaW9u
KTsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay5wb3NpdGlvbkZvclBvaW50KHBvaW50
LCByZWdpb24pOwogICAgIH0KIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29vcmRzIGZyb20gdGhl
IHByZS1hbm9ueW1vdXMgYmxvY2sgdG8gdGhlIHBvc3QtYW5vbnltb3VzIGJsb2NrLgotICAgIExh
eW91dFBvaW50IHBhcmVudEJsb2NrUG9pbnQgPSBjYi0+bG9jYXRpb24oKSArIHBvaW50OyAgCi0g
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGMgPSBjb250aW51YXRpb24oKTsKLSAgICB3aGlsZSAo
YykgewotICAgICAgICBSZW5kZXJCb3gqIGNvbnRCbG9jayA9IGMtPmlzSW5saW5lKCkgPyBjLT5j
b250YWluaW5nQmxvY2soKSA6IHRvUmVuZGVyQmxvY2soYyk7Ci0gICAgICAgIGlmIChjLT5pc0lu
bGluZSgpIHx8IGMtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiBjLT5wb3NpdGlv
bkZvclBvaW50KHBhcmVudEJsb2NrUG9pbnQgLSBjb250QmxvY2stPmxvY2F0aW9uT2Zmc2V0KCks
IHJlZ2lvbik7Ci0gICAgICAgIGMgPSB0b1JlbmRlckJsb2NrKGMpLT5pbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgcGFyZW50QmxvY2tQb2ludCA9IGNvbnRhaW5p
bmdCbG9jay5sb2NhdGlvbigpICsgcG9pbnQ7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNv
bnRpbnVhdGlvbiA9IHRoaXMtPmNvbnRpbnVhdGlvbigpOworICAgIHdoaWxlIChjb250aW51YXRp
b24pIHsKKyAgICAgICAgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbi0+
aXNJbmxpbmUoKSA/IGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCkgOiBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbi0+aXNJ
bmxpbmUoKSB8fCBjb250aW51YXRpb24tPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVy
biBjb250aW51YXRpb24tPnBvc2l0aW9uRm9yUG9pbnQocGFyZW50QmxvY2tQb2ludCAtIGN1cnJl
bnRCbG9jay0+bG9jYXRpb25PZmZzZXQoKSwgcmVnaW9uKTsKKyAgICAgICAgY29udGludWF0aW9u
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250aW51YXRpb24pLmlubGluZUVsZW1lbnRDb250
aW51YXRpb24oKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpwb3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggNDlhZmYxYzQ2NTU1ODIwY2EwZDBkZWZkNDIyYTE5ZTE2
MmFlYmUwMi4uNzE4OWJmYjNmMGMzNjZhNTI0ZmU1MjE0MzkyYTZiNzliNGQ0ZmMxNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjk4LDggKzMyOTgsOCBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQogICAgICAg
ICAgICAgICAgIC8vIE91ciBwcm9wcmlldGFyeSBvdmVyZmxvdzogb3ZlcmxheSB2YWx1ZSBkb2Vz
bid0IHRyaWdnZXIgYSBsYXlvdXQuCiAgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlv
dXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFy
a09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlckJsb2Nr
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gdG9SZW5kZXJC
bG9jayhyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJl
bmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRv
d25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICAgICAgYmxv
Y2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRv
VmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKICAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5
b3V0QmxvY2sodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC01NDE3LDcgKzU0MTcs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250
ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmVCeShMYXlvdXRQb2ludChm
bG93VGhyZWFkLT53aWR0aCgpLCAwKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBS
ZW5kZXJCbG9jayogcmVuZGVyZXJDb250YWluaW5nQmxvY2sgPSBib3hNb2RlbE9iamVjdC5lbmNs
b3NpbmdCb3goKS5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKCZib3hNb2RlbE9iamVj
dC5lbmNsb3NpbmdCb3goKSkgOiAwOworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIHJlbmRlcmVy
Q29udGFpbmluZ0Jsb2NrID0gaXM8UmVuZGVyQmxvY2s+KGJveE1vZGVsT2JqZWN0LmVuY2xvc2lu
Z0JveCgpKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9jaz4oYm94TW9kZWxPYmplY3QuZW5jbG9zaW5n
Qm94KCkpIDogbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChyZW5kZXJlckNvbnRhaW5pbmdCbG9j
aykKICAgICAgICAgICAgICAgICByZW5kZXJlckNvbnRhaW5pbmdCbG9jay0+ZmxpcEZvcldyaXRp
bmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggZWE3ZjIxODg1MTgx
ZTRiMWNiY2QwNGRlM2YyY2E1MDI5ODQ5MjAzMS4uNjJmNzQ1ZjUyOWFlMjQ5OTNjZThjYWQzZTNl
OTNmZTMzMzA2ZTk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uY3BwCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3gu
aCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIyNywyNSArMjI5
LDI0IEBAIHN0YXRpYyBSZW5kZXJCbG9jayogZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goUmVuZGVy
QmxvY2sqIGN1cnIsIFJlbmRlck9iamVjdCogbWFyCiAgICAgICAgIGlmIChjdXJyQ2hpbGQgPT0g
bWFya2VyKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGN1cnJDaGlsZC0+
aXNJbmxpbmUoKSAmJiAoIWN1cnJDaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSB8fCBjdXJyLT5nZW5l
cmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGlsZChjdXJyQ2hpbGQpKSkKKyAgICAgICAgaWYgKGN1
cnJDaGlsZC0+aXNJbmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGluZT4oKmN1cnJDaGlsZCkgfHwg
Y3Vyci0+Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoY3VyckNoaWxkKSkpCiAgICAg
ICAgICAgICByZXR1cm4gY3VycjsKIAogICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0Zsb2F0aW5n
KCkgfHwgY3VyckNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzVGFibGUoKSB8fCAhY3VyckNoaWxk
LT5pc1JlbmRlckJsb2NrKCkgfHwgKGN1cnJDaGlsZC0+aXNCb3goKSAmJiB0b1JlbmRlckJveChj
dXJyQ2hpbGQpLT5pc1dyaXRpbmdNb2RlUm9vdCgpKSkKKyAgICAgICAgaWYgKGN1cnJDaGlsZC0+
aXNUYWJsZSgpIHx8ICFpczxSZW5kZXJCbG9jaz4oKmN1cnJDaGlsZCkgfHwgKGlzPFJlbmRlckJv
eD4oKmN1cnJDaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqY3VyckNoaWxkKS5pc1dyaXRp
bmdNb2RlUm9vdCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChjdXJyLT5p
c0xpc3RJdGVtKCkgJiYgaW5RdWlya3NNb2RlICYmIGN1cnJDaGlsZC0+bm9kZSgpICYmCi0gICAg
ICAgICAgICAoY3VyckNoaWxkLT5ub2RlKCktPmhhc1RhZ05hbWUodWxUYWcpfHwgY3VyckNoaWxk
LT5ub2RlKCktPmhhc1RhZ05hbWUob2xUYWcpKSkKKyAgICAgICAgICAgIChpczxIVE1MVUxpc3RF
bGVtZW50PigqY3VyckNoaWxkLT5ub2RlKCkpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCpjdXJy
Q2hpbGQtPm5vZGUoKSkpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgUmVuZGVyQmxv
Y2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0b1JlbmRlckJsb2NrKGN1cnJD
aGlsZCksIG1hcmtlcik7Ci0gICAgICAgIGlmIChsaW5lQm94KQorICAgICAgICBpZiAoUmVuZGVy
QmxvY2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChkb3duY2FzdDxSZW5kZXJC
bG9jaz4oY3VyckNoaWxkKSwgbWFya2VyKSkKICAgICAgICAgICAgIHJldHVybiBsaW5lQm94Owog
ICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIFJl
bmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCkBAIC0yOTQsNyArMjk1LDcgQEAgdm9pZCBSZW5k
ZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2VyUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAg
IG5ld1BhcmVudC0+YWRkQ2hpbGQobV9tYXJrZXIuZ2V0KCksIGZpcnN0Tm9uTWFya2VyQ2hpbGQo
bmV3UGFyZW50KSk7CiAgICAgICAgIG1fbWFya2VyLT51cGRhdGVNYXJnaW5zQW5kQ29udGVudCgp
OwogICAgICAgICAvLyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhh
dCBoYXMgbG9zdCBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0LgotICAgICAgICBpZiAoY3Vy
cmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWN1cnJl
bnRQYXJlbnQtPmZpcnN0Q2hpbGQoKSAmJiAhdG9SZW5kZXJCbG9jayhjdXJyZW50UGFyZW50KS0+
Y29udGludWF0aW9uKCkpCisgICAgICAgIGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJl
bnQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhY3VycmVudFBhcmVudC0+Zmlyc3RDaGlsZCgpICYm
ICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRQYXJlbnQpLmNvbnRpbnVhdGlvbigpKQog
ICAgICAgICAgICAgY3VycmVudFBhcmVudC0+ZGVzdHJveSgpOwogICAgIH0KIApAQCAtNDA2LDEx
ICs0MDcsMTEgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKCkKICAg
ICAgICAgICAgICAgICBvID0gby0+cGFyZW50Qm94KCk7CiAgICAgICAgICAgICAgICAgaWYgKG8t
Pmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVWaXN1YWxP
dmVyZmxvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpvKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0b1JlbmRlckJsb2NrKG8pLT5hZGRWaXN1YWxPdmVyZmxvdyhtYXJrZXJSZWN0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqbykuYWRkVmlz
dWFsT3ZlcmZsb3cobWFya2VyUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wYWdh
dGVMYXlvdXRPdmVyZmxvdykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2so
byktPmFkZExheW91dE92ZXJmbG93KG1hcmtlclJlY3QpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpvKS5hZGRMYXlvdXRPdmVyZmxvdyhtYXJrZXJSZWN0
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93
Q2xpcCgpKQogICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVMYXlvdXRPdmVyZmxvdyA9IGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudC5jcHAKaW5kZXggNjEzNjJlZTcxY2E0MWJkZDdmN2NiZmEzMDk3OGYxYTJhNWRhMDY2
MC4uMTY2NGQ0N2IwYTI1NTU3Y2E1N2NlYWZhODAxNWUzOWFmMDVjOGNkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCkBA
IC0xODQsNyArMTg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bWF4
UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgIEFTU0VSVChwYXJlbnQoKSk7CiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHBhcmVudCgpLT5zdHlsZSgpOwotICAgIHJl
dHVybiBzdHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gUmVuZGVy
Rmxvd1RocmVhZDo6bWF4TG9naWNhbEhlaWdodCgpIDogdG9SZW5kZXJCbG9jayhwYXJlbnQoKSkt
PmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZVRvVXNlLmxvZ2ljYWxNYXhI
ZWlnaHQoKSk7CisgICAgcmV0dXJuIHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpLmlzVW5k
ZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0KCkgOiBkb3duY2Fz
dDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5jb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNp
bmcoc3R5bGVUb1VzZS5sb2dpY2FsTWF4SGVpZ2h0KCkpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OjpmbG93VGhyZWFkUG9ydGlvblJlY3RGb3JDbGlwcGluZyhib29s
IGlzRmlyc3RSZWdpb25JblJhbmdlLCBib29sIGlzTGFzdFJlZ2lvbkluUmFuZ2UpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGNjNjQyNWZiNmM1
ZWMzMTIzYmY5ODI5ZTc2Y2IyZTQxNTkzZDg5M2EuLmQ5NTNjZTUyMTI5YTAwNjY3NmUxMDU0N2U2
MjA3YWVkOTE3YjQyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC0zOTksMTUgKzM5OSwxNSBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6dHJh
dmVyc2VOZXh0KGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbiwgVHJhdmVycwogICAgIHJl
dHVybiAwOwogfQogCi1zdGF0aWMgUmVuZGVyT2JqZWN0OjpCbG9ja0NvbnRlbnRIZWlnaHRUeXBl
IGluY2x1ZGVOb25GaXhlZEhlaWdodChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcikKK3N0YXRp
YyBSZW5kZXJPYmplY3Q6OkJsb2NrQ29udGVudEhlaWdodFR5cGUgaW5jbHVkZU5vbkZpeGVkSGVp
Z2h0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlID0gcmVuZGVyLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIGlmIChzdHlsZS5oZWlnaHQoKS50eXBlKCkgPT0g
Rml4ZWQpIHsKLSAgICAgICAgaWYgKHJlbmRlci0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcik7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSkgewogICAgICAgICAgICAgLy8g
Rm9yIGZpeGVkIGhlaWdodCBzdHlsZXMsIGlmIHRoZSBvdmVyZmxvdyBzaXplIG9mIHRoZSBlbGVt
ZW50IHNwaWxscyBvdXQgb2YgdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgLy8gaGVpZ2h0LCBh
c3N1bWUgd2UgY2FuIGFwcGx5IHRleHQgYXV0by1zaXppbmcuCi0gICAgICAgICAgICBpZiAoc3R5
bGUub3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUuaGVpZ2h0KCkudmFsdWUoKSA8IGJs
b2NrLT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhZKCkpCisgICAgICAgICAgICBpZiAoc3R5bGUu
b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUKKyAgICAgICAgICAgICAgICAmJiBzdHlsZS5oZWlnaHQo
KS52YWx1ZSgpIDwgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5sYXlvdXRPdmVyZmxv
d1JlY3QoKS5tYXhZKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6T3Zl
cmZsb3dIZWlnaHQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Rml4
ZWRIZWlnaHQ7CkBAIC02NzIsOCArNjcyLDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNoZWNrQmxv
Y2tQb3NpdGlvbmVkT2JqZWN0c05lZWRMYXlvdXQoKQogewogICAgIEFTU0VSVCghbmVlZHNMYXlv
dXQoKSk7CiAKLSAgICBpZiAoaXNSZW5kZXJCbG9jaygpKQotICAgICAgICB0b1JlbmRlckJsb2Nr
KHRoaXMpLT5jaGVja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91dCgpOworICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnRoaXMp
LmNoZWNrUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiB9CiAjZW5kaWYKIApAQCAtNzIw
LDIyICs3MjAsMjIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldExheWVyTmVlZHNGdWxsUmVwYWlu
dEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpCiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmpl
Y3Q6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0byBvID0gcGFyZW50KCk7Ci0g
ICAgaWYgKCFvICYmIGlzUmVuZGVyU2Nyb2xsYmFyUGFydCgpKQotICAgICAgICBvID0gdG9SZW5k
ZXJTY3JvbGxiYXJQYXJ0KHRoaXMpLT5yZW5kZXJlck93bmluZ1Njcm9sbGJhcigpOworICAgIGF1
dG8gcGFyZW50ID0gdGhpcy0+cGFyZW50KCk7CisgICAgaWYgKCFwYXJlbnQgJiYgaXM8UmVuZGVy
U2Nyb2xsYmFyUGFydD4oKnRoaXMpKQorICAgICAgICBwYXJlbnQgPSBkb3duY2FzdDxSZW5kZXJT
Y3JvbGxiYXJQYXJ0PigqdGhpcykucmVuZGVyZXJPd25pbmdTY3JvbGxiYXIoKTsKIAogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0gICAgaWYgKCFpc1RleHQo
KSAmJiBzdHlsZS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIG8gPSBjb250
YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKG8pOwotICAgIGVsc2UgaWYgKCFpc1RleHQoKSAm
JiBzdHlsZS5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24pCi0gICAgICAgIG8gPSBjb250
YWluaW5nQmxvY2tGb3JBYnNvbHV0ZVBvc2l0aW9uKG8pOworICAgIGlmICghaXM8UmVuZGVyVGV4
dD4oKnRoaXMpICYmIHN0eWxlLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAg
cGFyZW50ID0gY29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbihwYXJlbnQpOworICAgIGVs
c2UgaWYgKCFpczxSZW5kZXJUZXh0PigqdGhpcykgJiYgc3R5bGUucG9zaXRpb24oKSA9PSBBYnNv
bHV0ZVBvc2l0aW9uKQorICAgICAgICBwYXJlbnQgPSBjb250YWluaW5nQmxvY2tGb3JBYnNvbHV0
ZVBvc2l0aW9uKHBhcmVudCk7CiAgICAgZWxzZQotICAgICAgICBvID0gY29udGFpbmluZ0Jsb2Nr
Rm9yT2JqZWN0SW5GbG93KG8pOworICAgICAgICBwYXJlbnQgPSBjb250YWluaW5nQmxvY2tGb3JP
YmplY3RJbkZsb3cocGFyZW50KTsKIAotICAgIGlmICghbyB8fCAhby0+aXNSZW5kZXJCbG9jaygp
KQotICAgICAgICByZXR1cm4gMDsgLy8gVGhpcyBjYW4gc3RpbGwgaGFwcGVuIGluIGNhc2Ugb2Yg
YW4gb3JwaGFuZWQgdHJlZQorICAgIGlmICghaXM8UmVuZGVyQmxvY2s+KHBhcmVudCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOyAvLyBUaGlzIGNhbiBzdGlsbCBoYXBwZW4gaW4gY2FzZSBvZiBh
biBvcnBoYW5lZCB0cmVlCiAKLSAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhvKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHBhcmVudCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0
OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGZs
b2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLApAQCAtMTY3OSwxMCArMTY3OSwx
MCBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2Uo
KQogICAgIHNldElubGluZShzdHlsZSgpLmlzRGlzcGxheUlubGluZVR5cGUoKSk7CiAgICAgaWYg
KGlzSW5saW5lKCkgIT0gcGFyZW50KCktPmNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgaWYg
KCFpc0lubGluZSgpKQotICAgICAgICAgICAgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChwYXJlbnQo
KSktPmNoaWxkQmVjYW1lTm9uSW5saW5lKHRoaXMpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQm94TW9kZWxPYmplY3Q+KCpwYXJlbnQoKSkuY2hpbGRCZWNhbWVOb25JbmxpbmUodGhpcyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2NrIG11c3Qg
YmUgbWFkZSB0byB3cmFwIHRoaXMgaW5saW5lLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJs
b2NrID0gdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Cisg
ICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBh
cmVudCgpKS5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwogICAgICAgICAgICAgcGFyZW50KCktPmlu
c2VydENoaWxkSW50ZXJuYWwoYmxvY2ssIHRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxk
cmVuKTsKICAgICAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZEludGVybmFsKCp0aGlzLCBS
ZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBibG9jay0+aW5zZXJ0
Q2hpbGRJbnRlcm5hbCh0aGlzLCBudWxscHRyLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJl
bik7CkBAIC0xNjkyLDggKzE2OTIsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1p
Y0Zsb2F0UG9zaXRpb25DaGFuZ2UoKQogCiB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlQW5vbnlt
b3VzV3JhcHBlcnNGb3JJbmxpbmVzSWZOZWNlc3NhcnkoKQogewotICAgIFJlbmRlckJsb2NrKiBw
YXJlbnRCbG9jayA9IHRvUmVuZGVyQmxvY2socGFyZW50KCkpOwotICAgIGlmICghcGFyZW50Qmxv
Y2stPmNhbkNvbGxhcHNlQW5vbnltb3VzQmxvY2tDaGlsZCgpKQorICAgIFJlbmRlckJsb2NrJiBw
YXJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpOworICAgIGlmICgh
cGFyZW50QmxvY2suY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFdlIGhhdmUgY2hhbmdlZCB0byBmbG9hdGVkIG9yIG91dC1vZi1mbG93
IHBvc2l0aW9uaW5nIHNvIG1heWJlIGFsbCBvdXIgcGFyZW50J3MKQEAgLTE3MDEsMTkgKzE3MDEs
MTggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUFub255bW91c1dyYXBwZXJzRm9ySW5saW5l
c0lmTmVjZXNzYXJ5KCkKICAgICAvLyBvdGhlcndpc2Ugd2UgY2FuIHByb2NlZWQgdG8gc3RyaXBw
aW5nIHNvbGl0YXJ5IGFub255bW91cyB3cmFwcGVycyBmcm9tIHRoZSBpbmxpbmVzLgogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgc3BsaXQgaW5saW5lcyBoZXJlIC0gd2UgZXhj
bHVkZSB0aGVtIGF0IHRoZSBtb21lbnQgYnkgcmV0dXJuaW5nCiAgICAgLy8gaWYgd2UgZmluZCBh
IGNvbnRpbnVhdGlvbi4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKS0+Zmlyc3RD
aGlsZCgpOwotICAgIHdoaWxlIChjdXJyICYmICgoY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpICYm
ICF0b1JlbmRlckJsb2NrKGN1cnIpLT5pc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpIHx8
IGN1cnItPnN0eWxlKCkuaXNGbG9hdGluZygpIHx8IGN1cnItPnN0eWxlKCkuaGFzT3V0T2ZGbG93
UG9zaXRpb24oKSkpCi0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOworICAgIFJl
bmRlck9iamVjdCogY3VycmVudCA9IHBhcmVudCgpLT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUg
KGN1cnJlbnQgJiYgKChjdXJyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWRvd25jYXN0PFJl
bmRlckJsb2NrPigqY3VycmVudCkuaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKSB8fCBj
dXJyZW50LT5zdHlsZSgpLmlzRmxvYXRpbmcoKSB8fCBjdXJyZW50LT5zdHlsZSgpLmhhc091dE9m
Rmxvd1Bvc2l0aW9uKCkpKQorICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmco
KTsKIAotICAgIGlmIChjdXJyKQorICAgIGlmIChjdXJyZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBjdXJyID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY3Vycikgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAg
ICBpZiAoY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICAgICAgcGFyZW50QmxvY2st
PmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQocGFyZW50QmxvY2ssIHRvUmVuZGVyQmxvY2soY3Vy
cikpOwotICAgICAgICBjdXJyID0gbmV4dDsKKyAgICBSZW5kZXJPYmplY3QqIG5leHQ7CisgICAg
Zm9yIChjdXJyZW50ID0gcGFyZW50KCktPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9
IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgICAg
IGlmIChjdXJyZW50LT5pc0Fub255bW91c0Jsb2NrKCkpCisgICAgICAgICAgICBwYXJlbnRCbG9j
ay5jb2xsYXBzZUFub255bW91c0JveENoaWxkKHBhcmVudEJsb2NrLCBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oY3VycmVudCkpOwogICAgIH0KIH0KIApAQCAtMjI3MCwxMiArMjI2OSwxMiBAQCBzdGF0
aWMgQ29sb3IgZGVjb3JhdGlvbkNvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSkKIHZvaWQgUmVuZGVy
T2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9yJiB1
bmRlcmxpbmUsIENvbG9yJiBvdmVybGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2xvciYgbGluZXRocm91Z2gsIGJvb2wgcXVpcmtzTW9kZSwgYm9vbCBm
aXJzdGxpbmVTdHlsZSkKIHsKLSAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSB0aGlzOwotICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gMDsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSB0
aGlzOworICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVj
b3JhdGlvbiBjdXJyRGVjcyA9IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRD
b2xvcjsKICAgICBkbyB7Ci0gICAgICAgIHN0eWxlVG9Vc2UgPSBmaXJzdGxpbmVTdHlsZSA/ICZj
dXJyLT5maXJzdExpbmVTdHlsZSgpIDogJmN1cnItPnN0eWxlKCk7CisgICAgICAgIHN0eWxlVG9V
c2UgPSBmaXJzdGxpbmVTdHlsZSA/ICZjdXJyZW50LT5maXJzdExpbmVTdHlsZSgpIDogJmN1cnJl
bnQtPnN0eWxlKCk7CiAgICAgICAgIGN1cnJEZWNzID0gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRp
b24oKTsKICAgICAgICAgcmVzdWx0Q29sb3IgPSBkZWNvcmF0aW9uQ29sb3Ioc3R5bGVUb1VzZSk7
CiAgICAgICAgIC8vIFBhcmFtZXRlciAnZGVjb3JhdGlvbnMnIGlzIGNhc3QgYXMgYW4gaW50IHRv
IGVuYWJsZSB0aGUgYml0d2lzZSBvcGVyYXRpb25zIGJlbG93LgpAQCAtMjI5MywxNiArMjI5Miwx
NiBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvcnMoaW50IGRlY29y
YXRpb25zLCBDb2xvciYgdW5kZXJsaW5lLCBDbwogICAgICAgICAgICAgICAgIGxpbmV0aHJvdWdo
ID0gcmVzdWx0Q29sb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1
cnItPmlzUnVieVRleHQoKSkKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzUnVieVRleHQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwotICAgICAg
ICBpZiAoY3VyciAmJiBjdXJyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhj
dXJyKS0+Y29udGludWF0aW9uKCkpCi0gICAgICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhj
dXJyKS0+Y29udGludWF0aW9uKCk7Ci0gICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAm
JiAoIXF1aXJrc01vZGUgfHwgIWN1cnItPm5vZGUoKSB8fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50
PigqY3Vyci0+bm9kZSgpKSAmJiAhY3Vyci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkp
OworICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7CisgICAgICAgIGlmIChjdXJy
ZW50ICYmIGN1cnJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKmN1cnJlbnQpLmNvbnRpbnVhdGlvbigpKQorICAgICAgICAgICAgY3VycmVudCA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPigqY3VycmVudCkuY29udGludWF0aW9uKCk7CisgICAgfSB3aGlsZSAo
Y3VycmVudCAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnJlbnQtPm5vZGUo
KSB8fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50PigqY3VycmVudC0+bm9kZSgpKSAmJiAhY3VycmVu
dC0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOwogCiAgICAgLy8gSWYgd2UgYmFpbGVk
IG91dCwgdXNlIHRoZSBlbGVtZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBhIDxmb250
PiBvciA8YT4gZWxlbWVudCkuCi0gICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsKLSAgICAg
ICAgc3R5bGVUb1VzZSA9IGZpcnN0bGluZVN0eWxlID8gJmN1cnItPmZpcnN0TGluZVN0eWxlKCkg
OiAmY3Vyci0+c3R5bGUoKTsKKyAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3VycmVudCkgeworICAg
ICAgICBzdHlsZVRvVXNlID0gZmlyc3RsaW5lU3R5bGUgPyAmY3VycmVudC0+Zmlyc3RMaW5lU3R5
bGUoKSA6ICZjdXJyZW50LT5zdHlsZSgpOwogICAgICAgICByZXN1bHRDb2xvciA9IGRlY29yYXRp
b25Db2xvcihzdHlsZVRvVXNlKTsKICAgICAgICAgaWYgKGRlY29yYXRpb25zICYgVGV4dERlY29y
YXRpb25VbmRlcmxpbmUpCiAgICAgICAgICAgICB1bmRlcmxpbmUgPSByZXN1bHRDb2xvcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAppbmRleCA1MWIwZDFjMDdhNjdlMGIy
MTUxMGRhZjU0YjA1YWQ5Y2U0MDEzZWE4Li5jZGVjNTlhMDVhYjY1ZWM3NWM5ODgxYjc5ODhlMzNj
YTVhYTE2MTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVi
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCkBAIC03
NSwxMyArNzUsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGlzUnVieUFmdGVyQmxvY2soY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QpCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QmVm
b3JlQmxvY2soY29uc3QgUmVuZGVyRWxlbWVudCogcnVieSkKIHsKICAgICBSZW5kZXJPYmplY3Qq
IGNoaWxkID0gcnVieS0+Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiBpc1J1YnlCZWZvcmVCbG9j
ayhjaGlsZCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAgcmV0dXJuIGlzUnVieUJl
Zm9yZUJsb2NrKGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkgOiBudWxscHRy
OwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QWZ0ZXJCbG9jayhjb25zdCBS
ZW5kZXJFbGVtZW50KiBydWJ5KQogewogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5s
YXN0Q2hpbGQoKTsKLSAgICByZXR1cm4gaXNSdWJ5QWZ0ZXJCbG9jayhjaGlsZCkgPyB0b1JlbmRl
ckJsb2NrKGNoaWxkKSA6IDA7CisgICAgcmV0dXJuIGlzUnVieUFmdGVyQmxvY2soY2hpbGQpID8g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBSZW5k
ZXJCbG9jayogY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKFJlbmRlck9iamVjdCYgcnVi
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCmluZGV4IDdk
YmUxNDViNTg1NzRhNTZiODY3MzgyNDU1NzI3MjNmNjM0Y2Q4N2UuLmVhMGNkNjM4NDRlNGM2NmUw
ZGUxNTY2YWJjNjYyMzUyODQwNDQ4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjpt
b3ZlSW5saW5lQ2hpbGRyZW4oUmVuZGVyUnVieUJhc2UqIHRvQmFzZSwgUmVuZGVyT2JqZWN0KiBi
ZQogICAgICAgICAvLyBJZiB0b0Jhc2UgaGFzIGEgc3VpdGFibGUgYmxvY2ssIHdlIHJlLXVzZSBp
dCwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmUuCiAgICAgICAgIFJlbmRlck9iamVjdCogbGFz
dENoaWxkID0gdG9CYXNlLT5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBs
YXN0Q2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiBsYXN0Q2hpbGQtPmNoaWxkcmVuSW5saW5l
KCkpCi0gICAgICAgICAgICB0b0Jsb2NrID0gdG9SZW5kZXJCbG9jayhsYXN0Q2hpbGQpOworICAg
ICAgICAgICAgdG9CbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGQpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIHRvQmxvY2sgPSB0b0Jhc2UtPmNyZWF0ZUFub255bW91
c0Jsb2NrKCk7CiAgICAgICAgICAgICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9j
aywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwpAQCAtMTE4LDggKzExOCw4IEBAIHZvaWQgUmVu
ZGVyUnVieUJhc2U6Om1vdmVCbG9ja0NoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJl
bmRlck9iamVjdCogYmVmCiAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGRUaGVyZSA9IHRvQmFz
ZS0+bGFzdENoaWxkKCk7CiAgICAgaWYgKGZpcnN0Q2hpbGRIZXJlLT5pc0Fub255bW91c0Jsb2Nr
KCkgJiYgZmlyc3RDaGlsZEhlcmUtPmNoaWxkcmVuSW5saW5lKCkgCiAgICAgICAgICAgICAmJiBs
YXN0Q2hpbGRUaGVyZSAmJiBsYXN0Q2hpbGRUaGVyZS0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGxh
c3RDaGlsZFRoZXJlLT5jaGlsZHJlbklubGluZSgpKSB7ICAgICAgICAgICAgCi0gICAgICAgIFJl
bmRlckJsb2NrKiBhbm9uQmxvY2tIZXJlID0gdG9SZW5kZXJCbG9jayhmaXJzdENoaWxkSGVyZSk7
Ci0gICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2tUaGVyZSA9IHRvUmVuZGVyQmxvY2sobGFz
dENoaWxkVGhlcmUpOworICAgICAgICBSZW5kZXJCbG9jayogYW5vbkJsb2NrSGVyZSA9IGRvd25j
YXN0PFJlbmRlckJsb2NrPihmaXJzdENoaWxkSGVyZSk7CisgICAgICAgIFJlbmRlckJsb2NrKiBh
bm9uQmxvY2tUaGVyZSA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGRUaGVyZSk7CiAg
ICAgICAgIGFub25CbG9ja0hlcmUtPm1vdmVBbGxDaGlsZHJlblRvKGFub25CbG9ja1RoZXJlLCB0
cnVlKTsKICAgICAgICAgYW5vbkJsb2NrSGVyZS0+ZGVsZXRlTGluZXMoKTsKICAgICAgICAgYW5v
bkJsb2NrSGVyZS0+ZGVzdHJveSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCmluZGV4IDMzNTU1NDZlZTY3NjU1YjNkZTBlOGZiN2I1YWRhYmM3OTdiM2U5YTgu
LjJiMmMzZjRhZmZkZWVkYTExYWNkN2NhNmEwNTI3NjEwYThiN2MwOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTE4MjEsMTUgKzE4MjEsMTUgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCitib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYpCiB7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQmxvY2tCYWNr
Z3JvdW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghby5pc1JlbmRlckJsb2Nr
KCkpCisgICAgaWYgKCFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCbG9jayA9ICp0b1JlbmRlckJs
b2NrKCZvKTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyQmxvY2sgPSBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIpOwogCiAgICAgTGF5b3V0VW5pdCBjb250ZW50V2lkdGggPSBy
ZW5kZXJCbG9jay5jb250ZW50V2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHQg
PSByZW5kZXJCbG9jay5jb250ZW50SGVpZ2h0KCk7CkBAIC0xODc4LDEzICsxODc4LDExIEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QKIAogICAgIC8vIFdlIGNvdWxkIGRyYXcgdGhlIHNuYXBzaG90
IHdpdGggdGhhdCBjb29yZGluYXRlcywgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlCiAg
ICAgLy8gaXNuJ3QgYSBjb21wb3NpdGVkIGxheWVyIGJldHdlZW4gdXMgYW5kIHRoZSBwbHVnSW5S
ZW5kZXJlci4KLSAgICBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KCZv
KTsKLSAgICB3aGlsZSAocmVuZGVyQm94ICE9IHBsdWdJblJlbmRlcmVyKSB7CisgICAgZm9yIChh
dXRvKiByZW5kZXJCb3ggPSAmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7IHJlbmRlckJv
eCAhPSBwbHVnSW5SZW5kZXJlcjsgcmVuZGVyQm94ID0gcmVuZGVyQm94LT5wYXJlbnRCb3goKSkg
ewogICAgICAgICBpZiAocmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIo
KSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CiAgICAgICAgICAgICBz
bmFwc2hvdEFic1BvcyA9IC1yZW5kZXJCb3gtPmxvY2F0aW9uKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICByZW5kZXJCb3ggPSByZW5kZXJCb3gtPnBhcmVudEJveCgp
OwogICAgIH0KIAogICAgIExheW91dFNpemUgcGx1Z2luU2l6ZShwbHVnSW5SZW5kZXJlci0+Y29u
dGVudFdpZHRoKCksIHBsdWdJblJlbmRlcmVyLT5jb250ZW50SGVpZ2h0KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDc0YzNjMGEwYmNjYTdlYzQ3
YWFhYzljMzMzNjZkMGZjMzk5MmQ1MGYuLmI3YjY0ZWE3ODRjYTE4NmEyNWY5NDFlZjRjMGY4YjYz
ZjU5MTgxY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3Np
emVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAK
QEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJl
bmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAgICB9CiAKICAgICAvLyBUaGUgbGF5b3V0Um9vdCBj
b3VsZCBiZSBuZWl0aGVyIGEgY29udGFpbmVyIG5vciBhIGNsdXN0ZXIsIHNvIHdhbGsgdXAgdGhl
IHRyZWUgdGlsbCB3ZSBmaW5kIGVhY2ggb2YgdGhlc2UuCi0gICAgUmVuZGVyQmxvY2sqIGNvbnRh
aW5lciA9IGxheW91dFJvb3QtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2sobGF5b3V0
Um9vdCkgOiBsYXlvdXRSb290LT5jb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJCbG9jayog
Y29udGFpbmVyID0gaXM8UmVuZGVyQmxvY2s+KCpsYXlvdXRSb290KSA/IGRvd25jYXN0PFJlbmRl
ckJsb2NrPihsYXlvdXRSb290KSA6IGxheW91dFJvb3QtPmNvbnRhaW5pbmdCbG9jaygpOwogICAg
IHdoaWxlIChjb250YWluZXIgJiYgIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIpKQog
ICAgICAgICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCkBAIC0y
MDQsMTQgKzIwNCwxNCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxv
YXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVAogCiAgICAgUmVuZGVyT2Jq
ZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250
YWluZXJzKHN1YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7CiAgICAgd2hpbGUgKGRlc2NlbmRhbnQp
IHsKLSAgICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzVGV4dCgpKSB7CisgICAgICAgIGlmIChpczxS
ZW5kZXJUZXh0PigqZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIGlmIChsb2NhbE11bHRpcGxp
ZXIgIT0gMSAmJiBkZXNjZW5kYW50LT5zdHlsZSgpLT50ZXh0QXV0b3NpemluZ011bHRpcGxpZXIo
KSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgc2V0TXVsdGlwbGllcihkZXNjZW5kYW50LCBsb2Nh
bE11bHRpcGxpZXIpOwogICAgICAgICAgICAgICAgIHNldE11bHRpcGxpZXIoZGVzY2VuZGFudC0+
cGFyZW50KCksIGxvY2FsTXVsdGlwbGllcik7IC8vIFBhcmVudCBkb2VzIGxpbmUgc3BhY2luZy4K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtl
ciBzaXplIHByb3BvcnRpb25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdD
b250YWluZXIoZGVzY2VuZGFudCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5k
YW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOworICAgICAgICAgICAgUmVuZGVy
QmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihkZXNjZW5kYW50
KTsKICAgICAgICAgICAgIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8gZGVzY2VuZGFudENsdXN0
ZXJJbmZvKGRlc2NlbmRhbnRCbG9jayk7CiAgICAgICAgICAgICBpZiAoaXNXaWRlckRlc2NlbmRh
bnQoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbykgfHwgaXNJbmRlcGVuZGVudERlc2NlbmRh
bnQoZGVzY2VuZGFudEJsb2NrKSkKICAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNj
ZW5kYW50Q2x1c3RlckluZm8sIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5k
b3dJbmZvKTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIFRleAogICAg
ICAgICBpZiAoIXNraXBMb2NhbFRleHQgJiYgaXM8UmVuZGVyVGV4dD4oKmRlc2NlbmRhbnQpKQog
ICAgICAgICAgICAgdGV4dFdpZHRoICs9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpkZXNjZW5kYW50
KS5yZW5kZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZv
bnRTaXplKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5k
YW50KSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVu
ZGVyQmxvY2soZGVzY2VuZGFudCk7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFu
dEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGRlc2NlbmRhbnQpOwogICAgICAgICAgICAg
aWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8pKQog
ICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9j
aywgY2x1c3RlckluZm8sIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgfQpAQCAt
NTQyLDggKzU0Miw4IEBAIGNvbnN0IFJlbmRlckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyCiAgICAgICAgIGxhc3ROb2Rl
ID0gbGFzdE5vZGUtPnBhcmVudCgpOwogICAgIH0KIAotICAgIGlmIChmaXJzdE5vZGUtPmlzUmVu
ZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyQmxvY2soZmlyc3ROb2RlKTsKKyAg
ICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpmaXJzdE5vZGUpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KGZpcnN0Tm9kZSk7CiAKICAgICAvLyBjb250YWluaW5nQmxvY2soKSBz
aG91bGQgbmV2ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNlIGl0IG9ubHkgc2tpcHMgYW5jZXN0
b3JzIHdoZW4gZmluZGluZyB0aGUKICAgICAvLyBjb250YWluZXIgb2YgcG9zaXRpb246YWJzb2x1
dGUvZml4ZWQgYmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4aXN0IGJldHdlZW4gYSBjbHVzdGVy
IGFuZCBpdHMgdGV4dApAQCAtNTU4LDIxICs1NTgsMjAgQEAgY29uc3QgUmVuZGVyQmxvY2sqIFRl
eHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5k
ZXIKIGNvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZO
b3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQsIHNpemVfdCYgZGVwdGgsIFRy
YXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYgKHBhcmVudC0+aXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gcGFyZW50LT5pc1RleHQoKSA/IHBhcmVudCA6IDA7CisgICAgICAg
IHJldHVybiBpczxSZW5kZXJUZXh0PigqcGFyZW50KSA/IHBhcmVudCA6IG51bGxwdHI7CiAKICAg
ICArK2RlcHRoOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQgPSAoZGlyZWN0aW9uID09
IEZpcnN0VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFyZW50LT5sYXN0Q2hpbGQo
KTsKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDb250YWlu
ZXIoY2hpbGQpIHx8ICFpc0luZGVwZW5kZW50RGVzY2VuZGFudCh0b1JlbmRlckJsb2NrKGNoaWxk
KSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRGaXJzdFRl
eHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsKLSAgICAgICAgICAg
IGlmIChsZWFmKQorICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjaGlsZCkgfHwg
IWlzSW5kZXBlbmRlbnREZXNjZW5kYW50KGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCkpKSB7
CisgICAgICAgICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0VGV4
dExlYWZOb3RJbkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pKQogICAgICAgICAgICAg
ICAgIHJldHVybiBsZWFmOwogICAgICAgICB9CiAgICAgICAgIGNoaWxkID0gKGRpcmVjdGlvbiA9
PSBGaXJzdFRvTGFzdCkgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6IGNoaWxkLT5wcmV2aW91c1Np
YmxpbmcoKTsKICAgICB9CiAgICAgLS1kZXB0aDsKIAotICAgIHJldHVybiAwOworICAgIHJldHVy
biBudWxscHRyOwogfQogCiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggMjgwNjM5MDY4ZDU2YWQ5
MGEyNzkyNDJmNzVmOWE3MDk3OWU4NDQzNS4uYjYzYWNmNDExY2NhZDM1YjMwODY1MWUxOTA5M2My
YTA1NjcwN2JlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSb290OjpsYXlvdXQoKQogICAgICAgICAgICAgYXV0byBpbmRleCA9IGluZGV4V3JhcHBlcigp
OwogICAgICAgICAgICAgZmxvYXQgaW5kZXhIZWlnaHQgPSAwOwogICAgICAgICAgICAgaWYgKCFp
bmRleC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGluZGV4SGVpZ2h0ID0gdG9SZW5kZXJC
bG9jayhpbmRleC0+Zmlyc3RDaGlsZCgpKS0+bG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAg
ICAgIGluZGV4SGVpZ2h0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCppbmRleC0+Zmlyc3RDaGls
ZCgpKS5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgICAgICBmbG9hdCBpbmRleFRvcE1hcmdpbiA9
ICgxLjAgLSBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCkgKiByYWRpY2FsLT5zdHJldGNoU2l6
ZSgpICsgcmFkaWNhbFRvcE1hcmdpbiAtIGluZGV4SGVpZ2h0OwogICAgICAgICAgICAgaWYgKGlu
ZGV4VG9wTWFyZ2luIDwgMCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpbmRleCBpcyB0
b28gdGFsbCwgd2UgbXVzdCBhZGQgc3BhY2UgYXQgdGhlIHRvcCBvZiByZW5kZXJlci4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpp
bmRleCA5NTY5ODNiYWZiMjFlYmZiYTE3Zjg3MWEwYjBmN2MxZjNhZWIzYTViLi4zMDAxMDU5ZWYx
MWRjNzNiYmFmMDIyYWRlZTJiZjBhMGY1ODViNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC03NzQsNyArNzc0LDcg
QEAgUGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwKICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVy
LT5zdHlsZSgpLnVzZXJTZWxlY3QoKSA9PSBTRUxFQ1RfTk9ORSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBpZiAocmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkgJiYgKHJlbmRlcmVy
LT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCkpICYmICFyZW5kZXJlci0+aXNUYWJsZSgpKSB7CisgICAgaWYgKHJl
bmRlcmVyLT5jaGlsZHJlbklubGluZSgpICYmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSAm
JiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lRWxlbWVudENvbnRpbnVh
dGlvbigpKSAmJiAhcmVuZGVyZXItPmlzVGFibGUoKSkgewogICAgICAgICByYW5nZSA9IGVuY2xv
c2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJl
Y3Rpb25CYWNrd2FyZCk7CiAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChB
U1NFUlRfTk9fRVhDRVBUSU9OKSkKICAgICAgICAgICAgIHJldHVybiByYW5nZTsKQEAgLTEzMTYs
NyArMTMxNiw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZy
b21IYW5kbGUoUmFuZ2UqIGN1cnJlbnRSYW5nZSwgU2VsZWN0CiAgICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnRFbGVtZW50KCk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+
cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5saW5l
KCkgJiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVy
ZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpICYmICFyZW5kZXJlci0+aXNUYWJsZSgp
KQorICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAoaXM8
UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVy
ZXIpLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCkp
CiAgICAgICAgIGZsYWdzID0gTm9uZTsKIAogICAgIHJldHVybiBiZXN0UmFuZ2U7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>