<?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>214648</bug_id>
          
          <creation_ts>2020-07-22 11:44:32 -0700</creation_ts>
          <short_desc>Stop using live ranges in SpellChecker.h and TextCheckingHelper.h</short_desc>
          <delta_ts>2020-07-26 12:13:15 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1673908</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-22 11:44:32 -0700</bug_when>
    <thetext>Stop using live ranges in SpellChecker.h and TextCheckingHelper.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673928</commentid>
    <comment_count>1</comment_count>
      <attachid>404949</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-22 12:31:35 -0700</bug_when>
    <thetext>Created attachment 404949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673988</commentid>
    <comment_count>2</comment_count>
      <attachid>404949</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-22 14:56:28 -0700</bug_when>
    <thetext>Comment on attachment 404949
Patch

Looks like all the tests passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1674529</commentid>
    <comment_count>3</comment_count>
      <attachid>405123</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-23 20:37:03 -0700</bug_when>
    <thetext>Created attachment 405123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1674536</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-23 21:33:33 -0700</bug_when>
    <thetext>OK, *this* time it looks like all the tests are passing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675115</commentid>
    <comment_count>5</comment_count>
      <attachid>405123</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-26 11:58:42 -0700</bug_when>
    <thetext>Comment on attachment 405123
Patch

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

&gt; Source/WebCore/ChangeLog:90
&gt; +        not mark when called just to find the first mispelled word. The old version

mispelled -&gt; misspelled

&gt; Source/WebCore/dom/DocumentMarkerController.h:115
&gt; +void addMarker(const SimpleRange&amp;, DocumentMarker::MarkerType, const DocumentMarker::Data&amp; = { });
&gt; +void addMarker(Text&amp;, unsigned startOffset, unsigned length, DocumentMarker::MarkerType, DocumentMarker::Data&amp;&amp; = { });

Why does one of these take the data as a const&amp; and one as &amp;&amp;? I assume it has something to do with what the underlying DocumentMarkerController does, but still pretty odd.

&gt; Source/WebCore/editing/Editor.h:326
&gt; +    Optional&lt;SimpleRange&gt; markMisspellings(const VisibleSelection&amp;); // Returns first misspelling range.

Irony!

&gt; Source/WebCore/editing/TextCheckingHelper.cpp:229
&gt; +auto TextCheckingHelper::findMispelledWords(Operation operation) const -&gt; std::pair&lt;MisspelledWord, Optional&lt;SimpleRange&gt;&gt;

Typo: Should be &quot;findMisspelledWords&quot; (two s&apos;s in misspelled).

&gt; Source/WebCore/editing/TextCheckingHelper.cpp:298
&gt; +    Optional&lt;SimpleRange&gt; mispelledWordRange;

Typo: Should be &quot;misspelledWordRange&quot; (two s&apos;s in misspelled).

&gt; Source/WebCore/editing/TextCheckingHelper.cpp:477
&gt; +        int badGrammarIndex = findUngrammaticalPhrases(operation, grammarDetails, badGrammarPhraseLocation, paragraph.checkingStart(), paragraph.checkingEnd());

For consistency, would be nice to rename this variable (and the ones like it) to ungrammaticalPhraseIndex (or something like that).  Can&apos;t tell from the diff how pervasive the usage of &quot;badGrammar&quot; vs. &quot;ungrammaticalPhrase&quot; is, so it might not make sense for this patch.

&gt; Source/WebCore/editing/TextCheckingHelper.h:79
&gt;  class TextCheckingHelper {

One day, this class could use a better name. Helper of whom? To what end?

&gt; Source/WebCore/editing/TextCheckingHelper.h:92
&gt; +    struct MisspelledWord {
&gt; +        String word;
&gt; +        uint64_t offset { 0 };
&gt; +    };
&gt; +    struct UngrammaticalPhrase {
&gt; +        String phrase;
&gt; +        uint64_t offset { 0 };
&gt; +        GrammarDetail detail;
&gt; +    };
&gt; +

I like this a lot.

&gt; Source/WebCore/platform/text/TextChecking.h:80
&gt; +    bool mispelled { false };

Should be &quot;misspelled&quot;. (this feels like a trap left in to test reviewers ;) ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675117</commentid>
    <comment_count>6</comment_count>
      <attachid>405123</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-26 12:05:18 -0700</bug_when>
    <thetext>Comment on attachment 405123
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:90
&gt;&gt; +        not mark when called just to find the first mispelled word. The old version
&gt; 
&gt; mispelled -&gt; misspelled

I always misspell that. Have to fix it afterward with search and replace.

&gt;&gt; Source/WebCore/dom/DocumentMarkerController.h:115
&gt;&gt; +void addMarker(Text&amp;, unsigned startOffset, unsigned length, DocumentMarker::MarkerType, DocumentMarker::Data&amp;&amp; = { });
&gt; 
&gt; Why does one of these take the data as a const&amp; and one as &amp;&amp;? I assume it has something to do with what the underlying DocumentMarkerController does, but still pretty odd.

Completely arbitrary because of what the caller does. Just matching the DocumentMarkerController functions, with the same arbitrary difference. For now I will leave it alone unless you have an idea which way I should go in regularizing it.

&gt;&gt; Source/WebCore/editing/TextCheckingHelper.cpp:229
&gt;&gt; +auto TextCheckingHelper::findMispelledWords(Operation operation) const -&gt; std::pair&lt;MisspelledWord, Optional&lt;SimpleRange&gt;&gt;
&gt; 
&gt; Typo: Should be &quot;findMisspelledWords&quot; (two s&apos;s in misspelled).

Will fix.

&gt;&gt; Source/WebCore/editing/TextCheckingHelper.cpp:298
&gt;&gt; +    Optional&lt;SimpleRange&gt; mispelledWordRange;
&gt; 
&gt; Typo: Should be &quot;misspelledWordRange&quot; (two s&apos;s in misspelled).

Will fix.

&gt;&gt; Source/WebCore/editing/TextCheckingHelper.cpp:477
&gt;&gt; +        int badGrammarIndex = findUngrammaticalPhrases(operation, grammarDetails, badGrammarPhraseLocation, paragraph.checkingStart(), paragraph.checkingEnd());
&gt; 
&gt; For consistency, would be nice to rename this variable (and the ones like it) to ungrammaticalPhraseIndex (or something like that).  Can&apos;t tell from the diff how pervasive the usage of &quot;badGrammar&quot; vs. &quot;ungrammaticalPhrase&quot; is, so it might not make sense for this patch.

I’d prefer not to try to fix this terminology in this patch. There’s a lot of code using both terms.

&gt;&gt; Source/WebCore/editing/TextCheckingHelper.h:79
&gt;&gt;  class TextCheckingHelper {
&gt; 
&gt; One day, this class could use a better name. Helper of whom? To what end?

I could not agree more. It’s also the name of the source file! I’m sure it’s a class for helper utilities, for managing infrastructure.

&gt;&gt; Source/WebCore/platform/text/TextChecking.h:80
&gt;&gt; +    bool mispelled { false };
&gt; 
&gt; Should be &quot;misspelled&quot;. (this feels like a trap left in to test reviewers ;) ).

If you saw how many times I misspelled misspelled while working on this, over and over again, you would be amazed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675122</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-26 12:12:36 -0700</bug_when>
    <thetext>Committed r264905: &lt;https://trac.webkit.org/changeset/264905&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675123</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-26 12:13:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/66133407&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404949</attachid>
            <date>2020-07-22 12:31:35 -0700</date>
            <delta_ts>2020-07-23 20:37:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214648-20200722123134.patch</filename>
            <type>text/plain</type>
            <size>100785</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI3ZTQwOWFkNWIyNDJm
YmY2OGE0NTE5MzE5NjhhYTNiOTIyYjM2Ny4uOWUxNmZkNWJkMTA0NTE5ZjJmOTJkYjg1YTU1ZmFh
Y2FmZGMzYmFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAyMC0wNy0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBTcGVsbENoZWNrZXIuaCBhbmQgVGV4dENoZWNraW5nSGVscGVyLmgKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDY0OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09Q
UyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlLm1tOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgVGV4
dENoZWNraW5nSGVscGVyLmguCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVt
b3ZlTWFya2Vycyk6IFVwZGF0ZWQgZm9yIGNoYW5nZQorICAgICAgICB0byB0aGUgYXJndW1lbnQg
dHlwZSBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpm
aWx0ZXJNYXJrZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphZGRNYXJrZXIpOiBBZGRl
ZC4gQ29udmVuaWVuY2Ugc28gY2FsbCBkb2Vzbid0IGhhdmUgdG8gZ2V0CisgICAgICAgIHRoZSBk
b2N1bWVudCB0byBjYWxsIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVNYXJrZXJzKTog
RGl0dG8uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg6IE1vdmVk
IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyCisgICAgICAgIG91dCBvZiB0aGUgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyIGNsYXNzLCB0d2Vha2VkIGl0cyBuYW1lIGFuZCBjaGFuZ2Vk
CisgICAgICAgIGl0IGludG8gYW4gZW51bSBjbGFzcy4gQWRkZWQgY29udmVuaWVuY2VzIGZ1bmN0
aW9ucyBmb3IgYWRkL3JlbW92ZU1hcmtlci4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICBV
c2UgY29udmVuaWVuY2UgdmVyc2lvbnMgb2YgcmVtb3ZlTWFya2VycyBhbmQgYWRkTWFya2VyLgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJu
YXRpdmVUZXh0VUlSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0Nv
cnJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJr
UHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyk6IERpdHRvLgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aWdub3Jl
U3BlbGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5TcGVsbGlu
Zyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcpOiBSZXdyb3RlIHRvIG5vdCB1c2UgYSBsaXZlCisgICAgICAgIHJhbmdlIGFuZCBmb3Ig
dGhlIGNoYW5nZXMgdG8gdGhlIFRleHRDaGVja2luZ0hlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwpOiBDaGFu
Z2VkIHRvIHVzZSBhCisgICAgICAgIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9mIG91dCBhcmd1bWVu
dHMuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hcik6IFVzZSBjb252ZW5pZW5jZQorICAgICAgICB2ZXJzaW9ucyBvZiByZW1vdmVNYXJrZXJz
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5n
c09yQmFkR3JhbW1hcik6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0bworICAgICAgICBUZXh0Q2hlY2tp
bmdIZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXMpOiBEbyBub3QgdXNlCisgICAgICAgIGxpdmUgcmFuZ2VzLgor
ICAgICAgICAoV2ViQ29yZTo6Y29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNr
aW5nUGFyYWdyYXBoKTogVGFrZSBhCisgICAgICAgIHJhbmdlIHRoYXQgaXNuJ3QgYSBsaXZlIHJh
bmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6IFR3ZWFr
IGZvciBjaGFuZ2VzIHRvIHRleHQgY2hlY2tpbmcKKyAgICAgICAgYW5kIHRvIHVzZSBjb252ZW5p
ZW5jZSB2ZXJzaW9uIG9mIGFkZE1hcmtlci4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hh
bmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOiBVc2UgY29udmVuaWVuY2UgdmVyc2lvbnMgb2YKKyAg
ICAgICAgcmVtb3ZlTWFya2VycyBhbmQgYWRkTWFya2VyLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRp
ZGF0ZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6IFVwZGF0ZSBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KTogTm8gbG9uZ2Vy
IHRha2UgbGl2ZSByYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrUmVxdWVzdDo6
Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmNhbkNoZWNr
QXN5bmNocm9ub3VzbHkgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6aXNDaGVja2FibGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKTogVXNlIGNvbnZlbmllbmNlIHZlcnNpb25zIG9mCisg
ICAgICAgIHJlbW92ZU1hcmtlcnMuCisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuaDog
UmVtb3ZlIHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMuIFJlbW92ZWQgbWFueQorICAgICAgICB1bm5l
ZWRlZCBpbmNsdWRlcyBhbmQgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRUb1Bh
cmFncmFwaEJvdW5kYXJ5KTogVGFrZSBhbmQgcmV0dXJuIG5vbi1saXZlIHJhbmdlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6VGV4dENoZWNraW5nUGFyYWdyYXBo
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmV4cGFu
ZFJhbmdlVG9OZXh0RW5kKTogVXBkYXRlZCB0byB1c2UKKyAgICAgICAgbm9uLWxpdmUgcmFuZ2Vz
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjppbnZhbGlkYXRlUGFy
YWdyYXBoUmFuZ2VWYWx1ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UgY29uc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8gY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0QXNSYW5n
ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBo
OjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6On5UZXh0
Q2hlY2tpbmdIZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5n
SGVscGVyOjpmaW5kTWlzcGVsbGVkV29yZHMgY29uc3QpOiBSZW5hbWVkIGZyb20KKyAgICAgICAg
ZmluZEZpcnN0TWlzcGVsbGluZywgYW5kIG1hZGUgdGhpcyBwcml2YXRlIGZ1bmN0aW9uIHNpbmNl
IGl0IGhhcyBjb25mdXNpbmcKKyAgICAgICAgYXJndW1lbnQgYW5kIHJldHVybiB0eXBlcy4gUmVp
bXBsZW1lbnRlZCB0byB1c2Ugbm9uLWxpdmUgcmFuZ2VzIGFuZCB0byB1c2UKKyAgICAgICAgcmV0
dXJuIHZhbHVlcyBhbmQgdGhlIGFkZE1hcmtlciBjb252ZW5pZW5jZSBmdW5jdGlvbi4gQWxzbyBj
aGFuZ2VkIHRoaXMgdG8KKyAgICAgICAgbm90IG1hcmsgd2hlbiBjYWxsZWQganVzdCB0byBmaW5k
IHRoZSBmaXJzdCBtaXNwZWxsZWQgd29yZC4gVGhlIG9sZCB2ZXJzaW9uCisgICAgICAgIGFsd2F5
cyBtYXJrZWQsIHdoaWNoIGRpZG4ndCBtYWtlIGxvZ2ljYWwgc2Vuc2UsIGJ1dCB3YXMgaGFybWxl
c3MgYmVjYXVzZQorICAgICAgICB0aGUgY2FsbGVyIGFsd2F5cyBtYXJrZWQgdGhlIHNhbWUgd2F5
LiBOb3cgdGhpcyBkb2VzIHdoYXQgaXQgc2F5cy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVj
a2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmQgY29uc3QpOiBBZGRlZC4KKyAgICAg
ICAgUmVwbGFjZXMgZmluZEZpcnN0TWlzcGVsbGluZyBhcyBhIHB1YmxpYyBmdW5jdGlvbiwgYW5k
IHJldHVybnMgYSBzdHJ1Y3R1cmUKKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyBvdXQgYXJndW1l
bnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNz
cGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZSBjb25zdCk6CisgICAgICAgIFJlbmFtZWQg
ZnJvbSBmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hciBhbmQgY2hhbmdlZCB0byByZXR1
cm4gYSBzdHJ1Y3R1cmUKKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyBvdXQgYXJndW1lbnRzLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kVW5ncmFtbWF0aWNhbFBo
cmFzZXMgY29uc3QpOiBSZW5hbWVkIGZyb20KKyAgICAgICAgZmluZEZpcnN0R3JhbW1hckRldGFp
bCBhbmQgZmluZEZpcnN0QmFkR3JhbW1hci4gQm90aCBmdW5jdGlvbnMgYXJlIG5vdyBwcml2YXRl
CisgICAgICAgIGFuZCB1c2UgdGhlIG5ldyBPcGVyYXRpb24gZW51bSBjbGFzcyB0byBkaXN0aW5n
dWlzaCB0aGUgImZpbmQgZmlyc3QiIGZyb20KKyAgICAgICAgIm1hcmsgYWxsIiB1c2FnZS4gQWxz
byB1c2UgdGhlIGNvbnZpZW5jZSB2ZXJzaW9uIG9mIGFkZE1hcmtlciBhbmQgcmV0dXJuIHJlc3Vs
dHMKKyAgICAgICAgaW4gYSBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiB1c2luZyBvdXQgYXJndW1lbnRz
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RVbmdyYW1t
YXRpY2FsUGhyYXNlIGNvbnN0KTogQWRkZWQuCisgICAgICAgIFJlcGxhY2VzIGZpbmRGaXJzdEJh
ZEdyYW1tYXIgYXMgYSBwdWJsaWMgZnVuY3Rpb24sIHJldHVybnMgYSBzdHJ1Y3R1cmUKKyAgICAg
ICAgaW5zdGVhZCBvZiB1c2luZyBvdXQgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQ
aHJhc2UgY29uc3QpOgorICAgICAgICBSZW5hbWVkIGZyb20gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRP
clVuZ3JhbW1hdGljYWxSYW5nZSBhbmQgY2hhbmdlZCB0byByZXR1cm4KKyAgICAgICAgYSBzdHJ1
Y3R1cmUgaW5zdGVhZCBvZiBvdXQgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENo
ZWNraW5nSGVscGVyOjptYXJrQWxsTWlzc3BlbGxlZFdvcmRzIGNvbnN0KTogUmVuYW1lZCBmcm9t
CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3MgYW5kIGNoYW5nZWQgdG8gdXNlIGEgcmV0dXJu
IHZhbHVlIGluc3RlYWQgb2YgYW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjptYXJrQWxsVW5ncmFtbWF0aWNhbFBocmFzZXMgY29uc3QpOiBSZW5h
bWVkCisgICAgICAgIGZyb20gbWFya0FsbEJhZEdyYW1tYXIuCisKKyAgICAgICAgKiBlZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oOiBSZW1vdmVkIHVubmVlZCBpbmNsdWRlIG9mICJFZGl0b3JD
bGllbnQuaCIuCisgICAgICAgIFVzZSBub24tbGl2ZSByYW5nZXMuIFVwZGF0ZWQgZm9yIHRoZSBv
dGhlciBjaGFuZ2VzIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRGljdGF0aW9uQ29t
bWFuZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpkb0Fw
cGx5KTogVXNlIHRoZSBjb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGFkZE1hcmtlci4KKyAgICAgICAg
KiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNl
dERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBw
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKTogVXBkYXRlZCBmb3IgdGhlIGNoYW5nZSB0bworICAg
ICAgICBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsLgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcuaDogQWRkZWQgYSBUZXh0Q2hlY2tpbmdH
dWVzc2VzIHN0cnVjdHVyZSBoZXJlCisgICAgICAgIHVzZWQgYm90aCBieSBFZGl0b3IgYW5kIFRl
eHRDaGVja2luZ0hlbHBlci4KKwogMjAyMC0wNy0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGxpdmUgcmFuZ2VzIGZyb20gRWRpdG9yLmggYW5kIEVk
aXRvckNsaWVudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk3ODk1NzljNzFmYTgyMjc0ODhmZjhkNDg2ZjdjMWVl
OWY4ZjBkMzUuLmJjODcyYzUxNTBiNzU0ZDc1NjMxYzUwNjk2OWU0N2ZiZjczNmY5ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDctMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gU3BlbGxDaGVja2Vy
LmggYW5kIFRleHRDaGVja2luZ0hlbHBlci5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ2NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcDogQWRkZWQgYW4gaW5jbHVkZQorICAgICAgICBvZiBSYW5nZS5oLCBubyBsb25n
ZXIgcHVsbGVkIGluIGluZGlyZWN0bHkgYnkgYW5vdGhlciBoZWFkZXIuCisKIDIwMjAtMDctMTkg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBsaXZlIHJh
bmdlcyBmcm9tIEVkaXRvci5oIGFuZCBFZGl0b3JDbGllbnQuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tCmluZGV4IGM0ZjBjNGRlYTBlMzU2ZDU1ODBjMDBkMzg2NTQz
NTNlMTZiZWZmY2YuLjZmYWRhYzM3OWViN2IxM2E3NzZmODI0OGRmN2UzNjI1YTA0MTJjNmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQmFzZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KQEAgLTYyLDcgKzYyLDYg
QEAKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgogI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgogI2lt
cG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKLSNpbXBvcnQgIlRleHRDaGVja2luZ0hlbHBlci5o
IgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCiAjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3Lmgi
CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggZGQ0MzUwYzgxOWU0NzM5NTA5
YzQ0MTExYmIwOWNhZTZlMTJkMTUxZS4uNjBkZTYzMGViMGJiNjBlN2NkY2Y4N2JmMmVjODhlZDg1
ZDBiZGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJv
bGxlci5jcHAKQEAgLTg3LDEyICs4NywxMiBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAg
ICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLm5vZGUsIHsgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRD
b250ZW50LCB0ZXh0UGllY2UucmFuZ2UsIFJlZlB0cjxOb2RlPiB7IHRleHRQaWVjZS5ub2RlLnB0
cigpIH0gfSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJr
ZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBv
dmVybGFwUnVsZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgb3ZlcmxhcFJ1
bGUpCiB7CiAgICAgZmlsdGVyTWFya2VycyhyYW5nZSwgbnVsbHB0ciwgdHlwZXMsIG92ZXJsYXBS
dWxlKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZpbHRlck1hcmtlcnMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IERvY3Vt
ZW50TWFya2VyJik+JiBmaWx0ZXIsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gdHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgb3ZlcmxhcFJ1
bGUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZmlsdGVyTWFya2Vycyhjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgRG9jdW1lbnRNYXJr
ZXImKT4mIGZpbHRlciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBl
cywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgb3ZlcmxhcFJ1bGUpCiB7CiAgICAg
Zm9yIChhdXRvJiB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKICAgICAg
ICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQpAQCAtMzY2LDcgKzM2Niw3IEBAIHZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlJiBzb3VyY2UsIE9m
ZnNldFJhbmdlIHJhbmdlLCBOb2RlCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCBPZmZzZXRSYW5nZSByYW5nZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgY29uc3QgRnVuY3Rpb248
Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYgZmlsdGVyLCBSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9k
ZSwgT2Zmc2V0UmFuZ2UgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gdHlwZXMsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgRG9jdW1lbnRNYXJrZXImKT4mIGZp
bHRlciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgb3ZlcmxhcFJ1bGUpCiB7CiAg
ICAgaWYgKHJhbmdlLnN0YXJ0ID49IHJhbmdlLmVuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDAz
LDcgKzQwMyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJz
KE5vZGUmIG5vZGUsIE9mZnNldFJhbmdlIHJhbmdlLCBPcHRpCiAKICAgICAgICAgRG9jdW1lbnRN
YXJrZXIgY29waWVkTWFya2VyID0gbWFya2VyOwogICAgICAgICBsaXN0LT5yZW1vdmUoaSk7Ci0g
ICAgICAgIGlmIChzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKKyAgICAg
ICAgaWYgKG92ZXJsYXBSdWxlID09IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyOjpZ
ZXMpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBBZGQgZWl0aGVyIG9mIHRo
ZSByZXN1bHRpbmcgc2xpY2VzIHRoYXQgcmVtYWluIGFmdGVyIHJlbW92aW5nIHRhcmdldC4KQEAg
LTY0OCw2ICs2NDgsMjEgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVz
Y3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShjb25zdAogICAgIH0pOwogfQogCit2
b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBkYXRhKQoreworICAg
IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJh
bmdlLCB0eXBlLCBkYXRhKTsKK30KKwordm9pZCBhZGRNYXJrZXIoVGV4dCYgbm9kZSwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQoreworICAgIG5vZGUuZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG5vZGUsIHN0YXJ0T2Zmc2V0LCBsZW5ndGgsIHR5cGUs
IFdURk1vdmUoZGF0YSkpOworfQorCit2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciBwb2xpY3kpCit7CisgICAgcmFuZ2Uuc3Rh
cnQuY29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHJhbmdlLCB0
eXBlcywgcG9saWN5KTsKK30KKwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIAogdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCA4NmViMGZkY2Y2YmNl
NTA2ZDFmM2ZhNTNmOWY4Njc0ZmM1ZmUyM2IzLi5hYWVmZjA1YjBkODRmOWUyOTdkODgzMGVmMDJk
MTg1NWYxOGFhNTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oCkBAIC00MSw2ICs0MSw4IEBAIGNsYXNzIFRleHQ7CiAKIHN0cnVjdCBTaW1wbGVS
YW5nZTsKIAorZW51bSBjbGFzcyBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciA6IGJv
b2wgeyBObywgWWVzIH07CisKIGNsYXNzIERvY3VtZW50TWFya2VyQ29udHJvbGxlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC02MCwxMiArNjIsMTEgQEAgcHVibGljOgogICAg
IC8vIFdoZW4gYSBtYXJrZXIgcGFydGlhbGx5IG92ZXJsYXBzIHdpdGggcmFuZ2UsIGlmIHJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VycyBpcyB0cnVlLCB3ZSBjb21wbGV0ZWx5CiAgICAg
Ly8gcmVtb3ZlIHRoZSBtYXJrZXIuIElmIHRoZSBhcmd1bWVudCBpcyBmYWxzZSwgd2Ugd2lsbCBh
ZGp1c3QgdGhlIHNwYW4gb2YgdGhlIG1hcmtlciBzbyB0aGF0IGl0IHJldGFpbnMKICAgICAvLyB0
aGUgcG9ydGlvbiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLgotICAgIGVudW0gUmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCB7IERvTm90UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyIH07Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxN
YXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICB2b2lkIHJlbW92ZU1hcmtlcnMo
Tm9kZSYsIE9mZnNldFJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25z
dCBEb2N1bWVudE1hcmtlciYpPiYgZmlsdGVyRnVuY3Rpb24gPSBudWxscHRyLCBSZW1vdmVQYXJ0
aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJzKGNvbnN0
IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERv
Y3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyID0gUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6Ok5vKTsKKyAgICB2b2lkIHJl
bW92ZU1hcmtlcnMoTm9kZSYsIE9mZnNldFJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgY29uc3QgRnVuY3Rp
b248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYgZmlsdGVyRnVuY3Rpb24gPSBudWxscHRy
LCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciA9IFJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyOjpObyk7CiAKICAgICAvLyBSZXR1cm4gZmFsc2UgZnJvbSBmaWx0ZXJGdW5j
dGlvbiB0byByZW1vdmUgdGhlIG1hcmtlci4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbHRl
ck1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IERv
Y3VtZW50TWFya2VyJik+JiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbHRlck1hcmtlcnMoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IERvY3VtZW50TWFya2VyJik+
JiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9
IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyID0gUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6Ok5vKTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CiAgICAgdm9pZCBy
ZW1vdmVNYXJrZXJzKE5vZGUmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CkBAIC0xMTAsNiArMTExLDEwIEBAIHBy
aXZhdGU6CiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiB9OwogCit2b2lkIGFkZE1hcmtlcihj
b25zdCBTaW1wbGVSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBEb2N1
bWVudE1hcmtlcjo6RGF0YSYgPSB7IH0pOwordm9pZCBhZGRNYXJrZXIoVGV4dCYsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
LCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmID0geyB9KTsKK3ZvaWQgcmVtb3ZlTWFya2Vycyhjb25z
dCBTaW1wbGVSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlciA9IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyOjpObyk7CisKIGlubGluZSBi
b29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VycygpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1fbWFya2Vycy5pc0VtcHR5KCkgPT0gIW1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5
cGVzLmNvbnRhaW5zQW55KERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDlhYzJlOWQ4NjE2ZGQ2YTNjMTRhZjAzNTUyMmMzMGU2MGU3MTMxNDMuLjI5YzQ5N2UxMDk2
NGRmMDkwNTg4YmE0NmI5ZGE4ZWQxMDNhYzU1NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRp
bmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKQEAgLTIyNywxMCArMjI4LDkgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBh
dXRvIHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIG1hcmtlcnMg
PSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMoKnJhbmdl
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBtYXJr
ZXJzLmFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAg
bWFya2Vycy5hZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7CisgICAgcmVtb3ZlTWFya2VycygqcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFy
a2VyOjpBdXRvY29ycmVjdGVkIH0sIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyOjpZ
ZXMpOworICAgIGFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7
CisgICAgYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVt
cHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQo
KQpAQCAtMzE4LDcgKzMxOCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFu
ZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1CiAgICAgICAgIGlm
IChyZXN1bHQubGVuZ3RoKCkpCiAgICAgICAgICAgICBhcHBseUFsdGVybmF0aXZlVGV4dFRvUmFu
Z2UoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3VsdCwgbV90eXBlLCBtYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKCkpOwogICAgICAgICBlbHNlIGlmICghbV9pc0Rpc21pc3NlZEJ5RWRp
dGluZykKLSAgICAgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCptX3JhbmdlV2l0aEFsdGVybmF0aXZl
LCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX29yaWdpbmFsVGV4dCk7Cisg
ICAgICAgICAgICBhZGRNYXJrZXIoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFy
a2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOgogICAgIGNhc2UgQWx0ZXJu
YXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CkBAIC0zOTksOSArMzk5LDggQEAgdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVk
aXRDb21tYW5kQ29tcG9zaXRpb24KICAgICBhdXRvIHJhbmdlID0gY29tbWFuZC0+c3RhcnRpbmdT
ZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKLSAgICBtYXJrZXJz
LmFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFy
a2Vycy5hZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CisgICAgYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KTsKKyAgICBhZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
ZWRpdG9yQ2xpZW50KCkKQEAgLTQyNCwxOCArNDIzLDE3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJl
c3BvCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKGNvbnN0
IFNpbXBsZVJhbmdlJiBjaGFuZ2VkUmFuZ2UpCiB7Ci0gICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29u
dGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBjaGFuZ2VkUmFuZ2Uuc3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgcmVtb3ZlTWFy
a2VycyhjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcjo6WWVzKTsKKyAgICBhZGRNYXJrZXIoY2hhbmdlZFJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlUmFu
Z2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiB7Ci0gICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZvciAoYXV0byBtYXJrZXJUeXBl
IDogbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CiAgICAgICAgIGlmIChtYXJrZXJU
eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIo
cmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAg
YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwg
bWFya2VyVHlwZSk7CisgICAgICAgICAgICBhZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgbWFya2Vy
VHlwZSk7CiAgICAgfQogfQogCkBAIC00NTUsNyArNDUzLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVj
dGlvbigKICAgICAgICAgICAgIGNsaWVudC0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShB
dXRvY29ycmVjdGlvblJlc3BvbnNlOjpFZGl0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiAg
ICAgfQogCi0gICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1
bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgcmVtb3ZlTWFya2VycyhyYW5nZU9m
Q29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIFJlbW92ZVBhcnRpYWxs
eU92ZXJsYXBwaW5nTWFya2VyOjpZZXMpOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKQpAQCAtNDgyLDcgKzQ4MCw3IEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VG
b3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8g
aW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlz
CiAgICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2lu
YWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQogICAgIC8vIHdvbid0IGF1dG9jb3Jy
ZWN0IGl0IGFnYWluLgotICAgIG1fZG9jdW1lbnQubWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwg
bV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIGFkZE1h
cmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRv
Y29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24p
OwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25U
ZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQs
IGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBz
dHJpbmdUb0JlUmVwbGFjZWQpCkBAIC02MDIsOSArNjAwLDggQEAgdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmIHIKICAgICBpZiAocGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UpICE9IGFsdGVybmF0aXZl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5n
ZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKTsKICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6
IG1hcmtlclR5cGVzVG9BZGQpCi0gICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VtZW50
UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZl
VGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKKyAgICAgICAgYWRkTWFya2VyKHJl
cGxhY2VtZW50UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFs
dGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKIH0KIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmlu
ZGV4IDM3MWM3OWYyN2Q5ZGMzZGVmNzg1NjBmZjAwZWIzNjQ1Y2RjZjI5NzUuLjZmYjEyZmQ4M2E5
ZWZjZmRjZGZjZmFhNDY4Y2FlMDgwNGRlNDUwN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycyhU
ZXh0JiBub2RlLCB1bnNpZ24KICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZzZXQsIGNv
dW50LCByZXBsYWNlbWVudFRleHQpOwogICAgIHJhbmdlLmVuZC5vZmZzZXQgPSByYW5nZS5zdGFy
dC5vZmZzZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCk7CiAgICAgZm9yIChhdXRvJiBtYXJr
ZXIgOiBtYXJrZXJzKQotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFu
Z2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kYXRhKCkpOworICAgICAgICBhZGRNYXJrZXIocmFu
Z2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kYXRhKCkpOwogfQogCiBQb3NpdGlvbiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggN2I1ZTJlZWNhNDNlZWU1MjFk
ODYwYzQ4NTZhYWI3MWJmZGFiOGFiMC4uZTg3Yjg5NGEzYjk2MzA1YmI1ZjY2ZTg1YWFhZjRmNzk1
NjM2NTRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjEzNiw3ICsyMTM2LDcg
QEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQotICAgICAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOworICAgICAgICByZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKICAgICBB
U1NFUlQodGV4dC5sZW5ndGgoKSk7CkBAIC0yMTUxLDcgKzIxNTEsNyBAQCB2b2lkIEVkaXRvcjo6
bGVhcm5TcGVsbGluZygpCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVzZSAibGVh
cm4iIGJ1dHRvbiBvbiAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24ndCBjYWxs
IHRoaXMgZnVuY3Rpb24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2VycyBhcm91
bmQgdGhlIGxlYXJuZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4KIAogICAg
IGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Cisg
ICAgICAgIHJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0
ZXh0Lmxlbmd0aCgpKTsKQEAgLTIxNjQsMjcgKzIxNjQsMjkgQEAgdm9pZCBFZGl0b3I6OmFkdmFu
Y2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewogICAgIFJl
ZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKLSAgICAvLyBUaGUg
YmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFzZXMgLSBmcm9tIHRoZSBzZWxl
Y3Rpb24gZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCi0gICAgLy8gdGhlbiB3ZSB3cmFw
IGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHByb3hpbWF0ZWx5KSB3aGVyZSB3
ZSBzdGFydGVkLgotICAgIAotICAgIC8vIFN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlv
biwgc2VhcmNoIHRvIGVkZ2Ugb2YgZG9jdW1lbnQuICBTdGFydGluZyBhdCB0aGUgc2VsZWN0aW9u
IGVuZCBtYWtlcwotICAgIC8vIHJlcGVhdGVkICJjaGVjayBzcGVsbGluZyIgY29tbWFuZHMgd29y
ay4KKyAgICAvLyBUaGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFzZXM6
IGZyb20gdGhlIHNlbGVjdGlvbiBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQsIGFuZAor
ICAgIC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvY3VtZW50IHN0YXJ0IHRv
IChhcHByb3hpbWF0ZWx5KSB3aGVyZSB3ZSBzdGFydGVkLgorCisgICAgLy8gU3RhcnQgYXQgdGhl
IGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4KKyAgICAv
LyBTdGFydGluZyBhdCB0aGUgc2VsZWN0aW9uIGVuZCBtYWtlcyByZXBlYXRlZCAiY2hlY2sgc3Bl
bGxpbmciIGNvbW1hbmRzIHdvcmsuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgUmVmPFJhbmdlPiBzcGVsbGlu
Z1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOworICAgIGF1dG8gc3Bl
bGxpbmdTZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVu
dCgpKTsKIAogICAgIGJvb2wgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKICAgICBpZiAo
c2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICBzdGFydGVkV2l0
aFNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgIGlmIChzdGFydEJlZm9yZVNlbGVjdGlvbikgewot
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KSk7Ci0gICAgICAgICAgICAvLyBXZSBtYXRjaCBBcHBLaXQncyBydWxlOiBTdGFydCAxIGNoYXJh
Y3RlciBiZWZvcmUgdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBv
bmVCZWZvcmVTdGFydCA9IHN0YXJ0LnByZXZpb3VzKCk7Ci0gICAgICAgICAgICBzZXRTdGFydChz
cGVsbGluZ1NlYXJjaFJhbmdlLnB0cigpLCBvbmVCZWZvcmVTdGFydC5pc05vdE51bGwoKSA/IG9u
ZUJlZm9yZVN0YXJ0IDogc3RhcnQpOworICAgICAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3MgcnVs
ZTogU3RhcnQgMSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBzZWxlY3Rpb24uCisgICAgICAgICAgICBh
dXRvIHN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgICAgICAgICAgYXV0byBi
ZWZvcmVTdGFydCA9IHN0YXJ0LnByZXZpb3VzKCk7CisgICAgICAgICAgICBpZiAoYmVmb3JlU3Rh
cnQuaXNOb3ROdWxsKCkpCisgICAgICAgICAgICAgICAgc3RhcnQgPSBiZWZvcmVTdGFydDsKKyAg
ICAgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2Uuc3RhcnQgPSAqbWFrZUJvdW5kYXJ5UG9pbnQo
c3RhcnQpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNldFN0YXJ0KHNwZWxsaW5nU2Vh
cmNoUmFuZ2UucHRyKCksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOworICAgICAgICAgICAgc3Bl
bGxpbmdTZWFyY2hSYW5nZS5zdGFydCA9ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb24udmlz
aWJsZUVuZCgpKTsKICAgICB9CiAKLSAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IHNwZWxsaW5nU2Vh
cmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHNwZWxsaW5nU2VhcmNoUmFuZ2Uuc3RhcnQpOwogICAgIGlmICgh
aXNFZGl0YWJsZVBvc2l0aW9uKHBvc2l0aW9uKSkgewogICAgICAgICAvLyBUaGlzIHNob3VsZG4n
dCBoYXBwZW4gaW4gdmVyeSBvZnRlbiBiZWNhdXNlIHRoZSBTcGVsbGluZyBtZW51IGl0ZW1zIGFy
ZW4ndCBlbmFibGVkIHVubGVzcyB0aGUKICAgICAgICAgLy8gc2VsZWN0aW9uIGlzIGVkaXRhYmxl
LgpAQCAtMjE5NiwxMzUgKzIxOTgsMTE1IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlz
c3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgUG9zaXRp
b24gcmFuZ2VDb21wbGlhbnRQb3NpdGlvbiA9IHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpOwotICAgICAgICBpZiAocmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpKQotICAgICAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnJhbmdlQ29t
cGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcG9pbnQgPSBtYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkpCisgICAg
ICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLnN0YXJ0ID0gKnBvaW50OwogICAgICAgICBzdGFy
dGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOyAvLyB3b24ndCBuZWVkIHRvIHdyYXAKICAgICB9Ci0g
ICAgCisKICAgICAvLyB0b3BOb2RlIGRlZmluZXMgdGhlIHdob2xlIHJhbmdlIHdlIHdhbnQgdG8g
b3BlcmF0ZSBvbiAKICAgICBhdXRvKiB0b3BOb2RlID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3Np
dGlvbik7Ci0gICAgLy8gRklYTUU6IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCkgaXMgd3JvbmcgaGVy
ZSBpZiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5z
IHRydWUgKGUuZy4gYSA8dGFibGU+KQogICAgIGlmICh0b3BOb2RlKQotICAgICAgICBzcGVsbGlu
Z1NlYXJjaFJhbmdlLT5zZXRFbmQoKnRvcE5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKCp0b3BO
b2RlKSk7CisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cygqdG9wTm9kZSk7CiAKICAgICAvLyBJZiBzcGVsbGluZ1NlYXJj
aFJhbmdlIHN0YXJ0cyBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZCwgYWR2YW5jZSB0byB0aGUgbmV4
dCB3b3JkIHNvIHdlIHN0YXJ0IGNoZWNraW5nCiAgICAgLy8gYXQgYSB3b3JkIGJvdW5kYXJ5LiBH
b2luZyBiYWNrIGJ5IG9uZSBjaGFyIGFuZCB0aGVuIGZvcndhcmQgYnkgYSB3b3JkIGRvZXMgdGhl
IHRyaWNrLgogICAgIGlmIChzdGFydGVkV2l0aFNlbGVjdGlvbikgewotICAgICAgICBWaXNpYmxl
UG9zaXRpb24gb25lQmVmb3JlU3RhcnQgPSBzdGFydFZpc2libGVQb3NpdGlvbihzcGVsbGluZ1Nl
YXJjaFJhbmdlLnB0cigpLCBET1dOU1RSRUFNKS5wcmV2aW91cygpOworICAgICAgICBhdXRvIG9u
ZUJlZm9yZVN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihzcGVsbGluZ1NlYXJjaFJhbmdlLnN0YXJ0KSwgRE9XTlNUUkVBTSkucHJldmlvdXMoKTsKICAg
ICAgICAgaWYgKG9uZUJlZm9yZVN0YXJ0LmlzTm90TnVsbCgpKQotICAgICAgICAgICAgc2V0U3Rh
cnQoc3BlbGxpbmdTZWFyY2hSYW5nZS5wdHIoKSwgZW5kT2ZXb3JkKG9uZUJlZm9yZVN0YXJ0KSk7
CisgICAgICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLnN0YXJ0ID0gKm1ha2VCb3VuZGFyeVBv
aW50KGVuZE9mV29yZChvbmVCZWZvcmVTdGFydCkpOwogICAgICAgICAvLyBlbHNlIHdlIHdlcmUg
YWxyZWFkeSBhdCB0aGUgc3RhcnQgb2YgdGhlIGVkaXRhYmxlIG5vZGUKICAgICB9CiAKLSAgICBp
ZiAoc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgaWYgKHNwZWxsaW5nU2Vh
cmNoUmFuZ2UuY29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybjsgLy8gbm90aGluZyB0byBzZWFy
Y2ggaW4KLSAgICAKKwogICAgIC8vIEdldCB0aGUgc3BlbGwgY2hlY2tlciBpZiBpdCBpcyBhdmFp
bGFibGUKICAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAg
ICAgLy8gV2UgZ28gdG8gdGhlIGVuZCBvZiBvdXIgZmlyc3QgcmFuZ2UgaW5zdGVhZCBvZiB0aGUg
c3RhcnQgb2YgaXQsIGp1c3QgdG8gYmUgc3VyZQogICAgIC8vIHdlIGRvbid0IGdldCBmb2lsZWQg
YnkgYW55IHdvcmQgYm91bmRhcnkgcHJvYmxlbXMgYXQgdGhlIHN0YXJ0LiAgSXQgbWVhbnMgd2Ug
bWlnaHQKICAgICAvLyBkbyBhIHRpbnkgYml0IG1vcmUgc2VhcmNoaW5nLgotICAgIE5vZGUmIHNl
YXJjaEVuZE5vZGVBZnRlcldyYXAgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5lbmRDb250YWluZXIo
KTsKLSAgICBpbnQgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFwID0gc3BlbGxpbmdTZWFyY2hSYW5n
ZS0+ZW5kT2Zmc2V0KCk7CisgICAgYXV0byBzZWFyY2hFbmRBZnRlcldyYXAgPSBzcGVsbGluZ1Nl
YXJjaFJhbmdlLmVuZDsKICAgICAKLSAgICB1aW50NjRfdCBtaXNzcGVsbGluZ09mZnNldCA9IDA7
Ci0gICAgR3JhbW1hckRldGFpbCBncmFtbWFyRGV0YWlsOwotICAgIHVpbnQ2NF90IGdyYW1tYXJQ
aHJhc2VPZmZzZXQgPSAwOwotICAgIFJlZlB0cjxSYW5nZT4gZ3JhbW1hclNlYXJjaFJhbmdlOwot
ICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlOwotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsK
LQotICAgIGJvb2wgaXNTcGVsbGluZyA9IHRydWU7Ci0gICAgdWludDY0X3QgZm91bmRPZmZzZXQg
PSAwOwotICAgIFN0cmluZyBmb3VuZEl0ZW07Ci0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2U7CisgICAgVGV4dENoZWNraW5nSGVscGVyOjpNaXNzcGVsbGVkV29yZCBtaXNz
cGVsbGVkV29yZDsKKyAgICBUZXh0Q2hlY2tpbmdIZWxwZXI6OlVuZ3JhbW1hdGljYWxQaHJhc2Ug
dW5ncmFtbWF0aWNhbFBocmFzZTsKKyAgICBhdXRvIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxs
aW5nU2VhcmNoUmFuZ2U7CisKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7
Ci0gICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25l
UmFuZ2UoKTsKLSAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQo
KSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIo
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFt
bWFyRGV0YWlsKTsKLSAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKLSAgICAgICAgICAgIG1pc3Nw
ZWxsZWRXb3JkID0gZm91bmRJdGVtOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdPZmZzZXQgPSBm
b3VuZE9mZnNldDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJh
c2UgPSBmb3VuZEl0ZW07Ci0gICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRP
ZmZzZXQ7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdI
ZWxwZXIoKmNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGVk
V29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSk7Cisg
ICAgICAgIGlmIChhdXRvIHdvcmQgPSBXVEY6OmdldF9pZjxUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1p
c3NwZWxsZWRXb3JkPihmb3VuZEl0ZW0pKQorICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBX
VEZNb3ZlKCp3b3JkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdW5ncmFtbWF0aWNhbFBo
cmFzZSA9IFdURjo6Z2V0PFRleHRDaGVja2luZ0hlbHBlcjo6VW5ncmFtbWF0aWNhbFBocmFzZT4o
V1RGTW92ZShmb3VuZEl0ZW0pKTsKICAgICB9IGVsc2UgewotICAgICAgICBtaXNzcGVsbGVkV29y
ZCA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZp
bmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKKyAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBUZXh0Q2hlY2tpbmdIZWxwZXIo
KmNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGVkV29yZCgp
OwogCi0gICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNs
b25lUmFuZ2UoKTsKLSAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC53b3JkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Ly8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAg
ICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycygqZ3JhbW1hclNlYXJjaFJhbmdlKTsKLSAgICAg
ICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOwotICAgICAgICAgICAgZ3Jh
bW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS5zdGFydC5jb250YWluZXIsIGNo
YXJzLnJhbmdlKCkuc3RhcnQub2Zmc2V0KTsKKyAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9y
IGNoYXJhY3Rlckl0ZXJhdG9yKGdyYW1tYXJTZWFyY2hSYW5nZSk7CisgICAgICAgICAgICBjaGFy
YWN0ZXJJdGVyYXRvci5hZHZhbmNlKG1pc3NwZWxsZWRXb3JkLm9mZnNldCk7CisgICAgICAgICAg
ICBncmFtbWFyU2VhcmNoUmFuZ2UuZW5kID0gY2hhcmFjdGVySXRlcmF0b3IucmFuZ2UoKS5zdGFy
dDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVu
dCgpLCAqZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRh
aWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKKyAgICAgICAgICAgIHVuZ3JhbW1hdGlj
YWxQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFu
Z2UpLmZpbmRGaXJzdFVuZ3JhbW1hdGljYWxQaHJhc2UoKTsKICAgICB9CiAKICAgICAvLyBJZiB3
ZSBmb3VuZCBuZWl0aGVyIGJhZCBncmFtbWFyIG5vciBhIG1pc3NwZWxsZWQgd29yZCwgd3JhcCBh
bmQgdHJ5IGFnYWluIChidXQgZG9uJ3QgYm90aGVyIGlmIHdlIHN0YXJ0ZWQgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUKICAgICAvLyBibG9jayByYXRoZXIgdGhhbiBhdCBhIHNlbGVjdGlvbikuCi0g
ICAgaWYgKHN0YXJ0ZWRXaXRoU2VsZWN0aW9uICYmICFtaXNzcGVsbGVkV29yZCAmJiAhYmFkR3Jh
bW1hclBocmFzZSkgeworICAgIGlmIChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiBtaXNzcGVsbGVk
V29yZC53b3JkLmlzRW1wdHkoKSAmJiB1bmdyYW1tYXRpY2FsUGhyYXNlLnBocmFzZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgaWYgKHRvcE5vZGUpCi0gICAgICAgICAgICBzcGVsbGluZ1NlYXJjaFJh
bmdlLT5zZXRTdGFydCgqdG9wTm9kZSwgMCk7Ci0gICAgICAgIC8vIGdvaW5nIHVudGlsIHRoZSBl
bmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVkIGlzIGZhciBlbm91Z2gKLSAgICAg
ICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNl
YXJjaEVuZE9mZnNldEFmdGVyV3JhcCk7CisgICAgICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdl
LnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKnRvcE5vZGUpOwor
ICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLmVuZCA9IHNlYXJjaEVuZEFmdGVyV3JhcDsKICAg
ICAgICAgCiAgICAgICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKLSAgICAg
ICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFu
Z2UoKTsKLSAgICAgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50
KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFy
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNldCwgZ3Jh
bW1hckRldGFpbCk7Ci0gICAgICAgICAgICBpZiAoaXNTcGVsbGluZykgewotICAgICAgICAgICAg
ICAgIG1pc3NwZWxsZWRXb3JkID0gZm91bmRJdGVtOwotICAgICAgICAgICAgICAgIG1pc3NwZWxs
aW5nT2Zmc2V0ID0gZm91bmRPZmZzZXQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBmb3VuZEl0ZW07Ci0gICAgICAgICAgICAgICAgZ3Jh
bW1hclBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0OwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYXV0byBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCBzcGVsbGlu
Z1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFz
ZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSk7CisgICAgICAgICAgICBpZiAoYXV0byB3b3Jk
ID0gV1RGOjpnZXRfaWY8VGV4dENoZWNraW5nSGVscGVyOjpNaXNzcGVsbGVkV29yZD4oZm91bmRJ
dGVtKSkKKyAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFdURk1vdmUoKndvcmQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVuZ3JhbW1hdGljYWxQaHJhc2UgPSBX
VEY6OmdldDxUZXh0Q2hlY2tpbmdIZWxwZXI6OlVuZ3JhbW1hdGljYWxQaHJhc2U+KFdURk1vdmUo
Zm91bmRJdGVtKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtaXNzcGVsbGVkV29y
ZCA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZp
bmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKKyAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVs
cGVyKCpjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxlZFdv
cmQoKTsKIAotICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hS
YW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNo
UmFuZ2U7CisgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLndvcmQuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3Bl
bGxlZCB3b3JkCi0gICAgICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1t
YXJTZWFyY2hSYW5nZSk7Ci0gICAgICAgICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGlu
Z09mZnNldCk7Ci0gICAgICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hh
cnMucmFuZ2UoKS5zdGFydC5jb250YWluZXIsIGNoYXJzLnJhbmdlKCkuc3RhcnQub2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFyYWN0ZXJJdGVyYXRvcihncmFt
bWFyU2VhcmNoUmFuZ2UpOworICAgICAgICAgICAgICAgIGNoYXJhY3Rlckl0ZXJhdG9yLmFkdmFu
Y2UobWlzc3BlbGxlZFdvcmQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBncmFtbWFyU2VhcmNo
UmFuZ2UuZW5kID0gY2hhcmFjdGVySXRlcmF0b3IucmFuZ2UoKS5zdGFydDsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAg
ICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgp
LCAqZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWws
IGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB1bmdyYW1tYXRp
Y2FsUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJh
bmdlKS5maW5kRmlyc3RVbmdyYW1tYXRpY2FsUGhyYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgeworICAgIGlmICghdW5n
cmFtbWF0aWNhbFBocmFzZS5waHJhc2UuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFdlIGZvdW5k
IGJhZCBncmFtbWFyLiBTaW5jZSB3ZSBvbmx5IHNlYXJjaGVkIGZvciBiYWQgZ3JhbW1hciB1cCB0
byB0aGUgZmlyc3QgbWlzc3BlbGxlZCB3b3JkLCB0aGUgYmFkIGdyYW1tYXIKICAgICAgICAgLy8g
dGFrZXMgcHJlY2VkZW5jZSBhbmQgd2UgaWdub3JlIGFueSBwb3RlbnRpYWwgbWlzc3BlbGxlZCB3
b3JkLiBTZWxlY3QgdGhlIGdyYW1tYXIgZGV0YWlsLCB1cGRhdGUgdGhlIHNwZWxsaW5nCiAgICAg
ICAgIC8vIHBhbmVsLCBhbmQgc3RvcmUgYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgZ3JlZW4gc3F1
aWdnbGUgbGF0ZXIuCiAgICAgICAgIAotICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZS5s
ZW5ndGgoKSA+IDApOwotICAgICAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5yYW5nZS5sZW5ndGgg
PiAwKTsKKyAgICAgICAgQVNTRVJUKHVuZ3JhbW1hdGljYWxQaHJhc2UucGhyYXNlLmxlbmd0aCgp
ID4gMCk7CisgICAgICAgIEFTU0VSVCh1bmdyYW1tYXRpY2FsUGhyYXNlLmRldGFpbC5yYW5nZS5s
ZW5ndGggPiAwKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0
cyBjb25mdXNlZCB3aXRoIGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFn
cmFwaAotICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5n
ZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCB7IGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0
YWlsLnJhbmdlLmxvY2F0aW9uLCBncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0aCB9KTsKKyAgICAg
ICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5j
dHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLgorICAgICAgICBhdXRvIGJhZEdyYW1t
YXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShncmFtbWFyU2VhcmNoUmFuZ2UsIHsgdW5n
cmFtbWF0aWNhbFBocmFzZS5vZmZzZXQgKyB1bmdyYW1tYXRpY2FsUGhyYXNlLmRldGFpbC5yYW5n
ZS5sb2NhdGlvbiwgdW5ncmFtbWF0aWNhbFBocmFzZS5kZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwog
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCi0gICAgICAg
IGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBo
cmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1h
cmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBncmFtbWFyRGV0
YWlsLnVzZXJEZXNjcmlwdGlvbik7Ci0gICAgfSBlbHNlIGlmICghbWlzc3BlbGxlZFdvcmQuaXNF
bXB0eSgpKSB7CisgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcodW5ncmFtbWF0aWNhbFBocmFzZS5waHJhc2UsIHVuZ3JhbW1hdGljYWxQaHJhc2UuZGV0
YWlsKTsKKyAgICAgICAgYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OkdyYW1tYXIsIHVuZ3JhbW1hdGljYWxQaHJhc2UuZGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7Cisg
ICAgfSBlbHNlIGlmICghbWlzc3BlbGxlZFdvcmQud29yZC5pc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gV2UgZm91bmQgYSBtaXNzcGVsbGluZywgYnV0IG5vdCBhbnkgZWFybGllciBiYWQgZ3JhbW1h
ci4gU2VsZWN0IHRoZSBtaXNzcGVsbGluZywgdXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCwgYW5k
IHN0b3JlCiAgICAgICAgIC8vIGEgbWFya2VyIHNvIHdlIGRyYXcgdGhlIHJlZCBzcXVpZ2dsZSBs
YXRlci4KICAgICAgICAgCi0gICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShzcGVsbGluZ1NlYXJjaFJhbmdlLCB7IG1pc3NwZWxsaW5nT2Zmc2V0LCBt
aXNzcGVsbGVkV29yZC5sZW5ndGgoKSB9KTsKKyAgICAgICAgYXV0byBtaXNzcGVsbGluZ1Jhbmdl
ID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3BlbGxl
ZFdvcmQub2Zmc2V0LCBtaXNzcGVsbGVkV29yZC53b3JkLmxlbmd0aCgpIH0pOwogICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3Nw
ZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCi0gICAgICAgIGNsaWVudCgpLT51cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKLSAgICAgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7CisgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkLndvcmQpOworICAgICAgICBhZGRNYXJrZXIobWlz
c3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICB9CiB9CiAKQEAg
LTIzODYsMTQgKzIzNjgsNiBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkU2VsZWN0aW9uU3Ry
aW5nKCkgY29uc3QKICAgICByZXR1cm4gc2VsZWN0ZWRTdHJpbmc7CiB9CiAKLWJvb2wgRWRpdG9y
Ojppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQotewotICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYg
KCFyYW5nZSB8fCAhY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
VGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsK
LX0KLQogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJiB3b3JkKSBjb25zdAogewogICAgIEFTU0VSVCh3b3JkLmxlbmd0aCgpKTsKQEAg
LTI0MDQsMzAgKzIzNzgsMjYgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKSBjb25zdAogICAgIHJldHVybiBndWVzc2Vz
OwogfQogCi1WZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCitUZXh0Q2hl
Y2tpbmdHdWVzc2VzIEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwo
KQogewogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGF1dG8g
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAg
aWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5n
U3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7
CisgICAgICAgICAgICBhdXRvIHdvcmRTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVj
dGlvbi5iYXNlKCkpOwogICAgICAgICAgICAgd29yZFNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51
bGFyaXR5KFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJh
bmdlID0gd29yZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
ICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxT
dHJpbmc+KCk7Ci0gICAgICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAq
cmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50
KCksICpyYW5nZSkuZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNl
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKTsKICAgICB9CiAKLSAgICBTdHJpbmcgbWlzc3Bl
bGxlZFdvcmQgPSBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhv
dXRTZWxlY3Rpb24oKSA/IG1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoZG9jdW1lbnQoKS5m
b2N1c2VkRWxlbWVudCgpKSA6IG1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKTsKLSAgICBtaXNz
cGVsbGVkID0gIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKTsKLSAgICAvLyBPbmx5IHVuaWZpZWQg
dGV4dCBjaGVja2VyIHN1cHBvcnRzIGd1ZXNzZXMgZm9yIHVuZ3JhbW1hdGljYWwgcGhyYXNlcy4K
LSAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0KLSAgICBpZiAobWlzc3BlbGxlZCkKLSAgICAg
ICAgcmV0dXJuIGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0gICAg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAgYXV0byBtaXNzcGVsbGVkV29yZCA9IGJlaGF2
aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpID8g
bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkp
IDogbWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpOworICAgIGlmIChtaXNzcGVsbGVkV29yZC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgZ3Vlc3Nlc0Zvck1p
c3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKSwgdHJ1ZSwgZmFsc2UgfTsKIH0KIAogdm9pZCBF
ZGl0b3I6OnNob3dTcGVsbGluZ0d1ZXNzUGFuZWwoKQpAQCAtMjQ1OCw3ICsyNDI4LDcgQEAgYm9v
bCBFZGl0b3I6OnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKQogdm9pZCBFZGl0b3I6OmNsZWFyTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtb3ZpbmdTZWxl
Y3Rpb24pCiB7CiAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1vdmluZ1NlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpKQotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVN
YXJrZXJzKCpzZWxlY3RlZFJhbmdlLCB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIgfSk7CisgICAgICAgIHJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFu
Z2UsIHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciB9
KTsKIH0KIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGlvbikKQEAgLTI1NjcsOCArMjUzNyw4IEBA
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIC8vIGNhdXNlIGFueSBvdGhlciBwYXJ0
IG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlIHRvIGxvc2Ugb3IgZ2FpbiBzcGVsbGluZyBjb3JyZWN0
aW9uIG1hcmtlcnMsIGR1ZSB0bwogICAgICAgICAvLyBzZW50ZW5jZSByZXRybyBjb3JyZWN0aW9u
LiBBcyBzdWNoLCB3ZSBleHBhbmQgdGhlIHNwZWxsIGNoZWNraW5nIHJhbmdlIHRvIGVuY29tcGFz
cyBhcyBtdWNoIG9mIHRoZQogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNhbiwgcmVz
cGVjdGluZyBib3VuZGFyaWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQuCi0gICAg
ICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVN
YXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAg
ICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKnNwZWxsQ2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsK
KyAgICAgICAgcmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpHcmFtbWFyKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1JhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hlY2tpbmdSYW5n
ZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGZ1bGxTZW50ZW5jZVJhbmdlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTI2NDAsMTkgKzI2MTAsMTYgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVk
aXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW8K
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBUZXh0Q2hlY2tpbmdIZWxw
ZXIgY2hlY2tlcigqY2xpZW50KCksICpzZWFyY2hSYW5nZSk7Ci0gICAgaWYgKGNoZWNrU3BlbGxp
bmcpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlOwot
ICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGluZ3MoZmlyc3RNaXNzcGVsbGluZ0xpdmVS
YW5nZSk7Ci0gICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoZmlyc3RNaXNzcGVsbGluZ0xp
dmVSYW5nZSk7Ci0gICAgfQorICAgIGlmIChjaGVja1NwZWxsaW5nKQorICAgICAgICByZXR1cm4g
Y2hlY2tlci5tYXJrQWxsTWlzc3BlbGxlZFdvcmRzKCk7CiAgICAgaWYgKGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQotICAgICAgICBjaGVja2VyLm1hcmtBbGxCYWRHcmFtbWFyKCk7CisgICAg
ICAgIGNoZWNrZXIubWFya0FsbFVuZ3JhbW1hdGljYWxQaHJhc2VzKCk7CiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CiAgICAgVU5V
U0VEX1BBUkFNKGNoZWNrU3BlbGxpbmcpOwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0jZW5k
aWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCisjZW5kaWYKIH0KIAogYm9vbCBFZGl0b3I6Omlz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKQEAgLTI3MTcsOSArMjY4
NCwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIGJvb2wgYXN5bmNocm9ub3VzID0g
bV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkg
JiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CiAKICAgICAvLyBJbiBhc3luY2hyb25vdXMg
bW9kZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgtd2lkZSBzZW50ZW5jZS4KLSAg
ICBjb25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFz
ayhlZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlvbnMpOworICAgIGF1dG8gcmVzb2x2ZWRP
cHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENo
ZWNraW5nT3B0aW9ucyk7CisgICAgYXV0byYgcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhUb0No
ZWNrLnBhcmFncmFwaFJhbmdlKCk7CisgICAgYXV0byYgY2hlY2tpbmdSYW5nZSA9IGFzeW5jaHJv
bm91cyA/IHBhcmFncmFwaFJhbmdlIDogcmFuZ2VUb0NoZWNrOwogICAgIGF1dG8mIHRleHRSZXBs
YWNlbWVudFJhbmdlID0gYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA/ICphdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlIDogcmFuZ2VUb0NoZWNrOwotICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hl
Y2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5j
cmVtZW50YWwsIGFzeW5jaHJvbm91cyA/IFJlZjxSYW5nZT4geyBwYXJhZ3JhcGhUb0NoZWNrLnBh
cmFncmFwaFJhbmdlKCkgfSA6IGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvQ2hlY2spLCBjcmVhdGVM
aXZlUmFuZ2UodGV4dFJlcGxhY2VtZW50UmFuZ2UpLCBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFw
aFJhbmdlKCkpOworICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUo
cmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGNoZWNraW5n
UmFuZ2UsIHRleHRSZXBsYWNlbWVudFJhbmdlLCBwYXJhZ3JhcGhSYW5nZSk7CiAgICAgaWYgKCFy
ZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTI3NTcsMTIgKzI3MjYsMTIgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlVG9SZXBsYWNlLCBjb24KICAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUo
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwog
fQogCi1zdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgsIFJhbmdlJiByYW5n
ZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVz
dWx0Q2hhcmFjdGVyUmFuZ2UpCitzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNl
cnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3Jh
cGgsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFuZ2UpCiB7CiAgICAgYXV0
byBzY29wZU5vZGUgPSBtYWtlUmVmKGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHBhcmFncmFwaC5w
YXJhZ3JhcGhSYW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkpOwogICAgIGF1dG8g
cGFyYWdyYXBoQ2hhcmFjdGVyUmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cyhzY29wZU5vZGUpLCBwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2Uo
KSk7CiAKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1JlcGxh
Y2UsIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
OjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgcmVwbGFjZW1lbnQpLT5h
cHBseSgpOwogCiAgICAgLy8gVGV4dENoZWNraW5nUGFyYWdyYXBoIG1heSBiZSBvcnBoYW5lZCBh
ZnRlciBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG11dGF0ZWQgRE9NLgogICAgIC8vIFNlZSA8
cmRhcjovLzEwMzA1MzE1PiwgaHR0cDovL3dlYmtpdC5vcmcvYi84OTUyNi4KQEAgLTI3NzAsNyAr
MjczOSw3IEBAIHN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRD
aGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhCiAgICAgcGFyYWdyYXBoQ2hhcmFjdGVy
UmFuZ2UubGVuZ3RoICs9IHJlcGxhY2VtZW50Lmxlbmd0aCgpIC0gcmVzdWx0Q2hhcmFjdGVyUmFu
Z2UubGVuZ3RoOwogICAgIGF1dG8gbmV3UGFyYWdyYXBoUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHNjb3BlTm9kZSksIHBhcmFncmFw
aENoYXJhY3RlclJhbmdlKTsKICAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShuZXdQYXJhZ3JhcGhSYW5nZSwgeyByZXN1bHRDaGFyYWN0ZXJSYW5nZS5s
b2NhdGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkgfSk7Ci0gICAgcGFyYWdyYXBoID0gVGV4dENo
ZWNraW5nUGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVh
dGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1BhcmFn
cmFwaFJhbmdlKSk7CisgICAgcGFyYWdyYXBoID0gVGV4dENoZWNraW5nUGFyYWdyYXBoKHNwZWxs
Q2hlY2tpbmdSYW5nZSwgc3BlbGxDaGVja2luZ1JhbmdlLCBuZXdQYXJhZ3JhcGhSYW5nZSk7CiB9
CiAKIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCkBA
IC0yNzc4LDE1ICsyNzQ3LDE1IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25z
dCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgUmVmPERv
Y3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAogICAgIGF1dG8gdGV4dENo
ZWNraW5nT3B0aW9ucyA9IHJlcXVlc3QuZGF0YSgpLmNoZWNraW5nVHlwZXMoKTsKLSAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHJlcXVlc3QuY2hlY2tpbmdSYW5nZSgpLCByZXF1
ZXN0LmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoKSwgJnJlcXVlc3QucGFyYWdyYXBoUmFuZ2Uo
KSk7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChyZXF1ZXN0LmNoZWNraW5n
UmFuZ2UoKSwgcmVxdWVzdC5hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKCksIHJlcXVlc3QucGFy
YWdyYXBoUmFuZ2UoKSk7CiAKICAgICAvLyBGSVhNRTogTWFyayB0aGlzIGNvbnN0IG9uY2UgTVNW
QyBidWcgaXMgZml4ZWQ6IDxodHRwczovL2RldmVsb3BlcmNvbW11bml0eS52aXN1YWxzdHVkaW8u
Y29tL2NvbnRlbnQvcHJvYmxlbS8zMTY3MTMvbXN2Yy1jYW50LWNvbXBpbGUtd2Via2l0cy1vcHRp
b25zZXRjb250YWluc2FueS5odG1sPi4KICAgICBib29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVu
dCA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnNBbnkoeyBUZXh0Q2hlY2tpbmdUeXBlOjpR
dW90ZSwgVGV4dENoZWNraW5nVHlwZTo6RGFzaCwgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1l
bnQgfSk7Ci0gICAgY29uc3QgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdP
cHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKLSAgICBjb25zdCBi
b29sIHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0
Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKLSAgICBjb25zdCBib29sIHNob3VsZE1hcmtMaW5rID0g
dGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKTsKLSAg
ICBjb25zdCBib29sIHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgPSB0ZXh0Q2hlY2tpbmdPcHRp
b25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwpOwotICAg
IGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tGb3JDb3JyZWN0aW9uID0gc2hvdWxkU2hvd0NvcnJlY3Rp
b25QYW5lbCB8fCB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6
OkNvcnJlY3Rpb24pOworICAgIGJvb2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNraW5n
T3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CisgICAgYm9vbCBz
aG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNr
aW5nVHlwZTo6R3JhbW1hcik7CisgICAgYm9vbCBzaG91bGRNYXJrTGluayA9IHRleHRDaGVja2lu
Z09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluayk7CisgICAgYm9vbCBzaG91
bGRTaG93Q29ycmVjdGlvblBhbmVsID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0
Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsKTsKKyAgICBib29sIHNob3VsZENoZWNr
Rm9yQ29ycmVjdGlvbiA9IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgfHwgdGV4dENoZWNraW5n
T3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKTsKICNpZiAhVVNF
KEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogICAgIEFTU0VSVCghc2hvdWxkU2hvd0NvcnJlY3Rpb25Q
YW5lbCk7CiAjZW5kaWYKQEAgLTI4MzQsMTQgKzI4MDMsMTQgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0
b3I8VGUKICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHBhcmFncmFwaC5zdWJy
YW5nZSh7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGggfSk7CiAgICAgICAgICAgICBpZiAo
IW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlz
c3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBt
aXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxh
Y2VtZW50KTsKKyAgICAgICAgICAgIGFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRNYXJrR3JhbW1hciAmJiByZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIg
JiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMoeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0
TGVuZ3RoIH0pKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1
bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZGV0YWlsIDogcmVzdWx0
c1tpXS5kZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC5yYW5nZS5sZW5n
dGggPiAwICYmIGRldGFpbC5yYW5nZS5sb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgICAgICBp
ZiAocGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMoeyByZXN1bHRMb2NhdGlvbiArIGRldGFp
bC5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLnJhbmdlLmxlbmd0aCB9KSkgewogICAgICAgICAgICAg
ICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZSh7IHJlc3Vs
dExvY2F0aW9uICsgZGV0YWlsLnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwucmFuZ2UubGVuZ3RoIH0p
OwotICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OkdyYW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAg
ICAgICBhZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwg
ZGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdEVuZExvY2F0aW9uIDw9IGF1dG9tYXRpY1JlcGxh
Y2VtZW50RW5kTG9jYXRpb24gJiYgcmVzdWx0RW5kTG9jYXRpb24gPj0gcGFyYWdyYXBoLmF1dG9t
YXRpY1JlcGxhY2VtZW50U3RhcnQoKQpAQCAtMjg2OCw3ICsyODM3LDcgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgU3Ry
aW5nIHJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlKTsKLSAgICAgICAg
ICAgIGNvbnN0IGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQgPSBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQocmVzdWx0c1tpXSwgcmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VkU3RyaW5nKTsKKyAgICAg
ICAgICAgIGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1
bHQocmVzdWx0c1tpXSwgcmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAg
ICAgIGlmICghZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTI4OTQsNyArMjg2Myw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRlCiAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgICAgICAgICAg
ICAgQ3JlYXRlTGlua0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCByZXBsYWNlbWVudCktPmFw
cGx5KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRU
ZXh0KHJlcGxhY2VtZW50LCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkg
JiYgc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlbWVudCwgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvcklu
c2VydEFjdGlvbjo6VHlwZWQpKSB7CiAgICAgICAgICAgICAgICAgY29ycmVjdFNwZWxsY2hlY2tp
bmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKHBhcmFncmFwaCwgcmFuZ2VUb1JlcGxh
Y2UsIHJlcGxhY2VtZW50LCB7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGggfSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKSB7CkBAIC0yOTEzLDcgKzI4ODIsNyBAQCB2b2lkIEVkaXRvcjo6
bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFZlY3RvcjxUZQogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZTo6Q29ycmVjdGlvbikgewogICAgICAgICAgICAgICAgICAgICBhdXRvIHJlcGxhY2Vt
ZW50UmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UoeyByZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1l
bnQubGVuZ3RoKCkgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3Bv
bnNlOjpBY2NlcHRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQsIHJl
cGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFJhbmdlKTsKIAogICAgICAgICAgICAgICAgICAgICAv
LyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBh
bmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgogICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPm1hcmtDb3JyZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UsIHJlcGxh
Y2VkU3RyaW5nKTsKQEAgLTI5MjgsNyArMjg5Nyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRl
CiAgICAgICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7CiAgICAg
ICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgJiYgc2VsZWN0aW9uT2Zmc2V0IDw9
IGV4dGVuZGVkUGFyYWdyYXBoLnJhbmdlTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIGF1dG8gc2Vs
ZWN0aW9uUmFuZ2UgPSBleHRlbmRlZFBhcmFncmFwaC5zdWJyYW5nZSh7IDAsIHNlbGVjdGlvbk9m
ZnNldCB9KTsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKHNlbGVj
dGlvblJhbmdlLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihzZWxl
Y3Rpb25SYW5nZS5lbmQpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIGlmIChhZGp1c3RTZWxl
Y3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzKQogICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpGb3J3YXJkLCBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFy
aXR5KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTI5NTUsNyArMjkyNCw3IEBAIHZvaWQgRWRpdG9y
OjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
KQogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKCpz
ZWxlY3Rpb24pKTsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcs
IFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5z
ZXJ0KTsKICAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShDaGFyYWN0
ZXJSYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgo
KSkpOwotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQs
IFN0cmluZygpKTsKKyAgICBhZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
Pm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2UpOwogI2Vsc2UKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTMwNzUsNyArMzA0NCw3IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9y
V29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAg
ICAgIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLAogI2VuZGlmCiAgICAgfTsKLSAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZSwgbWFya2VyVHlwZXNUb1JlbW92
ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CisgICAgcmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UsIG1hcmtlclR5cGVzVG9SZW1vdmUs
IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyOjpZZXMpOwogICAgIGRvY3VtZW50KCku
bWFya2VycygpLmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3Jk
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiB9CiAKQEAgLTM2MTUsNyArMzU4
NCw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
IHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlCiAgICAgICAgICAgICBtYXRjaGVzLT5hcHBl
bmQoY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSk7CiAKICAgICAgICAgaWYgKG1hcmtNYXRj
aGVzKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICAgICAgICAgIGFkZE1hcmtlcihy
ZXN1bHRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAKICAgICAgICAgLy8gU3Rv
cCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9mIDAgbWVh
bnMgbm8gbGltaXQuCiAgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1p
dCkKQEAgLTM3MzIsNyArMzcwMSw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVs
ZXBob25lTnVtYmVycygpCiAgICAgICAgICAgICBhdXRvIHNlbGVjdGVkTGl2ZVJhbmdlID0gY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmFu
Z2UgOiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVkUmFu
Z2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdo
eSBkbyB3ZSBkbyB0aGlzIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlIGNvZGUgYmVsb3cgdGhpcyBv
bmx5IHdoZW4gaXQgb3ZlcmxhcHMgdGhlIHNlbGVjdGlvbj8KLSAgICAgICAgICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhv
bmVOdW1iZXIpOworICAgICAgICAgICAgICAgIGFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlRlbGVwaG9uZU51bWJlcik7CiAKICAgICAgICAgICAgICAgICAvLyBPbmx5IGNvbnNpZGVy
IHJhbmdlcyB3aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0aGV5IG92ZXJsYXAg
d2l0aCB0aGUgYWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KICAgICAgICAgICAgICAgICBpZiAocmFu
Z2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBzZWxlY3RlZExpdmVSYW5n
ZS5wdHIoKSkpCkBAIC0zODA0LDExICszNzczLDExIEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVw
ZGF0ZVRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hl
Y2tlcigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tp
bmdUeXBlOjpTcGVsbGluZykpIHsKICAgICAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IG5l
d0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTWFya2Vycygqd29yZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9CiAgICAgICAgIGlmICghdGV4dENo
ZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNl
bGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICAgICAgaWYgKGF1
dG8gc2VudGVuY2VSYW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpz
ZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgICAgICAgICAgICAg
cmVtb3ZlTWFya2Vycygqc2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC00MjMxLDcgKzQyMDAsNyBAQCB2b2lkIEVkaXRvcjo6aGFu
ZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRl
KQogCiAgICAgUmVmUHRyPFJhbmdlPiBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlID0gcmFuZ2VFeHBh
bmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudC5sZW5ndGgoKSwgU2VsZWN0
aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgaWYgKGluc2VydGVkQ2FuZGlkYXRlUmFuZ2Up
Ci0gICAgICAgIGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCppbnNlcnRlZENhbmRpZGF0ZVJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50
KTsKKyAgICAgICAgYWRkTWFya2VyKCppbnNlcnRlZENhbmRpZGF0ZVJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsK
IAogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gZmFsc2U7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAppbmRleCBhOTdjYjQyM2IwODU3NzRjZTg2YWVmYTQyMGYzMjc2NjE0MzNj
MGYxLi5jYmIxZWZjZTcyMGQwNmFjMzI3ZmIzYmY4MTFkOTBjMGIwMGQ1MjllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKQEAgLTMxOSwxMSArMzE5LDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
bWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpIGNvbnN0OwogICAgIFN0cmluZyBtaXNzcGVsbGVk
V29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdDsKICAgICBWZWN0b3I8
U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9v
bCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CisgICAgVGV4dENoZWNraW5nR3Vl
c3NlcyBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCgpOwogICAgIGJvb2wgaXNT
cGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdDsKICAgICBib29sIGlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGlu
ZywgYm9vbCBkb1JlcGxhY2VtZW50KTsKLSAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFya01p
c3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7IC8vIFJldHVybnMgZmlyc3QgbWlz
cGVsbGluZyByYW5nZS4KKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFya01pc3NwZWxsaW5n
cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7IC8vIFJldHVybnMgZmlyc3QgbWlzc3BlbGxpbmcg
cmFuZ2UuCiAgICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7
CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAgICAgdm9pZCBtYXJrQW5kUmVwbGFjZUZv
cihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggNTBjMTc1
M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0OThmZjI0OTRlZS4uNmM5ODczNzBmYTE1MDE4NTI5MDk1
NWUzZmFmZWJjMzNlMmFhZTc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2Vy
LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDM0ICszMSwzMyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgotI2luY2x1
ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNwZWxs
Q2hlY2tSZXF1ZXN0OjpTcGVsbENoZWNrUmVxdWVzdChSZWY8UmFuZ2U+JiYgY2hlY2tpbmdSYW5n
ZSwgUmVmPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIFJlZjxSYW5nZT4mJiBw
YXJhZ3JhcGhSYW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNraW5n
VHlwZT4gbWFzaywgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUpCi0gICAgOiBt
X2NoZWNraW5nUmFuZ2UoV1RGTW92ZShjaGVja2luZ1JhbmdlKSkKLSAgICAsIG1fYXV0b21hdGlj
UmVwbGFjZW1lbnRSYW5nZShXVEZNb3ZlKGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UpKQotICAg
ICwgbV9wYXJhZ3JhcGhSYW5nZShXVEZNb3ZlKHBhcmFncmFwaFJhbmdlKSkKLSAgICAsIG1fcm9v
dEVkaXRhYmxlRWxlbWVudChtX2NoZWNraW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucm9vdEVk
aXRhYmxlRWxlbWVudCgpKQotICAgICwgbV9yZXF1ZXN0RGF0YShXVEY6Om51bGxvcHQsIHRleHQs
IG1hc2ssIHByb2Nlc3NUeXBlKQorU3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0
KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0
b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdl
LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBvcHRpb25z
LCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSB0eXBlKQorICAgIDogbV9jaGVja2luZ1JhbmdlKGNo
ZWNraW5nUmFuZ2UpCisgICAgLCBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoYXV0b21hdGlj
UmVwbGFjZW1lbnRSYW5nZSkKKyAgICAsIG1fcGFyYWdyYXBoUmFuZ2UocGFyYWdyYXBoUmFuZ2Up
CisgICAgLCBtX3Jvb3RFZGl0YWJsZUVsZW1lbnQobV9jaGVja2luZ1JhbmdlLnN0YXJ0LmNvbnRh
aW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICwgbV9yZXF1ZXN0RGF0YShXVEY6Om51
bGxvcHQsIHRleHQsIG9wdGlvbnMsIHR5cGUpCiB7CiB9CiAKIFNwZWxsQ2hlY2tSZXF1ZXN0Ojp+
U3BlbGxDaGVja1JlcXVlc3QoKSA9IGRlZmF1bHQ7CiAKLVJlZlB0cjxTcGVsbENoZWNrUmVxdWVz
dD4gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4g
dGV4dENoZWNraW5nT3B0aW9ucywgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUs
IFJlZjxSYW5nZT4mJiBjaGVja2luZ1JhbmdlLCBSZWY8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFj
ZW1lbnRSYW5nZSwgUmVmPFJhbmdlPiYmIHBhcmFncmFwaFJhbmdlKQorUmVmUHRyPFNwZWxsQ2hl
Y2tSZXF1ZXN0PiBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKE9wdGlvblNldDxUZXh0Q2hlY2tp
bmdUeXBlPiBvcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSB0eXBlLCBjb25zdCBTaW1w
bGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5nZSkKIHsKLSAgICBT
dHJpbmcgdGV4dCA9IGNoZWNraW5nUmFuZ2UtPnRleHQoKTsKLSAgICBpZiAoIXRleHQubGVuZ3Ro
KCkpCisgICAgU3RyaW5nIHRleHQgPSBwbGFpblRleHQoY2hlY2tpbmdSYW5nZSk7CisgICAgaWYg
KHRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNwZWxsQ2hlY2tSZXF1ZXN0KFdURk1vdmUoY2hlY2tpbmdSYW5nZSksIFdU
Rk1vdmUoYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSksIFdURk1vdmUocGFyYWdyYXBoUmFuZ2Up
LCB0ZXh0LCB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBwcm9jZXNzVHlwZSkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNwZWxsQ2hlY2tSZXF1ZXN0KGNoZWNraW5nUmFuZ2UsIGF1dG9tYXRpY1Jl
cGxhY2VtZW50UmFuZ2UsIHBhcmFncmFwaFJhbmdlLCB0ZXh0LCBvcHRpb25zLCB0eXBlKSk7CiB9
CiAKIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiBTcGVsbENoZWNrUmVxdWVzdDo6ZGF0
YSgpIGNvbnN0CkBAIC0xMzQsMTkgKzEzNCwxOCBAQCBib29sIFNwZWxsQ2hlY2tlcjo6aXNBc3lu
Y2hyb25vdXNFbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9kb2N1bWVudC5zZXR0aW5ncygp
LmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVj
a2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlJiByYW5nZSkgY29uc3QKK2Jvb2wgU3Bl
bGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gY2xpZW50KCkgJiYgaXNDaGVja2FibGUocmFuZ2UpICYm
IGlzQXN5bmNocm9ub3VzRW5hYmxlZCgpOwogfQogCi1ib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVj
a2FibGUoUmFuZ2UmIHJhbmdlKSBjb25zdAorYm9vbCBTcGVsbENoZWNrZXI6OmlzQ2hlY2thYmxl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBpZiAoIXJhbmdlLmZpcnN0
Tm9kZSgpIHx8ICFyYW5nZS5maXJzdE5vZGUoKS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGNvbnN0IE5vZGUmIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOwot
ICAgIGlmIChpczxFbGVtZW50Pihub2RlKSAmJiAhZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuaXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgIGF1dG8gZmlyc3ROb2RlID0gY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKS0+Zmlyc3ROb2RlKCk7CisgICAgaWYgKCFmaXJzdE5vZGUgfHwgIWZpcnN0Tm9k
ZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwor
ICAgIGF1dG8mIG5vZGUgPSByYW5nZS5zdGFydC5jb250YWluZXIuZ2V0KCk7CisgICAgcmV0dXJu
ICFpczxFbGVtZW50Pihub2RlKSB8fCBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5pc1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgU3BlbGxDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdG
b3IoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0yMTksNyArMjE4LDcgQEAg
dm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3REYXRhLmNoZWNraW5n
VHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkKICAgICAgICAgICAg
IG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIGlmICgh
bWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9kb2N1bWVudC5tYXJrZXJzKCku
cmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtl
clR5cGVzKTsKKyAgICAgICAgICAgIHJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+
Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50
aWZpZXIsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5k
ZXggZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4YTg2NjA4YTgxMTkzYy4uMDU1MjVkNjhjMjc2
YjMxNjllYWEyYzNiNDAwMGEwYjc2ZTZjODhhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
Q2hlY2tlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNTMgKzI3LDQ3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkVsZW1lbnQu
aCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRnJhbWU7Ci1jbGFzcyBOb2RlOwotY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7
CiBjbGFzcyBTcGVsbENoZWNrZXI7CitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIAotY2xhc3Mg
U3BlbGxDaGVja1JlcXVlc3QgOiBwdWJsaWMgVGV4dENoZWNraW5nUmVxdWVzdCB7CitjbGFzcyBT
cGVsbENoZWNrUmVxdWVzdCBmaW5hbCA6IHB1YmxpYyBUZXh0Q2hlY2tpbmdSZXF1ZXN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBjcmVhdGUoT3B0aW9u
U2V0PFRleHRDaGVja2luZ1R5cGU+LCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSwgUmVmPFJhbmdl
PiYmIGNoZWNraW5nUmFuZ2UsIFJlZjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdl
LCBSZWY8UmFuZ2U+JiYgcGFyYWdyYXBoUmFuZ2UpOworICAgIHN0YXRpYyBSZWZQdHI8U3BlbGxD
aGVja1JlcXVlc3Q+IGNyZWF0ZShPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFRleHRDaGVj
a2luZ1Byb2Nlc3NUeXBlLCBjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3Qg
U2ltcGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdl
JiBwYXJhZ3JhcGhSYW5nZSk7CiAgICAgdmlydHVhbCB+U3BlbGxDaGVja1JlcXVlc3QoKTsKIAot
ICAgIFJhbmdlJiBjaGVja2luZ1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2luZ1Jhbmdl
LmdldCgpOyB9Ci0gICAgUmFuZ2UmIHBhcmFncmFwaFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9w
YXJhZ3JhcGhSYW5nZS5nZXQoKTsgfQotICAgIFJhbmdlJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLmdldCgpOyB9
CisgICAgY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X2NoZWNraW5nUmFuZ2U7IH0KKyAgICBjb25zdCBTaW1wbGVSYW5nZSYgcGFyYWdyYXBoUmFuZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3BhcmFncmFwaFJhbmdlOyB9CisgICAgY29uc3QgU2ltcGxlUmFu
Z2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2U7IH0KICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9yb290RWRpdGFibGVFbGVtZW50LmdldCgpOyB9CiAKICAgICB2b2lk
IHNldENoZWNrZXJBbmRJZGVudGlmaWVyKFNwZWxsQ2hlY2tlciosIFRleHRDaGVja2luZ1JlcXVl
c3RJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlcXVlc3RlckRlc3Ryb3llZCgpOwogICAgIGJvb2wg
aXNTdGFydGVkKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2VyOyB9CiAKLSAgICBjb25zdCBUZXh0
Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgZGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZGlk
U3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGlkQ2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgVGV4dENoZWNraW5nUmVxdWVz
dERhdGEmIGRhdGEoKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBTcGVsbENoZWNrUmVx
dWVzdChSZWY8UmFuZ2U+JiYgY2hlY2tpbmdSYW5nZSwgUmVmPFJhbmdlPiYmIGF1dG9tYXRpY1Jl
cGxhY2VtZW50UmFuZ2UsIFJlZjxSYW5nZT4mJiBwYXJhZ3JhcGhSYW5nZSwgY29uc3QgU3RyaW5n
JiwgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSk7
CisgICAgdm9pZCBkaWRTdWNjZWVkKGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jikg
ZmluYWw7CisgICAgdm9pZCBkaWRDYW5jZWwoKSBmaW5hbDsKKworICAgIFNwZWxsQ2hlY2tSZXF1
ZXN0KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYg
YXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJh
bmdlLCBjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFRleHRDaGVj
a2luZ1Byb2Nlc3NUeXBlKTsKIAogICAgIFNwZWxsQ2hlY2tlciogbV9jaGVja2VyIHsgbnVsbHB0
ciB9OwotICAgIFJlZjxSYW5nZT4gbV9jaGVja2luZ1JhbmdlOwotICAgIFJlZjxSYW5nZT4gbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlOwotICAgIFJlZjxSYW5nZT4gbV9wYXJhZ3JhcGhSYW5n
ZTsKKyAgICBTaW1wbGVSYW5nZSBtX2NoZWNraW5nUmFuZ2U7CisgICAgU2ltcGxlUmFuZ2UgbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlOworICAgIFNpbXBsZVJhbmdlIG1fcGFyYWdyYXBoUmFu
Z2U7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fcm9vdEVkaXRhYmxlRWxlbWVudDsKICAgICBUZXh0
Q2hlY2tpbmdSZXF1ZXN0RGF0YSBtX3JlcXVlc3REYXRhOwogfTsKIAogY2xhc3MgU3BlbGxDaGVj
a2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVsbENoZWNrZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiAKQEAgLTgwLDI0ICs3NSwxNSBAQCBw
dWJsaWM6CiAgICAgflNwZWxsQ2hlY2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0Vu
YWJsZWQoKSBjb25zdDsKLSAgICBib29sIGlzQ2hlY2thYmxlKFJhbmdlJikgY29uc3Q7CisgICAg
Ym9vbCBpc0NoZWNrYWJsZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0OwogCiAgICAgdm9pZCBy
ZXF1ZXN0Q2hlY2tpbmdGb3IoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmKTsKIAotICAgIFRleHRD
aGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGxhc3RSZXF1ZXN0SWRlbnRpZmllcigpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9sYXN0UmVxdWVzdElkZW50aWZpZXI7Ci0gICAgfQotCi0g
ICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbGFzdFByb2Nlc3NlZElkZW50aWZpZXIo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7
Ci0gICAgfQorICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGxhc3RSZXF1ZXN0SWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOyB9CisgICAg
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbGFzdFByb2Nlc3NlZElkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOyB9CiAKIHByaXZhdGU6Ci0g
ICAgdHlwZWRlZiBEZXF1ZTxSZWY8U3BlbGxDaGVja1JlcXVlc3Q+PiBSZXF1ZXN0UXVldWU7Ci0K
LSAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UmKSBjb25zdDsKKyAgICBib29s
IGNhbkNoZWNrQXN5bmNocm9ub3VzbHkoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdDsKICAgICBU
ZXh0Q2hlY2tlckNsaWVudCogY2xpZW50KCkgY29uc3Q7CiAgICAgdm9pZCB0aW1lckZpcmVkVG9Q
cm9jZXNzUXVldWVkUmVxdWVzdCgpOwogICAgIHZvaWQgaW52b2tlUmVxdWVzdChSZWY8U3BlbGxD
aGVja1JlcXVlc3Q+JiYpOwpAQCAtMTEzLDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICBUaW1lciBt
X3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdDsKIAogICAgIFJlZlB0cjxTcGVsbENoZWNrUmVx
dWVzdD4gbV9wcm9jZXNzaW5nUmVxdWVzdDsKLSAgICBSZXF1ZXN0UXVldWUgbV9yZXF1ZXN0UXVl
dWU7CisgICAgRGVxdWU8UmVmPFNwZWxsQ2hlY2tSZXF1ZXN0Pj4gbV9yZXF1ZXN0UXVldWU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggODMyODU2ZjZiMmZmYTIzYTViMzczOTQ3YTYwYzcw
MDQ5MjUzODQ5OC4uNjNhNzc2ZmYxYTM4NjI2NmJjZjViMDczYzZiOTI1MmU0OTlmZDI3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMjks
MTIgKzI5LDEyIEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVu
aXRzLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91YnJrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nVmlldy5oPgpAQCAtMTAzLDMwICsxMDMsMzEgQEAgc3RhdGljIHZvaWQgZmluZE1pc3NwZWxs
aW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjwK
IAogI2VuZGlmCiAKLXN0YXRpYyBSZWY8UmFuZ2U+IGV4cGFuZFRvUGFyYWdyYXBoQm91bmRhcnko
UmFuZ2UmIHJhbmdlKQorc3RhdGljIFNpbXBsZVJhbmdlIGV4cGFuZFRvUGFyYWdyYXBoQm91bmRh
cnkoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIFJlZjxSYW5nZT4gcGFyYWdyYXBo
UmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7Ci0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2Uu
cHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChyYW5nZS5lbmRQb3NpdGlv
bigpKSk7Ci0gICAgcmV0dXJuIHBhcmFncmFwaFJhbmdlOworICAgIHJldHVybiB7CisgICAgICAg
ICptYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS5zdGFydCkpKSwKKyAgICAgICAgKm1ha2VCb3VuZGFyeVBvaW50KGVuZE9m
UGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpKSkKKyAgICB9
OwogfQogCi1UZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OlRleHRDaGVja2luZ1BhcmFncmFwaChSZWY8
UmFuZ2U+JiYgY2hlY2tpbmdBbmRBdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKQotICAgIDogbV9j
aGVja2luZ1JhbmdlKGNoZWNraW5nQW5kQXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS5jb3B5UmVm
KCkpCi0gICAgLCBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoY2hlY2tpbmdBbmRBdXRvbWF0
aWNSZXBsYWNlbWVudFJhbmdlLmNvcHlSZWYoKSkKK1RleHRDaGVja2luZ1BhcmFncmFwaDo6VGV4
dENoZWNraW5nUGFyYWdyYXBoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fY2hl
Y2tpbmdSYW5nZShyYW5nZSkKKyAgICAsIG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZShyYW5n
ZSkKIHsKIH0KIAotVGV4dENoZWNraW5nUGFyYWdyYXBoOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
UmVmPFJhbmdlPiYmIGNoZWNraW5nUmFuZ2UsIFJlZjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBsYWNl
bWVudFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgcGFyYWdyYXBoUmFuZ2UpCi0gICAgOiBtX2NoZWNr
aW5nUmFuZ2UoV1RGTW92ZShjaGVja2luZ1JhbmdlKSkKLSAgICAsIG1fYXV0b21hdGljUmVwbGFj
ZW1lbnRSYW5nZShXVEZNb3ZlKGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UpKQotICAgICwgbV9w
YXJhZ3JhcGhSYW5nZShXVEZNb3ZlKHBhcmFncmFwaFJhbmdlKSkKK1RleHRDaGVja2luZ1BhcmFn
cmFwaDo6VGV4dENoZWNraW5nUGFyYWdyYXBoKGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1Jh
bmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiBwYXJhZ3JhcGhSYW5nZSkKKyAgICA6IG1fY2hlY2tpbmdSYW5nZShjaGVj
a2luZ1JhbmdlKQorICAgICwgbV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKHJlcGxhY2VtZW50
UmFuZ2UpCisgICAgLCBtX3BhcmFncmFwaFJhbmdlKHBhcmFncmFwaFJhbmdlKQogewogfQogCiB2
b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6ZXhwYW5kUmFuZ2VUb05leHRFbmQoKQogewotICAg
IHNldEVuZCgmcGFyYWdyYXBoUmFuZ2UoKSwgZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZk5leHRQYXJh
Z3JhcGgocGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9uKCkpKSk7CisgICAgcGFyYWdyYXBo
UmFuZ2UoKTsKKyAgICBtX3BhcmFncmFwaFJhbmdlLT5lbmQgPSAqbWFrZUJvdW5kYXJ5UG9pbnQo
ZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZk5leHRQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG1fcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0KSkpKTsKICAgICBpbnZhbGlkYXRlUGFyYWdy
YXBoUmFuZ2VWYWx1ZXMoKTsKIH0KIApAQCAtMTM1LDcgKzEzNiw3IEBAIHZvaWQgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjppbnZhbGlkYXRlUGFyYWdyYXBoUmFuZ2VWYWx1ZXMoKQogICAgIG1fY2hl
Y2tpbmdTdGFydC5yZXNldCgpOwogICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydC5yZXNl
dCgpOwogICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGgucmVzZXQoKTsKLSAgICBtX29m
ZnNldEFzUmFuZ2UgPSBudWxscHRyOworICAgIG1fb2Zmc2V0QXNSYW5nZSA9IFdURjo6bnVsbG9w
dDsKICAgICBtX3RleHQgPSBTdHJpbmcoKTsKIH0KIApAQCAtMTQ0LDI3ICsxNDUsMjQgQEAgdWlu
dDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpyYW5nZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0
dXJuIGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKCkpOwogfQogCi1SYW5nZSYgVGV4dENo
ZWNraW5nUGFyYWdyYXBoOjpwYXJhZ3JhcGhSYW5nZSgpIGNvbnN0Citjb25zdCBTaW1wbGVSYW5n
ZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpwYXJhZ3JhcGhSYW5nZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX3BhcmFncmFwaFJhbmdlKQogICAgICAgICBtX3BhcmFncmFwaFJhbmdlID0gZXhwYW5k
VG9QYXJhZ3JhcGhCb3VuZGFyeShtX2NoZWNraW5nUmFuZ2UpOwogICAgIHJldHVybiAqbV9wYXJh
Z3JhcGhSYW5nZTsKIH0KIAotUmVmPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJh
bmdlKENoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdAorU2ltcGxlUmFuZ2UgVGV4dENoZWNraW5n
UGFyYWdyYXBoOjpzdWJyYW5nZShDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5n
ZSgpLCByYW5nZSkpOworICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBo
UmFuZ2UoKSwgcmFuZ2UpOwogfQogCiBFeGNlcHRpb25Pcjx1aW50NjRfdD4gVGV4dENoZWNraW5n
UGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7Ci0g
ICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQ
b3NpdGlvbigpKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
VHlwZUVycm9yIH07CiAgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7
CiAgICAgaWYgKCFlbmQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsK
LSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7CisgICAgcmV0dXJu
IGNoYXJhY3RlckNvdW50KHsgcGFyYWdyYXBoUmFuZ2UoKS5zdGFydCwgKmVuZCB9KTsKIH0KIAog
Ym9vbCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmlzRW1wdHkoKSBjb25zdApAQCAtMTc0LDExICsx
NzIsMTAgQEAgYm9vbCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmlzRW1wdHkoKSBjb25zdAogICAg
IHJldHVybiBjaGVja2luZ1N0YXJ0KCkgPj0gY2hlY2tpbmdFbmQoKSB8fCB0ZXh0KCkuaXNFbXB0
eSgpOwogfQogCi1SYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRBc1JhbmdlKCkg
Y29uc3QKK2NvbnN0IFNpbXBsZVJhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldEFz
UmFuZ2UoKSBjb25zdAogewogICAgIGlmICghbV9vZmZzZXRBc1JhbmdlKQotICAgICAgICBtX29m
ZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWlu
ZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSwgbV9jaGVj
a2luZ1JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotCisgICAgICAgIG1fb2Zmc2V0QXNSYW5nZSA9
IHsgeyBwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0LCBtX2NoZWNraW5nUmFuZ2Uuc3RhcnQgfSB9Owog
ICAgIHJldHVybiAqbV9vZmZzZXRBc1JhbmdlOwogfQogCkBAIC0yMTAsMjYgKzIwNywxNSBAQCB1
aW50NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3RoKCkgY29uc3QKIAog
dWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0
KCkgY29uc3QKIHsKLSAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KQotICAgICAg
ICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKLQotICAgIGF1dG8gc3RhcnQg
PSBtYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7Ci0g
ICAgaWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBlbmQgPSBtYWtlQm91
bmRhcnlQb2ludChtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9hdXRvbWF0aWNSZXBs
YWNlbWVudFN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7CisgICAgaWYg
KCFtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQpCisgICAgICAgIG1fYXV0b21hdGljUmVwbGFj
ZW1lbnRTdGFydCA9IGNoYXJhY3RlckNvdW50KHsgcGFyYWdyYXBoUmFuZ2UoKS5zdGFydCwgbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLnN0YXJ0IH0pOwogICAgIHJldHVybiAqbV9hdXRvbWF0
aWNSZXBsYWNlbWVudFN0YXJ0OwogfQogCiB1aW50NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6
OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAobV9hdXRvbWF0
aWNSZXBsYWNlbWVudExlbmd0aCkKLSAgICAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2Vt
ZW50TGVuZ3RoOwotCi0gICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCA9IGNoYXJhY3Rl
ckNvdW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSk7CisgICAgaWYgKCFtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50TGVuZ3RoKQorICAgICAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3Ro
ID0gY2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKTsKICAgICByZXR1
cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiB9CiAKQEAgLTIzOSwyNyArMjI1LDI0
IEBAIFRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYg
Y2xpZW50LCBjb25zdCBTaW1wbGVSYW5nZSYKIHsKIH0KIAotVGV4dENoZWNraW5nSGVscGVyOjp+
VGV4dENoZWNraW5nSGVscGVyKCkgPSBkZWZhdWx0OwotCi1TdHJpbmcgVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZyh1aW50NjRfdCYgZmlyc3RNaXNzcGVsbGluZ09mZnNl
dCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCith
dXRvIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZE1pc3BlbGxlZFdvcmRzKE9wZXJhdGlvbiBvcGVy
YXRpb24pIGNvbnN0IC0+IHN0ZDo6cGFpcjxNaXNzcGVsbGVkV29yZCwgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+PgogewotICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSAwOworICAgIHN0ZDo6cGFp
cjxNaXNzcGVsbGVkV29yZCwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+PiBmaXJzdDsKIAotICAgIFN0
cmluZyBmaXJzdE1pc3NwZWxsaW5nOwogICAgIHVpbnQ2NF90IGN1cnJlbnRDaHVua09mZnNldCA9
IDA7CiAKICAgICBmb3IgKFdvcmRBd2FyZUl0ZXJhdG9yIGl0KG1fcmFuZ2UpOyAhaXQuYXRFbmQo
KTsgY3VycmVudENodW5rT2Zmc2V0ICs9IGl0LnRleHQoKS5sZW5ndGgoKSwgaXQuYWR2YW5jZSgp
KSB7CiAgICAgICAgIFN0cmluZ1ZpZXcgdGV4dCA9IGl0LnRleHQoKTsKLSAgICAgICAgaW50IHRl
eHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogCi0gICAgICAgIC8vIFNraXAgc29tZSB3b3JrIGZv
ciBvbmUtc3BhY2UtY2hhciBodW5rcy4KLSAgICAgICAgaWYgKHRleHRMZW5ndGggPT0gMSAmJiB0
ZXh0WzBdID09ICcgJykKKyAgICAgICAgaWYgKHRleHQgPT0gIiAiX3MpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOwogICAgICAg
ICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwogICAgICAgICBtX2NsaWVudC50ZXh0Q2hlY2tl
cigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGV4dCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZt
aXNzcGVsbGluZ0xlbmd0aCk7CiAKKyAgICAgICAgaW50IHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0
aCgpOworCiAgICAgICAgIC8vIDU0OTA2Mjcgc2hvd3MgdGhhdCB0aGVyZSB3YXMgc29tZSBjb2Rl
IHBhdGggaGVyZSB3aGVyZSB0aGUgU3RyaW5nIGNvbnN0cnVjdG9yIGJlbG93IGNyYXNoZXMuCiAg
ICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBp
bnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaAogICAgICAgICAvLyBt
b3JlIHJvYnVzdCBhZ2FpbnN0IGJhZCBpbnB1dCBvbiByZWxlYXNlIGJ1aWxkcy4KQEAgLTI2OSw0
OSArMjUyLDUxIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxs
aW5nKHVpbnQ2NF90JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0CiAgICAgICAgIEFTU0VSVChtaXNz
cGVsbGluZ0xvY2F0aW9uIDwgdGV4dExlbmd0aCk7CiAgICAgICAgIEFTU0VSVChtaXNzcGVsbGlu
Z0xlbmd0aCA8PSB0ZXh0TGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRp
b24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgaWYgKCEobWlz
c3BlbGxpbmdMb2NhdGlvbiA+PSAwICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVs
bGluZ0xvY2F0aW9uIDwgdGV4dExlbmd0aCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVu
Z3RoICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVu
Z3RoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtaXNzcGVsbGluZ0xv
Y2F0aW9uID49IDAgJiYgbWlzc3BlbGxpbmdMZW5ndGggPiAwICYmIG1pc3NwZWxsaW5nTG9jYXRp
b24gPCB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHRleHRMZW5ndGggJiYgbWlz
c3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHRleHRMZW5ndGgpIHsKLSAg
ICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAgICAg
ICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobV9yYW5nZSwg
Q2hhcmFjdGVyUmFuZ2UoY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwg
bWlzc3BlbGxpbmdMZW5ndGgpKTsKLQotICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QtZW5j
b3VudGVyZWQgbWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCi0gICAgICAgICAgICBpZiAoIWZp
cnN0TWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0
ID0gY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKLSAgICAgICAgICAg
ICAgICBmaXJzdE1pc3NwZWxsaW5nID0gdGV4dC5zdWJzdHJpbmcobWlzc3BlbGxpbmdMb2NhdGlv
biwgbWlzc3BlbGxpbmdMZW5ndGgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKG1pc3NwZWxsaW5nUmFuZ2UpOwotICAg
ICAgICAgICAgfQorICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFj
dGVyUmFuZ2UobV9yYW5nZSwgQ2hhcmFjdGVyUmFuZ2UoY3VycmVudENodW5rT2Zmc2V0ICsgbWlz
c3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpKTsKIAotICAgICAgICAgICAgLy8g
U3RvcmUgbWFya2VyIGZvciBtaXNzcGVsbGVkIHdvcmQuCi0gICAgICAgICAgICBtaXNzcGVsbGlu
Z1JhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBpZiAob3BlcmF0aW9uID09
IE9wZXJhdGlvbjo6TWFya0FsbCkKKyAgICAgICAgICAgIGFkZE1hcmtlcihtaXNzcGVsbGluZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCi0gICAgICAgICAgICAvLyBCYWlsIG91
dCBpZiB3ZSdyZSBtYXJraW5nIG9ubHkgdGhlIGZpcnN0IG1pc3NwZWxsaW5nLCBhbmQgbm90IGFs
bCBpbnN0YW5jZXMuCi0gICAgICAgICAgICBpZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmIChmaXJzdC5maXJzdC53b3JkLmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICBmaXJzdCA9IHsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRl
eHQuc3Vic3RyaW5nKG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKS50b1N0
cmluZygpLAorICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVs
bGluZ0xvY2F0aW9uCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBXVEZNb3Zl
KG1pc3NwZWxsaW5nUmFuZ2UpCisgICAgICAgICAgICB9OwogICAgICAgICB9CisKKyAgICAgICAg
aWYgKG9wZXJhdGlvbiA9PSBPcGVyYXRpb246OkZpbmRGaXJzdCkKKyAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIHJldHVybiBmaXJzdE1pc3NwZWxsaW5nOworICAgIHJldHVybiBmaXJz
dDsKK30KKworYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3Jk
KCkgY29uc3QgLT4gTWlzc3BlbGxlZFdvcmQKK3sKKyAgICByZXR1cm4gZmluZE1pc3BlbGxlZFdv
cmRzKE9wZXJhdGlvbjo6RmluZEZpcnN0KS5maXJzdDsKIH0KIAotU3RyaW5nIFRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1t
YXIsIGJvb2wmIG91dElzU3BlbGxpbmcsIHVpbnQ2NF90JiBvdXRGaXJzdEZvdW5kT2Zmc2V0LCBH
cmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKQorYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6
OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2tH
cmFtbWFyKSBjb25zdCAtPiBWYXJpYW50PE1pc3NwZWxsZWRXb3JkLCBVbmdyYW1tYXRpY2FsUGhy
YXNlPgogewogICAgIGlmICghdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChwbGF0
Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZhcmlhbnQ8TWlzc3BlbGxlZFdvcmQs
IFVuZ3JhbW1hdGljYWxQaHJhc2U+IGZpcnN0Rm91bmRJdGVtOworICAgIEdyYW1tYXJEZXRhaWwg
Z3JhbW1hckRldGFpbDsKIAotICAgIFN0cmluZyBmaXJzdEZvdW5kSXRlbTsKICAgICBTdHJpbmcg
bWlzc3BlbGxlZFdvcmQ7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1pc3BlbGxlZFdvcmRS
YW5nZTsKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKICAgICAKLSAgICAvLyBJbml0aWFs
aXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgaWYgd2UgZmluZCBzb21l
dGhpbmcgdG8gcmV0dXJuLgotICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOwotICAgIG91dEZpcnN0
Rm91bmRPZmZzZXQgPSAwOwotICAgIG91dEdyYW1tYXJEZXRhaWwucmFuZ2UgPSB7IH07Ci0gICAg
b3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7Ci0gICAgb3V0R3JhbW1hckRldGFpbC51
c2VyRGVzY3JpcHRpb24gPSBlbXB0eVN0cmluZygpOwotICAgIAogICAgIC8vIEV4cGFuZCB0aGUg
c2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBj
aGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNo
YXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3Rh
cnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdh
bnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgpAQCAtMzgyLDcgKzM2Nyw3IEBAIFN0
cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFy
KGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZm91bmRHcmFtbWFyKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3JhbW1hclBocmFzZUxvY2F0aW9uID0gcmVzdWx0LnJhbmdlLmxvY2F0aW9uOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEdyYW1tYXJEZXRhaWwgPSByZXN1bHQuZGV0
YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy
YW1tYXJEZXRhaWwgPSByZXN1bHQuZGV0YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcu
c3Vic3RyaW5nKHJlc3VsdC5yYW5nZS5sb2NhdGlvbiwgcmVzdWx0LnJhbmdlLmxlbmd0aCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3Ro
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzkzLDE4ICszNzgsMjEgQEAgU3Ry
aW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIo
Ym9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgc3BlbGxp
bmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQogICAgICAgICAgICAgICAgICAgICAg
ICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFr
ZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gc3BlbGxpbmdPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGZpcnN0Rm91bmRJdGVtID0gbWlzc3BlbGxlZFdvcmQ7CisgICAgICAgICAgICAgICAgICAg
IGZpcnN0Rm91bmRJdGVtID0gTWlzc3BlbGxlZFdvcmQgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbWlzc3BlbGxlZFdvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNl
dAorICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFk
R3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
Z3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFy
dE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKICAgICAg
ICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQo
eyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSkgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJh
c2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1h
clBocmFzZTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBVbmdyYW1tYXRp
Y2FsUGhyYXNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JhbW1hckRldGFpbAorICAgICAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC00MjUsNyArNDEzLDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlz
c3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICByZXR1cm4gZmly
c3RGb3VuZEl0ZW07CiB9CiAKLWludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1t
YXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgdWlu
dDY0X3QgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCB1aW50NjRfdCBzdGFydE9mZnNldCwgdWlu
dDY0X3QgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpIGNvbnN0CitpbnQgVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uIG9wZXJhdGlvbiwgY29uc3Qg
VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgdWludDY0X3QgYmFkR3JhbW1h
clBocmFzZUxvY2F0aW9uLCB1aW50NjRfdCBzdGFydE9mZnNldCwgdWludDY0X3QgZW5kT2Zmc2V0
KSBjb25zdAogewogICAgIC8vIEZvdW5kIHNvbWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxp
ZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0YXJ0cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBhbnkp
LgogICAgIC8vIE9wdGlvbmFsbHkgYWRkIGEgRG9jdW1lbnRNYXJrZXIgZm9yIGVhY2ggZGV0YWls
IGluIHRoZSByYW5nZS4KQEAgLTQ0Niw5ICs0MzQsOSBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVy
OjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3Jh
bQogICAgICAgICBpZiAoZGV0YWlsU3RhcnRPZmZzZXRJblBhcmFncmFwaCA+PSBlbmRPZmZzZXQp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGlmIChtYXJrQWxsKSB7
CisgICAgICAgIGlmIChvcGVyYXRpb24gPT0gT3BlcmF0aW9uOjpNYXJrQWxsKSB7CiAgICAgICAg
ICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtX3Jhbmdl
LCB7IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5yYW5n
ZS5sb2NhdGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5ndGggfSk7Ci0gICAgICAgICAgICBiYWRHcmFt
bWFyUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJS
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsK
KyAgICAgICAgICAgIGFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpH
cmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgZGV0YWlsIG9ubHkgaWYgaXQncyBlYXJsaWVyIHRoYW4g
b3VyIGN1cnJlbnQgY2FuZGlkYXRlICh0aGUgZGV0YWlscyBhcmVuJ3QgaW4gYSBndWFyYW50ZWVk
IG9yZGVyKQpAQCAtNDU3LDE5ICs0NDUsMTIgQEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6Zmlu
ZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICAg
ICAgICAgICAgIGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9IGRldGFpbC0+cmFuZ2UubG9j
YXRpb247CiAgICAgICAgIH0KICAgICB9Ci0gICAgCiAgICAgcmV0dXJuIGVhcmxpZXN0RGV0YWls
SW5kZXg7CiB9CiAKLVN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1t
YXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgdWludDY0X3QmIG91dEdyYW1tYXJQ
aHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCkgY29uc3QKK2F1dG8gVGV4dENoZWNraW5nSGVscGVy
OjpmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uIG9wZXJhdGlvbikgY29uc3QgLT4g
VW5ncmFtbWF0aWNhbFBocmFzZQogewotICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7
IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCi0g
ICAgb3V0R3JhbW1hckRldGFpbC5yYW5nZSA9IHsgfTsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLmd1
ZXNzZXMuY2xlYXIoKTsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IGVt
cHR5U3RyaW5nKCk7Ci0gICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9IDA7Ci0gICAgCi0gICAg
U3RyaW5nVmlldyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7CisgICAgVW5ncmFtbWF0aWNhbFBocmFz
ZSByZXN1bHQ7CiAKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3Mg
ZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNo
IGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhl
IHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFy
Y2ggcmFuZ2UsCkBAIC00ODUsOTggKzQ2Niw1MyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVy
OjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwsCiAg
ICAgICAgIAogICAgICAgICBpZiAoIWJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpIHsKICAgICAgICAg
ICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPT0gLTEpOwotICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCiAg
ICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPj0gMCk7CiAgICAgICAgIGJh
ZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArPSBzdGFydE9mZnNldDsKIAogICAgICAgICAvLyBGb3Vu
ZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwgcmFuZ2UgdGhhdCBz
dGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KLSAgICAgICAgaW50IGJhZEdyYW1t
YXJJbmRleCA9IGZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1t
YXJQaHJhc2VMb2NhdGlvbiwgcGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcGFyYWdyYXBoLmNo
ZWNraW5nRW5kKCksIG1hcmtBbGwpOwotICAgICAgICBpZiAoYmFkR3JhbW1hckluZGV4ID49IDAp
IHsKKyAgICAgICAgaW50IGJhZEdyYW1tYXJJbmRleCA9IGZpbmRVbmdyYW1tYXRpY2FsUGhyYXNl
cyhvcGVyYXRpb24sIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIHBh
cmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHBhcmFncmFwaC5jaGVja2luZ0VuZCgpKTsKKworICAg
ICAgICBpZiAoYmFkR3JhbW1hckluZGV4ID49IDAgJiYgcmVzdWx0LnBocmFzZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIHJlc3VsdC5vZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24g
LSBwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpOworICAgICAgICAgICAgcmVzdWx0LnBocmFzZSA9
IHBhcmFncmFwaC50ZXh0KCkuc3Vic3RyaW5nKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFk
R3JhbW1hclBocmFzZUxlbmd0aCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYmFkR3JhbW1hckluZGV4KSA8IGdyYW1tYXJEZXRhaWxzLnNpemUo
KSk7Ci0gICAgICAgICAgICBvdXRHcmFtbWFyRGV0YWlsID0gZ3JhbW1hckRldGFpbHNbYmFkR3Jh
bW1hckluZGV4XTsKLSAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LmRldGFpbCA9IGdyYW1t
YXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07CiAKLSAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBk
ZXRhaWwgaW4gcmFuZ2UsIHRoZW4gd2UgaGF2ZSBmb3VuZCB0aGUgZmlyc3QgYmFkIHBocmFzZSAo
dW5sZXNzIHdlIGZvdW5kIG9uZSBlYXJsaWVyIGJ1dAotICAgICAgICAvLyBrZXB0IGdvaW5nIHNv
IHdlIGNvdWxkIG1hcmsgYWxsIGluc3RhbmNlcykuCi0gICAgICAgIGlmIChiYWRHcmFtbWFySW5k
ZXggPj0gMCAmJiBmaXJzdEJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gcGFy
YWdyYXBoLmNoZWNraW5nU3RhcnQoKTsKLSAgICAgICAgICAgIGZpcnN0QmFkR3JhbW1hclBocmFz
ZSA9IHBhcmFncmFwaC50ZXh0KCkuc3Vic3RyaW5nKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwg
YmFkR3JhbW1hclBocmFzZUxlbmd0aCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZv
dW5kIG9uZS4gV2UncmUgZG9uZSBub3csIHVubGVzcyB3ZSdyZSBtYXJraW5nIGVhY2ggaW5zdGFu
Y2UuCi0gICAgICAgICAgICBpZiAoIW1hcmtBbGwpCisgICAgICAgICAgICBpZiAob3BlcmF0aW9u
ID09IE9wZXJhdGlvbjo6RmluZEZpcnN0KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gVGhlc2UgcmVzdWx0cyB3ZXJlIGFsbCBiZXR3ZWVuIHRoZSBzdGFy
dCBvZiB0aGUgcGFyYWdyYXBoIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHNlYXJjaCByYW5nZTsgbG9v
awotICAgICAgICAvLyBiZXlvbmQgdGhpcyBwaHJhc2UuCisgICAgICAgIC8vIFRoZXNlIHJlc3Vs
dHMgd2VyZSBhbGwgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBhbmQgdGhlIHN0
YXJ0IG9mIHRoZSBzZWFyY2ggcmFuZ2U7IGxvb2sgYmV5b25kIHRoaXMgcGhyYXNlLgogICAgICAg
ICBzdGFydE9mZnNldCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArIGJhZEdyYW1tYXJQaHJh
c2VMZW5ndGg7CiAgICAgfQotICAgIAotICAgIHJldHVybiBmaXJzdEJhZEdyYW1tYXJQaHJhc2Uu
dG9TdHJpbmcoKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgVGV4dENoZWNraW5n
SGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAorYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6
OmZpbmRGaXJzdFVuZ3JhbW1hdGljYWxQaHJhc2UoKSBjb25zdCAtPiBVbmdyYW1tYXRpY2FsUGhy
YXNlCiB7Ci0gICAgaWYgKG1fcmFuZ2UuY29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICAvLyBSZXR1cm5zIHRydWUgb25seSBpZiB0aGUgcGFzc2VkIHJhbmdlIGV4
YWN0bHkgY29ycmVzcG9uZHMgdG8gYSBiYWQgZ3JhbW1hciBkZXRhaWwgcmFuZ2UuIFRoaXMgaXMg
YW5hbG9nb3VzCi0gICAgLy8gdG8gaXNTZWxlY3Rpb25NaXNzcGVsbGVkLiBJdCdzIG5vdCBnb29k
IGVub3VnaCBmb3IgdGhlcmUgdG8gYmUgc29tZSBiYWQgZ3JhbW1hciBzb21ld2hlcmUgaW4gdGhl
IHJhbmdlLAotICAgIC8vIG9yIG92ZXJsYXBwaW5nIHRoZSByYW5nZTsgdGhlIHJhbmdlcyBtdXN0
IGV4YWN0bHkgbWF0Y2guCi0gICAgdWludDY0X3QgZ3JhbW1hclBocmFzZU9mZnNldDsKLSAgICAK
LSAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQ
aHJhc2UgPSBmaW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VP
ZmZzZXQsIGZhbHNlKTsKLSAgICAKLSAgICAvLyBObyBiYWQgZ3JhbW1hciBpbiB0aGVzZSBwYXJ0
cyBhdCBhbGwuCi0gICAgaWYgKGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBwaHJhc2UgKGUuZy4g
c2VudGVuY2UpIHN0YXJ0cyBiZXlvbmQgc3RhcnQgb2YgcmFuZ2UuCi0gICAgaWYgKGdyYW1tYXJQ
aHJhc2VPZmZzZXQgPiAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoZ3Jh
bW1hckRldGFpbC5yYW5nZS5sb2NhdGlvbiA+PSAwKTsKLSAgICBBU1NFUlQoZ3JhbW1hckRldGFp
bC5yYW5nZS5sZW5ndGggPiAwKTsKLQotICAgIC8vIEJhZCBncmFtbWFyLCBidXQgc3RhcnQgb2Yg
ZGV0YWlsIChlLmcuIHVuZ3JhbW1hdGljYWwgd29yZCkgZG9lc24ndCBtYXRjaCBzdGFydCBvZiBy
YW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLnJhbmdlLmxvY2F0aW9uICsgZ3JhbW1hclBocmFz
ZU9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEJhZCBncmFtbWFy
IGF0IHN0YXJ0IG9mIHJhbmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFyIGlzIGJlZm9yZSBvciBh
ZnRlciBlbmQgb2YgcmFuZ2UKLSAgICBpZiAoZ3JhbW1hckRldGFpbC5yYW5nZS5sZW5ndGggIT0g
Y2hhcmFjdGVyQ291bnQobV9yYW5nZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJv
ciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCi0gICAg
Ly8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVs
bENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yawotICAgIC8v
IGNvcnJlY3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhl
ciB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCi0gICAgLy8g
b3IgYSBncmFtbWFyIGVycm9yLgotICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKLSAgICAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlv
bjo6RmluZEZpcnN0KTsKIH0KIAotVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpn
dWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wgY2hlY2tHcmFtbWFy
LCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKSBjb25zdAorVGV4dENoZWNr
aW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZE9y
VW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1hcikgY29uc3QKIHsKICAgICBpZiAo
IXVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJp
bmc+KCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0
Q2hlY2tlckVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwotICAgIG1pc3Nw
ZWxsZWQgPSBmYWxzZTsKLSAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgCiAgICAgaWYg
KG1fcmFuZ2UuY29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiBndWVzc2VzOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJl
IHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQu
Ci0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2UobV9y
YW5nZSkpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZSk7CiAg
ICAgaWYgKHBhcmFncmFwaC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBndWVzc2VzOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0
czsKICAgICBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcyB7IFRleHRD
aGVja2luZ1R5cGU6OlNwZWxsaW5nIH07CkBAIC01OTEsMTUgKzUyNywxNSBAQCBWZWN0b3I8U3Ry
aW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoYm9vbAogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlw
ZTo6U3BlbGxpbmcgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC5yYW5n
ZSkpIHsKICAgICAgICAgICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFncmFwaC5jaGVj
a2luZ1N1YnN0cmluZygpLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxl
ZFdvcmQubGVuZ3RoKCkpOworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAg
ICAgICAgICAgIG1fY2xpZW50LnRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1pc3Nw
ZWxsZWRXb3JkLCBTdHJpbmcoKSwgY3VycmVudFNlbGVjdGlvbiwgZ3Vlc3Nlcyk7CiAgICAgICAg
ICAgICBtX2NsaWVudC51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKLSAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7CisgICAgICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGd1ZXNzZXMpLCB0cnVl
LCBmYWxzZSB9OwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmICghY2hlY2tHcmFtbWFy
KQotICAgICAgICByZXR1cm4gZ3Vlc3NlczsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZv
ciAoYXV0byYgcmVzdWx0IDogcmVzdWx0cykgewogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0g
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiBwYXJhZ3JhcGguaXNDaGVja2luZ1JhbmdlQ292
ZXJlZEJ5KHJlc3VsdC5yYW5nZSkpIHsKQEAgLTYwOSwzMyArNTQ1LDI0IEBAIFZlY3RvcjxTdHJp
bmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWxSYW5nZShib29sCiAgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5jaGVja2luZ1Jhbmdl
TWF0Y2hlcyh7IHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC5yYW5nZS5sb2NhdGlvbiwg
ZGV0YWlsLnJhbmdlLmxlbmd0aCB9KSkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYmFk
R3JhbW1hclBocmFzZSA9IHBhcmFncmFwaC50ZXh0KCkuc3Vic3RyaW5nKHJlc3VsdC5yYW5nZS5s
b2NhdGlvbiwgcmVzdWx0LnJhbmdlLmxlbmd0aCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGd1ZXNzIDogZGV0YWlsLmd1ZXNzZXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBndWVzc2VzLmFwcGVuZChndWVzcyk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2xp
ZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBk
ZXRhaWwpOwotICAgICAgICAgICAgICAgICAgICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7IFdURk1vdmUoZGV0YWlsLmd1ZXNzZXMpLCBmYWxzZSwgdHJ1ZSB9OwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gZ3Vlc3Nl
czsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJr
QWxsTWlzc3BlbGxpbmdzKFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxNaXNzcGVsbGVk
V29yZHMoKSBjb25zdAogewotICAgIC8vIFVzZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUgb2YgZmlu
ZEZpcnN0TWlzc3BlbGxpbmcuIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgIm91dCBw
YXJhbWV0ZXIiOwotICAgIC8vIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIG1hcmsgZXZlcnkgaW5zdGFu
Y2UuCi0gICAgdWludDY0X3QgaWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmlyc3RNaXNzcGVsbGlu
ZyhpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHJldHVy
biBmaW5kTWlzcGVsbGVkV29yZHMoT3BlcmF0aW9uOjpNYXJrQWxsKS5zZWNvbmQ7CiB9CiAKLXZv
aWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCit2b2lkIFRleHRDaGVj
a2luZ0hlbHBlcjo6bWFya0FsbFVuZ3JhbW1hdGljYWxQaHJhc2VzKCkgY29uc3QKIHsKLSAgICAv
LyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIG9maW5kRmlyc3RCYWRHcmFtbWFyLiBJZ25v
cmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJzIjsgYWxsIHdlIG5lZWQgdG8K
LSAgICAvLyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAgIEdyYW1tYXJEZXRhaWwgaWdu
b3JlZEdyYW1tYXJEZXRhaWw7Ci0gICAgdWludDY0X3QgaWdub3JlZE9mZnNldDsKLSAgICBmaW5k
Rmlyc3RCYWRHcmFtbWFyKGlnbm9yZWRHcmFtbWFyRGV0YWlsLCBpZ25vcmVkT2Zmc2V0LCB0cnVl
KTsKKyAgICBmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uOjpNYXJrQWxsKTsKIH0K
IAogYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxw
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKaW5kZXgg
YzY4ODg3NDBkMjcxNTdkMjFkZWYzM2M2NGFlYmZiOTRmZjFiMjMyYS4uMjlkODRiOGZjOTFjZTQz
ODdhMjNhNTdkOGU2ZDdkNTMzODIwZjRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5oCkBAIC0yMCwyMyArMjAsMjYgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2lu
Y2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWRpdG9yQ2xpZW50OwogY2xhc3MgUG9zaXRpb247Citj
bGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKKwogc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKIAor
Ly8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgY2xhc3MgdG8gaXRzIG93biBoZWFkZXIuCiBjbGFz
cyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggewogcHVibGljOgotICAgIGV4cGxpY2l0IFRleHRDaGVj
a2luZ1BhcmFncmFwaChSZWY8UmFuZ2U+JiYgY2hlY2tpbmdBbmRBdXRvbWF0aWNSZXBsYWNlbWVu
dFJhbmdlKTsKLSAgICBleHBsaWNpdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoUmVmPFJhbmdlPiYm
IGNoZWNraW5nUmFuZ2UsIFJlZjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBS
ZWZQdHI8UmFuZ2U+JiYgcGFyYWdyYXBoUmFuZ2UpOworICAgIGV4cGxpY2l0IFRleHRDaGVja2lu
Z1BhcmFncmFwaChjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdBbmRBdXRvbWF0aWNSZXBsYWNl
bWVudFJhbmdlKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoY29uc3QgU2ltcGxlUmFuZ2Um
IGNoZWNraW5nUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJh
bmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHBhcmFncmFwaFJhbmdlKTsKIAogICAg
IHVpbnQ2NF90IHJhbmdlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgUmVmPFJhbmdlPiBzdWJyYW5nZShD
aGFyYWN0ZXJSYW5nZSkgY29uc3Q7CisgICAgU2ltcGxlUmFuZ2Ugc3VicmFuZ2UoQ2hhcmFjdGVy
UmFuZ2UpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHVpbnQ2NF90PiBvZmZzZXRUbyhjb25zdCBQ
b3NpdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKIApAQCAt
NDksMjQgKzUyLDIzIEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBjaGVja2luZ0xlbmd0aCgpIGNv
bnN0OwogICAgIFN0cmluZ1ZpZXcgY2hlY2tpbmdTdWJzdHJpbmcoKSBjb25zdCB7IHJldHVybiB0
ZXh0KCkuc3Vic3RyaW5nKGNoZWNraW5nU3RhcnQoKSwgY2hlY2tpbmdMZW5ndGgoKSk7IH0KIAot
ICAgIC8vIERldGVybWluZXMgdGhlIHJhbmdlIGluIHdoaWNoIHdlIGFsbG93IGF1dG9tYXRpYyB0
ZXh0IHJlcGxhY2VtZW50LiBJZiBhbiBhdXRvbWF0aWMgcmVwbGFjZW1lbnQgcmFuZ2UgaXMgbm90
IHBhc3NlZCB0byB0aGUKLSAgICAvLyB0ZXh0IGNoZWNraW5nIHBhcmFncmFwaCwgdGhpcyBkZWZh
dWx0cyB0byB0aGUgc3BlbGwgY2hlY2tpbmcgcmFuZ2UuCiAgICAgdWludDY0X3QgYXV0b21hdGlj
UmVwbGFjZW1lbnRTdGFydCgpIGNvbnN0OwogICAgIHVpbnQ2NF90IGF1dG9tYXRpY1JlcGxhY2Vt
ZW50TGVuZ3RoKCkgY29uc3Q7CiAKICAgICBib29sIGNoZWNraW5nUmFuZ2VNYXRjaGVzKENoYXJh
Y3RlclJhbmdlIHJhbmdlKSBjb25zdCB7IHJldHVybiByYW5nZS5sb2NhdGlvbiA9PSBjaGVja2lu
Z1N0YXJ0KCkgJiYgcmFuZ2UubGVuZ3RoID09IGNoZWNraW5nTGVuZ3RoKCk7IH0KICAgICBib29s
IGlzQ2hlY2tpbmdSYW5nZUNvdmVyZWRCeShDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyBy
ZXR1cm4gcmFuZ2UubG9jYXRpb24gPD0gY2hlY2tpbmdTdGFydCgpICYmIHJhbmdlLmxvY2F0aW9u
ICsgcmFuZ2UubGVuZ3RoID49IGNoZWNraW5nU3RhcnQoKSArIGNoZWNraW5nTGVuZ3RoKCk7IH0K
ICAgICBib29sIGNoZWNraW5nUmFuZ2VDb3ZlcnMoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0
IHsgcmV0dXJuIHJhbmdlLmxvY2F0aW9uIDwgY2hlY2tpbmdFbmQoKSAmJiByYW5nZS5sb2NhdGlv
biArIHJhbmdlLmxlbmd0aCA+IGNoZWNraW5nU3RhcnQoKTsgfQotICAgIFJhbmdlJiBwYXJhZ3Jh
cGhSYW5nZSgpIGNvbnN0OworCisgICAgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdl
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlUGFyYWdyYXBoUmFuZ2VW
YWx1ZXMoKTsKLSAgICBSYW5nZSYgb2Zmc2V0QXNSYW5nZSgpIGNvbnN0OworICAgIGNvbnN0IFNp
bXBsZVJhbmdlJiBvZmZzZXRBc1JhbmdlKCkgY29uc3Q7CiAKLSAgICBSZWY8UmFuZ2U+IG1fY2hl
Y2tpbmdSYW5nZTsKLSAgICBSZWY8UmFuZ2U+IG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZTsK
LSAgICBtdXRhYmxlIFJlZlB0cjxSYW5nZT4gbV9wYXJhZ3JhcGhSYW5nZTsKLSAgICBtdXRhYmxl
IFJlZlB0cjxSYW5nZT4gbV9vZmZzZXRBc1JhbmdlOworICAgIFNpbXBsZVJhbmdlIG1fY2hlY2tp
bmdSYW5nZTsKKyAgICBTaW1wbGVSYW5nZSBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2U7Cisg
ICAgbXV0YWJsZSBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbV9wYXJhZ3JhcGhSYW5nZTsKKyAgICBt
dXRhYmxlIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtX29mZnNldEFzUmFuZ2U7CiAgICAgbXV0YWJs
ZSBTdHJpbmcgbV90ZXh0OwogICAgIG11dGFibGUgT3B0aW9uYWw8dWludDY0X3Q+IG1fY2hlY2tp
bmdTdGFydDsKICAgICBtdXRhYmxlIE9wdGlvbmFsPHVpbnQ2NF90PiBtX2NoZWNraW5nTGVuZ3Ro
OwpAQCAtNzUsMjUgKzc3LDM3IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBUZXh0Q2hlY2tpbmdI
ZWxwZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRDaGVja2luZ0hlbHBlcik7CiBw
dWJsaWM6CiAgICAgVGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYsIGNvbnN0IFNpbXBs
ZVJhbmdlJik7Ci0gICAgflRleHRDaGVja2luZ0hlbHBlcigpOwogCi0gICAgU3RyaW5nIGZpbmRG
aXJzdE1pc3NwZWxsaW5nKHVpbnQ2NF90JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1h
cmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0gICAgU3RyaW5n
IGZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBib29s
JiBvdXRJc1NwZWxsaW5nLCB1aW50NjRfdCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1hckRl
dGFpbCYgb3V0R3JhbW1hckRldGFpbCk7Ci0gICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzKFJl
ZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0gICAgU3RyaW5nIGZpbmRGaXJz
dEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgdWludDY0X3QmIG91
dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCkgY29uc3Q7Ci0gICAgdm9pZCBtYXJr
QWxsQmFkR3JhbW1hcigpOwotICAgIGJvb2wgaXNVbmdyYW1tYXRpY2FsKCkgY29uc3Q7Ci0gICAg
VmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShi
b29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkg
Y29uc3Q7CisgICAgc3RydWN0IE1pc3NwZWxsZWRXb3JkIHsKKyAgICAgICAgU3RyaW5nIHdvcmQ7
CisgICAgICAgIHVpbnQ2NF90IG9mZnNldCB7IDAgfTsKKyAgICB9OworICAgIHN0cnVjdCBVbmdy
YW1tYXRpY2FsUGhyYXNlIHsKKyAgICAgICAgU3RyaW5nIHBocmFzZTsKKyAgICAgICAgdWludDY0
X3Qgb2Zmc2V0IHsgMCB9OworICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKKyAgICB9Owor
CisgICAgTWlzc3BlbGxlZFdvcmQgZmluZEZpcnN0TWlzc3BlbGxlZFdvcmQoKSBjb25zdDsKKyAg
ICBVbmdyYW1tYXRpY2FsUGhyYXNlIGZpbmRGaXJzdFVuZ3JhbW1hdGljYWxQaHJhc2UoKSBjb25z
dDsKKyAgICBWYXJpYW50PE1pc3NwZWxsZWRXb3JkLCBVbmdyYW1tYXRpY2FsUGhyYXNlPiBmaW5k
Rmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1h
cikgY29uc3Q7CisKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFya0FsbE1pc3NwZWxsZWRX
b3JkcygpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSByYW5nZSBvZiB0aGUgZmlyc3QgbWlzc3BlbGxl
ZCB3b3JkLgorICAgIHZvaWQgbWFya0FsbFVuZ3JhbW1hdGljYWxQaHJhc2VzKCkgY29uc3Q7CisK
KyAgICBUZXh0Q2hlY2tpbmdHdWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZE9yVW5ncmFt
bWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1hcikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAg
ZW51bSBjbGFzcyBPcGVyYXRpb24gOiBib29sIHsgRmluZEZpcnN0LCBNYXJrQWxsIH07CisgICAg
c3RkOjpwYWlyPE1pc3NwZWxsZWRXb3JkLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4+IGZpbmRNaXNw
ZWxsZWRXb3JkcyhPcGVyYXRpb24pIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBmaXJzdC4KKyAgICBV
bmdyYW1tYXRpY2FsUGhyYXNlIGZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyhPcGVyYXRpb24pIGNv
bnN0OyAvLyBSZXR1cm5zIHRoZSBmaXJzdC4KKyAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQoKSBjb25zdDsKKyAgICBpbnQgZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlv
biwgY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgdWludDY0X3QgYmFkR3JhbW1hclBocmFz
ZUxvY2F0aW9uLCB1aW50NjRfdCBzdGFydE9mZnNldCwgdWludDY0X3QgZW5kT2Zmc2V0KSBjb25z
dDsKKwogICAgIEVkaXRvckNsaWVudCYgbV9jbGllbnQ7CiAgICAgU2ltcGxlUmFuZ2UgbV9yYW5n
ZTsKLQotICAgIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwotICAgIGlu
dCBmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIHVp
bnQ2NF90IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgdWludDY0X3Qgc3RhcnRPZmZzZXQsIHVp
bnQ2NF90IGVuZE9mZnNldCwgYm9vbCBtYXJrQWxsKSBjb25zdDsKIH07CiAKIHZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmLCBTdHJpbmdWaWV3LCBPcHRpb25TZXQ8
VGV4dENoZWNraW5nVHlwZT4sIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCmluZGV4IDhhYzc2OTQwMjA5MzUw
ZmY0M2FlYzE0NGQzM2FkNjE2MDEyNmU0MzUuLjFmODgxMDQxY2MxZGFjYWI2NWEyN2QxMmZlZDYx
Y2NlMTkxODVhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3Rh
dGlvbkNvbW1hbmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3Rh
dGlvbkNvbW1hbmRJT1MuY3BwCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgRGljdGF0aW9uQ29tbWFu
ZElPUzo6ZG9BcHBseSgpCiAgICAgICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4gMSkg
ewogICAgICAgICAgICAgYXV0byBhbHRlcm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnM7CiAgICAg
ICAgICAgICBhbHRlcm5hdGl2ZXMucmVtb3ZlKDApOwotICAgICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKCplbmRpbmdTZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgV1RGTW92
ZShhbHRlcm5hdGl2ZXMpKTsKKyAgICAgICAgICAgIGFkZE1hcmtlcigqZW5kaW5nU2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXMsIFdURk1vdmUoYWx0ZXJuYXRpdmVzKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24o
KS52aXNpYmxlRW5kKCkpKTsKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBEaWN0YXRpb25Db21tYW5k
SU9TOjpkb0FwcGx5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byByZXN1bHRSYW5nZSA9
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJv
b3QpLCB7IGVuZE9mZnNldCAtIHJlc3VsdExlbmd0aCwgZW5kT2Zmc2V0IH0pOwotICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvblJlc3VsdCwgbV9tZXRhZGF0YSk7CisgICAgYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0LCBtX21ldGFkYXRhKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3Mv
RWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmlu
ZGV4IDZjMjU0Nzk2NTUzNjA4NGIxNjM4ODA0OWQ0NWE1OTljZjk2MDY3MmIuLmM5MzM3M2FkMzg2
MGI3MWEyN2I4MzYwYTFiNGY5Mzg5ZjZlZjkzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9FZGl0b3JJT1MubW0KQEAgLTI5NywxMiArMjk3LDEyIEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0
YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+
JiBkCiAgICAgICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4gMSkgewogICAgICAgICAg
ICAgYXV0byBhbHRlcm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnM7CiAgICAgICAgICAgICBhbHRl
cm5hdGl2ZXMucmVtb3ZlKDApOwotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
TWFya2VyKHRleHROb2RlLCBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0LCBkaWN0YXRpb25Q
aHJhc2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzLCBXVEZNb3ZlKGFsdGVybmF0aXZlcykpOworICAgICAgICAgICAgYWRkTWFya2VyKHRleHRO
b2RlLCBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0LCBkaWN0YXRpb25QaHJhc2VMZW5ndGgs
IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCBXVEZNb3Zl
KGFsdGVybmF0aXZlcykpOwogICAgICAgICB9CiAgICAgICAgIHByZXZpb3VzRGljdGF0aW9uUGhy
YXNlU3RhcnQgKz0gZGljdGF0aW9uUGhyYXNlTGVuZ3RoOwogICAgIH0KIAotICAgIGRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcih0ZXh0Tm9kZSwgMCwgdGV4dE5vZGUubGVuZ3RoKCksIERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIHJldGFpblB0cihtZXRhZGF0YSkpOworICAg
IGFkZE1hcmtlcih0ZXh0Tm9kZSwgMCwgdGV4dE5vZGUubGVuZ3RoKCksIERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25SZXN1bHQsIHJldGFpblB0cihtZXRhZGF0YSkpOwogCiAgICAgY2xpZW50KCkt
PnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IGM3ZWZjZmM5M2JkNDc3MTI3MGVhMGIwNjlk
Y2I5MjQ3YzkxYTJhZjUuLjczM2Q2MTM2NzQ5NDdhMjk5ZjRlMGJmOTNjOTFkYTA2NTliMzJmMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAg
LTk3Miw5ICs5NzIsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQog
ICAgICAgICAgICAgaWYgKHNwZWxsQ2hlY2tpbmdFbmFibGVkKSB7CiAgICAgICAgICAgICAgICAg
Ly8gQ29uc2lkZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3JhbW1hci1yZWxhdGVkIGNv
bnRleHQgbWVudSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5nbGUgc2VsZWN0ZWQgcmFu
Z2UKICAgICAgICAgICAgICAgICAvLyBpcyBuZXZlciBjb25zaWRlcmVkIGEgbWlzc3BlbGxpbmcg
YW5kIGJhZCBncmFtbWFyIGF0IHRoZSBzYW1lIHRpbWUpCi0gICAgICAgICAgICAgICAgYm9vbCBt
aXNzcGVsbGluZzsKLSAgICAgICAgICAgICAgICBib29sIGJhZEdyYW1tYXI7Ci0gICAgICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IGZyYW1lLT5lZGl0b3IoKS5ndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbChtaXNzcGVsbGluZywgYmFkR3JhbW1hcik7CisgICAg
ICAgICAgICAgICAgYXV0byBbZ3Vlc3NlcywgbWlzc3BlbGxpbmcsIGJhZEdyYW1tYXJdID0gZnJh
bWUtPmVkaXRvcigpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nIHx8IGJhZEdyYW1tYXIpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGd1ZXNzZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGVyZSdzIGJhZCBncmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9ucyAoZS5nLiwgcmVw
ZWF0ZWQgd29yZCksIGp1c3QgbGVhdmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmgKaW5kZXggYzhhZjVlMjlhYTk2ZjZiYWRh
MmFhYTc1YzU3YjJjNDFhOTY1NWM1NS4uYzA1NmEwMzA0YzBlMzczNDc3YWM5NTFlODIzYjdlNGEz
ODg3MmJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hl
Y2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2luZy5o
CkBAIC03NSw2ICs3NSwxMiBAQCBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0IHsKICAgICBTdHJp
bmcgcmVwbGFjZW1lbnQ7CiB9OwogCitzdHJ1Y3QgVGV4dENoZWNraW5nR3Vlc3NlcyB7CisgICAg
VmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKKyAgICBib29sIG1pc3BlbGxlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCB1bmdyYW1tYXRpY2FsIHsgZmFsc2UgfTsKK307CisKIGVudW0gVGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXJUeXBlIHsgfTsKIHVzaW5nIFRleHRDaGVja2luZ1JlcXVlc3RJZGVu
dGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllclR5
cGU+OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IGRkOWMzNTI2MDVmMDhmMzk0MGQ5MDBk
OGYwMjY1MjQ3ZTA0YmEzNzkuLjZjZjRmNWEzMTkxYWQ5OWIyZDFhNzMzOGQ0ZjM5MzU1MzhmNmFi
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU3BlbGxDaGVja2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3Bl
cnRpZXMuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405123</attachid>
            <date>2020-07-23 20:37:03 -0700</date>
            <delta_ts>2020-07-26 12:05:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214648-20200723203702.patch</filename>
            <type>text/plain</type>
            <size>143396</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0ODA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDgzY2I1YWRmNGFhYjQ0
NDJiNTI2Y2Y1N2M0NTg4Y2M4NzhkODFkNS4uZjdmYmY0NThjOGM0YTliMzk2MDQwYWUwMzQ5ZjM3
ZmI4OWZlZTJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAyMC0wNy0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBTcGVsbENoZWNrZXIuaCBhbmQgVGV4dENoZWNraW5nSGVscGVyLmgKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDY0OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tOgorICAgICAgICBSZW1vdmVk
IHVubmVlZGVkIGluY2x1ZGUgb2YgVGV4dENoZWNraW5nSGVscGVyLmguCisKKyAgICAgICAgKiBk
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vycyk6IFVwZGF0ZWQgZm9yIGNoYW5nZQor
ICAgICAgICB0byB0aGUgYXJndW1lbnQgdHlwZSBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjphZGRNYXJrZXIpOiBBZGRlZC4gQ29udmVuaWVuY2Ugc28gY2FsbCBkb2Vzbid0IGhh
dmUgdG8gZ2V0CisgICAgICAgIHRoZSBkb2N1bWVudCB0byBjYWxsIHRoaXMuCisgICAgICAgIChX
ZWJDb3JlOjpyZW1vdmVNYXJrZXJzKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmg6IE1vdmVkIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
CisgICAgICAgIG91dCBvZiB0aGUgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyIGNsYXNzLCB0d2Vh
a2VkIGl0cyBuYW1lIGFuZCBjaGFuZ2VkCisgICAgICAgIGl0IGludG8gYW4gZW51bSBjbGFzcy4g
QWRkZWQgY29udmVuaWVuY2VzIGZ1bmN0aW9ucyBmb3IgYWRkL3JlbW92ZU1hcmtlci4KKworICAg
ICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVs
bENvcnJlY3Rpb24pOgorICAgICAgICBVc2UgY29udmVuaWVuY2UgdmVyc2lvbnMgb2YgcmVtb3Zl
TWFya2VycyBhbmQgYWRkTWFya2VyLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGll
ZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtSZXZlcnNlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNl
Rm9yTW9kaWZpZWRDb3JyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRv
Y29ycmVjdGlvbkFmdGVyQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKTogRGl0dG8u
CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5n
TWFya2Vycyk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6bGVhcm5TcGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOiBSZXdyb3RlIHRvIG5vdCB1c2UgYSBsaXZl
CisgICAgICAgIHJhbmdlIGFuZCBmb3IgdGhlIGNoYW5nZXMgdG8gdGhlIFRleHRDaGVja2luZ0hl
bHBlci4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2Fs
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRPclVuZ3JhbW1hdGljYWwpOiBDaGFuZ2VkIHRvIHVzZSBhCisgICAgICAgIHJldHVybiB2YWx1
ZSBpbnN0ZWFkIG9mIG91dCBhcmd1bWVudHMuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNs
ZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcik6IFVzZSBjb252ZW5pZW5jZQorICAgICAgICB2
ZXJzaW9ucyBvZiByZW1vdmVNYXJrZXJzLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcik6IFVwZGF0ZWQgZm9yIGNoYW5n
ZSB0bworICAgICAgICBUZXh0Q2hlY2tpbmdIZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOiBEbyBub3QgdXNl
CisgICAgICAgIGxpdmUgcmFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVjdFNwZWxsY2hl
Y2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKTogVGFrZSBhCisgICAgICAgIHJh
bmdlIHRoYXQgaXNuJ3QgYSBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrQW5kUmVwbGFjZUZvcik6IFR3ZWFrIGZvciBjaGFuZ2VzIHRvIHRleHQgY2hlY2tpbmcKKyAg
ICAgICAgYW5kIHRvIHVzZSBjb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGFkZE1hcmtlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOiBVc2UgY29u
dmVuaWVuY2UgdmVyc2lvbnMgb2YKKyAgICAgICAgcmVtb3ZlTWFya2VycyBhbmQgYWRkTWFya2Vy
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNo
ZXNGb3JUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rp
b25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yLmg6IFVwZGF0ZSBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9TcGVs
bENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxs
Q2hlY2tSZXF1ZXN0KTogTm8gbG9uZ2VyIHRha2UgbGl2ZSByYW5nZXMuCisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKTogVXNlIGNv
bnZlbmllbmNlIHZlcnNpb25zIG9mCisgICAgICAgIHJlbW92ZU1hcmtlcnMuCisgICAgICAgICog
ZWRpdGluZy9TcGVsbENoZWNrZXIuaDogUmVtb3ZlIHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMuIFJl
bW92ZWQgbWFueQorICAgICAgICB1bm5lZWRlZCBpbmNsdWRlcyBhbmQgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpleHBhbmRUb1BhcmFncmFwaEJvdW5kYXJ5KTogVGFrZSBhbmQgcmV0dXJu
IG5vbi1saXZlIHJhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6VGV4dENoZWNraW5nUGFyYWdyYXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmV4cGFuZFJhbmdlVG9OZXh0RW5kKTogVXBkYXRlZCB0byB1c2UK
KyAgICAgICAgbm9uLWxpdmUgcmFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5n
UGFyYWdyYXBoOjppbnZhbGlkYXRlUGFyYWdyYXBoUmFuZ2VWYWx1ZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UgY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFu
Z2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6b2Zmc2V0VG8gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z1BhcmFncmFwaDo6b2Zmc2V0QXNSYW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0IGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9t
YXRpY1JlcGxhY2VtZW50TGVuZ3RoIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdIZWxwZXI6On5UZXh0Q2hlY2tpbmdIZWxwZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kTWlzcGVsbGVkV29yZHMgY29uc3Qp
OiBSZW5hbWVkIGZyb20KKyAgICAgICAgZmluZEZpcnN0TWlzcGVsbGluZywgYW5kIG1hZGUgdGhp
cyBwcml2YXRlIGZ1bmN0aW9uIHNpbmNlIGl0IGhhcyBjb25mdXNpbmcKKyAgICAgICAgYXJndW1l
bnQgYW5kIHJldHVybiB0eXBlcy4gUmVpbXBsZW1lbnRlZCB0byB1c2Ugbm9uLWxpdmUgcmFuZ2Vz
IGFuZCB0byB1c2UKKyAgICAgICAgcmV0dXJuIHZhbHVlcyBhbmQgdGhlIGFkZE1hcmtlciBjb252
ZW5pZW5jZSBmdW5jdGlvbi4gQWxzbyBjaGFuZ2VkIHRoaXMgdG8KKyAgICAgICAgbm90IG1hcmsg
d2hlbiBjYWxsZWQganVzdCB0byBmaW5kIHRoZSBmaXJzdCBtaXNwZWxsZWQgd29yZC4gVGhlIG9s
ZCB2ZXJzaW9uCisgICAgICAgIGFsd2F5cyBtYXJrZWQsIHdoaWNoIGRpZG4ndCBtYWtlIGxvZ2lj
YWwgc2Vuc2UsIGJ1dCB3YXMgaGFybWxlc3MgYmVjYXVzZQorICAgICAgICB0aGUgY2FsbGVyIGFs
d2F5cyBtYXJrZWQgdGhlIHNhbWUgd2F5LiBOb3cgdGhpcyBkb2VzIHdoYXQgaXQgc2F5cy4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdv
cmQgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgUmVwbGFjZXMgZmluZEZpcnN0TWlzcGVsbGluZyBh
cyBhIHB1YmxpYyBmdW5jdGlvbiwgYW5kIHJldHVybnMgYSBzdHJ1Y3R1cmUKKyAgICAgICAgaW5z
dGVhZCBvZiB1c2luZyBvdXQgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNr
aW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZSBj
b25zdCk6CisgICAgICAgIFJlbmFtZWQgZnJvbSBmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3Jh
bW1hciBhbmQgY2hhbmdlZCB0byByZXR1cm4gYSBzdHJ1Y3R1cmUKKyAgICAgICAgaW5zdGVhZCBv
ZiB1c2luZyBvdXQgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMgY29uc3QpOiBSZW5hbWVkIGZyb20KKyAgICAg
ICAgZmluZEZpcnN0R3JhbW1hckRldGFpbCBhbmQgZmluZEZpcnN0QmFkR3JhbW1hci4gQm90aCBm
dW5jdGlvbnMgYXJlIG5vdyBwcml2YXRlCisgICAgICAgIGFuZCB1c2UgdGhlIG5ldyBPcGVyYXRp
b24gZW51bSBjbGFzcyB0byBkaXN0aW5ndWlzaCB0aGUgImZpbmQgZmlyc3QiIGZyb20KKyAgICAg
ICAgIm1hcmsgYWxsIiB1c2FnZS4gQWxzbyB1c2UgdGhlIGNvbnZpZW5jZSB2ZXJzaW9uIG9mIGFk
ZE1hcmtlciBhbmQgcmV0dXJuIHJlc3VsdHMKKyAgICAgICAgaW4gYSBzdHJ1Y3R1cmUgaW5zdGVh
ZCBvZiB1c2luZyBvdXQgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RVbmdyYW1tYXRpY2FsUGhyYXNlIGNvbnN0KTogQWRkZWQuCisgICAg
ICAgIFJlcGxhY2VzIGZpbmRGaXJzdEJhZEdyYW1tYXIgYXMgYSBwdWJsaWMgZnVuY3Rpb24sIHJl
dHVybnMgYSBzdHJ1Y3R1cmUKKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyBvdXQgYXJndW1lbnRz
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3Bl
bGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29uc3QpOgorICAgICAgICBSZW5hbWVkIGZy
b20gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSBhbmQgY2hhbmdlZCB0
byByZXR1cm4KKyAgICAgICAgYSBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiBvdXQgYXJndW1lbnRzLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsTWlzc3BlbGxlZFdv
cmRzIGNvbnN0KTogUmVuYW1lZCBmcm9tCisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3MgYW5k
IGNoYW5nZWQgdG8gdXNlIGEgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgYW4gb3V0IGFyZ3VtZW50
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsVW5ncmFtbWF0
aWNhbFBocmFzZXMgY29uc3QpOiBSZW5hbWVkCisgICAgICAgIGZyb20gbWFya0FsbEJhZEdyYW1t
YXIuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oOiBSZW1vdmVkIHVu
bmVlZCBpbmNsdWRlIG9mICJFZGl0b3JDbGllbnQuaCIuCisgICAgICAgIFVzZSBub24tbGl2ZSBy
YW5nZXMuIFVwZGF0ZWQgZm9yIHRoZSBvdGhlciBjaGFuZ2VzIGFib3ZlLgorCisgICAgICAgICog
ZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
aWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KTogVXNlIHRoZSBjb252ZW5pZW5jZSB2ZXJzaW9u
IG9mIGFkZE1hcmtlci4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50
KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKTogVXBkYXRl
ZCBmb3IgdGhlIGNoYW5nZSB0bworICAgICAgICBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcu
aDogQWRkZWQgYSBUZXh0Q2hlY2tpbmdHdWVzc2VzIHN0cnVjdHVyZSBoZXJlCisgICAgICAgIHVz
ZWQgYm90aCBieSBFZGl0b3IgYW5kIFRleHRDaGVja2luZ0hlbHBlci4KKwogMjAyMC0wNy0yMyAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
bW92ZSBkZWFkIGNvZGUgaW4gUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjNh
ZWY4MTA1YTM5MDdhZmMwMWM3M2E1MmMyYmIzZTljZGYwMDQ5Ny4uNmZkMGE4NzA4YzdlNjE0ODJk
NDJhYWYwZGYwNTI3MmQ4ODI4NTdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0w
Ny0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2lu
ZyBsaXZlIHJhbmdlcyBpbiBTcGVsbENoZWNrZXIuaCBhbmQgVGV4dENoZWNraW5nSGVscGVyLmgK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDY0OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOiBBZGRlZCBhbiBpbmNsdWRl
CisgICAgICAgIG9mIFJhbmdlLmgsIG5vIGxvbmdlciBwdWxsZWQgaW4gaW5kaXJlY3RseSBieSBh
bm90aGVyIGhlYWRlci4KKwogMjAyMC0wNy0yMyAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gYmxvY2sgaW4gV2ViS2l0OjpMYXVuY2hTZXJ2
aWNlc0RhdGFiYXNlT2JzZXJ2ZXI6OkxhdW5jaFNlcnZpY2VzRGF0YWJhc2VPYnNlcnZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGQ5OGRiNDY5NTljMWNmYmIzMGVkZmM2Njc5ODFh
MWE0OGJlMWI1NTIuLmQ2MmE1OGRkNzZkMWQ3ZGNlN2I4NzRhZDUyZjQxZjc0ODQ2Zjg1ZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNy0yMyAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZl
IHJhbmdlcyBpbiBTcGVsbENoZWNrZXIuaCBhbmQgVGV4dENoZWNraW5nSGVscGVyLmgKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDY0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyk6IFBhc3MgdGhlIHNwZWNpZmljIHR5cGVzIG9mCisgICAgICAgIHJl
c3VsdHMgd2UgZXhwZWN0LCByYXRoZXIgdGhhbiBOU1RleHRDaGVja2luZ0FsbFN5c3RlbVR5cGVz
LgorCiAyMDIwLTA3LTIyICBDb25yYWQgU2h1bHR6ICA8Y29ucmFkX3NodWx0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgVXBkYXRlIG1hY09TIFZlcnNpb24gbWFjcm9zCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UubW0KaW5kZXggYzRmMGM0ZGVhMGUzNTZkNTU4MGMwMGQzODY1
NDM1M2UxNmJlZmZjZi4uNmZhZGFjMzc5ZWI3YjEzYTc3NmY4MjQ4ZGY3ZTM2MjVhMDQxMmM2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQpAQCAtNjIsNyArNjIs
NiBAQAogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAj
aW1wb3J0ICJUZXh0Q2hlY2tlckNsaWVudC5oIgotI2ltcG9ydCAiVGV4dENoZWNraW5nSGVscGVy
LmgiCiAjaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcu
aCIKICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBkZDQzNTBjODE5ZTQ3Mzk1
MDljNDQxMTFiYjA5Y2FlNmUxMmQxNTFlLi42MGRlNjMwZWIwYmI2MGU3Y2RjZjg3YmYyZWM4OGVk
ODVkMGJkYTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcApAQCAtODcsMTIgKzg3LDEyIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjphZGREcmFnZ2VkQ29udGVudE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAg
ICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2Uubm9kZSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dl
ZENvbnRlbnQsIHRleHRQaWVjZS5yYW5nZSwgUmVmUHRyPE5vZGU+IHsgdGV4dFBpZWNlLm5vZGUu
cHRyKCkgfSB9KTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90
IG92ZXJsYXBSdWxlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtl
cnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciBvdmVybGFw
UnVsZSkKIHsKICAgICBmaWx0ZXJNYXJrZXJzKHJhbmdlLCBudWxscHRyLCB0eXBlcywgb3Zlcmxh
cFJ1bGUpOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZmlsdGVyTWFya2Vy
cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgRG9j
dW1lbnRNYXJrZXImKT4mIGZpbHRlciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBvdmVybGFw
UnVsZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1h
cmtlciYpPiYgZmlsdGVyLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5
cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciBvdmVybGFwUnVsZSkKIHsKICAg
ICBmb3IgKGF1dG8mIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewogICAg
ICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCkBAIC0zNjYsNyArMzY2LDcgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUmIHNvdXJjZSwg
T2Zmc2V0UmFuZ2UgcmFuZ2UsIE5vZGUKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIE9mZnNldFJhbmdlIHJhbmdlLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBjb25zdCBGdW5jdGlv
bjxib29sKGNvbnN0IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXIsIFJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBu
b2RlLCBPZmZzZXRSYW5nZSByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiB0eXBlcywgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYg
ZmlsdGVyLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciBvdmVybGFwUnVsZSkKIHsK
ICAgICBpZiAocmFuZ2Uuc3RhcnQgPj0gcmFuZ2UuZW5kKQogICAgICAgICByZXR1cm47CkBAIC00
MDMsNyArNDAzLDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtl
cnMoTm9kZSYgbm9kZSwgT2Zmc2V0UmFuZ2UgcmFuZ2UsIE9wdGkKIAogICAgICAgICBEb2N1bWVu
dE1hcmtlciBjb3BpZWRNYXJrZXIgPSBtYXJrZXI7CiAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsK
LSAgICAgICAgaWYgKHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQorICAg
ICAgICBpZiAob3ZlcmxhcFJ1bGUgPT0gUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6
OlllcykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIEFkZCBlaXRoZXIgb2Yg
dGhlIHJlc3VsdGluZyBzbGljZXMgdGhhdCByZW1haW4gYWZ0ZXIgcmVtb3ZpbmcgdGFyZ2V0LgpA
QCAtNjQ4LDYgKzY0OCwyMSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJE
ZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKGNvbnN0CiAgICAgfSk7CiB9CiAK
K3ZvaWQgYWRkTWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgRG9jdW1lbnRNYXJrZXI6OkRhdGEmIGRhdGEpCit7Cisg
ICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIo
cmFuZ2UsIHR5cGUsIGRhdGEpOworfQorCit2b2lkIGFkZE1hcmtlcihUZXh0JiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCit7CisgICAgbm9kZS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobm9kZSwgc3RhcnRPZmZzZXQsIGxlbmd0aCwgdHlw
ZSwgV1RGTW92ZShkYXRhKSk7Cit9CisKK3ZvaWQgcmVtb3ZlTWFya2Vycyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMs
IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyIHBvbGljeSkKK3sKKyAgICByYW5nZS5z
dGFydC5jb250YWluZXItPmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMocmFuZ2Us
IHR5cGVzLCBwb2xpY3kpOworfQorCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogCiB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCmluZGV4IDg2ZWIwZmRjZjZi
Y2U1MDZkMWYzZmE1M2Y5Zjg2NzRmYzVmZTIzYjMuLmFhZWZmMDViMGQ4NGY5ZTI5N2Q4ODMwZWYw
MmQxODU1ZjE4YWE1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgVGV4dDsKIAogc3RydWN0IFNpbXBs
ZVJhbmdlOwogCitlbnVtIGNsYXNzIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyIDog
Ym9vbCB7IE5vLCBZZXMgfTsKKwogY2xhc3MgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTYwLDEyICs2MiwxMSBAQCBwdWJsaWM6CiAg
ICAgLy8gV2hlbiBhIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHMgd2l0aCByYW5nZSwgaWYgcmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJzIGlzIHRydWUsIHdlIGNvbXBsZXRlbHkKICAg
ICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlLCB3ZSB3aWxs
IGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlucwogICAgIC8v
IHRoZSBwb3J0aW9uIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UuCi0gICAgZW51bSBSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHsgRG9Ob3RSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgfTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZvaWQgcmVtb3ZlTWFya2Vy
cyhOb2RlJiwgT2Zmc2V0UmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXJGdW5jdGlvbiA9IG51bGxwdHIsIFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoY29u
c3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0g
RG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXIgPSBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcjo6Tm8pOworICAgIHZvaWQg
cmVtb3ZlTWFya2VycyhOb2RlJiwgT2Zmc2V0UmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBjb25zdCBGdW5j
dGlvbjxib29sKGNvbnN0IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXJGdW5jdGlvbiA9IG51bGxw
dHIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyID0gUmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXI6Ok5vKTsKIAogICAgIC8vIFJldHVybiBmYWxzZSBmcm9tIGZpbHRlckZ1
bmN0aW9uIHRvIHJlbW92ZSB0aGUgbWFya2VyLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmls
dGVyTWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
RG9jdW1lbnRNYXJrZXImKT4mIGZpbHRlckZ1bmN0aW9uLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsdGVyTWFya2Vycyhjb25z
dCBTaW1wbGVSYW5nZSYsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgRG9jdW1lbnRNYXJrZXIm
KT4mIGZpbHRlckZ1bmN0aW9uLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBp
bmdNYXJrZXIgPSBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcjo6Tm8pOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKICAgICB2b2lk
IHJlbW92ZU1hcmtlcnMoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKQEAgLTExMCw2ICsxMTEsMTAgQEAg
cHJpdmF0ZToKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAKK3ZvaWQgYWRkTWFya2Vy
KGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IERv
Y3VtZW50TWFya2VyOjpEYXRhJiA9IHsgfSk7Cit2b2lkIGFkZE1hcmtlcihUZXh0JiwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgPSB7IH0pOwordm9pZCByZW1vdmVNYXJrZXJzKGNv
bnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9
IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyID0gUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6Ok5vKTsKKwogaW5saW5l
IGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFya2Vy
VHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
aW5kZXggOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIyYzMwZTYwZTcxMzE0My4uMjljNDk3ZTEw
OTY0ZGYwOTA1ODhiYTQ2YjlkYThlZDEwM2FjNTU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRp
dGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgpAQCAtMjI3LDEwICsyMjgsOSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlUwogICAg
IGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgbWFya2Vy
cyA9IG1fZG9jdW1lbnQubWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygqcmFu
Z2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIG1h
cmtlcnMuYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAg
ICBtYXJrZXJzLmFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5n
RXhlbXB0aW9uKTsKKyAgICByZW1vdmVNYXJrZXJzKCpyYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRN
YXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6
Olllcyk7CisgICAgYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KTsKKyAgICBhZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJl
ZCgpCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpo
YW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3UKICAgICAgICAg
aWYgKHJlc3VsdC5sZW5ndGgoKSkKICAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9S
YW5nZSgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVz
Rm9yQXV0b2NvcnJlY3Rpb24oKSk7CiAgICAgICAgIGVsc2UgaWYgKCFtX2lzRGlzbWlzc2VkQnlF
ZGl0aW5nKQotICAgICAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRDb250YWlu
ZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRp
dmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0KTsK
KyAgICAgICAgICAgIGFkZE1hcmtlcigqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRN
YXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9vcmlnaW5hbFRleHQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246CiAgICAgY2FzZSBBbHRl
cm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKQEAgLTM5OSw5ICszOTksOCBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmco
RWRpdENvbW1hbmRDb21wb3NpdGlvbgogICAgIGF1dG8gcmFuZ2UgPSBjb21tYW5kLT5zdGFydGlu
Z1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwotICAgIG1hcmtl
cnMuYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBt
YXJrZXJzLmFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhl
bXB0aW9uKTsKKyAgICBhZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQpOworICAgIGFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5n
RXhlbXB0aW9uKTsKIH0KIAogRWRpdG9yQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjplZGl0b3JDbGllbnQoKQpAQCAtNDI0LDE4ICs0MjMsMTcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9u
UmVzcG8KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2ZXJzZWQoY29u
c3QgU2ltcGxlUmFuZ2UmIGNoYW5nZWRSYW5nZSkKIHsKLSAgICBjaGFuZ2VkUmFuZ2Uuc3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIGNoYW5nZWRSYW5nZS5z
dGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICByZW1vdmVN
YXJrZXJzKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIFJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyOjpZZXMpOworICAgIGFkZE1hcmtlcihjaGFuZ2Vk
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihjb25zdCBTaW1wbGVS
YW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsKLSAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgZm9yIChhdXRvIG1hcmtlclR5
cGUgOiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpIHsKICAgICAgICAgaWYgKG1hcmtl
clR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtl
cihyZXBsYWNlZFJhbmdlLCBtYXJrZXJUeXBlLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgICAg
ICBhZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihyZXBsYWNlZFJhbmdl
LCBtYXJrZXJUeXBlKTsKKyAgICAgICAgICAgIGFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBtYXJr
ZXJUeXBlKTsKICAgICB9CiB9CiAKQEAgLTQ1NSw3ICs0NTMsNyBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3Jy
ZWN0aW9uKAogICAgICAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
KEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkVkaXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsK
ICAgICB9CiAKLSAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2VPZkNvcnJlY3Rpb24sIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICByZW1vdmVNYXJrZXJzKHJhbmdl
T2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgUmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXI6Olllcyk7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCkBAIC00ODIsNyArNDgwLDcg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFj
ZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0
byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRo
aXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmln
aW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2Nv
cnJlY3QgaXQgYWdhaW4uCi0gICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9u
LCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgYWRk
TWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1
dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlv
bik7CiB9CiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNP
blRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcm
IHN0cmluZ1RvQmVSZXBsYWNlZCkKQEAgLTYwMiw5ICs2MDAsOCBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYgcgogICAgIGlmIChwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZSkgIT0gYWx0ZXJuYXRp
dmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIG1hcmtlcnMgPSByZXBsYWNlbWVudFJh
bmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZvciAoYXV0byBtYXJrZXJUeXBl
IDogbWFya2VyVHlwZXNUb0FkZCkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZW1l
bnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRp
dmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOworICAgICAgICBhZGRNYXJrZXIo
cmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVk
QWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOwogfQogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
aW5kZXggMzcxYzc5ZjI3ZDlkYzNkZWY3ODU2MGZmMDBlYjM2NDVjZGNmMjk3NS4uNmZiMTJmZDgz
YTllZmNmZGNkZmNmYWE0NjhjYWUwODA0ZGU0NTA3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJz
KFRleHQmIG5vZGUsIHVuc2lnbgogICAgIHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwg
Y291bnQsIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgcmFuZ2UuZW5kLm9mZnNldCA9IHJhbmdlLnN0
YXJ0Lm9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKTsKICAgICBmb3IgKGF1dG8mIG1h
cmtlciA6IG1hcmtlcnMpCi0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihy
YW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRhdGEoKSk7CisgICAgICAgIGFkZE1hcmtlcihy
YW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRhdGEoKSk7CiB9CiAKIFBvc2l0aW9uIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA3YjVlMmVlY2E0M2VlZTUy
MWQ4NjBjNDg1NmFhYjcxYmZkYWI4YWIwLi5lODdiODk0YTNiOTYzMDViYjVmNjZlODVhYWFmNGY3
OTU2MzY1NGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0yMTM2LDcgKzIxMzYs
NyBAQCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAg
IEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKQEAgLTIxNTEsNyArMjE1MSw3IEBAIHZvaWQgRWRpdG9y
OjpsZWFyblNwZWxsaW5nKCkKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJs
ZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNh
bGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFy
b3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCiAg
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
cmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsK
KyAgICAgICAgcmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CiAgICAgQVNTRVJU
KHRleHQubGVuZ3RoKCkpOwpAQCAtMjE2NCwyNyArMjE2NCwyOSBAQCB2b2lkIEVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiB7CiAgICAg
UmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAotICAgIC8vIFRo
ZSBiYXNpYyBhcHByb2FjaCBpcyB0byBzZWFyY2ggaW4gdHdvIHBoYXNlcyAtIGZyb20gdGhlIHNl
bGVjdGlvbiBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZG9jLCBhbmQKLSAgICAvLyB0aGVuIHdlIHdy
YXAgYW5kIHNlYXJjaCBmcm9tIHRoZSBkb2Mgc3RhcnQgdG8gKGFwcHJveGltYXRlbHkpIHdoZXJl
IHdlIHN0YXJ0ZWQuCi0gICAgCi0gICAgLy8gU3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgc2VsZWN0
aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5nIGF0IHRoZSBzZWxlY3Rp
b24gZW5kIG1ha2VzCi0gICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5kcyB3
b3JrLgorICAgIC8vIFRoZSBiYXNpYyBhcHByb2FjaCBpcyB0byBzZWFyY2ggaW4gdHdvIHBoYXNl
czogZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCwgYW5k
CisgICAgLy8gdGhlbiB3ZSB3cmFwIGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jdW1lbnQgc3RhcnQg
dG8gKGFwcHJveGltYXRlbHkpIHdoZXJlIHdlIHN0YXJ0ZWQuCisKKyAgICAvLyBTdGFydCBhdCB0
aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LgorICAg
IC8vIFN0YXJ0aW5nIGF0IHRoZSBzZWxlY3Rpb24gZW5kIG1ha2VzIHJlcGVhdGVkICJjaGVjayBz
cGVsbGluZyIgY29tbWFuZHMgd29yay4KICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICBSZWY8UmFuZ2U+IHNwZWxs
aW5nU2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgYXV0byBz
cGVsbGluZ1NlYXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KCkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwogICAgIGlm
IChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIHN0YXJ0ZWRX
aXRoU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgaWYgKHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSB7
Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpKTsKLSAgICAgICAgICAgIC8vIFdlIG1hdGNoIEFwcEtpdCdzIHJ1bGU6IFN0YXJ0IDEgY2hh
cmFjdGVyIGJlZm9yZSB0aGUgc2VsZWN0aW9uLgotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IG9uZUJlZm9yZVN0YXJ0ID0gc3RhcnQucHJldmlvdXMoKTsKLSAgICAgICAgICAgIHNldFN0YXJ0
KHNwZWxsaW5nU2VhcmNoUmFuZ2UucHRyKCksIG9uZUJlZm9yZVN0YXJ0LmlzTm90TnVsbCgpID8g
b25lQmVmb3JlU3RhcnQgOiBzdGFydCk7CisgICAgICAgICAgICAvLyBNYXRjaCBBcHBLaXQncyBy
dWxlOiBTdGFydCAxIGNoYXJhY3RlciBiZWZvcmUgdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgICAg
IGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgICAgICAgICBhdXRv
IGJlZm9yZVN0YXJ0ID0gc3RhcnQucHJldmlvdXMoKTsKKyAgICAgICAgICAgIGlmIChiZWZvcmVT
dGFydC5pc05vdE51bGwoKSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IGJlZm9yZVN0YXJ0Owor
ICAgICAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS5zdGFydCA9ICptYWtlQm91bmRhcnlQb2lu
dChzdGFydCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2V0U3RhcnQoc3BlbGxpbmdT
ZWFyY2hSYW5nZS5wdHIoKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgICAgICAgICBz
cGVsbGluZ1NlYXJjaFJhbmdlLnN0YXJ0ID0gKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpOwogICAgIH0KIAotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gc3BlbGxpbmdT
ZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGF1dG8gcG9zaXRpb24gPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oc3BlbGxpbmdTZWFyY2hSYW5nZS5zdGFydCk7CiAgICAgaWYg
KCFpc0VkaXRhYmxlUG9zaXRpb24ocG9zaXRpb24pKSB7CiAgICAgICAgIC8vIFRoaXMgc2hvdWxk
bid0IGhhcHBlbiBpbiB2ZXJ5IG9mdGVuIGJlY2F1c2UgdGhlIFNwZWxsaW5nIG1lbnUgaXRlbXMg
YXJlbid0IGVuYWJsZWQgdW5sZXNzIHRoZQogICAgICAgICAvLyBzZWxlY3Rpb24gaXMgZWRpdGFi
bGUuCkBAIC0yMTk2LDEzNSArMjE5OCwxMTUgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRN
aXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICBpZiAocG9zaXRp
b24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBQb3Np
dGlvbiByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVp
dmFsZW50KCk7Ci0gICAgICAgIGlmIChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCkpCi0gICAgICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydCgqcmFuZ2VD
b21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICBpZiAoYXV0byBwb2ludCA9IG1h
a2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKSkKKyAg
ICAgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2Uuc3RhcnQgPSAqcG9pbnQ7CiAgICAgICAgIHN0
YXJ0ZWRXaXRoU2VsZWN0aW9uID0gZmFsc2U7IC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0K
LSAgICAKKwogICAgIC8vIHRvcE5vZGUgZGVmaW5lcyB0aGUgd2hvbGUgcmFuZ2Ugd2Ugd2FudCB0
byBvcGVyYXRlIG9uIAogICAgIGF1dG8qIHRvcE5vZGUgPSBoaWdoZXN0RWRpdGFibGVSb290KHBv
c2l0aW9uKTsKLSAgICAvLyBGSVhNRTogbGFzdE9mZnNldEZvckVkaXRpbmcoKSBpcyB3cm9uZyBo
ZXJlIGlmIGVkaXRpbmdJZ25vcmVzQ29udGVudChoaWdoZXN0RWRpdGFibGVSb290KCkpIHJldHVy
bnMgdHJ1ZSAoZS5nLiBhIDx0YWJsZT4pCiAgICAgaWYgKHRvcE5vZGUpCi0gICAgICAgIHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgqdG9wTm9kZSwgbGFzdE9mZnNldEZvckVkaXRpbmcoKnRv
cE5vZGUpKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS5lbmQgPSBtYWtlQm91bmRhcnlQ
b2ludEFmdGVyTm9kZUNvbnRlbnRzKCp0b3BOb2RlKTsKIAogICAgIC8vIElmIHNwZWxsaW5nU2Vh
cmNoUmFuZ2Ugc3RhcnRzIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLCBhZHZhbmNlIHRvIHRoZSBu
ZXh0IHdvcmQgc28gd2Ugc3RhcnQgY2hlY2tpbmcKICAgICAvLyBhdCBhIHdvcmQgYm91bmRhcnku
IEdvaW5nIGJhY2sgYnkgb25lIGNoYXIgYW5kIHRoZW4gZm9yd2FyZCBieSBhIHdvcmQgZG9lcyB0
aGUgdHJpY2suCiAgICAgaWYgKHN0YXJ0ZWRXaXRoU2VsZWN0aW9uKSB7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiBvbmVCZWZvcmVTdGFydCA9IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNwZWxsaW5n
U2VhcmNoUmFuZ2UucHRyKCksIERPV05TVFJFQU0pLnByZXZpb3VzKCk7CisgICAgICAgIGF1dG8g
b25lQmVmb3JlU3RhcnQgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHNwZWxsaW5nU2VhcmNoUmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNKS5wcmV2aW91cygpOwog
ICAgICAgICBpZiAob25lQmVmb3JlU3RhcnQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICBzZXRT
dGFydChzcGVsbGluZ1NlYXJjaFJhbmdlLnB0cigpLCBlbmRPZldvcmQob25lQmVmb3JlU3RhcnQp
KTsKKyAgICAgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2Uuc3RhcnQgPSAqbWFrZUJvdW5kYXJ5
UG9pbnQoZW5kT2ZXb3JkKG9uZUJlZm9yZVN0YXJ0KSk7CiAgICAgICAgIC8vIGVsc2Ugd2Ugd2Vy
ZSBhbHJlYWR5IGF0IHRoZSBzdGFydCBvZiB0aGUgZWRpdGFibGUgbm9kZQogICAgIH0KIAotICAg
IGlmIChzcGVsbGluZ1NlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBpZiAoc3BlbGxpbmdT
ZWFyY2hSYW5nZS5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuOyAvLyBub3RoaW5nIHRvIHNl
YXJjaCBpbgotICAgIAorCiAgICAgLy8gR2V0IHRoZSBzcGVsbCBjaGVja2VyIGlmIGl0IGlzIGF2
YWlsYWJsZQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisK
ICAgICAvLyBXZSBnbyB0byB0aGUgZW5kIG9mIG91ciBmaXJzdCByYW5nZSBpbnN0ZWFkIG9mIHRo
ZSBzdGFydCBvZiBpdCwganVzdCB0byBiZSBzdXJlCiAgICAgLy8gd2UgZG9uJ3QgZ2V0IGZvaWxl
ZCBieSBhbnkgd29yZCBib3VuZGFyeSBwcm9ibGVtcyBhdCB0aGUgc3RhcnQuICBJdCBtZWFucyB3
ZSBtaWdodAogICAgIC8vIGRvIGEgdGlueSBiaXQgbW9yZSBzZWFyY2hpbmcuCi0gICAgTm9kZSYg
c2VhcmNoRW5kTm9kZUFmdGVyV3JhcCA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmVuZENvbnRhaW5l
cigpOwotICAgIGludCBzZWFyY2hFbmRPZmZzZXRBZnRlcldyYXAgPSBzcGVsbGluZ1NlYXJjaFJh
bmdlLT5lbmRPZmZzZXQoKTsKKyAgICBhdXRvIHNlYXJjaEVuZEFmdGVyV3JhcCA9IHNwZWxsaW5n
U2VhcmNoUmFuZ2UuZW5kOwogICAgIAotICAgIHVpbnQ2NF90IG1pc3NwZWxsaW5nT2Zmc2V0ID0g
MDsKLSAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7Ci0gICAgdWludDY0X3QgZ3JhbW1h
clBocmFzZU9mZnNldCA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiBncmFtbWFyU2VhcmNoUmFuZ2U7
Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7Ci0gICAgU3RyaW5nIG1pc3NwZWxsZWRXb3Jk
OwotCi0gICAgYm9vbCBpc1NwZWxsaW5nID0gdHJ1ZTsKLSAgICB1aW50NjRfdCBmb3VuZE9mZnNl
dCA9IDA7Ci0gICAgU3RyaW5nIGZvdW5kSXRlbTsKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlz
c3BlbGxpbmdSYW5nZTsKKyAgICBUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1pc3NwZWxsZWRXb3JkIG1p
c3NwZWxsZWRXb3JkOworICAgIFRleHRDaGVja2luZ0hlbHBlcjo6VW5ncmFtbWF0aWNhbFBocmFz
ZSB1bmdyYW1tYXRpY2FsUGhyYXNlOworICAgIGF1dG8gZ3JhbW1hclNlYXJjaFJhbmdlID0gc3Bl
bGxpbmdTZWFyY2hSYW5nZTsKKwogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkp
IHsKLSAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xv
bmVSYW5nZSgpOwotICAgICAgICBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVu
dCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cihpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdy
YW1tYXJEZXRhaWwpOwotICAgICAgICBpZiAoaXNTcGVsbGluZykgewotICAgICAgICAgICAgbWlz
c3BlbGxlZFdvcmQgPSBmb3VuZEl0ZW07Ci0gICAgICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9
IGZvdW5kT2Zmc2V0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFkR3JhbW1hclBo
cmFzZSA9IGZvdW5kSXRlbTsKLSAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3Vu
ZE9mZnNldDsKLSAgICAgICAgfQorICAgICAgICBhdXRvIGZvdW5kSXRlbSA9IFRleHRDaGVja2lu
Z0hlbHBlcigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxs
ZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKTsK
KyAgICAgICAgaWYgKGF1dG8gd29yZCA9IFdURjo6Z2V0X2lmPFRleHRDaGVja2luZ0hlbHBlcjo6
TWlzc3BlbGxlZFdvcmQ+KGZvdW5kSXRlbSkpCisgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9
IFdURk1vdmUoKndvcmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1bmdyYW1tYXRpY2Fs
UGhyYXNlID0gV1RGOjpnZXQ8VGV4dENoZWNraW5nSGVscGVyOjpVbmdyYW1tYXRpY2FsUGhyYXNl
PihXVEZNb3ZlKGZvdW5kSXRlbSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1pc3NwZWxsZWRX
b3JkID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSku
ZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOworICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBl
cigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsZWRXb3Jk
KCk7CiAKLSAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+
Y2xvbmVSYW5nZSgpOwotICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLndvcmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKLSAgICAg
ICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJzKCpncmFtbWFyU2VhcmNoUmFuZ2UpOwotICAg
ICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNldCk7Ci0gICAgICAgICAgICBn
cmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lciwg
Y2hhcnMucmFuZ2UoKS5zdGFydC5vZmZzZXQpOworICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0
b3IgY2hhcmFjdGVySXRlcmF0b3IoZ3JhbW1hclNlYXJjaFJhbmdlKTsKKyAgICAgICAgICAgIGNo
YXJhY3Rlckl0ZXJhdG9yLmFkdmFuY2UobWlzc3BlbGxlZFdvcmQub2Zmc2V0KTsKKyAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZS5lbmQgPSBjaGFyYWN0ZXJJdGVyYXRvci5yYW5nZSgpLnN0
YXJ0OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgp
KQotICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xp
ZW50KCksICpncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRl
dGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOworICAgICAgICAgICAgdW5ncmFtbWF0
aWNhbFBocmFzZSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIGdyYW1tYXJTZWFyY2hS
YW5nZSkuZmluZEZpcnN0VW5ncmFtbWF0aWNhbFBocmFzZSgpOwogICAgIH0KIAogICAgIC8vIElm
IHdlIGZvdW5kIG5laXRoZXIgYmFkIGdyYW1tYXIgbm9yIGEgbWlzc3BlbGxlZCB3b3JkLCB3cmFw
IGFuZCB0cnkgYWdhaW4gKGJ1dCBkb24ndCBib3RoZXIgaWYgd2Ugc3RhcnRlZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZQogICAgIC8vIGJsb2NrIHJhdGhlciB0aGFuIGF0IGEgc2VsZWN0aW9uKS4K
LSAgICBpZiAoc3RhcnRlZFdpdGhTZWxlY3Rpb24gJiYgIW1pc3NwZWxsZWRXb3JkICYmICFiYWRH
cmFtbWFyUGhyYXNlKSB7CisgICAgaWYgKHN0YXJ0ZWRXaXRoU2VsZWN0aW9uICYmIG1pc3NwZWxs
ZWRXb3JkLndvcmQuaXNFbXB0eSgpICYmIHVuZ3JhbW1hdGljYWxQaHJhc2UucGhyYXNlLmlzRW1w
dHkoKSkgewogICAgICAgICBpZiAodG9wTm9kZSkKLSAgICAgICAgICAgIHNwZWxsaW5nU2VhcmNo
UmFuZ2UtPnNldFN0YXJ0KCp0b3BOb2RlLCAwKTsKLSAgICAgICAgLy8gZ29pbmcgdW50aWwgdGhl
IGVuZCBvZiB0aGUgdmVyeSBmaXJzdCBjaHVuayB3ZSB0ZXN0ZWQgaXMgZmFyIGVub3VnaAotICAg
ICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRFbmQoc2VhcmNoRW5kTm9kZUFmdGVyV3JhcCwg
c2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFwKTsKKyAgICAgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFu
Z2Uuc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqdG9wTm9kZSk7
CisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZW5kID0gc2VhcmNoRW5kQWZ0ZXJXcmFwOwog
ICAgICAgICAKICAgICAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewotICAg
ICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVS
YW5nZSgpOwotICAgICAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGll
bnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1t
YXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBn
cmFtbWFyRGV0YWlsKTsKLSAgICAgICAgICAgIGlmIChpc1NwZWxsaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmb3VuZEl0ZW07Ci0gICAgICAgICAgICAgICAgbWlzc3Bl
bGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IGZvdW5kSXRlbTsKLSAgICAgICAgICAgICAgICBn
cmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBhdXRvIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIHNwZWxs
aW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhy
YXNlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHdv
cmQgPSBXVEY6OmdldF9pZjxUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1pc3NwZWxsZWRXb3JkPihmb3Vu
ZEl0ZW0pKQorICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gV1RGTW92ZSgqd29yZCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdW5ncmFtbWF0aWNhbFBocmFzZSA9
IFdURjo6Z2V0PFRleHRDaGVja2luZ0hlbHBlcjo6VW5ncmFtbWF0aWNhbFBocmFzZT4oV1RGTW92
ZShmb3VuZEl0ZW0pKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1pc3NwZWxsZWRX
b3JkID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSku
ZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOworICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBUZXh0Q2hlY2tpbmdI
ZWxwZXIoKmNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGVk
V29yZCgpOwogCi0gICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFy
Y2hSYW5nZTsKKyAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQud29yZC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNz
cGVsbGVkIHdvcmQKLSAgICAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycygqZ3Jh
bW1hclNlYXJjaFJhbmdlKTsKLSAgICAgICAgICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxs
aW5nT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChj
aGFycy5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lciwgY2hhcnMucmFuZ2UoKS5zdGFydC5vZmZzZXQp
OworICAgICAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJhY3Rlckl0ZXJhdG9yKGdy
YW1tYXJTZWFyY2hSYW5nZSk7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVySXRlcmF0b3IuYWR2
YW5jZShtaXNzcGVsbGVkV29yZC5vZmZzZXQpOworICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFy
Y2hSYW5nZS5lbmQgPSBjaGFyYWN0ZXJJdGVyYXRvci5yYW5nZSgpLnN0YXJ0OwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAg
ICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50
KCksICpncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFp
bCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOworICAgICAgICAgICAgICAgIHVuZ3JhbW1h
dGljYWxQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCBncmFtbWFyU2VhcmNo
UmFuZ2UpLmZpbmRGaXJzdFVuZ3JhbW1hdGljYWxQaHJhc2UoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBpZiAoIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7CisgICAgaWYgKCF1
bmdyYW1tYXRpY2FsUGhyYXNlLnBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gV2UgZm91
bmQgYmFkIGdyYW1tYXIuIFNpbmNlIHdlIG9ubHkgc2VhcmNoZWQgZm9yIGJhZCBncmFtbWFyIHVw
IHRvIHRoZSBmaXJzdCBtaXNzcGVsbGVkIHdvcmQsIHRoZSBiYWQgZ3JhbW1hcgogICAgICAgICAv
LyB0YWtlcyBwcmVjZWRlbmNlIGFuZCB3ZSBpZ25vcmUgYW55IHBvdGVudGlhbCBtaXNzcGVsbGVk
IHdvcmQuIFNlbGVjdCB0aGUgZ3JhbW1hciBkZXRhaWwsIHVwZGF0ZSB0aGUgc3BlbGxpbmcKICAg
ICAgICAgLy8gcGFuZWwsIGFuZCBzdG9yZSBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSBncmVlbiBz
cXVpZ2dsZSBsYXRlci4KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNl
Lmxlbmd0aCgpID4gMCk7Ci0gICAgICAgIEFTU0VSVChncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0
aCA+IDApOworICAgICAgICBBU1NFUlQodW5ncmFtbWF0aWNhbFBocmFzZS5waHJhc2UubGVuZ3Ro
KCkgPiAwKTsKKyAgICAgICAgQVNTRVJUKHVuZ3JhbW1hdGljYWxQaHJhc2UuZGV0YWlsLnJhbmdl
Lmxlbmd0aCA+IDApOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBn
ZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFy
YWdyYXBoCi0gICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJh
bmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJE
ZXRhaWwucmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOworICAg
ICAgICAvLyBGSVhNRSA0ODU5MTkwOiBUaGlzIGdldHMgY29uZnVzZWQgd2l0aCBkb3VibGVkIHB1
bmN0dWF0aW9uIGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguCisgICAgICAgIGF1dG8gYmFkR3Jh
bW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGdyYW1tYXJTZWFyY2hSYW5nZSwgeyB1
bmdyYW1tYXRpY2FsUGhyYXNlLm9mZnNldCArIHVuZ3JhbW1hdGljYWxQaHJhc2UuZGV0YWlsLnJh
bmdlLmxvY2F0aW9uLCB1bmdyYW1tYXRpY2FsUGhyYXNlLmRldGFpbC5yYW5nZS5sZW5ndGggfSk7
CiAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAKLSAgICAg
ICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFy
UGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
TWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJE
ZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKLSAgICB9IGVsc2UgaWYgKCFtaXNzcGVsbGVkV29yZC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyh1bmdyYW1tYXRpY2FsUGhyYXNlLnBocmFzZSwgdW5ncmFtbWF0aWNhbFBocmFzZS5k
ZXRhaWwpOworICAgICAgICBhZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6R3JhbW1hciwgdW5ncmFtbWF0aWNhbFBocmFzZS5kZXRhaWwudXNlckRlc2NyaXB0aW9uKTsK
KyAgICB9IGVsc2UgaWYgKCFtaXNzcGVsbGVkV29yZC53b3JkLmlzRW1wdHkoKSkgewogICAgICAg
ICAvLyBXZSBmb3VuZCBhIG1pc3NwZWxsaW5nLCBidXQgbm90IGFueSBlYXJsaWVyIGJhZCBncmFt
bWFyLiBTZWxlY3QgdGhlIG1pc3NwZWxsaW5nLCB1cGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsLCBh
bmQgc3RvcmUKICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgcmVkIHNxdWlnZ2xl
IGxhdGVyLgogICAgICAgICAKLSAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3BlbGxpbmdPZmZzZXQs
IG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpIH0pOworICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFu
Z2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVs
bGVkV29yZC5vZmZzZXQsIG1pc3NwZWxsZWRXb3JkLndvcmQubGVuZ3RoKCkgfSk7CiAgICAgICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlz
c3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOwogICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAKLSAgICAgICAgY2xpZW50KCktPnVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOwotICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQud29yZCk7CisgICAgICAgIGFkZE1hcmtlciht
aXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgIH0KIH0KIApA
QCAtMjM4NiwxNCArMjM2OCw2IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25T
dHJpbmcoKSBjb25zdAogICAgIHJldHVybiBzZWxlY3RlZFN0cmluZzsKIH0KIAotYm9vbCBFZGl0
b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCi17Ci0gICAgYXV0byByYW5nZSA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBp
ZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgp
OwotfQotCiBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHdvcmQubGVuZ3RoKCkpOwpA
QCAtMjQwNCwzMCArMjM3OCwyNiBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAgICAgcmV0dXJuIGd1ZXNz
ZXM7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVu
Z3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKK1RleHRD
aGVja2luZ0d1ZXNzZXMgRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNh
bCgpCiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgYXV0
byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAg
ICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxp
bmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiB3b3JkU2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgp
KTsKKyAgICAgICAgICAgIGF1dG8gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2Vs
ZWN0aW9uLmJhc2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3Jh
bnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHkpOwogICAgICAgICAgICAg
cmFuZ2UgPSB3b3JkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICAgICAgaWYgKCFyYW5nZSB8fCAhY2xpZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gVmVjdG9y
PFN0cmluZz4oKTsKLSAgICAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCks
ICpyYW5nZSkuZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQoKSwgbWlzc3BlbGxlZCwgdW5ncmFtbWF0aWNhbCk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKCpjbGll
bnQoKSwgKnJhbmdlKS5ndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJh
c2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpOwogICAgIH0KIAotICAgIFN0cmluZyBtaXNz
cGVsbGVkV29yZCA9IGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0
aG91dFNlbGVjdGlvbigpID8gbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShkb2N1bWVudCgp
LmZvY3VzZWRFbGVtZW50KCkpIDogbWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpOwotICAgIG1p
c3NwZWxsZWQgPSAhbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpOwotICAgIC8vIE9ubHkgdW5pZmll
ZCB0ZXh0IGNoZWNrZXIgc3VwcG9ydHMgZ3Vlc3NlcyBmb3IgdW5ncmFtbWF0aWNhbCBwaHJhc2Vz
LgotICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKLQotICAgIGlmIChtaXNzcGVsbGVkKQotICAg
ICAgICByZXR1cm4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKLSAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICBhdXRvIG1pc3NwZWxsZWRXb3JkID0gYmVo
YXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkg
PyBtaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQo
KSkgOiBtaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCk7CisgICAgaWYgKG1pc3NwZWxsZWRXb3Jk
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4geyBndWVzc2VzRm9y
TWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpLCB0cnVlLCBmYWxzZSB9OwogfQogCiB2b2lk
IEVkaXRvcjo6c2hvd1NwZWxsaW5nR3Vlc3NQYW5lbCgpCkBAIC0yNDU4LDcgKzI0MjgsNyBAQCBi
b29sIEVkaXRvcjo6c3BlbGxpbmdQYW5lbElzU2hvd2luZygpCiB2b2lkIEVkaXRvcjo6Y2xlYXJN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1vdmluZ1Nl
bGVjdGlvbikKIHsKICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbW92aW5nU2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1
bWVudE1hcmtlcjo6R3JhbW1hciB9KTsKKyAgICAgICAgcmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRS
YW5nZSwgeyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpHcmFtbWFy
IH0pOwogfQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aW9uKQpAQCAtMjU2Nyw4ICsyNTM3LDgg
QEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBW
aXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgLy8gY2F1c2UgYW55IG90aGVyIHBh
cnQgb2YgdGhlIGN1cnJlbnQgc2VudGVuY2UgdG8gbG9zZSBvciBnYWluIHNwZWxsaW5nIGNvcnJl
Y3Rpb24gbWFya2VycywgZHVlIHRvCiAgICAgICAgIC8vIHNlbnRlbmNlIHJldHJvIGNvcnJlY3Rp
b24uIEFzIHN1Y2gsIHdlIGV4cGFuZCB0aGUgc3BlbGwgY2hlY2tpbmcgcmFuZ2UgdG8gZW5jb21w
YXNzIGFzIG11Y2ggb2YgdGhlCiAgICAgICAgIC8vIGZ1bGwgc2VudGVuY2UgYXMgd2UgY2FuLCBy
ZXNwZWN0aW5nIGJvdW5kYXJpZXMgd2hlcmUgc3BlbGxjaGVja2luZyBpcyBkaXNhYmxlZC4KLSAg
ICAgICAgZnVsbFNlbnRlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7Ci0g
ICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcp
OworICAgICAgICByZW1vdmVNYXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIpOworICAgICAgICByZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1Jh
bmdlLCBhZGphY2VudFdvcmRSYW5nZSwgZnVsbFNlbnRlbmNlUmFuZ2UpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMjY0MCwxOSArMjYxMCwxNiBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
bwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIFRleHRDaGVja2luZ0hl
bHBlciBjaGVja2VyKCpjbGllbnQoKSwgKnNlYXJjaFJhbmdlKTsKLSAgICBpZiAoY2hlY2tTcGVs
bGluZykgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2U7
Ci0gICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nTGl2
ZVJhbmdlKTsKLSAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShmaXJzdE1pc3NwZWxsaW5n
TGl2ZVJhbmdlKTsKLSAgICB9CisgICAgaWYgKGNoZWNrU3BlbGxpbmcpCisgICAgICAgIHJldHVy
biBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGVkV29yZHMoKTsKICAgICBpZiAoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCkpCi0gICAgICAgIGNoZWNrZXIubWFya0FsbEJhZEdyYW1tYXIoKTsKKyAg
ICAgICAgY2hlY2tlci5tYXJrQWxsVW5ncmFtbWF0aWNhbFBocmFzZXMoKTsKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKICAgICBV
TlVTRURfUEFSQU0oY2hlY2tTcGVsbGluZyk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNlbmRpZgogfQogCiBib29sIEVkaXRvcjo6
aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdApAQCAtMjcxNyw5ICsy
Njg0LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgYm9vbCBhc3luY2hyb25vdXMg
PSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAogICAgIC8vIEluIGFzeW5jaHJvbm91
cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgot
ICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVN
YXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7CisgICAgYXV0byByZXNvbHZl
ZE9wdGlvbnMgPSByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0
Q2hlY2tpbmdPcHRpb25zKTsKKyAgICBhdXRvJiBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaFRv
Q2hlY2sucGFyYWdyYXBoUmFuZ2UoKTsKKyAgICBhdXRvJiBjaGVja2luZ1JhbmdlID0gYXN5bmNo
cm9ub3VzID8gcGFyYWdyYXBoUmFuZ2UgOiByYW5nZVRvQ2hlY2s7CiAgICAgYXV0byYgdGV4dFJl
cGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gKmF1dG9tYXRpY1Jl
cGxhY2VtZW50UmFuZ2UgOiByYW5nZVRvQ2hlY2s7Ci0gICAgYXV0byByZXF1ZXN0ID0gU3BlbGxD
aGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NJ
bmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gUmVmPFJhbmdlPiB7IHBhcmFncmFwaFRvQ2hlY2su
cGFyYWdyYXBoUmFuZ2UoKSB9IDogY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9DaGVjayksIGNyZWF0
ZUxpdmVSYW5nZSh0ZXh0UmVwbGFjZW1lbnRSYW5nZSksIHBhcmFncmFwaFRvQ2hlY2sucGFyYWdy
YXBoUmFuZ2UoKSk7CisgICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0
ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCwgY2hlY2tp
bmdSYW5nZSwgdGV4dFJlcGxhY2VtZW50UmFuZ2UsIHBhcmFncmFwaFJhbmdlKTsKICAgICBpZiAo
IXJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjc1NywxMiArMjcyNiwxMiBAQCB2b2lk
IEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2VUb1JlcGxhY2UsIGNvbgogICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCByZXBsYWNlbWVudCktPmFwcGx5KCk7
CiB9CiAKLXN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVj
a2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCwgUmFuZ2UmIHJh
bmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50LCBDaGFyYWN0ZXJSYW5nZSBy
ZXN1bHRDaGFyYWN0ZXJSYW5nZSkKK3N0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJl
c2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFn
cmFwaCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50LCBDaGFyYWN0ZXJSYW5nZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKIHsKICAgICBh
dXRvIHNjb3BlTm9kZSA9IG1ha2VSZWYoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBo
LnBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKSk7CiAgICAgYXV0
byBwYXJhZ3JhcGhDaGFyYWN0ZXJSYW5nZSA9IGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlTm9kZSksIHBhcmFncmFwaC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKIAotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVw
bGFjZSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQ6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCByZXBsYWNlbWVudCkt
PmFwcGx5KCk7CiAKICAgICAvLyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggbWF5IGJlIG9ycGhhbmVk
IGFmdGVyIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgbXV0YXRlZCBET00uCiAgICAgLy8gU2Vl
IDxyZGFyOi8vMTAzMDUzMTU+LCBodHRwOi8vd2Via2l0Lm9yZy9iLzg5NTI2LgpAQCAtMjc3MCw3
ICsyNzM5LDcgQEAgc3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4
dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1BhcmEKICAgICBwYXJhZ3JhcGhDaGFyYWN0
ZXJSYW5nZS5sZW5ndGggKz0gcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1bHRDaGFyYWN0ZXJS
YW5nZS5sZW5ndGg7CiAgICAgYXV0byBuZXdQYXJhZ3JhcGhSYW5nZSA9IHJlc29sdmVDaGFyYWN0
ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoc2NvcGVOb2RlKSwgcGFyYWdy
YXBoQ2hhcmFjdGVyUmFuZ2UpOwogICAgIGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKG5ld1BhcmFncmFwaFJhbmdlLCB7IHJlc3VsdENoYXJhY3RlclJhbmdl
LmxvY2F0aW9uLCByZXBsYWNlbWVudC5sZW5ndGgoKSB9KTsKLSAgICBwYXJhZ3JhcGggPSBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNy
ZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UobmV3UGFy
YWdyYXBoUmFuZ2UpKTsKKyAgICBwYXJhZ3JhcGggPSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoc3Bl
bGxDaGVja2luZ1JhbmdlLCBzcGVsbENoZWNraW5nUmFuZ2UsIG5ld1BhcmFncmFwaFJhbmdlKTsK
IH0KIAogdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykK
QEAgLTI3NzgsMTUgKzI3NDcsMTUgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNv
bnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICBSZWY8
RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0
Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwotICAgIFRl
eHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJl
cXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHJlcXVlc3QuY2hlY2tp
bmdSYW5nZSgpLCByZXF1ZXN0LmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoKSwgcmVxdWVzdC5w
YXJhZ3JhcGhSYW5nZSgpKTsKIAogICAgIC8vIEZJWE1FOiBNYXJrIHRoaXMgY29uc3Qgb25jZSBN
U1ZDIGJ1ZyBpcyBmaXhlZDogPGh0dHBzOi8vZGV2ZWxvcGVyY29tbXVuaXR5LnZpc3VhbHN0dWRp
by5jb20vY29udGVudC9wcm9ibGVtLzMxNjcxMy9tc3ZjLWNhbnQtY29tcGlsZS13ZWJraXRzLW9w
dGlvbnNldGNvbnRhaW5zYW55Lmh0bWw+LgogICAgIGJvb2wgc2hvdWxkUGVyZm9ybVJlcGxhY2Vt
ZW50ID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWluc0FueSh7IFRleHRDaGVja2luZ1R5cGU6
OlF1b3RlLCBUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNl
bWVudCB9KTsKLSAgICBjb25zdCBib29sIHNob3VsZE1hcmtTcGVsbGluZyA9IHRleHRDaGVja2lu
Z09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpOwotICAgIGNvbnN0
IGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwotICAgIGNvbnN0IGJvb2wgc2hvdWxkTWFya0xpbmsg
PSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkxpbmspOwot
ICAgIGNvbnN0IGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09w
dGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCk7Ci0g
ICAgY29uc3QgYm9vbCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24gPSBzaG91bGRTaG93Q29ycmVj
dGlvblBhbmVsIHx8IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlw
ZTo6Q29ycmVjdGlvbik7CisgICAgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tp
bmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKKyAgICBib29s
IHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hl
Y2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICBib29sIHNob3VsZE1hcmtMaW5rID0gdGV4dENoZWNr
aW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKTsKKyAgICBib29sIHNo
b3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwpOworICAgIGJvb2wgc2hvdWxkQ2hl
Y2tGb3JDb3JyZWN0aW9uID0gc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCB8fCB0ZXh0Q2hlY2tp
bmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pOwogI2lmICFV
U0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiAgICAgQVNTRVJUKCFzaG91bGRTaG93Q29ycmVjdGlv
blBhbmVsKTsKICNlbmRpZgpAQCAtMjgzNCwxNCArMjgwMywxNCBAQCB2b2lkIEVkaXRvcjo6bWFy
a0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZl
Y3RvcjxUZQogICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1
YnJhbmdlKHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKICAgICAgICAgICAgIGlm
ICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZCht
aXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgcmVw
bGFjZW1lbnQpOworICAgICAgICAgICAgYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZywgcmVwbGFjZW1lbnQpOwogICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZE1hcmtHcmFtbWFyICYmIHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1h
ciAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyh7IHJlc3VsdExvY2F0aW9uLCByZXN1
bHRMZW5ndGggfSkpIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJl
c3VsdExvY2F0aW9uID49IDApOwogICAgICAgICAgICAgZm9yIChhdXRvJiBkZXRhaWwgOiByZXN1
bHRzW2ldLmRldGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLnJhbmdlLmxl
bmd0aCA+IDAgJiYgZGV0YWlsLnJhbmdlLmxvY2F0aW9uID49IDApOwogICAgICAgICAgICAgICAg
IGlmIChwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyh7IHJlc3VsdExvY2F0aW9uICsgZGV0
YWlsLnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwucmFuZ2UubGVuZ3RoIH0pKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHsgcmVz
dWx0TG9jYXRpb24gKyBkZXRhaWwucmFuZ2UubG9jYXRpb24sIGRldGFpbC5yYW5nZS5sZW5ndGgg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIGFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFy
LCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0RW5kTG9jYXRpb24gPD0gYXV0b21hdGljUmVw
bGFjZW1lbnRFbmRMb2NhdGlvbiAmJiByZXN1bHRFbmRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguYXV0
b21hdGljUmVwbGFjZW1lbnRTdGFydCgpCkBAIC0yODY4LDcgKzI4MzcsNyBAQCB2b2lkIEVkaXRv
cjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBT
dHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UpOwotICAgICAg
ICAgICAgY29uc3QgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9IG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChyZXN1bHRzW2ldLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZWRTdHJpbmcpOworICAg
ICAgICAgICAgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9IG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChyZXN1bHRzW2ldLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAg
ICAgICAgaWYgKCFleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtMjg5NCw3ICsyODYzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0
b3I8VGUKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQogICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVMaW5rQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHJlcGxhY2VtZW50KS0+
YXBwbHkoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2Vy
dFRleHQocmVwbGFjZW1lbnQsIG1ha2VTaW1wbGVSYW5nZShyYW5nZVRvUmVwbGFjZSksIEVkaXRv
ckluc2VydEFjdGlvbjo6VHlwZWQpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQo
KSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpUeXBlZCkpIHsKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVj
a2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVw
bGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAog
ICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpIHsKQEAgLTI5MTMsNyArMjg4Miw3IEBAIHZvaWQgRWRpdG9y
OjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgVmVjdG9yPFRlCiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlOjpDb3JyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVwbGFj
ZW1lbnRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZSh7IHJlc3VsdExvY2F0aW9uLCByZXBsYWNl
bWVudC5sZW5ndGgoKSB9KTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OkFjY2VwdGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpBY2NlcHRlZCwg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UpOwogCiAgICAgICAgICAgICAgICAgICAg
IC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5kb25l
IGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCiAgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+bWFya0NvcnJlY3Rpb24ocmVwbGFjZW1lbnRSYW5nZSwgcmVw
bGFjZWRTdHJpbmcpOwpAQCAtMjkyOCw3ICsyODk3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8
VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKICAg
ICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAmJiBzZWxlY3Rpb25PZmZzZXQg
PD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewogICAgICAgICAgICAgYXV0byBz
ZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKHsgMCwgc2VsZWN0aW9u
T2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2Vs
ZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHNl
bGVjdGlvblJhbmdlLmVuZCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNl
bGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCiAgICAgICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkZvcndhcmQsIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVs
YXJpdHkpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjk1NSw3ICsyOTI0LDcgQEAgdm9pZCBFZGl0
b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcpCiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2Uo
KnNlbGVjdGlvbikpOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmlu
ZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJ
bnNlcnQpOwogICAgIGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKENoYXJh
Y3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0
aCgpKSk7Ci0gICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFy
a2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCwgU3RyaW5nKCkpOworICAgIGFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZSk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMzA3NSw3ICszMDQ0LDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAg
ICAgICAgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsCiAjZW5kaWYKICAgICB9OwotICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLCBtYXJrZXJUeXBlc1RvUmVt
b3ZlLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyKTsKKyAgICByZW1vdmVNYXJrZXJzKHdvcmRSYW5nZSwgbWFya2VyVHlwZXNUb1JlbW92
ZSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6Olllcyk7CiAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkuY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdv
cmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKIH0KIApAQCAtMzYxNSw3ICsz
NTg0LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBjb25zdCBPcHRpb25hbDxTaW1wbGUKICAgICAgICAgICAgIG1hdGNoZXMtPmFw
cGVuZChjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpKTsKIAogICAgICAgICBpZiAobWFya01h
dGNoZXMpCi0gICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmVzdWx0
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICAgICAgYWRkTWFya2Vy
KHJlc3VsdFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIAogICAgICAgICAvLyBT
dG9wIGxvb2tpbmcgaWYgd2UgaGl0IHRoZSBzcGVjaWZpZWQgbGltaXQuIEEgbGltaXQgb2YgMCBt
ZWFucyBubyBsaW1pdC4KICAgICAgICAgaWYgKGxpbWl0ID4gMCAmJiBtYXRjaENvdW50ID49IGxp
bWl0KQpAQCAtMzczMiw3ICszNzAxLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRMaXZlUmFuZ2UgPSBj
cmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBy
YW5nZSA6IHNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJzKGV4dGVuZFNlbGVjdGlvbigqc2VsZWN0ZWRS
YW5nZSwgY2hhcmFjdGVyc1RvRXh0ZW5kKSkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2h5IGRvIHdlIGRvIHRoaXMgdW5jb25kaXRpb25hbGx5IGFuZCB0aGUgY29kZSBiZWxvdyB0aGlz
IG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPwotICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVw
aG9uZU51bWJlcik7CisgICAgICAgICAgICAgICAgYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6VGVsZXBob25lTnVtYmVyKTsKIAogICAgICAgICAgICAgICAgIC8vIE9ubHkgY29uc2lk
ZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3Zlcmxh
cCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJhbmdlLgogICAgICAgICAgICAgICAgIGlmIChy
YW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIHNlbGVjdGVkTGl2ZVJh
bmdlLnB0cigpKSkKQEAgLTM4MDQsMTEgKzM3NzMsMTEgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJ
VXBkYXRlVGltZXJGaXJlZCgpCiAKICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRD
aGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVj
a2luZ1R5cGU6OlNwZWxsaW5nKSkgewogICAgICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0g
bmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQotICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKndvcmRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgICAgICByZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0
Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdl
U2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBpZiAo
YXV0byBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5n
ZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMo
KnNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKKyAgICAgICAgICAgICAg
ICByZW1vdmVNYXJrZXJzKCpzZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQyMzEsNyArNDIwMCw3IEBAIHZvaWQgRWRpdG9yOjpo
YW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRh
dGUpCiAKICAgICBSZWZQdHI8UmFuZ2U+IGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UgPSByYW5nZUV4
cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50Lmxlbmd0aCgpLCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKTsKICAgICBpZiAoaW5zZXJ0ZWRDYW5kaWRhdGVSYW5n
ZSkKLSAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1l
bnQpOworICAgICAgICBhZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQp
OwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBmYWxzZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCmluZGV4IGE5N2NiNDIzYjA4NTc3NGNlODZhZWZhNDIwZjMyNzY2MTQz
M2MwZjEuLmNiYjFlZmNlNzIwZDA2YWMzMjdmYjNiZjgxMWQ5MGMwYjAwZDUyOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaApAQCAtMzE5LDExICszMTksMTEgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBtaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1pc3NwZWxs
ZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tlZE5vZGUpIGNvbnN0OwogICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBjb25zdDsK
LSAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbChi
b29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKTsKKyAgICBUZXh0Q2hlY2tpbmdH
dWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKCk7CiAgICAgYm9vbCBp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNT
cGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlw
aW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwotICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYXJr
TWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsgLy8gUmV0dXJucyBmaXJzdCBt
aXNwZWxsaW5nIHJhbmdlLgorICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYXJrTWlzc3BlbGxp
bmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsgLy8gUmV0dXJucyBmaXJzdCBtaXNzcGVsbGlu
ZyByYW5nZS4KICAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
KTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKICAgICB2b2lkIG1hcmtBbmRSZXBsYWNl
Rm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCA1MGMx
NzUzZjE2ZDk2OGZhOTZiYzJiYzZiNjExYjQ5OGZmMjQ5NGVlLi42Yzk4NzM3MGZhMTUwMTg1Mjkw
OTU1ZTNmYWZlYmMzM2UyYWFlNzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsMzQgKzMxLDMzIEBACiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVk
aXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5j
bHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3Bl
bGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KFJlZjxSYW5nZT4mJiBjaGVja2luZ1Jh
bmdlLCBSZWY8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgUmVmPFJhbmdlPiYm
IHBhcmFncmFwaFJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tp
bmdUeXBlPiBtYXNrLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZSkKLSAgICA6
IG1fY2hlY2tpbmdSYW5nZShXVEZNb3ZlKGNoZWNraW5nUmFuZ2UpKQotICAgICwgbV9hdXRvbWF0
aWNSZXBsYWNlbWVudFJhbmdlKFdURk1vdmUoYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSkpCi0g
ICAgLCBtX3BhcmFncmFwaFJhbmdlKFdURk1vdmUocGFyYWdyYXBoUmFuZ2UpKQotICAgICwgbV9y
b290RWRpdGFibGVFbGVtZW50KG1fY2hlY2tpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5yb290
RWRpdGFibGVFbGVtZW50KCkpCi0gICAgLCBtX3JlcXVlc3REYXRhKFdURjo6bnVsbG9wdCwgdGV4
dCwgbWFzaywgcHJvY2Vzc1R5cGUpCitTcGVsbENoZWNrUmVxdWVzdDo6U3BlbGxDaGVja1JlcXVl
c3QoY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBh
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcGFyYWdyYXBoUmFu
Z2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IG9wdGlv
bnMsIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHR5cGUpCisgICAgOiBtX2NoZWNraW5nUmFuZ2Uo
Y2hlY2tpbmdSYW5nZSkKKyAgICAsIG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZShhdXRvbWF0
aWNSZXBsYWNlbWVudFJhbmdlKQorICAgICwgbV9wYXJhZ3JhcGhSYW5nZShwYXJhZ3JhcGhSYW5n
ZSkKKyAgICAsIG1fcm9vdEVkaXRhYmxlRWxlbWVudChtX2NoZWNraW5nUmFuZ2Uuc3RhcnQuY29u
dGFpbmVyLT5yb290RWRpdGFibGVFbGVtZW50KCkpCisgICAgLCBtX3JlcXVlc3REYXRhKFdURjo6
bnVsbG9wdCwgdGV4dCwgb3B0aW9ucywgdHlwZSkKIHsKIH0KIAogU3BlbGxDaGVja1JlcXVlc3Q6
On5TcGVsbENoZWNrUmVxdWVzdCgpID0gZGVmYXVsdDsKIAotUmVmUHRyPFNwZWxsQ2hlY2tSZXF1
ZXN0PiBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBl
PiB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSBwcm9jZXNzVHlw
ZSwgUmVmPFJhbmdlPiYmIGNoZWNraW5nUmFuZ2UsIFJlZjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlLCBSZWY8UmFuZ2U+JiYgcGFyYWdyYXBoUmFuZ2UpCitSZWZQdHI8U3BlbGxD
aGVja1JlcXVlc3Q+IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUoT3B0aW9uU2V0PFRleHRDaGVj
a2luZ1R5cGU+IG9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHR5cGUsIGNvbnN0IFNp
bXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVw
bGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlKQogewotICAg
IFN0cmluZyB0ZXh0ID0gY2hlY2tpbmdSYW5nZS0+dGV4dCgpOwotICAgIGlmICghdGV4dC5sZW5n
dGgoKSkKKyAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChjaGVja2luZ1JhbmdlKTsKKyAgICBp
ZiAodGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU3BlbGxDaGVja1JlcXVlc3QoV1RGTW92ZShjaGVja2luZ1JhbmdlKSwg
V1RGTW92ZShhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKSwgV1RGTW92ZShwYXJhZ3JhcGhSYW5n
ZSksIHRleHQsIHRleHRDaGVja2luZ09wdGlvbnMsIHByb2Nlc3NUeXBlKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU3BlbGxDaGVja1JlcXVlc3QoY2hlY2tpbmdSYW5nZSwgYXV0b21hdGlj
UmVwbGFjZW1lbnRSYW5nZSwgcGFyYWdyYXBoUmFuZ2UsIHRleHQsIG9wdGlvbnMsIHR5cGUpKTsK
IH0KIAogY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFNwZWxsQ2hlY2tSZXF1ZXN0Ojpk
YXRhKCkgY29uc3QKQEAgLTEzNCwxOSArMTM0LDE4IEBAIGJvb2wgU3BlbGxDaGVja2VyOjppc0Fz
eW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX2RvY3VtZW50LnNldHRpbmdz
KCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0KIAotYm9vbCBTcGVsbENo
ZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UmIHJhbmdlKSBjb25zdAorYm9vbCBT
cGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKSBjb25zdAogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBpc0NoZWNrYWJsZShyYW5nZSkg
JiYgaXNBc3luY2hyb25vdXNFbmFibGVkKCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjppc0No
ZWNrYWJsZShSYW5nZSYgcmFuZ2UpIGNvbnN0Citib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2Fi
bGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGlmICghcmFuZ2UuZmly
c3ROb2RlKCkgfHwgIXJhbmdlLmZpcnN0Tm9kZSgpLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY29uc3QgTm9kZSYgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7
Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpICYmICFkb3duY2FzdDxFbGVtZW50Pihub2RlKS5p
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgYXV0byBmaXJzdE5vZGUgPSBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLT5maXJzdE5vZGUoKTsKKyAgICBpZiAoIWZpcnN0Tm9kZSB8fCAhZmlyc3RO
b2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgYXV0byYgbm9kZSA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKKyAgICByZXR1
cm4gIWlzPEVsZW1lbnQ+KG5vZGUpIHx8IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmlzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBTcGVsbENoZWNrZXI6OnJlcXVlc3RDaGVja2lu
Z0ZvcihSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKQEAgLTIxOSw3ICsyMTgsNyBA
QCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKFRleHRDaGVja2luZ1JlcXVlc3RJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgogICAgICAgICBpZiAocmVxdWVzdERhdGEuY2hlY2tp
bmdUeXBlcygpLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKQogICAgICAgICAg
ICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgaWYg
KCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMo
KS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFy
a2VyVHlwZXMpOworICAgICAgICAgICAgcmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0
LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKICAgICB9CiAgICAgZGlkQ2hlY2soaWRl
bnRpZmllciwgcmVzdWx0cyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaApp
bmRleCBkMTlmY2ZkZTM4NDE1YjAxMTVjZjhjZGFhNDhhODY2MDhhODExOTNjLi4wNTUyNWQ2OGMy
NzZiMzE2OWVhYTJjM2I0MDAwYTBiNzZlNmM4OGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw1MyArMjcsNDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGcmFtZTsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBUZXh0Q2hlY2tlckNsaWVu
dDsKIGNsYXNzIFNwZWxsQ2hlY2tlcjsKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogCi1jbGFz
cyBTcGVsbENoZWNrUmVxdWVzdCA6IHB1YmxpYyBUZXh0Q2hlY2tpbmdSZXF1ZXN0IHsKK2NsYXNz
IFNwZWxsQ2hlY2tSZXF1ZXN0IGZpbmFsIDogcHVibGljIFRleHRDaGVja2luZ1JlcXVlc3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IGNyZWF0ZShPcHRp
b25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlLCBSZWY8UmFu
Z2U+JiYgY2hlY2tpbmdSYW5nZSwgUmVmPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFu
Z2UsIFJlZjxSYW5nZT4mJiBwYXJhZ3JhcGhSYW5nZSk7CisgICAgc3RhdGljIFJlZlB0cjxTcGVs
bENoZWNrUmVxdWVzdD4gY3JlYXRlKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgVGV4dENo
ZWNraW5nUHJvY2Vzc1R5cGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25z
dCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFu
Z2UmIHBhcmFncmFwaFJhbmdlKTsKICAgICB2aXJ0dWFsIH5TcGVsbENoZWNrUmVxdWVzdCgpOwog
Ci0gICAgUmFuZ2UmIGNoZWNraW5nUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2NoZWNraW5nUmFu
Z2UuZ2V0KCk7IH0KLSAgICBSYW5nZSYgcGFyYWdyYXBoUmFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X3BhcmFncmFwaFJhbmdlLmdldCgpOyB9Ci0gICAgUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UuZ2V0KCk7
IH0KKyAgICBjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hlY2tpbmdSYW5nZTsgfQorICAgIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWdyYXBoUmFuZ2U7IH0KKyAgICBjb25zdCBTaW1wbGVS
YW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b21h
dGljUmVwbGFjZW1lbnRSYW5nZTsgfQogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RFZGl0YWJsZUVsZW1lbnQuZ2V0KCk7IH0KIAogICAgIHZv
aWQgc2V0Q2hlY2tlckFuZElkZW50aWZpZXIoU3BlbGxDaGVja2VyKiwgVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgcmVxdWVzdGVyRGVzdHJveWVkKCk7CiAgICAgYm9v
bCBpc1N0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZXI7IH0KIAotICAgIGNvbnN0IFRl
eHRDaGVja2luZ1JlcXVlc3REYXRhJiBkYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRTdWNjZWVkKGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkaWRDYW5jZWwoKSBvdmVycmlkZTsKKyAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXF1
ZXN0RGF0YSYgZGF0YSgpIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIFNwZWxsQ2hlY2tS
ZXF1ZXN0KFJlZjxSYW5nZT4mJiBjaGVja2luZ1JhbmdlLCBSZWY8UmFuZ2U+JiYgYXV0b21hdGlj
UmVwbGFjZW1lbnRSYW5nZSwgUmVmPFJhbmdlPiYmIHBhcmFncmFwaFJhbmdlLCBjb25zdCBTdHJp
bmcmLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBl
KTsKKyAgICB2b2lkIGRpZFN1Y2NlZWQoY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4m
KSBmaW5hbDsKKyAgICB2b2lkIGRpZENhbmNlbCgpIGZpbmFsOworCisgICAgU3BlbGxDaGVja1Jl
cXVlc3QoY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdl
JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcGFyYWdyYXBo
UmFuZ2UsIGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgVGV4dENo
ZWNraW5nUHJvY2Vzc1R5cGUpOwogCiAgICAgU3BlbGxDaGVja2VyKiBtX2NoZWNrZXIgeyBudWxs
cHRyIH07Ci0gICAgUmVmPFJhbmdlPiBtX2NoZWNraW5nUmFuZ2U7Ci0gICAgUmVmPFJhbmdlPiBt
X2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2U7Ci0gICAgUmVmPFJhbmdlPiBtX3BhcmFncmFwaFJh
bmdlOworICAgIFNpbXBsZVJhbmdlIG1fY2hlY2tpbmdSYW5nZTsKKyAgICBTaW1wbGVSYW5nZSBt
X2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2U7CisgICAgU2ltcGxlUmFuZ2UgbV9wYXJhZ3JhcGhS
YW5nZTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9yb290RWRpdGFibGVFbGVtZW50OwogICAgIFRl
eHRDaGVja2luZ1JlcXVlc3REYXRhIG1fcmVxdWVzdERhdGE7CiB9OwogCiBjbGFzcyBTcGVsbENo
ZWNrZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWxsQ2hlY2tlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIGZyaWVuZCBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKIApAQCAtODAsMjQgKzc1LDE1IEBA
IHB1YmxpYzoKICAgICB+U3BlbGxDaGVja2VyKCk7CiAKICAgICBib29sIGlzQXN5bmNocm9ub3Vz
RW5hYmxlZCgpIGNvbnN0OwotICAgIGJvb2wgaXNDaGVja2FibGUoUmFuZ2UmKSBjb25zdDsKKyAg
ICBib29sIGlzQ2hlY2thYmxlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAKICAgICB2b2lk
IHJlcXVlc3RDaGVja2luZ0ZvcihSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYpOwogCi0gICAgVGV4
dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbGFzdFJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKLSAgICB9Ci0K
LSAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBsYXN0UHJvY2Vzc2VkSWRlbnRpZmll
cigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmll
cjsKLSAgICB9CisgICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbGFzdFJlcXVlc3RJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdElkZW50aWZpZXI7IH0KKyAg
ICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBsYXN0UHJvY2Vzc2VkSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7IH0KIAogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIERlcXVlPFJlZjxTcGVsbENoZWNrUmVxdWVzdD4+IFJlcXVlc3RRdWV1ZTsK
LQotICAgIGJvb2wgY2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5nZSYpIGNvbnN0OworICAgIGJv
b2wgY2FuQ2hlY2tBc3luY2hyb25vdXNseShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0OwogICAg
IFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQoKSBjb25zdDsKICAgICB2b2lkIHRpbWVyRmlyZWRU
b1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KCk7CiAgICAgdm9pZCBpbnZva2VSZXF1ZXN0KFJlZjxTcGVs
bENoZWNrUmVxdWVzdD4mJik7CkBAIC0xMTMsNyArOTksNyBAQCBwcml2YXRlOgogICAgIFRpbWVy
IG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0OwogCiAgICAgUmVmUHRyPFNwZWxsQ2hlY2tS
ZXF1ZXN0PiBtX3Byb2Nlc3NpbmdSZXF1ZXN0OwotICAgIFJlcXVlc3RRdWV1ZSBtX3JlcXVlc3RR
dWV1ZTsKKyAgICBEZXF1ZTxSZWY8U3BlbGxDaGVja1JlcXVlc3Q+PiBtX3JlcXVlc3RRdWV1ZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCA4MzI4NTZmNmIyZmZhMjNhNWIzNzM5NDdhNjBj
NzAwNDkyNTM4NDk4Li5mNTRjNGM5MDQ4MDM1YTM1NzRlYWNjODNjZTljMTQ2ZGIxZDljMjJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0y
OSwxMiArMjksMTIgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJWaXNpYmxl
VW5pdHMuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VicmsuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdWaWV3Lmg+CkBAIC0xMDMsMzAgKzEwMywzMiBAQCBzdGF0aWMgdm9pZCBmaW5kTWlzc3Bl
bGxpbmdzKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9y
PAogCiAjZW5kaWYKIAotc3RhdGljIFJlZjxSYW5nZT4gZXhwYW5kVG9QYXJhZ3JhcGhCb3VuZGFy
eShSYW5nZSYgcmFuZ2UpCitzdGF0aWMgU2ltcGxlUmFuZ2UgZXhwYW5kVG9QYXJhZ3JhcGhCb3Vu
ZGFyeShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgUmVmPFJhbmdlPiBwYXJhZ3Jh
cGhSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5n
ZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChyYW5nZS5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBz
ZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBoKHJhbmdlLmVuZFBvc2l0
aW9uKCkpKTsKLSAgICByZXR1cm4gcGFyYWdyYXBoUmFuZ2U7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSkpLAorICAgICAgICAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
T2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkpKQorICAg
IH07CiB9CiAKLVRleHRDaGVja2luZ1BhcmFncmFwaDo6VGV4dENoZWNraW5nUGFyYWdyYXBoKFJl
ZjxSYW5nZT4mJiBjaGVja2luZ0FuZEF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UpCi0gICAgOiBt
X2NoZWNraW5nUmFuZ2UoY2hlY2tpbmdBbmRBdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLmNvcHlS
ZWYoKSkKLSAgICAsIG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZShjaGVja2luZ0FuZEF1dG9t
YXRpY1JlcGxhY2VtZW50UmFuZ2UuY29weVJlZigpKQorVGV4dENoZWNraW5nUGFyYWdyYXBoOjpU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQorICAgIDogbV9j
aGVja2luZ1JhbmdlKHJhbmdlKQorICAgICwgbV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKHJh
bmdlKQogewogfQogCi1UZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OlRleHRDaGVja2luZ1BhcmFncmFw
aChSZWY8UmFuZ2U+JiYgY2hlY2tpbmdSYW5nZSwgUmVmPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBwYXJhZ3JhcGhSYW5nZSkKLSAgICA6IG1fY2hl
Y2tpbmdSYW5nZShXVEZNb3ZlKGNoZWNraW5nUmFuZ2UpKQotICAgICwgbV9hdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlKFdURk1vdmUoYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSkpCi0gICAgLCBt
X3BhcmFncmFwaFJhbmdlKFdURk1vdmUocGFyYWdyYXBoUmFuZ2UpKQorVGV4dENoZWNraW5nUGFy
YWdyYXBoOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5n
UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiByZXBsYWNlbWVudFJhbmdlLCBjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIHBhcmFncmFwaFJhbmdlKQorICAgIDogbV9jaGVja2luZ1JhbmdlKGNo
ZWNraW5nUmFuZ2UpCisgICAgLCBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UocmVwbGFjZW1l
bnRSYW5nZSkKKyAgICAsIG1fcGFyYWdyYXBoUmFuZ2UocGFyYWdyYXBoUmFuZ2UpCiB7CiB9CiAK
IHZvaWQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpleHBhbmRSYW5nZVRvTmV4dEVuZCgpCiB7Ci0g
ICAgc2V0RW5kKCZwYXJhZ3JhcGhSYW5nZSgpLCBlbmRPZlBhcmFncmFwaChzdGFydE9mTmV4dFBh
cmFncmFwaChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSkpKTsKKyAgICBwYXJhZ3Jh
cGhSYW5nZSgpOworICAgIGlmIChhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFy
YWdyYXBoKHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbiht
X3BhcmFncmFwaFJhbmdlLT5zdGFydCkpKSkpCisgICAgICAgIG1fcGFyYWdyYXBoUmFuZ2UtPmVu
ZCA9IFdURk1vdmUoKmVuZCk7CiAgICAgaW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCk7
CiB9CiAKQEAgLTEzNSw3ICsxMzcsNyBAQCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aW52
YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCkKICAgICBtX2NoZWNraW5nU3RhcnQucmVzZXQo
KTsKICAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQucmVzZXQoKTsKICAgICBtX2F1dG9t
YXRpY1JlcGxhY2VtZW50TGVuZ3RoLnJlc2V0KCk7Ci0gICAgbV9vZmZzZXRBc1JhbmdlID0gbnVs
bHB0cjsKKyAgICBtX29mZnNldEFzUmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgbV90ZXh0ID0g
U3RyaW5nKCk7CiB9CiAKQEAgLTE0NCwyNyArMTQ2LDI0IEBAIHVpbnQ2NF90IFRleHRDaGVja2lu
Z1BhcmFncmFwaDo6cmFuZ2VMZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBjaGFyYWN0ZXJDb3Vu
dChwYXJhZ3JhcGhSYW5nZSgpKTsKIH0KIAotUmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6
cGFyYWdyYXBoUmFuZ2UoKSBjb25zdAorY29uc3QgU2ltcGxlUmFuZ2UmIFRleHRDaGVja2luZ1Bh
cmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBjb25zdAogewogICAgIGlmICghbV9wYXJhZ3JhcGhS
YW5nZSkKICAgICAgICAgbV9wYXJhZ3JhcGhSYW5nZSA9IGV4cGFuZFRvUGFyYWdyYXBoQm91bmRh
cnkobV9jaGVja2luZ1JhbmdlKTsKICAgICByZXR1cm4gKm1fcGFyYWdyYXBoUmFuZ2U7CiB9CiAK
LVJlZjxSYW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5nZShDaGFyYWN0ZXJSYW5n
ZSByYW5nZSkgY29uc3QKK1NpbXBsZVJhbmdlIFRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFu
Z2UoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UoKSwgcmFuZ2UpKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHBhcmFncmFwaFJhbmdlKCksIHJhbmdlKTsK
IH0KIAogRXhjZXB0aW9uT3I8dWludDY0X3Q+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0
VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIGF1dG8gc3RhcnQgPSBt
YWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAg
aWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogICAg
IGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwogICAgIGlmICghZW5kKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIGNoYXJh
Y3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0pOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7
IHBhcmFncmFwaFJhbmdlKCkuc3RhcnQsICplbmQgfSk7CiB9CiAKIGJvb2wgVGV4dENoZWNraW5n
UGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKQEAgLTE3NCwxMSArMTczLDEwIEBAIGJvb2wgVGV4
dENoZWNraW5nUGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKICAgICByZXR1cm4gY2hlY2tpbmdT
dGFydCgpID49IGNoZWNraW5nRW5kKCkgfHwgdGV4dCgpLmlzRW1wdHkoKTsKIH0KIAotUmFuZ2Um
IFRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0QXNSYW5nZSgpIGNvbnN0Citjb25zdCBTaW1w
bGVSYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRBc1JhbmdlKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fb2Zmc2V0QXNSYW5nZSkKLSAgICAgICAgbV9vZmZzZXRBc1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwg
cGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9uKCksIG1fY2hlY2tpbmdSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKTsKLQorICAgICAgICBtX29mZnNldEFzUmFuZ2UgPSB7IHsgcGFyYWdyYXBoUmFu
Z2UoKS5zdGFydCwgbV9jaGVja2luZ1JhbmdlLnN0YXJ0IH0gfTsKICAgICByZXR1cm4gKm1fb2Zm
c2V0QXNSYW5nZTsKIH0KIApAQCAtMjEwLDI2ICsyMDgsMTUgQEAgdWludDY0X3QgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjpjaGVja2luZ0xlbmd0aCgpIGNvbnN0CiAKIHVpbnQ2NF90IFRleHRDaGVj
a2luZ1BhcmFncmFwaDo6YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCgpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCkKLSAgICAgICAgcmV0dXJuICptX2F1dG9t
YXRpY1JlcGxhY2VtZW50U3RhcnQ7Ci0KLSAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9p
bnQocGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmICghc3RhcnQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9hdXRv
bWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmICghZW5kKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCA9IGNo
YXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0pOworICAgIGlmICghbV9hdXRvbWF0aWNSZXBs
YWNlbWVudFN0YXJ0KQorICAgICAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQgPSBjaGFy
YWN0ZXJDb3VudCh7IHBhcmFncmFwaFJhbmdlKCkuc3RhcnQsIG1fYXV0b21hdGljUmVwbGFjZW1l
bnRSYW5nZS5zdGFydCB9KTsKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFy
dDsKIH0KIAogdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNl
bWVudExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5n
dGgpCi0gICAgICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aDsKLQotICAg
IG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2UpOworICAgIGlmICghbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0
aCkKKyAgICAgICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50
KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSk7CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1Jl
cGxhY2VtZW50TGVuZ3RoOwogfQogCkBAIC0yMzksMjcgKzIyNiwyNCBAQCBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OlRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmIGNsaWVudCwgY29uc3QgU2lt
cGxlUmFuZ2UmCiB7CiB9CiAKLVRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBl
cigpID0gZGVmYXVsdDsKLQotU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlz
c3BlbGxpbmcodWludDY0X3QmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwg
UmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQorYXV0byBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRNaXNwZWxsZWRXb3JkcyhPcGVyYXRpb24gb3BlcmF0aW9uKSBjb25zdCAtPiBz
dGQ6OnBhaXI8TWlzc3BlbGxlZFdvcmQsIE9wdGlvbmFsPFNpbXBsZVJhbmdlPj4KIHsKLSAgICBm
aXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gMDsKKyAgICBzdGQ6OnBhaXI8TWlzc3BlbGxlZFdvcmQs
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPj4gZmlyc3Q7CiAKLSAgICBTdHJpbmcgZmlyc3RNaXNzcGVs
bGluZzsKICAgICB1aW50NjRfdCBjdXJyZW50Q2h1bmtPZmZzZXQgPSAwOwogCiAgICAgZm9yIChX
b3JkQXdhcmVJdGVyYXRvciBpdChtX3JhbmdlKTsgIWl0LmF0RW5kKCk7IGN1cnJlbnRDaHVua09m
ZnNldCArPSBpdC50ZXh0KCkubGVuZ3RoKCksIGl0LmFkdmFuY2UoKSkgewogICAgICAgICBTdHJp
bmdWaWV3IHRleHQgPSBpdC50ZXh0KCk7Ci0gICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5s
ZW5ndGgoKTsKIAotICAgICAgICAvLyBTa2lwIHNvbWUgd29yayBmb3Igb25lLXNwYWNlLWNoYXIg
aHVua3MuCi0gICAgICAgIGlmICh0ZXh0TGVuZ3RoID09IDEgJiYgdGV4dFswXSA9PSAnICcpCisg
ICAgICAgIGlmICh0ZXh0ID09ICIgIl9zKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKICAgICAgICAgaW50IG1pc3NwZWxsaW5n
TGVuZ3RoID0gMDsKICAgICAgICAgbV9jbGllbnQudGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGlu
Z09mU3RyaW5nKHRleHQsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgp
OwogCisgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKwogICAgICAgICAv
LyA1NDkwNjI3IHNob3dzIHRoYXQgdGhlcmUgd2FzIHNvbWUgY29kZSBwYXRoIGhlcmUgd2hlcmUg
dGhlIFN0cmluZyBjb25zdHJ1Y3RvciBiZWxvdyBjcmFzaGVzLgogICAgICAgICAvLyBXZSBkb24n
dCBrbm93IGV4YWN0bHkgd2hhdCBjb21iaW5hdGlvbiBvZiBiYWQgaW5wdXQgY2F1c2VkIHRoaXMs
IHNvIHdlJ3JlIG1ha2luZyB0aGlzIG11Y2gKICAgICAgICAgLy8gbW9yZSByb2J1c3QgYWdhaW5z
dCBiYWQgaW5wdXQgb24gcmVsZWFzZSBidWlsZHMuCkBAIC0yNjksNDkgKzI1Myw1MSBAQCBTdHJp
bmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZyh1aW50NjRfdCYgZmly
c3RNaXNzcGVsbGluZ09mZnNldAogICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA8
IHRleHRMZW5ndGgpOwogICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExl
bmd0aCk7CiAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdM
ZW5ndGggPD0gdGV4dExlbmd0aCk7CisgICAgICAgIGlmICghKG1pc3NwZWxsaW5nTG9jYXRpb24g
Pj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IHRl
eHRMZW5ndGggJiYgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCAmJiBtaXNzcGVsbGlu
Z0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAwICYmIG1p
c3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDwgdGV4dExlbmd0aCAm
JiBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTG9jYXRpb24g
KyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDb21w
dXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAotICAgICAgICAgICAgYXV0byBtaXNzcGVsbGlu
Z1JhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2UsIENoYXJhY3RlclJhbmdlKGN1
cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3Ro
KSk7Ci0KLSAgICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3NwZWxs
aW5nIGFuZCBpdHMgb2Zmc2V0LgotICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7
Ci0gICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IGN1cnJlbnRDaHVua09m
ZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247Ci0gICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVs
bGluZyA9IHRleHQuc3Vic3RyaW5nKG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVu
Z3RoKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9
IGNyZWF0ZUxpdmVSYW5nZShtaXNzcGVsbGluZ1JhbmdlKTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2Us
IENoYXJhY3RlclJhbmdlKGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb24s
IG1pc3NwZWxsaW5nTGVuZ3RoKSk7CiAKLSAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3Ig
bWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS5zdGFydC5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBPcGVyYXRpb246Ok1hcmtB
bGwpCisgICAgICAgICAgICBhZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKIAotICAgICAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UncmUgbWFya2lu
ZyBvbmx5IHRoZSBmaXJzdCBtaXNzcGVsbGluZywgYW5kIG5vdCBhbGwgaW5zdGFuY2VzLgotICAg
ICAgICAgICAgaWYgKCFtYXJrQWxsKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAoZmlyc3QuZmlyc3Qud29yZC5pc051bGwoKSkgeworICAgICAgICAgICAgZmlyc3QgPSB7Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0LnN1YnN0cmluZyhtaXNz
cGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCkudG9TdHJpbmcoKSwKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbgorICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgV1RGTW92ZShtaXNzcGVsbGluZ1Jhbmdl
KQorICAgICAgICAgICAgfTsKICAgICAgICAgfQorCisgICAgICAgIGlmIChvcGVyYXRpb24gPT0g
T3BlcmF0aW9uOjpGaW5kRmlyc3QpCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZmlyc3RNaXNzcGVsbGluZzsKKyAgICByZXR1cm4gZmlyc3Q7Cit9CisKK2F1dG8gVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZCgpIGNvbnN0IC0+IE1pc3Nw
ZWxsZWRXb3JkCit7CisgICAgcmV0dXJuIGZpbmRNaXNwZWxsZWRXb3JkcyhPcGVyYXRpb246OkZp
bmRGaXJzdCkuZmlyc3Q7CiB9CiAKLVN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBvdXRJc1Nw
ZWxsaW5nLCB1aW50NjRfdCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1hckRldGFpbCYgb3V0
R3JhbW1hckRldGFpbCkKK2F1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVs
bGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1hcikgY29uc3QgLT4g
VmFyaWFudDxNaXNzcGVsbGVkV29yZCwgVW5ncmFtbWF0aWNhbFBocmFzZT4KIHsKICAgICBpZiAo
IXVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hl
Y2tlckVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBWYXJpYW50PE1pc3NwZWxsZWRXb3JkLCBVbmdyYW1tYXRpY2FsUGhy
YXNlPiBmaXJzdEZvdW5kSXRlbTsKKyAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7CiAK
LSAgICBTdHJpbmcgZmlyc3RGb3VuZEl0ZW07CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOwor
ICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtaXNwZWxsZWRXb3JkUmFuZ2U7CiAgICAgU3RyaW5n
IGJhZEdyYW1tYXJQaHJhc2U7CiAgICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVy
czsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4K
LSAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKLSAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gMDsK
LSAgICBvdXRHcmFtbWFyRGV0YWlsLnJhbmdlID0geyB9OwotICAgIG91dEdyYW1tYXJEZXRhaWwu
Z3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0g
ZW1wdHlTdHJpbmcoKTsKLSAgICAKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBl
bmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhh
dCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZy
b20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5h
bCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1
bHRzIGluIHRoaXMgYXJlYS4KQEAgLTM4Miw3ICszNjgsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1h
ciwgYgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZvdW5kR3JhbW1hcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQ
aHJhc2VMb2NhdGlvbiA9IHJlc3VsdC5yYW5nZS5sb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRHcmFtbWFyRGV0YWlsID0gcmVzdWx0LmRldGFpbHNbZ3JhbW1hckRldGFp
bEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyRGV0YWlsID0gcmVz
dWx0LmRldGFpbHNbZ3JhbW1hckRldGFpbEluZGV4XTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQu
cmFuZ2UubG9jYXRpb24sIHJlc3VsdC5yYW5nZS5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTM5MywxOCArMzc5LDIxIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFy
LCBiCiAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxp
bmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFmaXJzdEl0ZXJhdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0
ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOwotICAgICAgICAgICAgICAgICAgICBv
dXRJc1NwZWxsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9m
ZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRl
bSA9IG1pc3NwZWxsZWRXb3JkOworICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9
IE1pc3NwZWxsZWRXb3JkIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3Jk
LAorICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQKKyAgICAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGdyYW1tYXJQaHJhc2VPZmZz
ZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAg
ICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5zdGFydCwg
Km1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOwot
ICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBncmFtbWFyUGhyYXNlT2Zmc2V0OwotICAgICAg
ICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IGJhZEdyYW1tYXJQaHJhc2U7CisgICAgICAg
ICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gVW5ncmFtbWF0aWNhbFBocmFzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1t
YXJEZXRhaWwKKyAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDI1LDcgKzQxNCw3IEBA
IFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFt
bWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgcmV0dXJuIGZpcnN0Rm91bmRJdGVtOwogfQog
Ci1pbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZl
Y3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIHVpbnQ2NF90IGJhZEdyYW1tYXJQ
aHJhc2VMb2NhdGlvbiwgdWludDY0X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2NF90IGVuZE9mZnNldCwg
Ym9vbCBtYXJrQWxsKSBjb25zdAoraW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZFVuZ3JhbW1h
dGljYWxQaHJhc2VzKE9wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0
YWlsPiYgZ3JhbW1hckRldGFpbHMsIHVpbnQ2NF90IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwg
dWludDY0X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2NF90IGVuZE9mZnNldCkgY29uc3QKIHsKICAgICAv
LyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwgcmFuZ2Ug
dGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KICAgICAvLyBPcHRpb25h
bGx5IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRldGFpbCBpbiB0aGUgcmFuZ2UuCkBA
IC00NDYsOSArNDM1LDkgQEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1h
ckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICAgICAgICAgaWYgKGRl
dGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPj0gZW5kT2Zmc2V0KQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAotICAgICAgICBpZiAobWFya0FsbCkgeworICAgICAgICBpZiAob3Bl
cmF0aW9uID09IE9wZXJhdGlvbjo6TWFya0FsbCkgewogICAgICAgICAgICAgYXV0byBiYWRHcmFt
bWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobV9yYW5nZSwgeyBiYWRHcmFtbWFyUGhy
YXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+cmFuZ2UubG9jYXRpb24sIGRldGFp
bC0+cmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLnN0YXJ0LmRv
Y3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAgICAgICBhZGRN
YXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51
c2VyRGVzY3JpcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBSZW1lbWJl
ciB0aGlzIGRldGFpbCBvbmx5IGlmIGl0J3MgZWFybGllciB0aGFuIG91ciBjdXJyZW50IGNhbmRp
ZGF0ZSAodGhlIGRldGFpbHMgYXJlbid0IGluIGEgZ3VhcmFudGVlZCBvcmRlcikKQEAgLTQ1Nywx
OSArNDQ2LDEyIEBAIGludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRh
aWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtCiAgICAgICAgICAgICBlYXJsaWVz
dERldGFpbExvY2F0aW9uU29GYXIgPSBkZXRhaWwtPnJhbmdlLmxvY2F0aW9uOwogICAgICAgICB9
CiAgICAgfQotICAgIAogICAgIHJldHVybiBlYXJsaWVzdERldGFpbEluZGV4OwogfQogCi1TdHJp
bmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwm
IG91dEdyYW1tYXJEZXRhaWwsIHVpbnQ2NF90JiBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0LCBib29s
IG1hcmtBbGwpIGNvbnN0CithdXRvIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZFVuZ3JhbW1hdGlj
YWxQaHJhc2VzKE9wZXJhdGlvbiBvcGVyYXRpb24pIGNvbnN0IC0+IFVuZ3JhbW1hdGljYWxQaHJh
c2UKIHsKLSAgICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVw
ZGF0ZWQgaWYgd2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJuLgotICAgIG91dEdyYW1tYXJEZXRh
aWwucmFuZ2UgPSB7IH07Ci0gICAgb3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7Ci0g
ICAgb3V0R3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24gPSBlbXB0eVN0cmluZygpOwotICAg
IG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmluZ1ZpZXcgZmlyc3RC
YWRHcmFtbWFyUGhyYXNlOworICAgIFVuZ3JhbW1hdGljYWxQaHJhc2UgcmVzdWx0OwogCiAgICAg
Ly8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhz
LCBzaW5jZSBncmFtbWFyIGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8v
IERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFy
YWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLApAQCAtNDg1
LDk4ICs0NjcsNTMgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkR3Jh
bW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLAogICAgICAgICAKICAgICAgICAg
aWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7CiAgICAgICAgICAgICBBU1NFUlQoYmFkR3Jh
bW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoYmFk
R3JhbW1hclBocmFzZUxvY2F0aW9uID49IDApOwogICAgICAgICBiYWRHcmFtbWFyUGhyYXNlTG9j
YXRpb24gKz0gc3RhcnRPZmZzZXQ7CiAKICAgICAgICAgLy8gRm91bmQgc29tZSBiYWQgZ3JhbW1h
ci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBzZWFy
Y2ggcmFuZ2UgKGlmIGFueSkuCi0gICAgICAgIGludCBiYWRHcmFtbWFySW5kZXggPSBmaW5kRmly
c3RHcmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24s
IHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHBhcmFncmFwaC5jaGVja2luZ0VuZCgpLCBtYXJr
QWxsKTsKLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwKSB7CisgICAgICAgIGludCBi
YWRHcmFtbWFySW5kZXggPSBmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMob3BlcmF0aW9uLCBncmFt
bWFyRGV0YWlscywgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBwYXJhZ3JhcGguY2hlY2tpbmdT
dGFydCgpLCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQoKSk7CisKKyAgICAgICAgaWYgKGJhZEdyYW1t
YXJJbmRleCA+PSAwICYmIHJlc3VsdC5waHJhc2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBy
ZXN1bHQub2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gcGFyYWdyYXBoLmNoZWNr
aW5nU3RhcnQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5waHJhc2UgPSBwYXJhZ3JhcGgudGV4dCgp
LnN1YnN0cmluZyhiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5n
dGgpLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGJhZEdyYW1tYXJJbmRleCkgPCBncmFtbWFyRGV0YWlscy5zaXplKCkpOwotICAgICAgICAgICAg
b3V0R3JhbW1hckRldGFpbCA9IGdyYW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5kZXRhaWwgPSBncmFtbWFyRGV0YWlsc1tiYWRHcmFt
bWFySW5kZXhdOwogCi0gICAgICAgIC8vIElmIHdlIGZvdW5kIGEgZGV0YWlsIGluIHJhbmdlLCB0
aGVuIHdlIGhhdmUgZm91bmQgdGhlIGZpcnN0IGJhZCBwaHJhc2UgKHVubGVzcyB3ZSBmb3VuZCBv
bmUgZWFybGllciBidXQKLSAgICAgICAgLy8ga2VwdCBnb2luZyBzbyB3ZSBjb3VsZCBtYXJrIGFs
bCBpbnN0YW5jZXMpLgotICAgICAgICBpZiAoYmFkR3JhbW1hckluZGV4ID49IDAgJiYgZmlyc3RC
YWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgb3V0R3JhbW1hclBocmFz
ZU9mZnNldCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHBhcmFncmFwaC5jaGVja2luZ1N0
YXJ0KCk7Ci0gICAgICAgICAgICBmaXJzdEJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGgudGV4
dCgpLnN1YnN0cmluZyhiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VM
ZW5ndGgpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGb3VuZCBvbmUuIFdlJ3JlIGRv
bmUgbm93LCB1bmxlc3Mgd2UncmUgbWFya2luZyBlYWNoIGluc3RhbmNlLgotICAgICAgICAgICAg
aWYgKCFtYXJrQWxsKQorICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBPcGVyYXRpb246OkZp
bmRGaXJzdCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIC8v
IFRoZXNlIHJlc3VsdHMgd2VyZSBhbGwgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFw
aCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2ggcmFuZ2U7IGxvb2sKLSAgICAgICAgLy8gYmV5
b25kIHRoaXMgcGhyYXNlLgorICAgICAgICAvLyBUaGVzZSByZXN1bHRzIHdlcmUgYWxsIGJldHdl
ZW4gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggYW5kIHRoZSBzdGFydCBvZiB0aGUgc2VhcmNo
IHJhbmdlOyBsb29rIGJleW9uZCB0aGlzIHBocmFzZS4KICAgICAgICAgc3RhcnRPZmZzZXQgPSBi
YWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoOwogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmlyc3RCYWRHcmFtbWFyUGhyYXNlLnRvU3RyaW5nKCk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1t
YXRpY2FsKCkgY29uc3QKK2F1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RVbmdyYW1t
YXRpY2FsUGhyYXNlKCkgY29uc3QgLT4gVW5ncmFtbWF0aWNhbFBocmFzZQogewotICAgIGlmICht
X3JhbmdlLmNvbGxhcHNlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8g
UmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHBhc3NlZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRz
IHRvIGEgYmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdlLiBUaGlzIGlzIGFuYWxvZ291cwotICAgIC8v
IHRvIGlzU2VsZWN0aW9uTWlzc3BlbGxlZC4gSXQncyBub3QgZ29vZCBlbm91Z2ggZm9yIHRoZXJl
IHRvIGJlIHNvbWUgYmFkIGdyYW1tYXIgc29tZXdoZXJlIGluIHRoZSByYW5nZSwKLSAgICAvLyBv
ciBvdmVybGFwcGluZyB0aGUgcmFuZ2U7IHRoZSByYW5nZXMgbXVzdCBleGFjdGx5IG1hdGNoLgot
ICAgIHVpbnQ2NF90IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Ci0gICAgCi0gICAgR3JhbW1hckRldGFp
bCBncmFtbWFyRGV0YWlsOwotICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gZmluZEZpcnN0
QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7Ci0g
ICAgCi0gICAgLy8gTm8gYmFkIGdyYW1tYXIgaW4gdGhlc2UgcGFydHMgYXQgYWxsLgotICAgIGlm
IChiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIC8vIEJhZCBncmFtbWFyLCBidXQgcGhyYXNlIChlLmcuIHNlbnRlbmNlKSBzdGFydHMg
YmV5b25kIHN0YXJ0IG9mIHJhbmdlLgotICAgIGlmIChncmFtbWFyUGhyYXNlT2Zmc2V0ID4gMCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwucmFuZ2Uu
bG9jYXRpb24gPj0gMCk7Ci0gICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoID4g
MCk7Ci0KLSAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHN0YXJ0IG9mIGRldGFpbCAoZS5nLiB1bmdy
YW1tYXRpY2FsIHdvcmQpIGRvZXNuJ3QgbWF0Y2ggc3RhcnQgb2YgcmFuZ2UKLSAgICBpZiAoZ3Jh
bW1hckRldGFpbC5yYW5nZS5sb2NhdGlvbiArIGdyYW1tYXJQaHJhc2VPZmZzZXQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciBhdCBzdGFydCBvZiByYW5n
ZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZvcmUgb3IgYWZ0ZXIgZW5kIG9mIHJhbmdl
Ci0gICAgaWYgKGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoICE9IGNoYXJhY3RlckNvdW50KG1f
cmFuZ2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gVXBkYXRlIHRoZSBz
cGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMgZXJyb3IgKHdoZXRoZXIgb3Igbm90
IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgotICAgIC8vIFRoaXMgaXMgbmVjZXNz
YXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05TU3BlbGxDaGVja2VyIGlnbm9yZVdv
cmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsKLSAgICAvLyBjb3JyZWN0bHk7IHRoYXQg
Y2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNwZWxsaW5nIHBh
bmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGluZwotICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJv
ci4KLSAgICBtX2NsaWVudC51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3Jh
bW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyhPcGVyYXRpb246OkZpbmRGaXJzdCk7CiB9
CiAKLVZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxl
ZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QKK1RleHRDaGVja2luZ0d1ZXNzZXMgVGV4dENo
ZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJh
c2UoYm9vbCBjaGVja0dyYW1tYXIpIGNvbnN0CiB7CiAgICAgaWYgKCF1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgaWYgKHBsYXRmb3JtRHJpdmVuVGV4dENoZWNrZXJFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICBtaXNzcGVsbGVkID0gZmFsc2U7Ci0g
ICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOwotICAgIAogICAgIGlmIChtX3JhbmdlLmNvbGxhcHNl
ZCgpKQotICAgICAgICByZXR1cm4gZ3Vlc3NlczsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IC8vIEV4cGFuZCB0aGUgcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5j
ZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgotICAgIFRleHRDaGVja2lu
Z1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpKTsKKyAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UpOwogICAgIGlmIChwYXJhZ3JhcGgu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZ3Vlc3NlczsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMgeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZyB9OwpAQCAtNTkxLDE1ICs1MjgsMTUgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5n
SGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAg
ICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nICYmIHBh
cmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQucmFuZ2UpKSB7CiAgICAgICAgICAg
ICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGguY2hlY2tpbmdTdWJzdHJpbmcoKS50
b1N0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CiAgICAgICAgICAgICBtX2NsaWVu
dC50ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtaXNzcGVsbGVkV29yZCwgU3RyaW5n
KCksIGN1cnJlbnRTZWxlY3Rpb24sIGd1ZXNzZXMpOwogICAgICAgICAgICAgbV9jbGllbnQudXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0gICAgICAg
ICAgICBtaXNzcGVsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBndWVzc2VzOworICAg
ICAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShndWVzc2VzKSwgdHJ1ZSwgZmFsc2UgfTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICBpZiAoIWNoZWNrR3JhbW1hcikKLSAgICAgICAgcmV0dXJu
IGd1ZXNzZXM7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6
IHJlc3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6
OkdyYW1tYXIgJiYgcGFyYWdyYXBoLmlzQ2hlY2tpbmdSYW5nZUNvdmVyZWRCeShyZXN1bHQucmFu
Z2UpKSB7CkBAIC02MDksMzMgKzU0NiwyNCBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdI
ZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAg
ICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMoeyByZXN1bHQu
cmFuZ2UubG9jYXRpb24gKyBkZXRhaWwucmFuZ2UubG9jYXRpb24sIGRldGFpbC5yYW5nZS5sZW5n
dGggfSkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBw
YXJhZ3JhcGgudGV4dCgpLnN1YnN0cmluZyhyZXN1bHQucmFuZ2UubG9jYXRpb24sIHJlc3VsdC5y
YW5nZS5sZW5ndGgpLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYWRH
cmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBn
dWVzcyA6IGRldGFpbC5ndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5h
cHBlbmQoZ3Vlc3MpOwogICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC51cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZGV0YWlsKTsKLSAgICAgICAg
ICAgICAgICAgICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBndWVzc2VzOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGRldGFp
bC5ndWVzc2VzKSwgZmFsc2UsIHRydWUgfTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGd1ZXNzZXM7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbE1pc3NwZWxsaW5ncyhS
ZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCitPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsTWlzc3BlbGxlZFdvcmRzKCkgY29uc3QKIHsK
LSAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1pc3NwZWxsaW5n
LiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlICJvdXQgcGFyYW1ldGVyIjsKLSAgICAv
LyBhbGwgd2UgbmVlZCB0byBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAgIHVpbnQ2NF90
IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0TWlzc3BlbGxpbmcoaWdub3JlZE9mZnNldCwg
dHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICByZXR1cm4gZmluZE1pc3BlbGxlZFdv
cmRzKE9wZXJhdGlvbjo6TWFya0FsbCkuc2Vjb25kOwogfQogCi12b2lkIFRleHRDaGVja2luZ0hl
bHBlcjo6bWFya0FsbEJhZEdyYW1tYXIoKQordm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtB
bGxVbmdyYW1tYXRpY2FsUGhyYXNlcygpIGNvbnN0CiB7Ci0gICAgLy8gVXNlIHRoZSAibWFya0Fs
bCIgZmVhdHVyZSBvZiBvZmluZEZpcnN0QmFkR3JhbW1hci4gSWdub3JlIHRoZSByZXR1cm4gdmFs
dWUgYW5kICJvdXQgcGFyYW1ldGVycyI7IGFsbCB3ZSBuZWVkIHRvCi0gICAgLy8gZG8gaXMgbWFy
ayBldmVyeSBpbnN0YW5jZS4KLSAgICBHcmFtbWFyRGV0YWlsIGlnbm9yZWRHcmFtbWFyRGV0YWls
OwotICAgIHVpbnQ2NF90IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0QmFkR3JhbW1hcihp
Z25vcmVkR3JhbW1hckRldGFpbCwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7CisgICAgZmluZFVuZ3Jh
bW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbjo6TWFya0FsbCk7CiB9CiAKIGJvb2wgVGV4dENoZWNr
aW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCmluZGV4IGM2ODg4NzQwZDI3MTU3ZDIx
ZGVmMzNjNjRhZWJmYjk0ZmYxYjIzMmEuLjI5ZDg0YjhmYzkxY2U0Mzg3YTIzYTU3ZDhlNmQ3ZDUz
MzgyMGY0ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
aApAQCAtMjAsMjMgKzIwLDI2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRWRpdG9y
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJTaW1wbGVSYW5n
ZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIFBvc2l0aW9uOworY2xhc3MgVGV4dENoZWNrZXJD
bGllbnQ7CisKIHN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAKKy8vIEZJWE1FOiBTaG91bGQg
bW92ZSB0aGlzIGNsYXNzIHRvIGl0cyBvd24gaGVhZGVyLgogY2xhc3MgVGV4dENoZWNraW5nUGFy
YWdyYXBoIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoUmVm
PFJhbmdlPiYmIGNoZWNraW5nQW5kQXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSk7Ci0gICAgZXhw
bGljaXQgVGV4dENoZWNraW5nUGFyYWdyYXBoKFJlZjxSYW5nZT4mJiBjaGVja2luZ1JhbmdlLCBS
ZWY8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIHBh
cmFncmFwaFJhbmdlKTsKKyAgICBleHBsaWNpdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoY29uc3Qg
U2ltcGxlUmFuZ2UmIGNoZWNraW5nQW5kQXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSk7CisgICAg
VGV4dENoZWNraW5nUGFyYWdyYXBoKGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBj
b25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiBwYXJhZ3JhcGhSYW5nZSk7CiAKICAgICB1aW50NjRfdCByYW5nZUxl
bmd0aCgpIGNvbnN0OwotICAgIFJlZjxSYW5nZT4gc3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UpIGNv
bnN0OworICAgIFNpbXBsZVJhbmdlIHN1YnJhbmdlKENoYXJhY3RlclJhbmdlKSBjb25zdDsKICAg
ICBFeGNlcHRpb25Pcjx1aW50NjRfdD4gb2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mKSBjb25zdDsK
ICAgICB2b2lkIGV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7CiAKQEAgLTQ5LDI0ICs1MiwyMyBAQCBw
dWJsaWM6CiAgICAgdWludDY0X3QgY2hlY2tpbmdMZW5ndGgoKSBjb25zdDsKICAgICBTdHJpbmdW
aWV3IGNoZWNraW5nU3Vic3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdGV4dCgpLnN1YnN0cmluZyhj
aGVja2luZ1N0YXJ0KCksIGNoZWNraW5nTGVuZ3RoKCkpOyB9CiAKLSAgICAvLyBEZXRlcm1pbmVz
IHRoZSByYW5nZSBpbiB3aGljaCB3ZSBhbGxvdyBhdXRvbWF0aWMgdGV4dCByZXBsYWNlbWVudC4g
SWYgYW4gYXV0b21hdGljIHJlcGxhY2VtZW50IHJhbmdlIGlzIG5vdCBwYXNzZWQgdG8gdGhlCi0g
ICAgLy8gdGV4dCBjaGVja2luZyBwYXJhZ3JhcGgsIHRoaXMgZGVmYXVsdHMgdG8gdGhlIHNwZWxs
IGNoZWNraW5nIHJhbmdlLgogICAgIHVpbnQ2NF90IGF1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQo
KSBjb25zdDsKICAgICB1aW50NjRfdCBhdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCgpIGNvbnN0
OwogCiAgICAgYm9vbCBjaGVja2luZ1JhbmdlTWF0Y2hlcyhDaGFyYWN0ZXJSYW5nZSByYW5nZSkg
Y29uc3QgeyByZXR1cm4gcmFuZ2UubG9jYXRpb24gPT0gY2hlY2tpbmdTdGFydCgpICYmIHJhbmdl
Lmxlbmd0aCA9PSBjaGVja2luZ0xlbmd0aCgpOyB9CiAgICAgYm9vbCBpc0NoZWNraW5nUmFuZ2VD
b3ZlcmVkQnkoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0IHsgcmV0dXJuIHJhbmdlLmxvY2F0
aW9uIDw9IGNoZWNraW5nU3RhcnQoKSAmJiByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCA+
PSBjaGVja2luZ1N0YXJ0KCkgKyBjaGVja2luZ0xlbmd0aCgpOyB9CiAgICAgYm9vbCBjaGVja2lu
Z1JhbmdlQ292ZXJzKENoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdCB7IHJldHVybiByYW5nZS5s
b2NhdGlvbiA8IGNoZWNraW5nRW5kKCkgJiYgcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgg
PiBjaGVja2luZ1N0YXJ0KCk7IH0KLSAgICBSYW5nZSYgcGFyYWdyYXBoUmFuZ2UoKSBjb25zdDsK
KworICAgIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5nZSgpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCk7Ci0gICAgUmFu
Z2UmIG9mZnNldEFzUmFuZ2UoKSBjb25zdDsKKyAgICBjb25zdCBTaW1wbGVSYW5nZSYgb2Zmc2V0
QXNSYW5nZSgpIGNvbnN0OwogCi0gICAgUmVmPFJhbmdlPiBtX2NoZWNraW5nUmFuZ2U7Ci0gICAg
UmVmPFJhbmdlPiBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2U7Ci0gICAgbXV0YWJsZSBSZWZQ
dHI8UmFuZ2U+IG1fcGFyYWdyYXBoUmFuZ2U7Ci0gICAgbXV0YWJsZSBSZWZQdHI8UmFuZ2U+IG1f
b2Zmc2V0QXNSYW5nZTsKKyAgICBTaW1wbGVSYW5nZSBtX2NoZWNraW5nUmFuZ2U7CisgICAgU2lt
cGxlUmFuZ2UgbV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlOworICAgIG11dGFibGUgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1fcGFyYWdyYXBoUmFuZ2U7CisgICAgbXV0YWJsZSBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbV9vZmZzZXRBc1JhbmdlOwogICAgIG11dGFibGUgU3RyaW5nIG1fdGV4dDsK
ICAgICBtdXRhYmxlIE9wdGlvbmFsPHVpbnQ2NF90PiBtX2NoZWNraW5nU3RhcnQ7CiAgICAgbXV0
YWJsZSBPcHRpb25hbDx1aW50NjRfdD4gbV9jaGVja2luZ0xlbmd0aDsKQEAgLTc1LDI1ICs3Nywz
NyBAQCBwcml2YXRlOgogfTsKIAogY2xhc3MgVGV4dENoZWNraW5nSGVscGVyIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUZXh0Q2hlY2tpbmdIZWxwZXIpOwogcHVibGljOgogICAgIFRleHRD
aGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwotICAgIH5U
ZXh0Q2hlY2tpbmdIZWxwZXIoKTsKIAotICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZyh1
aW50NjRfdCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFu
Z2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVs
bGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywg
dWludDY0X3QmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJE
ZXRhaWwpOwotICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5ncyhSZWZQdHI8UmFuZ2U+JiBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIFN0cmluZyBmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1t
YXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwsIHVpbnQ2NF90JiBvdXRHcmFtbWFyUGhyYXNlT2Zm
c2V0LCBib29sIG1hcmtBbGwpIGNvbnN0OwotICAgIHZvaWQgbWFya0FsbEJhZEdyYW1tYXIoKTsK
LSAgICBib29sIGlzVW5ncmFtbWF0aWNhbCgpIGNvbnN0OwotICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1tYXIs
IGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0OworICAgIHN0cnVj
dCBNaXNzcGVsbGVkV29yZCB7CisgICAgICAgIFN0cmluZyB3b3JkOworICAgICAgICB1aW50NjRf
dCBvZmZzZXQgeyAwIH07CisgICAgfTsKKyAgICBzdHJ1Y3QgVW5ncmFtbWF0aWNhbFBocmFzZSB7
CisgICAgICAgIFN0cmluZyBwaHJhc2U7CisgICAgICAgIHVpbnQ2NF90IG9mZnNldCB7IDAgfTsK
KyAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CisgICAgfTsKKworICAgIE1pc3NwZWxsZWRX
b3JkIGZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkKCkgY29uc3Q7CisgICAgVW5ncmFtbWF0aWNhbFBo
cmFzZSBmaW5kRmlyc3RVbmdyYW1tYXRpY2FsUGhyYXNlKCkgY29uc3Q7CisgICAgVmFyaWFudDxN
aXNzcGVsbGVkV29yZCwgVW5ncmFtbWF0aWNhbFBocmFzZT4gZmluZEZpcnN0TWlzc3BlbGxlZFdv
cmRPclVuZ3JhbW1hdGljYWxQaHJhc2UoYm9vbCBjaGVja0dyYW1tYXIpIGNvbnN0OworCisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1hcmtBbGxNaXNzcGVsbGVkV29yZHMoKSBjb25zdDsgLy8g
UmV0dXJucyB0aGUgcmFuZ2Ugb2YgdGhlIGZpcnN0IG1pc3NwZWxsZWQgd29yZC4KKyAgICB2b2lk
IG1hcmtBbGxVbmdyYW1tYXRpY2FsUGhyYXNlcygpIGNvbnN0OworCisgICAgVGV4dENoZWNraW5n
R3Vlc3NlcyBndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UoYm9v
bCBjaGVja0dyYW1tYXIpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIGVudW0gY2xhc3MgT3BlcmF0
aW9uIDogYm9vbCB7IEZpbmRGaXJzdCwgTWFya0FsbCB9OworICAgIHN0ZDo6cGFpcjxNaXNzcGVs
bGVkV29yZCwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+PiBmaW5kTWlzcGVsbGVkV29yZHMoT3BlcmF0
aW9uKSBjb25zdDsgLy8gUmV0dXJucyB0aGUgZmlyc3QuCisgICAgVW5ncmFtbWF0aWNhbFBocmFz
ZSBmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uKSBjb25zdDsgLy8gUmV0dXJucyB0
aGUgZmlyc3QuCisgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3Q7Cisg
ICAgaW50IGZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyhPcGVyYXRpb24sIGNvbnN0IFZlY3RvcjxH
cmFtbWFyRGV0YWlsPiYsIHVpbnQ2NF90IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgdWludDY0
X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2NF90IGVuZE9mZnNldCkgY29uc3Q7CisKICAgICBFZGl0b3JD
bGllbnQmIG1fY2xpZW50OwogICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2U7Ci0KLSAgICBib29sIHVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKLSAgICBpbnQgZmluZEZpcnN0R3JhbW1h
ckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCB1aW50NjRfdCBiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24sIHVpbnQ2NF90IHN0YXJ0T2Zmc2V0LCB1aW50NjRfdCBlbmRPZmZzZXQs
IGJvb2wgbWFya0FsbCkgY29uc3Q7CiB9OwogCiB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRl
eHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3Mv
RGljdGF0aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0
YXRpb25Db21tYW5kSU9TLmNwcAppbmRleCA4YWM3Njk0MDIwOTM1MGZmNDNhZWMxNDRkMzNhZDYx
NjAxMjZlNDM1Li4xZjg4MTA0MWNjMWRhY2FiNjVhMjdkMTJmZWQ2MWNjZTE5MTg1YTc1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNw
cApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQog
ICAgICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIGF1
dG8gYWx0ZXJuYXRpdmVzID0gaW50ZXJwcmV0YXRpb25zOwogICAgICAgICAgICAgYWx0ZXJuYXRp
dmVzLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cigqZW5kaW5nU2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMsIFdURk1vdmUoYWx0ZXJuYXRpdmVzKSk7
CisgICAgICAgICAgICBhZGRNYXJrZXIoKmVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCBX
VEZNb3ZlKGFsdGVybmF0aXZlcykpOwogICAgICAgICB9CiAKICAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSk7
CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgeyBlbmRPZmZzZXQg
LSByZXN1bHRMZW5ndGgsIGVuZE9mZnNldCB9KTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5h
ZGRNYXJrZXIocmVzdWx0UmFuZ2UsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIG1f
bWV0YWRhdGEpOworICAgIGFkZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvblJlc3VsdCwgbV9tZXRhZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCA2YzI1NDc5NjU1MzYw
ODRiMTYzODgwNDlkNDVhNTk5Y2Y5NjA2NzJiLi5jOTMzNzNhZDM4NjBiNzFhMjdiODM2MGExYjRm
OTM4OWY2ZWY5M2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBA
IC0yOTcsMTIgKzI5NywxMiBAQCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hp
bGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgICAgICBpZiAo
aW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIGF1dG8gYWx0ZXJuYXRp
dmVzID0gaW50ZXJwcmV0YXRpb25zOwogICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLnJlbW92ZSgw
KTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcih0ZXh0Tm9kZSwg
cHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCwgZGljdGF0aW9uUGhyYXNlTGVuZ3RoLCBEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgV1RGTW92ZShhbHRl
cm5hdGl2ZXMpKTsKKyAgICAgICAgICAgIGFkZE1hcmtlcih0ZXh0Tm9kZSwgcHJldmlvdXNEaWN0
YXRpb25QaHJhc2VTdGFydCwgZGljdGF0aW9uUGhyYXNlTGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgV1RGTW92ZShhbHRlcm5hdGl2ZXMpKTsK
ICAgICAgICAgfQogICAgICAgICBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0ICs9IGRpY3Rh
dGlvblBocmFzZUxlbmd0aDsKICAgICB9CiAKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRN
YXJrZXIodGV4dE5vZGUsIDAsIHRleHROb2RlLmxlbmd0aCgpLCBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uUmVzdWx0LCByZXRhaW5QdHIobWV0YWRhdGEpKTsKKyAgICBhZGRNYXJrZXIodGV4dE5v
ZGUsIDAsIHRleHROb2RlLmxlbmd0aCgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0
LCByZXRhaW5QdHIobWV0YWRhdGEpKTsKIAogICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2Vk
Q29udGVudHMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9s
bGVyLmNwcAppbmRleCBjN2VmY2ZjOTNiZDQ3NzEyNzBlYTBiMDY5ZGNiOTI0N2M5MWEyYWY1Li43
MzNkNjEzNjc0OTQ3YTI5OWY0ZTBiZjkzYzkxZGEwNjU5YjMyZjM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC05NzIsOSArOTcyLDcgQEAg
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKICAgICAgICAgICAgIGlmIChz
cGVsbENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIGFkZGlu
ZyBzcGVsbGluZy1yZWxhdGVkIG9yIGdyYW1tYXItcmVsYXRlZCBjb250ZXh0IG1lbnUgaXRlbXMg
KG5ldmVyIGJvdGgsIHNpbmNlIGEgc2luZ2xlIHNlbGVjdGVkIHJhbmdlCiAgICAgICAgICAgICAg
ICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5nIGFuZCBiYWQgZ3JhbW1hciBh
dCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgICAgIGJvb2wgbWlzc3BlbGxpbmc7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBiYWRHcmFtbWFyOwotICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJp
bmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCkuZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3Jh
bW1hdGljYWwobWlzc3BlbGxpbmcsIGJhZEdyYW1tYXIpOworICAgICAgICAgICAgICAgIGF1dG8g
W2d1ZXNzZXMsIG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyXSA9IGZyYW1lLT5lZGl0b3IoKS5ndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCgpOwogICAgICAgICAgICAgICAgIGlmICht
aXNzcGVsbGluZyB8fCBiYWRHcmFtbWFyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChndWVz
c2VzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBi
YWQgZ3JhbW1hciBidXQgbm8gc3VnZ2VzdGlvbnMgKGUuZy4sIHJlcGVhdGVkIHdvcmQpLCBqdXN0
IGxlYXZlIG9mZiB0aGUgc3VnZ2VzdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDaGVja2luZy5oCmluZGV4IGM4YWY1ZTI5YWE5NmY2YmFkYTJhYWE3NWM1N2IyYzQxYTk2
NTVjNTUuLmMwNTZhMDMwNGMwZTM3MzQ3N2FjOTUxZTgyM2I3ZTRhMzg4NzJiZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcuaApAQCAtNzUsNiArNzUsMTIg
QEAgc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdCB7CiAgICAgU3RyaW5nIHJlcGxhY2VtZW50Owog
fTsKIAorc3RydWN0IFRleHRDaGVja2luZ0d1ZXNzZXMgeworICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXM7CisgICAgYm9vbCBtaXNwZWxsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgdW5ncmFtbWF0
aWNhbCB7IGZhbHNlIH07Cit9OworCiBlbnVtIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVy
VHlwZSB7IH07CiB1c2luZyBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciA9IE9iamVjdElk
ZW50aWZpZXI8VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXJUeXBlPjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcAppbmRleCBkZDljMzUyNjA1ZjA4ZjM5NDBkOTAwZDhmMDI2NTI0N2UwNGJhMzc5
Li42Y2Y0ZjVhMzE5MWFkOTliMmQxYTczMzhkNGYzOTM1NTM4ZjZhYjMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRF
dmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZXJpYWxpemVkQXR0YWNobWVudERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NwZWxs
Q2hlY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVzLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KaW5kZXggYmQ5NWE2NjQ4YTMwMzJjMDU3YTk4MWUwOTQ2OTA4MGU4ODEwNjM1OS4u
OTkzNTAwNDE0ZmRhMTdiMjZjYzc4Mjk5ODVmMmE4YTQ5MzYxNDllNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbQpAQCAtMTI0Nyw3ICsxMjQ3LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFRleHRDaGVja2luZ1JlcXVlc3QmIHJlcXVlc3QsIGNvbnMKICAgICBO
U1J1bkxvb3AgKmN1cnJlbnRMb29wID0gW05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF07CiAgICAg
V2Vha1B0cjxXZWJFZGl0b3JDbGllbnQ+IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOwog
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9p
bnRLZXkgOiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2lu
dEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9OwotICAgIFtbTlNTcGVs
bENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZzpyZXF1
ZXN0LmRhdGEoKS50ZXh0KCkgcmFuZ2U6cmFuZ2UgdHlwZXM6TlNUZXh0Q2hlY2tpbmdBbGxTeXN0
ZW1UeXBlcyBvcHRpb25zOm9wdGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzowIGNvbXBsZXRp
b25IYW5kbGVyOl4oTlNJbnRlZ2VyLCBOU0FycmF5ICpyZXN1bHRzLCBOU09ydGhvZ3JhcGh5ICos
IE5TSW50ZWdlcikgeworICAgIE5TVGV4dENoZWNraW5nVHlwZSB0eXBlcyA9IE5TVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nIHwgTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciB8IE5TVGV4dENoZWNr
aW5nVHlwZUxpbmsgfCBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSB8IE5TVGV4dENoZWNraW5nVHlw
ZURhc2ggfCBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCB8IE5TVGV4dENoZWNraW5nVHlw
ZUNvcnJlY3Rpb247CisgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJl
cXVlc3RDaGVja2luZ09mU3RyaW5nOnJlcXVlc3QuZGF0YSgpLnRleHQoKSByYW5nZTpyYW5nZSB0
eXBlczp0eXBlcyBvcHRpb25zOm9wdGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzowIGNvbXBs
ZXRpb25IYW5kbGVyOl4oTlNJbnRlZ2VyLCBOU0FycmF5ICpyZXN1bHRzLCBOU09ydGhvZ3JhcGh5
ICosIE5TSW50ZWdlcikgewogICAgICAgICBSZXRhaW5QdHI8V2ViRWRpdG9yU3BlbGxDaGVja1Jl
c3BvbmRlcj4gcmVzcG9uZGVyID0gYWRvcHROUyhbW1dlYkVkaXRvclNwZWxsQ2hlY2tSZXNwb25k
ZXIgYWxsb2NdIGluaXRXaXRoQ2xpZW50OndlYWtUaGlzIGlkZW50aWZpZXI6aWRlbnRpZmllciBy
ZXN1bHRzOnJlc3VsdHNdKTsKICAgICAgICAgW2N1cnJlbnRMb29wIHBlcmZvcm1CbG9jazpeewog
ICAgICAgICAgICAgW3Jlc3BvbmRlciBwZXJmb3JtXTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlMzcyOTk4NjA2NzI5ZGYw
M2FlZGM3MzdjNzgyMWIxNGNmYTQ5YzI5Li4xZTA5ZmNhMzA2YjE0NTU3YWE4YmM5NGZjZTljMmNk
MGE1MTA3MGUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDctMjMgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4g
U3BlbGxDaGVja2VyLmggYW5kIFRleHRDaGVja2luZ0hlbHBlci5oCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ2NDgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvZGVzaWdu
LW1vZGUtc3BlbGxjaGVjay1vZmYtZXhwZWN0ZWQudHh0OiBVcGRhdGVkIHRvIHVzZSB0aGUgbWlz
c3BlbGxpbmcKKyAgICAgICAgInR5b3AiIGluc3RlYWQgb2YgImFzZGYiLCBvdGhlcndpc2Ugc3Bl
bGwgY2hlY2tpbmcgdGhpbmtzIHRoZSB0ZXh0IGlzIGluIFJvbWFuaWFuLAorICAgICAgICByYXRo
ZXIgdGhhbiBtaXNzcGVsbGVkIFVTIEVuZ2xpc2guCisgICAgICAgICogZWRpdGluZy9zcGVsbGlu
Zy9kZXNpZ24tbW9kZS1zcGVsbGNoZWNrLW9mZi5odG1sOiBEaXR0by4KKworICAgICAgICAqIHBs
YXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LXdpdGhvdXQtc2VsZWN0aW9u
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICBDaGFuZ2VkIHRoaXMgdGVzdCBpbnRvIGEg
cmVmZXJlbmNlIHRlc3QuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2Fy
ZC9kcm9wLXRleHQtd2l0aG91dC1zZWxlY3Rpb24tZXhwZWN0ZWQucG5nOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LXdpdGhvdXQt
c2VsZWN0aW9uLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKwogMjAyMC0wNy0yMyAgSmFtZXMgRGFy
cGluaWFuICA8amRhcnBpbmlhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1dlYkdMMl0gUXVl
cnkgT2JqZWN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9kZXNp
Z24tbW9kZS1zcGVsbGNoZWNrLW9mZi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NwZWxsaW5nL2Rlc2lnbi1tb2RlLXNwZWxsY2hlY2stb2ZmLWV4cGVjdGVkLnR4dAppbmRleCA0
ODU3OTUwOTg0MzE5YmI2Njg4NzY0MzMzOGNhNTZlYzE1NTQ4MTJhLi41NWZlODNmMzdiY2E3YzBh
Yzk3Yjg3NTRmYWY2ODRiYjQ5OGMyMTY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NwZWxsaW5nL2Rlc2lnbi1tb2RlLXNwZWxsY2hlY2stb2ZmLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL2Rlc2lnbi1tb2RlLXNwZWxsY2hlY2stb2ZmLWV4
cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLVRoaXMgdGVzdHMgd2hldGhlciBXZWJLaXQgZG9l
cyBub3Qgc3BlbGwgY2hlY2sgaW4gJ2Rlc2lnbk1vZGUnIHdoZW4gc3BlbGxjaGVjaz0nZmFsc2Un
LiBUbyB0ZXN0IG1hbnVhbGx5LCBjbGljayBhcnJvdW5kICdhc2RmJy4gVGhlcmUgc2hvdWxkIGJl
IG5vIHNwZWxsaW5nIG1hcmtlciBmb3IgJ2FzZGYnIGFmdGVyIHRoZSBjbGljay4KK1RoaXMgdGVz
dHMgd2hldGhlciBXZWJLaXQgZG9lcyBub3Qgc3BlbGwgY2hlY2sgaW4gJ2Rlc2lnbk1vZGUnIHdo
ZW4gc3BlbGxjaGVjaz0nZmFsc2UnLiBUbyB0ZXN0IG1hbnVhbGx5LCBjbGljayBhcnJvdW5kICd0
eW9wJy4gVGhlcmUgc2hvdWxkIGJlIG5vIHNwZWxsaW5nIG1hcmtlciBmb3IgJ3R5b3AnIGFmdGVy
IHRoZSBjbGljay4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCkBAIC05LDQgKzksNCBA
QCBQQVNTIGludGVybmFscy5oYXNTcGVsbGluZ01hcmtlcigwLCA0KSBiZWNhbWUgZGlmZmVyZW50
IGZyb20gZmFsc2UKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01Q
TEVURQotYXNkZiBpcyBtaXNzcGVsbGVkLgordHlvcCBpcyBtaXNzcGVsbGVkLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9kZXNpZ24tbW9kZS1zcGVsbGNoZWNrLW9m
Zi5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9kZXNpZ24tbW9kZS1zcGVsbGNo
ZWNrLW9mZi5odG1sCmluZGV4IDZlZTc5OGRhNzIxYmRjODczYWRkY2NlNjYwODlkMmRiYzI5ZTRl
ZTEuLjk5NDExNDNiZDkxM2I1N2Q3NDA5NmZiYmY1NjY2ZDNmOWY3MWRhODMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvZGVzaWduLW1vZGUtc3BlbGxjaGVjay1vZmYu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL2Rlc2lnbi1tb2RlLXNwZWxs
Y2hlY2stb2ZmLmh0bWwKQEAgLTMsMTEgKzMsMTEgQEAKIDxib2R5IHNwZWxsY2hlY2s9ImZhbHNl
Ij4KIDxzY3JpcHQgc3JjPSIuLi9lZGl0aW5nLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPGRpdiBpZD0ibWlzc3Bl
bGxlZCIgb25tb3VzZXVwPSJjaGVja1NwZWxsaW5nTWFya2VyKCkiPmFzZGYgaXMgbWlzc3BlbGxl
ZC48L2Rpdj4KKzxkaXYgaWQ9Im1pc3NwZWxsZWQiIG9ubW91c2V1cD0iY2hlY2tTcGVsbGluZ01h
cmtlcigpIj50eW9wIGlzIG1pc3NwZWxsZWQuPC9kaXY+CiA8c2NyaXB0PgogZGVzY3JpcHRpb24o
IlRoaXMgdGVzdHMgd2hldGhlciBXZWJLaXQgZG9lcyBub3Qgc3BlbGwgY2hlY2sgaW4gJ2Rlc2ln
bk1vZGUnICIKLSAgICArICJ3aGVuIHNwZWxsY2hlY2s9J2ZhbHNlJy4gVG8gdGVzdCBtYW51YWxs
eSwgY2xpY2sgYXJyb3VuZCAnYXNkZicuICIKLSAgICArICJUaGVyZSBzaG91bGQgYmUgbm8gc3Bl
bGxpbmcgbWFya2VyIGZvciAnYXNkZicgYWZ0ZXIgdGhlIGNsaWNrLiIpOworICAgICsgIndoZW4g
c3BlbGxjaGVjaz0nZmFsc2UnLiBUbyB0ZXN0IG1hbnVhbGx5LCBjbGljayBhcnJvdW5kICd0eW9w
Jy4gIgorICAgICsgIlRoZXJlIHNob3VsZCBiZSBubyBzcGVsbGluZyBtYXJrZXIgZm9yICd0eW9w
JyBhZnRlciB0aGUgY2xpY2suIik7CiAKIGpzVGVzdElzQXN5bmMgPSB0cnVlOwogCkBAIC0yMSw3
ICsyMSw3IEBAIGRvY3VtZW50LmRlc2lnbk1vZGUgPSAib24iOwogZnVuY3Rpb24gY2hlY2tTcGVs
bGluZ01hcmtlcigpCiB7CiAgICAgLy8gRmlyc3QsIHZlcmlmeSBzcGVsbGluZyB3aXRoIHNwZWxs
Y2hlY2sgYXR0cmlidXRlIG9mZi4KLSAgICAvLyBNb3ZlIHNlbGVjdGlvbiB0byB0aGUgbmV4dCB3
b3JkIHRvIG5vdGlmeSBXZWJLaXQgdGhhdCAiYXNkZiIgaGFzIGJlZW4gdHlwZWQvY2hhbmdlZAor
ICAgIC8vIE1vdmUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IHdvcmQgdG8gbm90aWZ5IFdlYktpdCB0
aGF0ICJ0eW9wIiBoYXMgYmVlbiB0eXBlZC9jaGFuZ2VkCiAgICAgLy8gdG8gZ2l2ZSBhIGNoYW5j
ZSB0byBzcGVsbGNoZWNrLgogICAgIG1vdmVTZWxlY3Rpb25Gb3J3YXJkQnlXb3JkQ29tbWFuZCgp
OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJv
YXJkL2Ryb3AtdGV4dC13aXRob3V0LXNlbGVjdGlvbi1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtd2l0aG91dC1zZWxl
Y3Rpb24tZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTAxY2Q0ZWJlNmExNWRhNjcwMDc0YmNh
YzBjNjZkNTZmYmQ1OTU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtd2l0aG91dC1zZWxlY3Rpb24tZXhwZWN0
ZWQuaHRtbApAQCAtMCwwICsxLDI3IEBACis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICB0ZXN0UnVubmVyLmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCk7Cis8L3NjcmlwdD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPgorICAgIFRoaXMgaXMgYSB0ZXN0IGZvciA8aT48
YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM5NCI+aHR0
cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzk0PC9hPgorICAg
IEVkaXRhYmxlIHJlZ2lvbiBkb2VzIG5vdCBhY2NlcHQgZHJvcHBlZCB0ZXh0IGlmIHRoZXJlIGlz
IG5vIHNlbGVjdGlvbjwvaT4uCis8L3A+Cis8cD4KKyAgICBUaGUgdGV4dCBmaWVsZCBzaG91bGQg
YWNjZXB0IGRyYWctYW5kLWRyb3BwZWQgdGV4dCwgc3VjaCBhcyB0aGUgbGluaywgZXZlbiBpZgor
ICAgIG5vIHRleHQgaXMgY3VycmVudGx5IHNlbGVjdGVkLgorPC9wPgorPGhyPgorPGlucHV0IGlk
PSJmaWVsZCIgdmFsdWU9Imh0dHA6Ly93d3cuaWJtLmNvbS8iPgorPGEgaWQ9ImxpbmsiIGhyZWY9
Imh0dHA6Ly93d3cuaWJtLmNvbS8iPmRyb3AgbWUgaW50byB0aGUgdGV4dCBmaWVsZDwvYT4KKwor
PHNjcmlwdD4KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB2YXIgZmllbGQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZmllbGQiKTsKKyAgICBmaWVsZC5mb2N1cygpOworfQorCis8L3Nj
cmlwdD4KKworPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Vk
aXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQtd2l0aG91dC1zZWxlY3Rpb24tZXhwZWN0ZWQucG5n
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcm9wLXRleHQt
d2l0aG91dC1zZWxlY3Rpb24tZXhwZWN0ZWQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlNTg2MDliY2ZhZTUzZjkzZGI0ZDQ0N2EzNDU4OTc4MWU5NzQwMWMwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMzOTE4CnpjbWJAdVdsJnNBKUdkcTs3Q2c4SGcxZnJ9NDt+
VStnOW5HZi1JTCglUEgrcUVuZ3BCUiFRRkxtMklvNkB6cStAYwp6eXVVQVhzLVV7Z15tTzt4dmkz
ZX1Aa0whI3tzbFRJSXZnQ18zcT1LKWNXYGlzKU5wVkpJO2JlWE5RUWZgNll6QCgKekVVTj1IdiRp
bV5iIz0zYzwyVTh4PEsrXng1YWowTjUlfGJ3WH50e0QjVW9AYyNLJnNeakMxcUZpR05RNkpfUFVq
CnpQV315Q14oZ3MxOUdvUGFxS3dwZ1B4enkzV0tXOWIkP3lVOXY7X2k5PHhGbEs7QWkhbWpSIXtm
JSsxcngjOFZSWQp6PUd7KGBrWVlOR0hUfm5vUDxwKSZ6ZzRmKChjSkJoKkhMfW0lWn1oYjNiZ2lM
Rzt6Xzw7XjYrZDhXNGpmLUJDbE4Kens/fjleQWNHYHdDfl4+ekxnMFV7eWslNSVjcEhJZiUrTFFC
e0NmakI+ZDMjLSMhMHMwPHs/WnZsIzx+NV5MMjQ+CnpGTDZAZkB1PmZNMS1hOG9Be1E7SV5IQmRn
NCRuLUBpYnlBa0BaYWxMRSlaUnpKPk9GRHprfFR2X1RfO09tczR1Kgp6YmFoRlR1MH1ZemxOMXhf
ZjNDIX5QbUdVS1F+OTAtZmc1OSt2X0VfcHM7S0U9RXxpYXJRNCszNntPXmgtUSh3aUUKejJpbW82
cipJRkR5QUhaOStCNWhaSD5NXmZDbDRXRHV1fVVSZVVHcn5JUXVuT1o+MHZAcXJXdnM4PUtTezB2
ZDdiCnplazg9Tz8hMX53V1UxLWt6Vj1ePTdGaE13KVk3d2dlUzNGVXZ6WX5NSjUoNnkxeVFqIUhh
NkM2ZH1TR3E8bWo1Qwp6eDNSVyVJek5VKnBVKyptb2xuKDcraXpJOGlVdVZKbVdmSSU5Z3M1Y0hM
NWFLV0pQJmFzOCpCYyhNbWllb0Q+VjAKekhjWj1fNl5AOH43NCpBUzMwYjxidTM5NUxkd1NaSEJq
R1BGNjJDMnsqeyFhcE93dHpnSSRyaX1VQyR2Y3RINzlDCnpycmJ3IWIlO0ghM3BkXjc5RDFZKjs3
Z3YrVU1XKkAoWW99WkZ4MXZkPXlgSitiRz9fa3hfUmlHWi12OE9UfVppZAp6Rkg9PWghdUFEd0Eh
fUR8PUtpe057RyFwRD5Ydip+KWdQdT1EMCpqKi1TS1NXbXBeYigtVFMqSDs3MUExbkRlajEKel5L
JSFrPEhwJTdWOF5xPDxWZ2QrZXgqY1F0VmQ3ezgrdDZpOXV2UX0+KHpPPEtqe3ZKOWMhd0llS19A
KEg/Jmo5CnokUnlofV9QPj9RQHhRYjJkTj49JXlrfWV7TnwhWHFXXn0yb0lgYExPUlNQP3FEI2BV
eyMrRz1malVwNE17OytSOQp6K0Z5cFFrU3AkbyM2d2dYPCsxQTVlN1FGdkohOWwhLXdJcHQqJHlL
eml0flpDJHtRMCNwUlliWTNHZjs0YFpIdk0Kei08N3dRQjhJfTJKeXdUNE16UnJoe3dkeWxgU1Jz
Q2dsRFdfVlhTJThVIVJqS2lIOyU1RGNHKzR4VCRWSmolPiYoCnoqTkAofHMhPVE5MHM8Pjltb0BW
M1JLPVJfRnp8K3JLSW1pJGt6YyFYOFUkJEQ9TDleOWVTMiRzdUtLcEk7cWtPUwp6QGdsWjdESUh9
OyRSOyYkZHA0VzNTIXxBPSolPzE7JHljb15FNUoxUUA8NndNISFzVVIhWkdmVktafntUYyomR1EK
elpzWUpFVGw4RXhkJnlUbjhobTIoRXtZb2MmVEQ3O0wqMVgxbSZoaz5tJEVEb2lmMT9iOSZDdkI/
KzBoaV5qM3pICnomTHN7elcyI3duSCpLS2U0K1Q7P1daV0E1K1FfM3cqfDVXdD5nNFlXQHZCT1E0
QDlkd0VaMiRfJGJMdDswVWo9cAp6PnpENlI/byNTLUxSTnUkOyVQQHE2VClebGt+IW9CMkk8PlZj
N05KOFVgLW5NK2VYKTE9cFMrRyMpdlZid01JO1cKekE2az1MRjh1aUY5dWgzZGJwKFlEQW11JDVn
QT1GUGh2eDBTPjZMMVg7Pmsyc088eWBLK0JlJlg5a0tJXzNLai17CnphLTRzV3hFeV5TN0BreihV
fFkxU1NMcEBpZ0dEZExyQ3BaWVdeYis1UU9FMz88fUh6enR5PF4wMHxGIztoLVpneAp6WmcrRkhe
RnB1Xld7bV5IQjBZe2JpV19ZbDlPejcpZ0YwQHY2NGYmUGYzd0lKKjRVIWZLWW5iYCUwZDVBVnE0
UngKelcjcU59dmN7TChaQ2F5Qil6dU9reWR8S3E7PCp7IWFvXzJFPD8/KHg3VF9gcU1xMkg+aHFr
TkFVIUx0YWVeTzBxCnpQclpfU25PM1FLdjFJZFdDen5PZ0khRSFIcnNnS05YJn5HMGRSfXB+eFEh
XmZBRnpsKyVVbk5xKmRKfFVtMkd9cwp6KTlUaDg3ZDZve25WV1orNnN1P0koZlYjdmllSH1tOXhW
Sjs5d25ZV2Z4RG1RPndIbXQ4YTlLcnEwTW07bisqSWQKell9WGxDdH1afEF8Mlh0IzJWWDJqeTk7
YDUmRmpHKSRFNEQ0UG5lUlNZbCRvX0d+SmhTUmIoQSZwMG5mUS1kSTl2CnpCQnYoMUF0VEZaJilX
MFZUc04xOC1tciY/QS01XytUSGU+Uyk8Ukt7e2heOTQ5SWtVVm1wbWtweDlMWGh6dD96fQp6OGA/
TjUoNURLdD1+STxEVXRMS3A+c3F4ZExSO2hBUngwcXZEIWB4fGZAd1lqV2ZtNH1hbD1ER1VERyRO
ZyZYd0EKejBeOTVRUlF6RXR1JitoeWBWMmsmSzgpNk1LZk80SUs/Z285OE13eHteNnt4U09ZRHwy
SCgmR0w5eTNoaEltfCl8Cnp0Pm1YJDg9R0BAbFlRRDl5RlltIXdZZVNjVjJLPVl3cj5UdmZ1e3xA
NlM3e2plR0RRO3dJTCRWbVE5eWJhTUdtTQp6XlRTMX1FNGVTPSo8UVBmNENOKioyPz08eC1QYH58
YTUhdXBhSzBuMylBek48bT0renotIz89d3V3O1pVVTAxd3oKenZwPUZ0P2Y0ZmBBIX11O0psJCsh
IStAfTE3MzFFWllWS2JmTFQ8XlZfUysmWkRYSE9fU30oV2pXJkAtN3Y9NzZGCnpWP3M/JXxCcTNF
YTh0dUNRZD5HXjleeVpgVWZhcDg0eEghUjdvI0YwbV49e2JfTEh2bVQjODs1MiljPitfNzhrRAp6
Tk5lWncpQld9QEdSR3Qoaj9WWDUjKHF+elNFb3tMWmpEUG9UPTZmNEpBNiV6RTxZLT9PV3dLfUJl
SGVja0RVc0gKekYxYG5hNil4cT5oOUZxNnY0WVo0PWBYJW5nVSNRMElsa3dMXjh3Rn4kbmBYN15R
fGA8az11Y1lTYUR1RT5HSkhZCnpUTTFkS1ZIPCVobCtIaEozIT5ZentPfFV+NE8+Q1E8aTN7XkAr
LWZBdnU2ZXBNbTwmWi1BPDxDZ0NQWHh4RCZRZwp6eihNWX47PVleaGFkKmYkPC1IYUpMWllgemF8
XztJIzhZQyRaS3ZQKUhoVyttQH1mO1BXSGhfflhzXks1dD0jO3AKenVVTH41fEZUIXo8JXlOSC1n
TzBzXzQ2OGVKdSlwNkNaQH5LWm9mKnF5QjxrPFZCVVlWdjY8cWs2QjxJbmY1PzlFCnpufVhtcm8/
fldNJmVtZnI+fmlEcXNfeVJCdlJnNno9SyFjQmdHa2AqUTBDYjVGI1RaQCRLZnxacmJMeEQkfFch
RAp6Q1J+ViNZSCVJLTF9ai1vaDk1NEZ7JWViT1M4VloqOXtjKDlaQm9sIz5wfWk/V2hvTWw9dlFg
Q3RvYXRTdFRxPGcKemAkVUs0azFEfVV2PTRUWiZiZGFmQ3Y5YF55cCVeSWlqMXJmQzQ4R3p3Ukc4
MDE3Xn1RJldWYlIpWEd7OSNOfWE9CnpeTilDckY8eV9sQUxgUFo1S1pAJitodVkqXk1AcWJwRHZa
JHhKX0xPRlVMdXlPTVA2O3g7Wio4Nk1odk1ITFpCdAp6dyR0SSRFOHxkbkp9Kykqam0kQCtBVl4m
QWtKJGF+JD1XI211NU80dmJJVnx6IXVqY1RjWHhDTz4lQ1Z6a2tDfnYKekd3cXYjUnBwfmV3YFpO
M3t6VW9xTkBqUipXJGFqcnVoe01HQG13Q3hqJUU0QCtePUpLIWAwZ1hTKkZBbl8mNWJZCnpORDRC
Qj1IPUNfdWB3cjRzeDExU0ZSV3YzTVZTcmYoKmBKdEhiYXc/R0tjdDxJYCYjR0E4I3dZO3Q2NlF1
I0FkKgp6ODdzKm51U3xITSg7bWNaVypYPnJzX2B8P0R9S0Y7JX4lT3hMeS0rRXApSChlUk5nOUpl
MSswdWZHVklQTWlmLXwKeiZSeUY2RGEkZXNYOFlxYT9pMDcxUmdCT01hWEA4c28yRHpoWVl3YWVK
IXRCUiNiSWtPe3o9JFVwbFF8clVRfVFgCnpAcGRQMyUqSElJeT1kb1N0SlFrTThARXJpeUMoeGIq
OHZsfGZjfWFpTnhVYy1oa3graWlrRWszPTUqej85O2IkbAp6TmolQCFlIUFaQWhDej1WSTxLQHFG
WjdOQkpHPE1rMjQwWnlMLXEtcnE0VEhrYXdvZ2BvKmgweyp9XzJCYUM0WWkKeldAdTA1Jik3UlNB
Ym5pcnZlSXN1em1JWCVobDxURiFfMT83dGFZbU50PCV2UUNTRWVNSlI1NTUlTE4jcFQjSG9xCnp2
OTtiSU1kMUZKOy1+XmcpXlBWNEAtenNPTjVSTnVDMnBEMTZvc0FfbXw+U253fXE9QCREO0Vld0Rf
Vn5II31tfQp6MlUtUT58RnA2PSowQCpMYVplbU8lZH08K3cpUEdqcFgqbUZ6cTNfI0JLe0MrQjRk
QGZPeTVwcWpRI01pN3dQUlcKejUmWiFRUGVKanM5YClpbEhlO3pARSRhUWtzelhHSVByJk1QIXt7
K3N5O2F9LUxiQ3FaK3BkI3BwSGhIXihVcWxBCnpWcSY/dHUqS0J0QiN8RClMO1QlbHpvRittVDZH
Z1lAJURATXBJalJ0T09PNTFnOSluLUVrd21YQ308Q0tUYl84agp6ZFFGaUM+dmhPWnhhWDYjZEUz
NUFAVjY5PlIpUjtXMVNWcGtBQigpdzh8bTlGcz9wQFl4Y3VpRU5zLUxVWSVxWl4KenZEdX5HUWct
T1RIKUxtIyVaOWZSNFVaTTtYMV9pP1FaVGQlaD9pYksqdEomWlNBQSNLcz1FcnlTV1NMLTQmclN0
CnpOOTR8bUxeMC1pSjhTQmFlQV53Z08ta28kJmUkM3V3cD55dClMI0FnWlVZbHZ1MHtoWkxmbHw7
dzU/IzBNfUY/fgp6QilxLWlAdzFAWnBaRjhoZDtNcl5xezhqbDxxeVhmait1VDg/UE1vcT9nM0J1
VGJlRThlUFpYUlhOI35vXnlWP0gKei1vWGMmNjBKN2N1fktqdjhoaiNoWVF+ei04VlVZc191Q1FE
SzAjO31JJjctdWcrSkskZDZWVF91MXx2fi1qVikhCnohWVFzPHdgazdvbj5zbkNRWWczRTJ8Z2U2
eHE3cl9NRFlybUdocGokRDFMRUhVMWo+cmJwZy1NVXIpQCZ2ZVEmaAp6SDw2dzE3MzxyKCs5Q2Fg
b3h2Rk9wc1JKe0pvMjIhYzFUYkgoUjFOLUdQRHNFSmRZejlEPTIjSFRlYktVPXB0fV8Kek9wT1R7
VVRaREFNQH1JPnZHUWErbEZ6TWhnR3FjaVI1I2BfQlhqYCRSPUZXTWAzYUFSdmQ1flZjXj9jYj4/
R0BsCnpmJihHaHpVTT0jcHB2WlczaClCJV8xRlg4dyRMT15SY0dtTk95X2JzPnZwWig+R3lxTzw8
YDVzV3MyYUBPZnJYLQp6LXU8NVJzbk80aTAzdXhTemR1ZkdrQy1ye3NDNSt7LSpNXn5YMDh4NHlv
aGZQZlZTPW1RPitiVlpeOWpPdTFJKGkKejlvTFBwS2x4P3ROfiQjPTl4WCNlUEM4VSlRKEomY0de
VVR4XjluOClNIU0xc3BwNW5AdGRmNDhXZns8SFJ6eyViCnp2dVJsMWphZkstaE5Xdyl2N3lIU1Nn
Z3o9dkozOHg5T3VKaiQ3e3EmVVl1fCZeKV85clkoQlJYKVUmPkpWLVlpbAp6a1FlKzshayEwQF4j
Ulc3Xk0wSGlLciNkJUs9dzhgP2htXlU7aHVjeWVCX2pyUnM+MERYJXZPWCV6bj9lREpmWnIKenlR
b0AxTCRDJWM7MjlSK3JSc0olbmVEentCV3xxMFo8cTJHI0pTdmRTYmd8Yk5vamRQcDZYYVY5RFY0
PTd5UVF5CnpnLXdmOCE8YEhHP0g9PW9uPV40YHo2dVhVUCNlfnVMdS0rYih8ZzlwIU5AO2Fgb0dK
KHh+QU9aUllBcWU8clVRagp6WT9ofng1Tno+MTZTUUZlUklJcyFCYilLbTk+MnNFO2U1OzZtNk8p
cG9XPWN4KlVrSUluWmtVdCU+I0hOM2h6MjUKekh8KmdGLXF0VEd2OGU1XiQ0RDd1T1J1V1VPNVpv
WmB7ellMYyZDKWIxMnpeQUY8QTYrIURiQXJnciRBIWl3SD88CnptKzZhfG9MXlUxNipWUk0hbCso
U01UZXA+ZV9eNiM8VjtKQEJHVjJhcWQwOXJ4UGgkKD5AcmM4PTI/SCVmVEwwTwp6TUBRcXZqam9F
fXk8UGtxU3h3OGRIRWs+eytwLXBuQHhabEZRWWZRcFcjYlp7KDlXbXE+fSp8emZiakY8MEVHdTYK
ekdQNEB7PkA2RG0kOHlUSU4tZSNFdUE8dnBBITcmMnE4Qms5QylPcTgqX1F5RT9vPHpXRUcjUVQo
WDUhaU04NG5UCnprUShxb0pobjQoUn5xTWYhKGZqNEtfT2c0MThNdiQoKzdIMT9mdngmTGh6ZGJN
LVgyI2NSLUpLQ2s2ZD54KFBNQQp6YH4kfmNRcl9sZ1JvY0diUnc3fGhQQ3Y7QTUoSFV6NHA7Q0t3
UiE9TEhjdSs/Zz48NCUrRlBsLVRHc0NlTlUobF8KemRnZTRRJHlPO1ZHenZ5PWx1RmFubjdQTj96
TGRmRTdyRVV6QjtXQ34rUkhXSjRHY3w4YTFgfUdgRlliVjw9S3VJCnp3dUkpUCl7NXN4Xzl1PlIt
OXRpc0F4O3tfJkFXTWx0RjkyTkZocTEoTkgycntIUU9pak1jNyNkbSYjV1owcz8kUwp6OHdHNlBR
PUJ3b2B7c2J0MVRgZkxvcjJBM19taSZ2WGpPaEJeY1A3MnNPUTl7WkAleWFlVkhYJTwjIUhHO0Q3
JE8KeioodElGM1Nld2tIXipfejNnSHNBND97WjJIeEo1MEJoRTlCOUd7Mj9oe2V7ZlNObCpzKT5T
diRka008XkwkZV4mCnphTmU1WTY2aSQlbGA3YkZ4YGUlTzdAaHkrQzV4QjZRSllTQmojMkRRV1Qz
cldVUVZgclBEO2Z7aEVxZ151QjF+SQp6bkJYIVFybXtVO3FDSFpSZXhBMT84Tn5IbmFNNWVoQCUh
T2hVYnxeRiN0MEtjY3p3cDN4Q1U9NGRiUmJLanNXIyUKeik0ME84JChMKl9ySkk4U2hkMHZzPGgp
Sj4/QVJKemBFZnJVclEkaUkjUGcjaDxLP3tTPitFMH1zdCM/PDMjckBsCnpaUDZGI0hPdGNUR01S
fHFoTE9EQjFNOyNZYVJlVHVeN2RGZWVCJWI1Sl9aSHMoWGoheClZVHQ0OGU1SD1lcWEkQgp6I0x0
TGlpMiNvKld1QCVXXkAyaXB4O3JzVzkyTFRFcThpcEtoN1dFejh8NnVOOVRvQiRweGptMG85NkR0
SHJna30KekhxTFJRQ3xHcHJmQVBDamxMZnduNVV0ZX10Ymh7JTtPbDs0UDFgYDdMQHF7biZrfjky
SWtUP0JGUVllR0x5NmhkCnomWD9LcjswOWIhbiYqN2B7WHM+fF5ALXImTzxxV08zZl98dDYwcik7
Qi1TQHszVV8/NFEtOEtVQ2l1O2wpYCM8dgp6WSQpJE9OWmdye2Z6IURqVWhHbjs9bHlLRV9wV1lW
JFNVI05rOXVMVlpMbnMjZiUqdTBkIS1LbVNSYU1AeklUaVcKenJNYlh1PDkoJFBGNStBYiQzdkk+
anIyJSZXOHBgX1NiSCVoKFk8XylvfjJpP0hDaFBiYmJkNE4yUW9iRjcyYTIxCno4YFBuUm5ZUGlE
SzJDY0FHKl9DWmVWcFF3by05JnlmOHxwbHs9YDZwQz9xPFZZKDQoJGNBTD48c09pe3RQIT58Qwp6
eipqSElZZ2hxS3NiR3lEazhfTTlTbE9KdFpPPXtHRExOLW1wJkJqM29JSj9WTCVNWmBMd31XfE0l
S1ZTTykxa0sKekltM2BDWGRRIVFGZy1TdE1mM3EpRGtMJTxDJFNiRyohSSlHbWRHRSp6NDYqank3
RTl0QTw2Qks5cnImVXcxMH1GCnp3OHo5Rkc3X1Q3dENZRlM3Sn0zeklsc2JCQVBacD8zWFM5UzJN
anRYNz8zTiZPUE9XVE9fMU8pJUJ7PTI5RDZ6bQp6YylzdmU3Z1FmUyNXVyZVNDJ9VSh1SVZoTSlV
TGxgXzZOQDFKJGckTDwjOXphVWdgaU9NOz9sQFV3VDtoVjlHT3UKekNtKTBMN319KzEmeClEWXoo
dC1MKjxILXhLcn5DRkBxQTI9YkZScVhRNFM+amxmQlMxWU9LQlMlc2dvVHUjUz52CnpBSng3d3At
PX4zK1U+eFBlZikoYDUza2x1OXVAbyUxK31uPmVvdyhmdDlMN1BtMjY0JEF7S184V2hsK1NBV0NM
Mwp6ZHVFJT5kbm1jU2E1fGdPcThsT2RnfmRgaGp3M0NvSCk8VDc7ZUNye0cxelhNaD05aFJ7fEV0
VHpiU15vWm1SY24Kek0+VktrWXo9dVJmdzEtbUNVUjE0WjYwbVlNITFUPl88cjl9ND5TVH5MMklZ
bzRWJD5GTjg0K1dXfnYoezdZPGhFCnpMYE5mbFhZNHpiVXt4PlhudTMkTUYkcTwqKlFxVnUlVlJw
a3UtbDx0K0spPCtYNiRtc0JIYjA0S09HPTIwKFZYOQp6JVgtUF5fU3hZR211aUxRQDV4eThhSkQm
cXI2d1EqOCojT3hTZkpWRWFxNTtKVUpWaXFKM1V9ZjVWY29fX0pgSSoKemBmfCZUS3leRSY0d2Z9
Slg3MXA+P20/KGdOYkgmKjQtS288eDxQZU89XlhnZUpQPHVUP0w1cjxvUERVKSh9YiVWCnpiempv
ajh+QHtjM3pFMD5qWjk5aWxnUD5iI1Y+ZTFTKnlrR3M/KThiU2RidlRwI0xsfHRldyFhTHUlajVF
KDA2bwp6IzBYWSgpZDltNFI9S2JqOVNkbkEoP1Ilci08XnB8eHFCNUY9TiZkbEFMSlNTdSVkQ1kx
Z1JGZ1U3dFpFTVV+VGcKemMhO3kqT1E/Y0oqJDYoTDNMYHw3UnQlK2JeellyNjVVZEp8S0lNLX5L
K0xKZCpYTX5MWmBNZEgpaUBEaT1aUW1ZCnpnMm15Sk5LclE7ck5xSW5SMD9kdWB3JVNISkJzbGlR
NGNINEA+R0gzfEIzeEw4NT47TjNyQzA/aFY9RTxNa0VMSAp6Q0c4VDNnXmArPUV4YWZVUkdjPjdD
cWtNbnczVio9WTBZY2RxLVBneCEqJj80U3t+Vjs3b31id2htcDM0XjV3QTkKellMe08mXm1CPzI9
Mnh1cSQjYUJ0Nkc5cVFQTFYqfTd4K21Pbm5gJkNaX1p2fDZaVFVhMVdieXhEODd9clEhdDVqCnpG
JDxRYDhldzU5YEUtc2lWd1UoI1JaPWttZmRjQ0laQ2g4YlYtbXtuT3tod2cxYSF+I2dTdSl8WUM+
fHdFYWYlcAp6IzVKfD1TV012KzhqbUoxPGItaXc5VTE5TV97VGdFK3VMK0JNJCQwQS1GaloyNCp+
VHBseEpnSDhrX0FodHZqNUYKejhQYi09b3pFNVY0d3BlKShvVHcrQGJlKklmOXRQfmFofFhaNlpG
cX5jVlJqR2Q8MSM1WG9OfDh5cUJpRWVsN2lqCnpAM2ZHU3ZJVyFGYmEmd2A3NHslJEooelMkTDti
OEUlaHdQd1ZJeUorRVJRMTdZQ05ydmtlYnNJQmwhPEVzeDV+Nwp6bHxnUWhCaHJValJpNWhuUDBY
SnQjWnF6aEZjdyVibSo2akpaZWYlPyUoT0w5eHpkUz1BVXdxUyYkRng4TiQ0JjgKemNCc2xnYFcr
bzRVLSZNPUsoI1NkTi09Jn56eE8jKiRuO1Zgdj5iZ0shQCFQTHs3NTF1cEluQ01zcWk4PW9sYiNO
CnpKQkAlUSN1S0dwenw7YzRAPyNuYXc+ejxeSmN6WDMwRWV+cUN1U18jVDs3eiR1I0JHR2Axanp0
bXBOI2gtRlo1cgp6LUdpUkYrVWxTM09ZQF9vQD1TQ15IVD5nQE98TFVnZ3l1N01iT3MyYlZrSENe
Qk1ETGJhfDZDOT5lZFR4a2BlP3YKei0zRjNpRDxsNHZYYkl+MWZse3hEIT8/dEdUJVZyelcqWX59
aTI7JTs5JCNPJER6QkImWGU4bC1neXNTQlF2Y0BoCnpeY3wmeDcqN1lGVig+VzlhfFpsU2g3JXJG
aHZFaUFMMjByMy1eUkRiLXJMOHZlS2dIMXU9fD4zKnUyYHs/YT95SQp6OFYrSlQ1QExLe2dsVCs5
ZDZ9bDBGUGQzXjF5Z1Nee1dOZFRkcWlOXy1HfWcjXnJ9OU5JJWNyMm1XaDVUcFMleCgKenpEQE8o
JDxrMXhDSiU+cD49LSpsS3daNz50cnN0T2h2cy1wcHtwSTxGXi12flVuRTtvP1ZgVUg7JjdsX1dl
K0NMCnpgVEEmOUhQSSEjb0ZeKHBkSnJPTCRMKSEwZnJScFAjRnc4NU82PSh2aCM9ZVEpPyRIeFV0
RHFycmdlNn56NUwpYAp6Nkl8bGJEeFd6d05URH5HQktKVU4qWUE7NFpTRG1NXiUtVEQ3cnQ8aERL
Zl5HWCVoK3NKMVMlcD9EeTZJZyl6Z0QKelE3ZihZeVZSVEt4VGsmfCZoPkNmdj1GPylMIzlXZU5k
a2RBWWU+KH4pPm9FbEN6aV9FVjJSJiZseWJ1cEAkdzVNCnozKzcpVlokYVVvdX5HMGhrPjI3WihR
NjlrPHNDb15UaiRZRm4rNE9VKWBVRHlPIzt3ZyFAckhJaiZFR18+VFV9dQp6KD5BZWRMS0srcnNN
RHBAdl94bDhQPXV8aXl9UFJ0ckorKkVpKDBePmZQQVNuUmxEaEc/UlY3Nj91byo7I04qbUQKek5x
OVhyeHNtS0ghVCNIM2R1VzZCRFZscm0tRVExM1VDWj4+UiR9SClWVCp8RWdpcH5rM2BfbVIjT3FT
Z3dmRVA4CnpQKUApVjRvPHFDUzR3Y0JrJjcpaEVxTXlpNjxQe1IrbFpyISpiajJQNjNPOUBwRHI+
PTVoREt9Nik9UXM9Z09MNQp6VnZ3NGVvQnojYi0tK2FKPTEtbTkhfXBAMUZsKUFPenB7NXtpJHdU
WFBod2VzKUlDbn5XX0p7Y2Y7bWJqQlgyNXQKekxJRUZ+R2Z3aWVsbzJXMFB9R2JidzhRPW9uSlFw
TyY9PF55ITtjVnE9JFQpTFBxQVZITH5DI2slfWxUS2pwYSR+CnpzRUg+JUI5eE9RYTghOEdvU3dm
MHN9fnxBMnF+XyhPVkdTezlyWlAlQ2t2NFJPXkxTZTdpTXNKUnVHeDhuQjVrfAp6Nz4kOGIoQmhs
QXFjOzJ0MF4qdz4pZ218SHNnX3Mlb0ZgMGwjNmxwOUxwckphSHhHRyYpWnstWDNMRUo7ZVIjc1MK
emw9TXVSIXNHOXFjMl4mUT1oMnxPYmZFUjFgJD0yWCVsMHF4NVJ8MmlUVV5UKiljcDlTXilFa3oy
bmZMTDctJGQ4CnpxZ340fE9STXI5WChtO1p1TFY/PW5aaUR6VTJyaWY9cm83Y0RpPl56NF55NHYq
NHdYPkBKM2xpaH03c3tCWVhvUAp6QGJHfSZfckdQQyNRYTdsU190QkFlYHByOU4odUszTmVDWnBO
RVYzSFV2bClCUElqNzBFMGJFR1ErKEdNXjNLe2EKeiR5OT1LPmIqak4xdXtnWEVYKmcoREEtTT5I
SD9YVHJ0SWdWdTE/d3orTChIZTFtbVQ4STBvN1E7ZigpRkpqTklXCnp2U0F2ZXdgPz1zYjV0YG5R
Ykl2clhlPks3a212fn5Wa0RMZHZJLURganB2LXJDXz5TTVE4M3NWOzxFM3NfPUwtZAp6RlMmIzJP
ejJ5aVIzfSY1SUt9en4jZjU5PV9rSSo0KzZCOHNiNTdLJEAranc7dGU2TDxxaz9ieChaaU5tRS1g
JWsKekU1KjwtQWRZP2g7VjB8RkphbkEteSRWUEFqLUFRYzl1cGo+Ql8hPXZZbkAra3Q/XnI9JGJW
ekxwZ3I8VCVga0RBCnp3QTRBdWNxSFhuI0txKntCbzF4QmE/JGhMOCF0UXc1eypLPyhUfHsxPHti
USNScD87cTlAWiNjT3g8JmJGa0Y7Zwp6TGAoSTNyeXBxPipgblhfWVkqYnN6JjhIKkE0YGZnJj5k
cjF4K2hSSmNjYzt7Z31kbDBCdFR6KHF3K1VoQllJbmcKejJLaS1ANXt2N0xJdkkrNGB6R089WUVL
bUFMJSZ+RGdRJkMpZmQxTTVedyk2eW8tdGJrTWZZSW94T28rNzx5WDV5CnolZW9HdnB5al9RWHg3
eGRnaUk8dShmISRlTXZGc18yQntzI0IoPGN9VDYlK0hvPHBAWkAlO18/Sz4ySExrREZKKgp6PyhW
QFIrRjA0SUU9NSNzRzIjUVJxaSgteFcpKn51d29mOGtgXiNoN2hyVXUlZ3pBJG8pU2A2PiRIYTJi
czB4M0sKelRnK3k4aTBlWDxER3x2fUxXXi1UPz8ySEFKOGR3OWlNV15mPHloeVp3Z3tISytVfUhq
YzwrMkpre2pDSl5GMVQ7CnpSIVI3RWM2LT16WiRzfW5SWnZ8ZDtJbXo7dkU9SkVuO1JUdGhfM2ln
ZSVzM15gK1RKYEdscT5leU0/amNjMWFsbAp6Kl9FfjZeb30jQlBUJVZMKTZ7P3leWkIxNj0xS2sr
MjtBP3c3cihEQkVJKXR7b1MpNyF1ajxham0lciZaN2Nia1gKemJ7RmFLJmxpXipieShFMFYyV2Qq
SlMjKX0zUkstIVgjJCF2SyRJMjklU351R0ItSjlXRlo1Y0tRQj53PjQhO2xgCnpZO0NHdFg0MzJt
KnlsWFF8N3pANzhZJi1nT0ZWPkAkMFA1c0IrRCYoMllkK3wtZGN7JD4/NkgoJnQ3dHNqPmFUMAp6
cGcqaXhRS2BMJWBHU1EkKmVHcWctTHJoWThGWExNcH5wZDF3WW5TdFIkZz08JCt0MDNebDB0JUtz
bmBsNktZdHYKeiVBc1RYP1ZYcExnaDlBdEZmVEtkUW5NQGZFWkFScm84aSVFZ1dKfEVrd1o+a19+
d2dCeVBxa253Z09zdXJsSXF1CnpuYHBlbzckPGtjVlpzciRhKGVqJDZBNUh2MEQ4ZmtZJUVPYF5C
fm48a05wWk9LLUwzc0EtQERPRTVFRVEjPE5+awp6WXFoQXxfdSlmZms3MmU7fEVMNUdDK1VAR1hK
eFpMX1UrOUclQnw5YzFSTDlGej9iOXBwKlhKKzJRMTVAbnh9JnUKenNteit5LXpRR0kpPWxxN1ZB
NiRxTX1iRyo/UilNbHFObT1GY19hPWtVYDlRRCpEJiVja3MxYz88e2s2cSNFb15eCnpDdztRJFNp
LVhxcipmKiZAO0dTUUQqcDVnLX41ZWBFbTUyWT5FWk1eZURfS09QciFIKnIwT0BIZVBkRz9LMGxR
awp6QHRwMUgteHhJdVctcXB8O0E0fDA8KUVLJUBteWExYjNTJD4qRjgxd0FPYnNXcnxobDVEanZH
O0tReGN7OWIodlQKek01ZSkjU3ZfbTA/KjgzSlo+O3NMY342cFBfJnhxO2NAbTRtOT9RayhPRDho
VVN7WHYoY2cmSHQyR29lNClaeTB4Cno/Pz1RSlZVUnllMGtyR0otdylBKXZGZVImKHoobHNrR0VG
UVJKS1hvKDVOdV42dzV0c143ZThhMSV8X0ktQUFAcgp6YXs0e14jY3owQCtvXlZwOCFEQSZ2V3ZX
N0hwNHRndm0jWDAkXk1aa2QjZEtJM2wyUnA3OFYpcWhlVC1haCNxYEEKeiVtZFAkQntlQjQ4JFBD
czdQZjFLWlFDcnJ1I0toMjk2a3U/S1g5UnZsTSM2eW9OOURnd290S1BlWlZ8ZUEtcD98CnpxczJP
V3lfLUZMRGZSOGlQc3pmRHQ+aFkzP3tESSlYd05kTWxiXn1UTypkIUNhKWlBP3d4QlUtaCRldCll
MD9uQgp6PykyangpbX4oVTx6fE9hPHxYMlVZUWdIVXgpdFdiSndtKG54P2lYViU/akp4RzNwNlho
bHU/eV5ZUXluQiFAZXoKeiNedSZHdX1FZURFV1F3Ums/c050b2FZeERwK1ZSdm9CQmpeVSozcz93
YX1wPXU2fj0wTnM1aGl3fDxEeERaamtBCnpfakxUXypNb0J3bClJM0I+MlJGT0VFd3o8bmYzc0Bf
d2Y/WklEbXhwMVJSQDNSITB3MnZgX0Y+eFU2flhPLSVUbwp6UH42ZGFLMzkwOW1SZmBhJXg7aHpV
K09zKFdFK2opUVZ+WD4tJSo8c1hMZnA4ZWlHbEQzTilsWV5IOztieldzKDYKelRFTD8oUjFAIVVP
MD1xfmBMb1loLWRCQlErPUgySkU/cWc5VWdLTjtzJEFCZU5gKkw+JHlkanBwJnM7byklbDtlCnp3
PkBAJEFQJn5KJV5KPXwqbSU5ZjAkRV9MSSk+enQ2SnMyT2hqUHxORzdYb0JSblEpWktSVkB0SWhZ
PGpYQ3tOcAp6STQ5aUwzaEdxfj5NMntjSlQ3SXQ1RCFidSVrYkJWY3t+Zn5XbSpUTyZNfnAzSGo9
Pi1PYVM2d0F7cldwY2p0Uy0KenFmcVdAUVpOR1YreGpELUM7byZ7KTdyUztTYz51VWw0Km5aeH5e
ZThufmxpd2p3c19WRFhuQT4jISVreFB2ajJeCno3fWkme2A9S1RXTG89PT4hWFVqMzNYaTRyPHhr
c1o3IzVzO0w1QTVUMjtacDVFcn1heUo/azBNTGA7a05jJVBpSQp6TyFVN3I7LVlHSXxBS2JTPmYk
UillMC0wbDhKWUc2SFRFRGhfdmRHblZrYFNJIU07QlRUUj5tM0IpQVp7WCRMX3cKeksjIzwpITww
MHZtZ31QbCN2ZEZ4MU0pYk9CZy1IcjRjNmREXnZNdD10RDc8byZ7Kkc2QVc2PjgmIX5oI3JjKEtZ
Cnpjb0hFWVd9PThaWjF3biF5R0tNakFrSHZ1dVF4Oz1LWlgrMC1WJmRNRFdiWE8qSipnQSl0TWsr
VGs3JSRANXpVYAp6SFEqRTs1aHIoRGtEOGItS20xJklYcCgkNllaOEtlP3x+bk1BfTQ+cjYleEdN
UXJrbl57LU1fbnJKallKKD59T1UKell5KUE2NipBZXdpcyVsYnBLQzxIREIjK05qYU8mSTt0UlVQ
a3lIN2UwJCtILW5PO1pIWUM7O09WWihZSi1oKmtxCnplOVVsYj07UmIqKm5tVDV4QXhse2lNQzU7
NGx7P2RLaFJIRD9rKDRYNFpeKzREV1hXRk5IM318TTZyaj0yMitWdAp6eU5KcXc+czcyUyheZks/
Qn0kdy1LN2B6fmdrekJjR3FTSDJEZX1sdjgwM25SbVRme3VsOH08WipPYXlKd0EkQksKenNXZk1m
RXV6I2JOfXNqcmdwcFdpRmBKJjIkc3xxTVhVVVdYLSk5R0JTIXpkIU1uLTRpaipPOUBMMSs+VDsk
Y2tkCnpHQzZEaWViZSktPGR9MX1ofW1MUFFfc3lnKXNIRypJb0k/fmxRJVAtQGpYXzJ1MVEyWFV5
e2ElbnY/V0hyU2l1bgp6MWJQbj5UWTZtYHZmdjRDMiFpUk9gaSUod1hBR3AoV1R7KThVST9iI0xu
aUlkWUw/R1JYPTNNeSNUa1J6bUdoRjYKenJ1LTloV2g8dH5fJF84QnkkNHUxe1lVWlhSMmRUMldO
YSpIRlFyQW8rOUZUbXBCY3h9T25WZnBVNkpaZEluODdZCnplO3R0PnBicnh1ZDQyVmNlWmdsXjd0
dShAS2wwSmt4N3I/UXJvZERzb143eiVYVHRjaiYoMUUoQiElalB3UEJHewp6RUNgS1lNJmhXZFNU
bF8ra09YPGIxNjdYNDZnaEIwZCt5R3huUTUrUlFDUzRpUW1jd3skVnhwSSZEQ0xxZlQ0V2AKej9P
X0V5XmYyPUR7UmxTSiE3OygqJSF6Mmxic3ktJVJHTDtNd3E8ZG1JUHBlWnYxcSQkcj9NWiZjPTx5
TClicjR9CnpDc0VuakJPRzQzTjFZTHtZbz54ST1WTVEjKmI/JFEqTmI8OzNqejFBNHE5P01Obn1f
V15jUj4jP1VgTHRwNGRWJQp6KG9FPiNZK3JOVW47YHQhKCtfPVleallBNyorXjV0aWBiYXtoUTkt
Rz8pR3VmRl5NazhPUTJmSD83XnJWP0hANC0KekhfVCo2REB7TSg4VStPSF85MXdmRHE7S30lN2l6
T3AkSTt5R15LXlJPZFJKM094TXc9WjZ9eXtublNvYTYoZ15CCnp3YERiRnZIX3w8UHdPPzZgIXok
PFRMa2lfZWxgZ1VLQWRTKlk2RXB8UFI1Pnh5VHBwaE5XOEU/aHZfJSk5QiY0Owp6O1dSJTlSSD5S
d188QCh2SDxGVjZQd1MwITgqTUM7OzNKT3E/bF48WXl+JDIrPV8rRmRxbGRNMCFFc08rPyV5SU0K
emlSaD9sQ0xaQjtoY3BzMFMjVGZHWjBTIX4lPUF6cWVCbGRTQlh4QmQ8K3kjdDs5dFZiIWstY3Ns
bCE1c2Y1T0E7CnpnI1JwQUpecVlEZExnNWY4eWspZntqcUt8SCVodXwkc0orXzc5TE9VJCV1TmhC
anwofVJPUSlIWGMtQzRnen5kXwp6SHlKaGBrQGA8ZV5oVXJ7QShEMVFuNmFpe0RTNDg4czEmUFpi
RDZsNldxPXA0UE9wO0sybzNBcmdYXm9yS3FuQkUKeiFiJHMtVS0mN3dXenA1V1k4PTVRP05DU2Yl
KG1UaG9gPXpBVmkpcGJVfTtUJk1jYitPKXdaRGM0dWkwRlFfaiFvCnp1dWJAfCEzfSVaKVp8QktM
QVFlMGB9eGx+bjxPbjU5KHNqT1lvWjEtTV90RUdtYipeKSg3fWJQbVFfUCtybV4mXgp6I3xRbG8/
VF9RfVZSQHBtQlF5ezR5MW5qd0hoNUpjUFQxZVhBaUBYb0k9NE5ZZHRURmlPSX09dVUmQlomVnct
NjYKejkzfkdhOSsoXjRrLVVmcCVHN25HezJFLXMrRFBxN1NWdz1+SGNCTypAfm5NeiFQV2tpbSok
b2Z4Kz48JGs+TGAyCno8N3VnaF4xJGtFPjBxKHpnIXBac05QUGg3UDw+cDNuVHtBLTR8Qk5AZX45
di1LVnBYeGBAZm4wYXUqI1crMGpxNAp6Y1ZwbDlONlRNQ3tofnhZIXh7VkpsI3w4UGN1KE0xPj8+
eTxgRVBRVEJXKnA7SDlKZSRZalR9ZSYkV2RnYlpGfUMKejZ9JEhrMkBkY3tEKSNGNFIqU1l7VkA3
dz1QaE1eeVY2QWYjVktNOSo8ekUmU1ZvcV42ZWM9JjlFYVhNb2IhfHxrCno2QytGZ0FDcXgzQzQ5
PlJ3T35AKTByX3RkNk9fQX01XyVGa09NMjM7eVYlWTRieCsoTyReSzN1NF8kOERidykkYgp6Ujdz
dmhNdWxpQ21Ab1dFRDF0UWptS2tfIVB6aGMzcHgtKGxWYi1sV2U+aklFaG19Tz5adkAhcHc2M1Q3
eUY0RU0KeklVaV45dilDY1lSQXleZjhHMUZNbmdDbmY7fjI+TGtSNXJMRWAyfCFNRnZpbGMoelle
bmFaNV83K2FISXN0cTt9Cno8YCpyQklJNT1sJFhoKjkkKjFfX1N1ciZJalplODRXO0pyensoJmtz
VUVeQjM7NyN9Oz10UzlzOWVmK2pjWWN9dQp6WHMrSVVIbVBJZFE1P094RD92c3JwT3IqakNKPUUm
bC0temtWI0h8SW16MCF7blJDYzZ5RnpOTDlWMSs/bSgkTHkKej88WjtLdCpueD9haitjcjNDcnVB
c1RaVkB4V09tM2w8Qjx4PylHfUtPZUxyIXFDcjMpbnNaWjIzREZWRFowdGF4CnpeTGZyT0Q/UFAh
XlExdmRRaHJDKVlFTmRDUzZNUyZCfnA5ZyhUMTZlP0s3c2Iqb1Mhe0wrTEZFWXdya3UyJF5MOQp6
I3EwTnkhZTFZRjM5Qjg3WG5kJFhGcXNZVDR6fkItQDZLPGlWcmN4I2g9Ky1uci1vZWJGQDUtPkk7
fHt3ZF9KLXoKekElYzh9UXlrX2d4NS0pTTh2VSFlS0FYelRHUCR6Vk1MPGA2Ujs9dGNZTl9UaFVS
QUl0bH5wdCN2MCEwLWEqRldHCnpleHorTyNsS05AVk5aVVJDYT9IVUZkd3J7SHlvTSFhK21nV2w7
U2tGQHtyQyZTUSN4emk0UjE7JDQ5aEc+WHxfawp6TV9BS3ZLYylPZTQ7T2NOTz4rODNXMTlSdWMh
MTQjUmQzeX1nNmJRPjxmbC0+eyphcFlYRSZwbl9GcDA1ayRYb3sKendadEJKaXV0MSpCUip9bGpt
b249P0JDVlAqaW16P01iZmlfNGpVND4qYGgmJlk1fUYwJW4pJjxHUypoN0dHbWpLCnpjaW5CbnVK
KmR4M3pJZH5lWDBBX1dDKSp2SDs0d3pPeldUb0o0OWo0KFBOazIzUTxqUDE+X2NKK1cyTGBvdHBC
cAp6dVFgPylKaWpmRVR+eS1kbiRXYUVHdzlvJTNpfnlza2M7fjMxOUFWUXNQMEdmRylSUHNLNWlq
dnpXcy1nWU0yQX0KekdMQWo+ciF3X0ZKWGQ4QUJ0NSZtbiNHRCs/QTB9Q2FVR2MlKz05aWdaZmBS
Kz5fbyR7eCVhaDI5dFZoMGZlc0o8Cnp6XnZ8a2dBbDU+IWhmZGFSS2N9QSF+NmBAV05uTFctVj5q
dE5UQnhwXlV8MVF3KTQ5UC1OT3ZoU0J+TTAhXlhDZwp6KUBPN0YrbFF8e2d6ZjVVN35jdjBxMGdx
SnB6PG9nX2dYRWc1YkIhYVBTaldvN2lUKHJOP29gaighYmkqN1BBMHwKemMoJGBuaT8yOHooYVNL
JjE7PCZgQDN0NFRlNz15cGVEdD1Aayt8RmJGdX0zRVc0TVgtJiVWSUNLQGp4OFk+eVF0CnpmWG42
Mi1aZldlSHlCNjU0WTBqLXN+ZE9XbntZK2UwdWpNVlRGWiV6X2B8MmB7aGgmWl8pUm1Qe2dGUmhG
Uyk5OQp6JDltN0AwdkomUFhhO3drek5ZK19mKlhPYWFRcndrSkEwMmtvTDRYNWIjQzV6KHNsMSFX
YkM8KXtRTyFMNT1gemcKek5hSjYjMy1HMFFJSFZqcXVUbCZFPTkkYSZ5dyRGX1hFMWh0VyRSOWMl
ZVdNMVh3azl6Xys/cn1iPSRCK01FbkVyCno4ZWh0eHtnezZxME1PZ3RRakxaJCMjRGpjMUVzRzI/
ZV9MeDdOfUElQTUjUXtkenlqWSl0e0F5dlQtODg/dDc/Kwp6KERAK2txeU1HP2hIP18yejgjbSlO
eW1sRCk3bHo5KHomSkBaI31HVC16cUpQTmd5KXo8dlFgZHA8YE1xeCljUXQKenEzLU0jU3d0dF4o
SERQIUpCSGUmK1MtZGtyWFZYVDN3OzhKWSR2K24wMk5YXm5eV3htZGVQQVdYb1NYckNfTj10Cnpk
YGBxfTBxISFna0xYRWxLVVVyM1RiQXZkcEhjPUhiPSpUMlE0SWVPb3lYckhFR1ZrSkpUYEN0T1Eh
PUN2JEojbgp6aVNXNXVrSHtZVitFUU41VHRiRUdxSFd9NTBxdFZPYkdTY2xfOSpXV3EmVzZxc2Mh
aVFVSFNXN3AxdTh1K1hHPDMKendnYWNNWV9xJHRBN1EmUnF3amQhYUI7amAqMD1mSVllKT1WSmRN
e1RWSmFQNHotNFEyJD5ON31HR1QhRCN+LU0kCnpYLSYwbFhjKUd0Jl5BRXtNRjRDcTFZNmohZHFZ
K0gqMVktWT9yPUJEOG5uN1U7Sk9yd2hYMjVxejM7NEdvQW8wcwp6R2J6Vjc7UEg9KnxNdUI/ZUND
cTNBIUgpJWx+YTdMOUNwJkorez8qdE9kX3gtNHd7elReI2RxfmRoUCgpITQ8NSEKel5JRVVAZTM8
M2w/N3JtZjd0TD91cylsK1FsV0FMYDh9Uj93Vm5hZnB4dEVhQGN+KjducGImK2FjZip0JHJxTEhr
CnpkM3x8a2JfUU4rdG9ZcXZ5VnY4QD5+YkpIVnBoeSNKM3pLdVY0K2Urcn5ic2Y8JFpPcXR0en12
N3ZTKDVCWXRQeQp6NDNOU0VtcGd+e1N0SW9VR2d5eyplbFRta0BYck85ZVh7XmxSbDZkMGs1N3Vj
LVF4cmJFP1ZgTjl2Sy1xKT5gM3MKelNPKTBkUz9tYX4rNUQoSSV4RFFwOT9QaTEjcFc3LUlYPiQk
Q2d+TWloZU1SdzsqPmF2Xyokdl40YmFQV01tRWxsCnpjTlErKCtPK1pvbSQycSlFJVVNTFFiczhR
ekRWWUF3X21iWVc+djZiMUtsc2x5YEhUclYpfip1WURXMUZGPCs3bAp6TX1lO3c9KEl6c2BnWXoz
NCFycjRjNldJK3VsYz87WnImPV81V0U5N3goeVZxTTY3cmJVK2B6WGlyeWQ5KlI2T1QKei11bCNa
LUlZJklQayladHlMV3ZFVlp3I2Y/cXR9cTNtc1AwS1VpJjttVmN7PDZCMVpRKVIpTGRteHJETT9u
MTlLCnotWl5YSkJVT2c/ZnpBYlhXQ0hMJCZZfHJtISl2YEVvb0sxZG9hWD5fKG8+VldySShiKkhe
O3hLYWkmaUchUXExdwp6NjtiTSZfMk9AIUd3Y2hRMXZoc156JGBjJS09T2UoJEtkRH5BNlAjaDtZ
al5VNiZhWCtee3JteDMxYFB5Nz13PD8Keno5RGBZRlJqeHdtMkVSU3JJP3BxREF3eT0oIWFlRmJ0
RTFTens/a2UyJmVWRGU+PnxtUzAtfF43UDghUjQ/UD9rCnpoJGg/cC01Q0NZRVR4QEZlNE92NCpO
I3EwJHN5a28hMjY2N0Q4JSlyX3dFMz05Y0A2dzUlTTc2VloodG1tQT1ffQp6OTloUHM9czd+S05C
bTRIbFQyUkh1SG5WUW1CaiYmTj54UmsxdXVpcyFAfiZtNy16Y3dLRTB7JkB3TUwtZVpLRjUKem9Q
aEhqT0gjaUcwOVFxN2hPc3x5Qj1KQ2FYfmZwa3NuYXhqQkAhRVd6ajFLfCskakFna157O0ZEUVkq
QUUjUz5+CnpZV01TI2V1fTw+a09ZfVlBQG0wMkdhNnh9Qms8JmQ7fiZOUz9ncGNITWo1KncmTGZ3
djNvcUxvYGc4bEUtSjR1dAp6UEk+NHRDSVNxc2VjPmlaUlEyPj5OSWJ9Jnc2XjNReHModWtFNzZl
ajV6VSQ7ZkE+OWpUflpQSFJ9M1lyQWBybmkKek1NQTFSZVY0b2tJN1cjO3l3alUqVjFXQGctNU9k
WGV8VGB2MmwkWDdlPllXVmAzWnFBJT5yUGxUNkgpQV5uO1J6CnpobD8/eCtfVSZNaXwwREM5JFM5
NHZhXypVcXUmSzdzZSVCVzBFZz5ROU1LI3BpUU9xei1ge09ZNzFqMVVya1RaQAp6QGhHKF9vY351
TjV7UlRITiZOd1NMS2tefHJZY2pMLUREIyl5VzsmdGVCLVJxQV94P1FsPGpkOGg8eCFuJjN2RCsK
elY+U1FOTmhnZlphRXEtVCFYM0duZiNZYS1gQ0ROMXVseXBGPW1SK0lJfWhRKmp+RzJ8MUx2Xkhg
Y1l2b2hhO3FRCnooP2kzZlAtRnxsWSYtSjkzPUFuTlFna0h1QldBam04ak1aWD1EYnNDRDVyRVZV
WjUmfVM0bj1vbjlGOWcwSj9HcQp6SU54e0Y/fXF3c2wkTEFfMkgxPnJ1eHpaZk5+eTkqSzJIQnh3
aio7M1dCR3dtQlh5a35KUTFIRDkoUU9rd1BXNiUKeilIKmpsKkFFT1lxQEI0OTBYN3ZJV2dNKWVV
eHppX0QrN3FUfEs/aDJyWFcxISFYbU0jbV5MPmpqODw2P0NEalpACnpCPXB0eHRoYjUxZj50anBU
d2dFaStYUnpDVzRgJXcpIylOZEZtQ2UrZDcrdHZePnwqOWB+fXBNNFZAcmsmbH1nUwp6RHN4OUkj
YzZaMDVNIVk7NyQqamswMGU9V2JTbWFNaEx8aUdMTWxVTEoqWH4qUDExO1RFfV9kbDx0SyZhaXVl
IWcKekthZ2FSRWEyWTAyPlZCcnFiRShCaCVsSn1jZjxObSY7LUg+YW5PNXdSQFh0fWY4WVdEY2RY
ZH0jWkFAZyFDbDNGCnpwQz5uZDl6cGBpT054YTUzVEVLWThkM257R2xSRXZAbFNANUxgWCtkaGFa
YWlpdUoheyhOaEFISkdOLSZVaktlPQp6NUNvfC0mfEZTNzsoeUlqXiV+RndINnE9THs9MGZmT045
NTUrPVRfd3w3KF5SSlYwJXY3d250ISZseENDXjhpfikKeipPO0xCVSRmVyhZcVZqTDU/QX1qUnE1
aT1maHxFd191fkdZQzllQCFWP3pwY0YyakZpT1luR3UlRHxRXi0tR2BQCnotR0luN3RfUTQ5UGJx
SGZBOXc/WVc9PTFPT3ZsNDRPIXgwQnxJZCFTcCR5QENOPS11MSFvcCZ3ciRqYWFwRnVTVgp6Vjc/
Z3hMQWJfSjc4fXxQUH1BcUVOSiZZejAzKGorcjFCe0l7I35PQkFQS2lEK1BnZn5rQktKK0psIShQ
KUJ3X3sKekElRik9PyRnYih3MTtrRXIlMC0mJDFjSj5IVntMPl41QFNWM1goOClZIyUqcXtseng2
dVQzSFZrRz57flFjUmRmCnpmN2MqI1ZIeUo4UH10QVd7cVJtYnB6c18zSnRMb1NZMFp+Zm9HMHxO
cFVDYVVLdmNmZWc5SDFyMXJ9WG1sWktqXwp6djtkQ05APEI9X3tkR0MjVWgqYkFoTjZnPlRIbTRk
OC0jMHN5bCZaamFtZEskXyUqUGp4KmkwS0t9dyReOFp5VUAKej98KU9DTCtkdS1VeXg+VHk0SElS
ZkVoUXZ0bGI9K1lFZUtuVnN4dG1xfkw4SnBzQUB+NyE2QkRVP2xAODZKditBCnp7by1KIyNOOGdQ
dTQmbElFZGFpLWRyQ2xHNXlYRGIodkBgdzZlQHhZUmMlaUk8OWc2RWZgVDU8MXZMMHh7bjE4Iwp6
WXkoNmo3QmprNVJ8ZT85ZGs5NEJaJUZrTSFjJFU0VnVvRTloYSQqYktDPVJadWkmOEllSk4mVT1I
ZjMramNraHIKekUkK0pqd29DJXZQPkV8Y2VYTyt0VWBYb0tqNk8lPXowRVQycjFOJk5fS3hmWWZY
NU9CRDE5SXZsbUwhJm1YZmJ5Cno4M004dDZIOFVZeUh0JT1pUmJqeTVDKlgrTFJqOGZSbngrIV51
ckpPcH1LPnlgYD9lKmUrMTNHTElQalhYYUclOAp6aExTPUtBJVh1WmQpZFZueU5xaUdhQTxaSDRy
a09sNz5VS0JoN1ZOIXlgM3VIO1g5d3ZtZV9we0JLQjZjeWMlVnwKemdMNmJmIyRNI0FBQWxkLUd3
diNxbW5aPDQhZ3J7WG5zTTU5KnJyMWtLKm47SXdAOGd7VXBfYiN1M3hfWmFFKCNxCnptRjsrKjZm
flU3O2Q3QDErbHM9LWlGS0JVOFJfRHk3aT9eKTZTYSRuPGw2K3RRODZoNEREejdsdX4hTz9Odld5
cgp6cnYyZnNnXyFPLW47aTcoPHBlWFhvOXJVZDglMztMOHcqcVR5ckJTQiZBcWhRUHpwZmdMPyFq
IXR3bm93cFpuWGoKektySWheQUsrWUpVJWtkeCs7I3k4MmFCYlBAYnJvR0JoJmt4TWNVdzBXQj1B
bkspQUM9UzJ9WSFRckVDLWtFaUg4CnpYQGdvYzh1KFdoI088YCFeTFlVOzNqaX1zYnhTVEl4OVJh
fnBBS1U8VSZOQjZIZ1dIXjBaKEpRPDY9fVBEI0BLJgp6I0BKRnchMCt6elk9NzhMTDh1MyFQU2NC
dGg2R2JtKHNXa2lxb0NNeiUmKm1Sc25UekRfI1VnZmduUHAzVHZKZ0kKemN+eX1uej93clNtLTR7
aGR+Ryt3eVV8KCV7YDZhKmhVZEFEQXBpQjRFKnpVO2gqKUJ5ZnU0QDh8TCtzUVcqYjt5CnpQVz5I
QEhmM2ZhJXoxdDhZR0ZaNzskSEM2Ry1HP3haU3l4OThNdWkkNlByPFQmcH1mSVU2bn1We0R4K0Yl
NiFKIwp6e3hgPjEza0p1R3ZmMDBLSldmYGB1OHBrUHhuPlBxeT0pTzh7fGFpQHQlPV5nZWYjaFlr
aVg0MnlnWThFSi19aUcKejYobmYhN2VZJlpVYzkqflFCUVlOVCpAMil0P0xQV1F1VW0wRlhlbVd7
eFFFMCt0U283PFhwSHxFaylmWi18PCZECnpRJXR9U2wmb3pldzJSVS00NnY1I0EpTmh+YiU1PEZ3
YmNFc1pDdmAkNyhEVC00YytIdU8pa2hAJmJjMyFSejNpSgp6PHBLY0w1ZGRmJFdjTHRXd2B8NS1P
aEV3d3J0ZkdtdUJNTVhtMHlGJlM1bH1tKjdvK0NTP3JhMmVPaj5TWmtGcDcKenAhUTBCZ3NtREkw
Y2hKZyZpfXYla1NfY1d6JGAxdFZnNCg2Xyo+MWJSNUJrNERuMHp9alBkdCQjWjdiV2dgZ2UyCnpQ
MXBpekRXWXR9Xkw8MCR2bjRLZks8Uld9X0M4SHwqP0VBJTNzJXooNntiUV8/JS1lYmJxeH5aTGg0
b2tEUXtCKQp6Sz5rWmw1Zig9fi05JFEtNUt5OVNKd0tnMXxCdFN4eXVBRGUzWkBOVTNMPHt1TT9l
OSMoc18lR2tIXmAkbTd3SG4KejFxSFpRUDVLRjc0KSQoU1k0NDNNNDh3WjFSb2xQdVEqPHAhTkh8
UmJ5VGVnPGw+QktDb05hellPM1RBeys2KHxsCnpjV3N7U2B3elM+Tyg1UUs0OWdOM1pqRTNaQWJW
eXx2LXpCS0hlMXlLd0ZjXzJLKzlmZnRXZiNeayZXbmZsSTlqcgp6MVNiRkhVc05gNmZpSjc2TmQt
N0JhJDFJTkFIMEMtYntwezUlTWR1Z2pQO0ZuZEQmbFJBYGBVNXk9UHdxJTA/PX0KejE2JkJNUmt7
VkNGfmd+KzBnMktgWXtVSTJuTFd9bEAtVjsmZ2x2d1dTNytgaUc+QCU1S2J7MSowUGVmNlVGTkBl
CnpFPyZKN09tJldLNF9aTFpEaXJPX2RKIXh0bmJYZ1RaeDE+YlJPeCFXKXxaJXJ1WVclczJCPkM2
MEJXaDkqcWhGSwp6SytvQjZKMiU5VGR2dihZR2JXbU5mcEAqbXhKYi04ND04N2ZLVUV8dyV3I2NX
VnI/QUk5aVQycUhfKChXbVMlPzAKekYmI1ZHWXZfcCtxN1BLKGAqaV5AKyY2dUlGWj1RTzFSY3tN
S2NAPTdibGV2Wjk8QEskXkF8Y0glfE47VGJAYnklCnpLZW1LakR0XkdgTXheTVFfQWxvKEpldz1u
OVRucUVBMEBIeVYwSlRZaGhwakhDcVFJUDNCZUtgKyFiU0EyQmBWcwp6djE+JWluUUZyT01ZWE8w
Uzs9WSFvemRRTkR7aTJaVGZsKFRfIXExVDRUUSRAXztGel45LXdvfEU2aT04YjBHYz8Kenpsdm1p
XzRqQlZ6NEgwNz57Kjg/JiZpTVpsM3EzTiNrRGtUeyNFQUtpezdGQzY9PERJUUlscytvUT1LeUxu
Um19CnpNNm5VdDFoUik7S3QpfU1SdU5jIXxNWWI0NyhuQHlgaHgtTE44Jkg7T1A8USEhWmVOYl5K
LSt7QVNmKWtAdDdhPgp6a1VmZk9vJHJ0JHFmJmNoWUdgdC1MZmNUa2J0JHt3NVBhdiN3em8wX0lO
VzlmKlZPPiR7djw5JSQ9OSE5ZlQkLXIKekd7N0JfI2BWK3x2bXNRS3ZfayN7cWhrdUliMUdHMTZj
YlQxYD4kK2EwVW4mendnTVBfYmAwaEEhfjFVb2A7bnwzCnpNdGhQWGA+SFJxbWVgSzFjVGBTRmVq
MWIyaH5sI3omJFktP2RpfVZNNUY4Vk9FdmI/JVc8OVNYOSR5TjdEMGZNMQp6Jj1+bj9FRTRTU2le
S3tIeE1ydFhyYU5odGR5QV9CUzckbDhIcT0xbXR+JWlQMn18PVgmTVpjVmVrQGM7ekV4RDsKek4w
TipeQVpBfCFIRF5qU1BtfDBpcHhWOWRzZilrdk4lWmFuaHpCbHIxKjMqRHFpdmNOJXBQNHBBNEc3
QUwxdmNSCnp2LT5eQyNqWjBmO2hmQj8kfkhjJFRJez95Zk9BVW89ZzU2eiViVXFfNXZKKDdqfkE3
VkImWHs9NHwyKTZqK0ZWZgp6YEJ9ezY7IXl4VlN1RT5wbGxVZGt4YXdZeGRoaHotIVBvYl9td1RG
ZkVkQ0d1Uz5DT2ozRVdweVNpX08tcEY2MmEKelglfWMqMEZ9cT9MakR5cmFUMTQhdllIYFRpRERt
aV47VHBaM0lyTEtnP1gyOSQoQURTbG9Ubyg3JXMhSCQjelJICnokREZNXkxOb2NXWkEmKHMqLXxk
Mlg+ZDJ5QmhsfnMySmlifW1LeDlKMkY+SENOe1I/a2pAP1gwQHNqTUA0cUhWQQp6PipvZ1B7cGBL
S2FHcGZNRzxORDAlWXZgJiV2cXtRVykxTXg3fVZ2Jkh+Y1JLWjB1UTxMU0w3dW1jS2gqTH41REUK
enM7KiZLeDlUNjVYZWVvdlJsRnM+Q0t7TTwyYn59Xyp3M1R7QWBWaj4rYGlOe1NwT0FFYitZSjNG
Km9lPjE0RXRXCnp8TkppaTxhJXxVLW4qTzRTaWlPZ3YoKXhuX2MjSiRwTVpTVHc3amtpQSh5M2st
R2t+fHRMe01gTCt4fjEzQDNgPgp6LUBAPGdSRXpJXl9jNF5Nc0JZJlFTJnl9YXhjNHNiOGsoT0pQ
RyF9UnpAVU5ocDBuazZDeXpmUThvVnJ4M2A/Vj4KeiQtVj4wQGc3IT1oMlMrTVBDPytKWGRpKEVa
VVh8QF5tRCQ3N1YtakgpNyhjQDVWT209K0BWP25XSFgmbyV6RzxjCnpLbXhZcHN5ZHNuXk1GZUE8
NG49cGM7bUxUP0Jseihnb1MrVFpjUDd5S1pyfVY0dlchTmo4akJHKDxDXjRpdV84UAp6PD40QzJ0
VDtjY0pDN2VpQyV7cWYmQT1wdSE4JnM+QHZgPXtudlZrdFhtVE4oPWkjYH57KlFPSl5ZfjxqUEB1
VVkKekluQFE9eWF6Xk5JaD97Ti17MEI2KTJoQkpyMighUiZwPUQhQ1NFZk5Edjg0e0hAMU9QTlI8
bXslTkAzYGN1NGR4CnpUfVExbD9mRTQjZzlYYzZ3bXA9M0taRTJuOGZkZWM2KHxZXjdoM00peSo9
fkwlfEB4bmZ4MWZNTUFTUE5fdnYtMgp6IVF9MnNzNDR1U0dTQmElZm1hV2h7RkZWNlUxKmtGYzJY
amlJOElTdjtXJm1QOHlCZE5wQShfNHcqfTVnJi0kJHkKejElQ3NNPjw+MGQ9OVNSMUk4enV0RGRP
JEpscmZmREEqKT5oPG1YI31IVkVITzxFQWJRUzY0d1dUVHAoIXwxKjx9Cnp2Q0sqbTU8UzVrX3ZJ
fTVxY2xhWTlTemJgdVVLJl91N3tsLVQ8PlJnViNrKkNAR2tOQjc7OG5GUSo2U1VSNHNPewp6YHAr
N29yXn14enN2ZVpGPD9zYFNiQGNwO21TP2ZEc3M4K1dyUEE9P01tR0tEQWtSVFp3YTk2YGJQNzNT
P1ZGPEQKeiQ8elV4K3pnaiU3PFd8REhiQko5OT1AKikmfEhvKDckPDdVe1Q4JjNaeUJ6IUxvP3dg
RUgrU3lXTylVdFF+K1RXCnpiQ1g1ZT5lRmhSWm9qVHBlZFRaTTBXPmp1OVB4dEV2KzJHUmkmZTl8
OVVoPjJLQmsyRFlCKkxkQlo2d0IkcyRNYAp6clg4b3s/WmdBUUBkelI4dj9yQjA7VV87U05gNFoj
O2glazw9bHA/SyU9KzFDNS0/TjtVUkNTPCheMCNhcU8rbE0KejJTeCVUIVJ8PDFrOHlVTDx5dWQz
d29KdG50ZWRkNW0jVXhARkwkSFQ9emNrbElWM25nVColdVYxakhGSyNyPVZNCno1WUtCUncjS0J+
KlNTQ2dxbXdFUHt6WVVNUyhvTDJDKDNidj1MSVJgYjNxblNmfXB0SyQ7Z3sweF5GQj5CSWY/fAp6
ZT9uNTRtVWpkS08wV15tRnlJIWJBTlNzOyZtJXhHKXlzKFZ0Wjdib2owa2FqKV44RkFCYFB7UjM4
TmR0Qjh8WmkKenJ7NzJ2dlMzd0NLTzs8XmBKRXFCVXZaNiQpTFdGdHpjKmdhQCFpWFUwJkBNWCYh
VFo1Y0hreWpELUlpbkJPK3hRCnpiIzQ+RktxQnJXQV5lV2djeis3cTJCcUozdlA9Q1U2ViMmPHF3
blVWOFMoZDZeQVh8amFWZ1NBd31wZnx0ZTUoTwp6bSMzJXxWUmMmYEk9IUx4YCt5UlFDNT0hWEZA
eFU1cnM0OUh2MnFYbVNHSmFxY2NrZEY9UkhXbkFhXiZlVUpQYFIKekdBWWgpNiNSYCsxSmc7XjYh
VFhVfDZoQ0c4UTB7fXZAYWIqMVN8bzsydWtsQWwtYFIjNUpoP2tDP0ZzcDhhamsjCnowMT4yMWt0
JDdrbEAzOUFsaXF1ayY8UVArMW0xWF9ONisjNnp4X1lIRlctez1aVDgtS1hKX1l7eG4/SnhZN1RP
Rgp6Xio+KnJ3eWVMe0ozUnZAbGJGfHdVeHIwWXdNdUAxKClsezh5eHp+dihtWHZIdTRZbzdYVUFY
fE1hRFhiVXxkKHoKekZ1dWk0QVg+biFTR3lecVNfZ0JiVStZZUMtK0QwSUshRU9gMFplX35eRjhy
PGpyJTBOJGQhR29qYnp9OGNeQ2ROCnpuLSF8Jil1ZVVybkVtNUtgNitNYCE0bTw5SmF7M0pRTkBi
OUxJTDVEeF5kJkA0cnhNQlhnX3dMY0piOChIdD09Sgp6bkpOLVJtWlYkRzN2KyZudzhFeGhQfFpB
SHJQRjEyZnA9WG1pN1d1Tl8tWjwyI3dLQDxII3pTPm1+Rz4qS3VvWDgKelZ4V2VCT35RJDFxSUYp
aHo9d2A3VVR0ODJqO3FpYChvbEZfTHFEIUwxeXt9MSlJWHBjY2lwJlk4fkMwU3hfST41CnopeDtt
OEA9KWlhUX5OLWE3V3VeSSY4dXkzWkFPdk9ubTVDRWA1fFV+dTBgUn5KOVUtTUkxbnk/cG9iSHNG
RD9+Kgp6V21VdmEqPzhONnpIRE9DPE0zdTdHKFFqLWE2aDFsajgzVShXYzRBdWo8eCk9ezBjIyQw
PEM2Zl8xOERTe0wod1MKelpIUjBWUTdVUkt0OU1gdmg0MjJFWmkzdWYyO1JrKDtEWk9FdTxjUkt1
X29QNnlxWGhQRVErKiYyNER5e080Q3tuCnpEdnVWNy13WHk/KG0jPzA9VSVPYCZLbzcreEp+V1FU
MjBPPjt9UiRIcCFHZTBGOXVgIzE5eFRieTlnWj18RkImKgp6SCRCcjAzSzBedy1VS3FEUmFObXN4
OGB+S0hFbVI/VVJ2Rkh8M2dXVCY1NzxaJEI0VkIxelRRdkx0WHg7dGJSKEwKelclUjJWJWp9OXJY
U15qfF5Ed0dURUwyKnRqQmhsQlZNdEFRQWkqKmVMSldKRzxRNihiQT96Y2xiZG9oWktuKThVCnom
PForK05mJitCTCQta18mSlowRE5DezM2WiZNajVWX0FOZEZsKn1vK2BocCZzPj1kOWBSR1hMe18m
e01CcnA3MQp6cHhFdz4odjJ8QS1nMVFye1k1MyFiPSYqISQocFVkXiFVUkY/fGFFbE9xaFBsJm51
PSR7cUZiTUU9Xjw4dHkhJT4KejIpT05Bb1ZmZSU3NiskTD04dm1PJUglI35ybn5oR2wjNmsxKjNK
bCNsdlI7di0pOG1AISV0Zj5ePk5qUGJuPCk1CnpTfTVeOyZNRlVnckwmZ0JkKkFZbUloTVdjZ0NW
dE1MdTFoXiVifV5WOX5CUmYwVWNLcSVabnBiMDVTbnwwd1RKPgp6blRLJl9WdkxWSTU4JFZqI3xF
X19SQ01SNEdYMiVUNk9tNlRvUCZNa1RXQXN5aj1gVTBGVVE1TVJeS2lwaENPSHkKekJ0V1dIJDF1
VXVrbHlAWTsyOG8tKmtpQERsQnp0dXVwIUZ7JmhmWGBsSUR7UjA1RGBTPmxTXlcpSVRpK0YtSldR
Cnp0YDJaRURZWURjNGkwJGh2NX1JKVM+Zk5nVmdsdHhfeUhtSWBwX31ZQl9UeiFXUzUwXjt5aHFH
RH1lK29DRSskQgp6ayNNOGFGWj1jP2pQdXxTOHdLNzBzQDJYN1hTJVo2PUs8cl82biNqaz9ATDEk
I2NtJDh5dUBvPnVtTHQ5KGdIMGoKenlYUGQpdFl3LT9ge017I3RtPmh8Szs3LThlJmk2M2kyQ1Uk
cC1xK0oqeH1GQHE5c1lzbigoYEVwOCsxJj07fCR5CnpuaUZvKTJuVHF0TXpnaStDNEh3c25OYF9Y
KXNlTWpGfDJfO21jO0ZFNiY8dz0zKUNicGk+UklxcUJ8Ym4+OV9uQQp6RU9mIzw9NVlfU3UqVGlf
TyNoczkhfTQhMjBjQFNgX2xSJUI8SHUpc3IjdyE+bEJRaT5WamwheTc5PHJISGZ8NCYKelJ+UGxi
X3htMlNEST45a1Y0bjZGY0IpQihXcXFnViE1e0pTZnBDUE9vWWw5JG50Wk1YUlQ+flI2I1dnSyRm
My1MCnpsWTt5eEFTTiNhY1RyITlfdSFWV20oUyNtdDNKQWFicU1BJlc2KnFeP3VEUiQwUDdgMCFA
YUFwYXpIRWJnTkBtewp6KUZpRmspRTN2VEt3QndMbzc0X3xkUT90aGpXTXNremE7e0NLbihrRVV8
PE09KnFiPztERT4tVkVieXlAck5nTHcKej9VQUZ7JFNxdl47Mj96bUI/NlBKU2dVV2BMVkBKaTN4
K0RoTGBaMk8rRHhKJipraXZCajR4am49Vn1jfDFvdHA2CnppITZsbHMmekNJS1p2Pzd4RC19fjJD
MWVNXk4jRlh8Nnh3eXAkUmFAPipOXi1oQlBgK21yQSp+biZsSEplJDZYZwp6cGt2PTU/QGJrTmtQ
PHt0dmp4enJPX2gzKGFEK09NWncoQXc2NEM1PCVwSEZDcz03M2E/YD5vaG9lRH01QEpQfEwKemBm
YlUoNjh+fGdiVDg9RlZ0Kl4zYXJmOVZ1fnwqV3g5MFJQYDh+PH04T2FrdytSUSRWalM8KmQwRHxa
ZkMlRWx1CnpaQkV6OGcjUXI2MkkjKkpybEtYYmNveG9WZmNOJlJQXkdgcTx6PDMtdnotUVhHcUVK
JF5HOHhlP20odyN4aCh3RQp6VnN3JG9RRF9PM1dTZFpBeCtxRGpNU09yVHU3SCVxTC1YRUFkJTth
JnA0KnV+MjV5eig3bzlRMz9AYyZud01TbygKem5HLXxEdEVKeU9UTEMwRmF3OXB7dTZBMSM1dzJz
UzIxcENAb2kwWjEhamVgaDBrYz9+WnlUOF42UXpMZCU0KGFsCnp3X2Y0R0hvZSVpRGRsdUE1M1k/
bloyLV8rTnhnTzN2RUlXa1YpSHdrd2pUQHNJXlhmbShqO1dgeXc3JDAwPyZNaAp6MSpTc0Y5aH1I
RXRCYWV6bVgraDduX1BvO2BrWCQ9dVpKJHtSQ1lJVTV2S1BFcmBVVT0lb0RJXik3fDhyaz9DTWoK
ekkpdiR+OTRqNWdkUTdVaWpxUE59Yll0SDNeJXkoaj9NRDFFb0wpeGo/VWt+KmxTRzR9dF9adE5h
ZyVIKzk3KGVuCno4TlRDMEtacnhicHIrMllIb1JvQjRDaj9UUEopd25MVlltV2FvU3FBOz5pPDEr
IUo0aWlTfDw/d3hVUVBjYC1zegp6KStEQzF4PjVxPXpgSWVJYWt2anNrRXM+Zzs3JSg/TiM1UV8h
cXRxI2dIT0tneHFLaCFkTkE1fVVpMk8mZDxsd1QKeiojTV57SXRDYyFodXpyLSFjaHM1OHB1ZmBm
IW1OZEEkP3ZESExicCVVUkN4VUImZFVDdjhVXnFNNGRzOGw2eHJiCnozdzByRGN2aDgqMjRPfGUw
MilLMzFXTk1GdXBeKUBxPEpjTnkqdmNrI15gQiFJdF87JHd3ViU8WkJZMEZ3YmFVeAp6NHI5YTBD
SWNYKXlAWn47QlZhb3VZUkdHIV5zSz9sXlZgWXYkMSl0cDM2a0JkdU1TOHRjUHBobnRGLU1RIVMz
NGMKejgwJDJJYjN1UTxCaXcpakoqK3IxVVo2TGppSzNIe3I1M0dUKmxXQjRzLX12V2JwZVApYFEk
dDhwIXMmYFk4MnpyCnptel5LZTlKRE11RlVvaW55OWFJaHJ0dUtMQmplK0JUbWZUTiR8ayF8PWJO
NlhNfk5qbiE1QU4kSFBUTT9nZkFWQAp6Z1JwIyVySlY9NV96QTYoSGpaVllFZlRzSzgyZHpfMXNt
KE5KdX0+VjN6VkZSamBFajFlKHM+bTl5OEk4dlQ5VnkKelo0YF5raCVQUWVFN3VmU05RMENISng7
VjdfQmdyZmIxdTFXZU0heTxLMXZLUFFrfUhRTzhqVyEpeSlNPmI0fUs9CnpGQ0xfdnhiYCVxaiVx
Pj1kNW0qantOIyF9NXgrPDZxY2d7cENYKyNgTFU8O1I4UDtkZEQhbyZHaFBkSzRjdU82PQp6X2k0
S0EhN2w5cUM5MyFoVTF1UEJBOVBlfitJT15xO1JRbytYKEliUHg5WCh6Kig0VX0zfCp+eUdSUFox
VVQ5YDEKekFwfGRKJVJDez0wJlpJOTgkP0JnbilXKkdHJH45MWNlR29rLT9WSHd1cjlYUzUzdkIt
ayt5VWJ0Tz5hYk9HNil+CnplU35fN1grT3NNOVZLM0t4QypCdldNbkhXWHtJXypRJTV4UnF1THlM
dHBmelZadXZfTFVNKEUteHFvaWdSRC0qRAp6Y31CKVhNXn5SVFN8QlFwUUladjlicyY3M3tDMClY
YlRSTUt5RX5nQTFBISQ0SGlZTz8yQWdwO0h8Rz96anBnfDIKekokcmE1bEBtPktmdTJoKm1HeG9+
TV9STipseHl5YWlZP0wxbyhxd3dyVGh8PWxaKDcodDI8eWB5NzdSPlI8KjJ+CnptSzQyVTxuUWJp
IThrbCFpREZ2MkltMG0qM19KX1ZPb3liUjBvRE4mZ3xlOEVPMURjV3kkUVFBSHRYYHNEXmFVcQp6
bWxWUyRvfjkmI1BwYnJGT2FtczFRcWxyaXNac0c5RV4rSWBAXjkhcWIkWDUqRXlgJEZCens5ZXI2
fmlpU05iOG8KeiNMUWFYPz1jIzExVUAoZnZobEpyeTIhe2FZJCt4OFlpMWk3TWw1Xy09fVVwX0cx
M3FrbXlGeUVecEVAKmZhXzBmCnooU0E+U29vN0tkZihpYTlRanJ1ZEN7WDJvcVJSdjZ7Kmhic2ct
ZjZQczw2ZXo/Z0olK1J0VVZCJmhBUVIxMV5obAp6emJhPDNZUy1zWmBffVRHOWJgWDAyWkxSOHpB
R2FrVGRPJVRLeiswR152QlRUaXpEclRQMD07SEA/KnskSSFrdksKenM2QVZnNnNGVn5tKWk9eSpf
WXd2TV59b3pKNCk/SSNTNUdqZTVhfjNAQ0l2T19ZTHs1aiRicV4xfjhrQlFwQkVpCnppYmBqIyE7
YFdPPmB2MmNIIV9XRT9FV0pQZ0d2MV9OcVZ0Kig4LWRgS3ZIdE4ra3ROKSh2azFuTzxJclJxNiNY
Vgp6aCNlWjxYc1lCOHNvMDdUMjIlcGVQWiVIaEtGQFZoeVh5bXp5RnsxWUctUjlGdklgNitfNldU
RTExOVBnTTxyaFYKeiR6UHI4ckZsKEJgbSlqbHJsKnkjclg0e2woI3g0dW5xbGhwaiVVeD50eikk
KDJLNGtrZFYpN0V7SDt9e3o1fUZRCnpwMHx+Oz89dFJZSWpKX3NMYzVYKmVkd2hkPGFzM0NidUpP
I1UoVSFXaD0wUnt5dEU3d1FYYjF6U0F3OEwqKXtAKQp6aE5IPkI+T1hedTNmPUxhVHx4LXpieXd1
IzRvUD9tR2NuQHYjP0ohM0NYSkMkbiVeTXBXQEZeN3FueHxhelc7R0MKelFNflImKEUofC08am9e
KGUxUF8lVWtzNFR4X1p2IXA2Km09c0o9UlI1SyhOXyZ1TT8/NSVLP3ZlKj8tfk8xeyFpCnpBeWBC
VnEtQUBnNDBna28xQU9rKjwmWVdrMk1zNDBDUzYpU3p1RGx6fEtlWmRBR2I3P2hvZnFqWGEyS1hw
KHJWcQp6ezdZb1lxU3BBTUtMUXVhPTBTWWFvP3JYM3dxWXArbU98OGY5ZmJVWXBZIT1ZRzxiREoj
eW1EYkxGRzszPkElPW0Kek10V0BKZmkhSEk3O21fSTR6NiQzSm1zSGNHaj04UVJhMlU/JVNOdk1u
XlRwPilneWpJclZNeHBrXjdUdT9QTERRCnpzKikoVyReT3xNMkUmckRvS1huPktjdWdtcVctaD88
bmBlRnd8fTxOfENGKkdZZF9oKURCZSMkI21QKilgZSopSAp6bV4xKU8mWHpwLU8jOD40cCFYNUpp
eytjdWM/WWlsdERXO0ZKKUo1cUB+O0s0bH0kMHdIYzw/cmk1X05+NHd2VGkKenh2OHl0X3diSldL
ZUtmcHAxNSYwRE4/e0kjcF9nb1d8PzZSVS1HUkUqI0E4fjt4XyZaLXtBK2xSQEs0Rj5BUS1ACnoj
fSUjSShUQ1ZOQkUkcDM7ZzV+eU1JfWI3TU9uYl9xKmU/cTYwa0tQWEhKU0ZgIVFwNXY+RGFSSE9j
UmlraiVlYwp6eGpfcUdLaXhZakRvU21ja3wje3M7OUJKaFFlV0ArJSk4d29SWSUpWitrbiVyJWZn
WSVJZz5WR29PZVBjYnkoaFcKemlePz1xbHktTDZrOTFVeFlJUVpnVz8zPVQ8ZyY0USU2KUxLZGJ4
PXhkQUxpfEs7dldHQXZhSSN6RWBWQXIpaWM+CnpoeE1MRClWcypicVZvI0JVY3lKMXpWOUFFSSQy
YHw2PVJxKHhPZFl7SWwxYSN4YEUjM1FqcWlCMFZVcDJeWjgtLQp6P2RfbjRFV04+TWNaeE9rSGQw
TX11Mm5ReU9xLTdvT2tUQSVYeSY8blVMbG5lbE1EPz56OGluUE83cDVqP1BIS3cKelpBQE9kcC05
I0ZOJlJjJmNwZGhKK3JDV3ImNnFYam55dVR0KDJxVkRDRntifG97KHkxNFZAUV8kUkIqYTdEQyRU
CnpyKnVte2NSQWhiOHlnIXM8YHxBRTl+anZHVV9TQ2ZzNztGe0h+Rzd4JFl7I3Ipb30pY2M8Vylx
N29rbFlPTEQqfQp6YHxQUGhhSzUzMyFxYl8+WH4/cFUwcnBhWjA9a2lzN1VQKz1RS2VJKnJRUE95
SGhjVyNUZCZqR1RMczBraFohJTgKelEkeE9telNhPnw1YUJUSXFWQSNqbUNHcG8+MDB+UTU0JUN8
Pk1hc0FefD5ZPG54KW5ubzk5VW5SRn04QzV7QjBGCnoyX1JBWntobng7VGgmMVUmNGM7Q3F9UipY
MW1sX2x2ZzIzc1VVN01MQWI2JFgkdikqVk5VWEB1Zit3MDN3OGk5awp6OHI4bHR5MCEkYF55Y0FC
KlJyO2V6ZismM1NaJWQoOS1uKksmVEp6UjB0dEFBJSRNfDlfWUBsRm58cSEoVC18algKekJqaDs2
QlVUdT98S3oqfW99KH1NWGZHTGFiJlYrdCp4d307MVg/JCo3JE8kIUV4Y003aUFUUTUqMHpxM18z
ZylxCnooZDkobnZTYlk+KSE1P1ZXdmJxKypOLXo4dG16Qm11aURMRlhCKHRCWnVaMk94N1RMOCZk
KV5Fdjgqa1R0RkxSbwp6MXZ7Zkg0LVF3V2pjPDcjKnJwQU0xZnE5c3swdCMoX0llKHYqX0p9ISpB
UWdPKTVpaUc5WD40RG9rP1EqVlVGNVgKeklsRSpoOD49emU5Wmpnd2hzaWloeVh9M0BsN19pVlc3
TXxTZ0RVaDdfVCF+ZSNXPXhZTz5RWjhYa0k7Zk5MP1pJCno9d0t3aDRPd2FNeWBDRmh0XlhzalB8
TDNOT1dfc0lPMndKODZ5cUxJPDMlXylgP2paSWhUN1JjTV9pMG5TMF9oUQp6aFhjYCVIfjU5Pyto
NCooZytmSSlCaUoyOEhUbTZNcmdAd3x1fmpeNj5CaGshbmQwQVJ5dD5rQ3s3MmRneSMmYGQKemdX
QWNaVDYqaGEtT3FqfXlrSWo4S1V9dHFBZVRJJVVqZ31iMU5YZX5PUmY+ZXEjXnwxPSRTY3lHMVR7
RzlrTi1zCnpIKEg2R3pDS1Q9U3c1ckQoSHV3RVJufC0tWkAqRTQoRiVYPTBlYWNOWT0mbWVDbm5X
aXwxNElPb1NpJGttKE5vNQp6OWhJPXJKSEhhZilMUFNgNkVgPD1uJSt9fihNPGVWWDN7UnpvTFN4
dndJWVJ7biR3PjJoO1RtTlNOJlIkbmZYYGMKekdsUTRRQndIbTBJYUFvZWtYdlkqVG8zVXg7T3Zk
d0Mpe311aEZRRElibnc3RWhGOy1CQ0E/IX4zfUhvYyZoO3MqCnozWkVGOWYxJChYeSFXNHpkRjc4
X1BMJXUlb0QkentIQUokJTQmfDwxejwyKVVfX1MofCEhRmxKPzJjfWQ3PH5UKwp6eTlqRCg1amRj
KTQ2MDVVJFM+KD10fktEV3lXZ0sqaTxDIUF4STFwNHEtZHYwKShLNjA9Sz0yT1BSbG4jbEN+KyYK
emIwTDBJeDNAWCNUPEAlXjJ0dXZJS1p2SndORyt9WXRTREEyTVRrX3E8MS1zZT1XRWx5VzlPZEkl
MmdzODx+NTVNCnpub0V8XnI/KjFGRW5hLTNFbT1CQnNNeFd1a2kkIUFPRVF8ciRRZUtSWkxFWGp5
IXtGRHdkUmdvQ01oY0FFcmtIYQp6QzJFQkdIdFozKFRzcTkyMDlLPmB5e0I2WUh0fUNMI0JSSUQp
cF57ayZoQi1gc3djISYtcF55dHFpJjs4WnhBNnEKemcwb1RRdUhrdzxCa0YzVClNQzBOSTROI2tr
fVgqfUZmamRtKnUxN2dGS2EpN0J3NHVBYXUjdHpUQXJ9aWkyWGZ9CnpGKjdOKkhuVnxVcE9HOGxX
eWVSX2dEfDl0Tk18dzhlI0VWbG1gPkJ2e1QmVT1QSHY+YmIoJj0jRmBLMWNGWm53fAp6aikwPzA7
bTk3YUk5Kjs5RiVqUmtWRnJJZFl1b2M1d15Zck9qI2JWMSlLUlRBanhpNCQ0PXZPJkttbGVjSX0y
X1kKekZvOWJ0PiFIKDNDZm41PSVYMT8pPEB7Q3hiVVh2Q3tnbHkmZSlndjtAJWkjMjFINW9kSWF+
Sz5hPjN2JmBmeVcqCnp3ZEdYSHdHMCFKQFhsaDh1QHtkTlh1Z09Pc15ebTZFfn4qZF8lMXtPMCZK
NU42QGJNaGprSjU4c2NVQGQoODJ+Ywp6VmUzPnp4PWYkKXNKaWBhM3l3aXxlPGRjZGF7Rlgmdklv
KUxAbnJHdyNoLURAMShpP21CWHBsLWVjajQmaVFTSmsKejNsVnRMSXlYVS1KZnQhVWdRVTg+en1m
Qlc1X2E1P0l4aEw8VCU9bSZXc35eaTJuS1E8NTVDN1JsTXxCeEFjP3t1CnpCfSVrZmYzJkRDQ0E0
eyZSSVFsKWVDPmx1V1M0NHNLb1pYdlcoOCZxSUtUNz5pZnJNPD1wdkw3ez5zSmtHYG1Bagp6S0V8
ODI5WUZfaUE0XldxcEB9YUQ/N3A5KE1WUFAyb0Q3fCpiLVh2dk9MVD1JYHwlVXVjNlUxQV9OZzNK
eT84KUUKelZaY1VfMChxUXMmeWs9V1RKa2lMRlBpOF5fblYkZ2hQSWFgY1ZtK0pDbkxnOXY+eXkr
TGF3bFVlfExfTzYxI1AtCnpsQk9IeWdSMEFsc3YycCZEPGA9NjN0P3AxVjY5MiFgYk0oVHdlISNk
aG9nKUo1dmhmbXhfZ2NqRThPUmU5ZEFgYQp6PktRJV5md15SfCp+dXoobCMzS29ZdU5jYi1JJEpW
aXxoRis/QSg9TG4mTTBSViNDNGdJbSs2X1JiV35eWisxKy0KenBVTHB2M0tKejVHUXZCbSYtVXRU
Xk1MdjhVTjYjeUQhJGJBdSg8PVkkI0lhRENkdmB7NmV+VmdASmIkellFLSsqCnolRl8tOGtAWHZA
QHtQZF42Xn1KT1R8Ynthdm88Pz9VdlJGUU45SWhaOG9+KHRGWTspQmZhc35LNk1KTk1rQWJTLQp6
dDQ0MXoxdzlZdG5YKDB7KHxmPytzazFyXytgU1omXkgmNDlZJGVUJnU9al5DWF53ei1xOE8xaUFl
cTRXMUF5KFEKejI4SFd4MykrUjt5e2JUdXUxJUcrX3djUjAlaF9ZTEN5e0IrNUklUVo9bTJieDdp
ZEdPMmQ9OzdZTzhCSSh7e30/CnpYV3lfPHk4IV5fNmhHQEQqckoxdSg5M05qU1BFekxJZU9zeyQk
PDNLVGVDTTQqZ0xRYjRvK1A0c1lUOFZWWkQzagp6Q2pfME96ajQqfmR5Z3QoTW1Udjh2SDFFTDs5
ZXY1YzYpb2xxcHc2ZW4/Izl9WUA9e0tEUGhtbT5oZn17Z2dVZEoKelk+S0l1QE5EUnkrNDVzb0pO
Y3A/Vzx4N3Z7SW1ZJUNHI31qbVMqZ3xecmBmZ0dET3pSbW5DWXRfXlclOyFpRXMyCno8Q21FQEQ0
WUhGVjxDfFRJLUA0aSk+LSgmazQhIzR7N152RWY1NV8kXmVDSXoka0NVNGQ+VWRPMCMlXjNjcSte
QAp6TjdzZHNMJGo8Qz9XPFdzKHp4PWZjLWNubm14a0FNPmVWZWB0Sz9oUHR7UFAxdDEoLVBKNHFF
fSkkKX5hcWNaRn4KekRBN2NpNXxyakMpbWVSdThsTExYd2gyeDghLXtndVdeWDN0YE5QQ3pSYE0x
Y2huJDRoXigjJmliI2JGZk4/SXI0Cno0THg4TWdqITJiKjl8LU5NJnVgeihYdz5wZVJieiQoV21o
Rjt2WWZOJihvVVIrRFdwVzkjITcwKTRoJiY+LTMycQp6U18wJkolKWE5d15Sbkx7NEpuZVhXcSNl
YXV0c2lSZiZBKmhsY1lGfVE4WmBpR2lPKDJYV1l+RSp+fUhHKnc1VmAKenczKHVSZ1k4R1JhYmZO
XlRTKHM1TV99UEEtY3l8TSlnan44YX5+cWo1NGYxU3FBTnopOCg8RnxQcUVkd1IoKkYjCnozdiY7
OWpxXnV+amQ8ezllTy0+V3B0fT5mWnMjWX49aWxtO0FwMilOMkIqdCRAKiUpIWBZaGA8NmVzM1J0
N19wOwp6JE1tUT96e3pENlZsbHR5PURONDZmQmQrQEFCWmdeOzhBRnlVYT8rWTMtU30mKjJuQ1lM
LURzR0tFKHJHT2QrS1EKek5BbCRnSCN6RGMrR2U5ZFVGUHFgbkxBXipYYGQ/QD9jY2V7Tl54e0A2
dU80MERJN2lLYXhybnUwQGJAXjg3cjxICnptSnB2bEdwZ1g8UmQ3cnJ0djdpajV+ZEMqSzNjNSl6
Qjhrd1c5ND94SE9zUjlAaFBONmtDbkt8QnRMU29DO3VhZAp6e2lAQ0BUNFY5aGRAQnd9Xz0kZSFK
YHR2Mnd5RjJhWFRjbXojYWI7TUl5Ui1FWDVfNWZXO1dHMlREdnd6eWlaM18KeiFoblRpSnE5NSV7
VzlXWnI0eENhVmBpaGVmKnttRXl5ej82UUR9Y3t0anVWRl5oWWhHbyEkeXNeVy0lNDx6OUg9Cnps
QFc0e287dGdANFkoMylEdEQ0UlZEenh6Q3hsLW5gOTIlZTQ9UXJwIVhwMUYjZm9MdlJLZXR9Q2kz
cGE9OVk2Swp6Yk0lKVZHUSVpUCE2NFUlOzx+OzM3ISlPfFcqM2lgalBPTDJBJXNRblI7NkxLXz9n
RVVYQmhlMF5XVFBYOztsNF4KekBNdEh0VVhmPG5iSiRKbzlTfnBqQ3VBfEZAISlyZUVXTSVzTFBZ
UVo0dXdac24hWThTK1gxSXxCIXdxNW43Z2w0CnpZM1dCWTNxMCtMeGtib3U9VGhEP2NoJV5WZkk9
ZkdJcTEtTWU0Sng+cykreX4jV0lBKkxpO29GT3ZpYzd3YCR5cwp6SDBtTDB0MFRCaUdvUz07PTM9
NWg3T1F1QmpBRzc2JD5TVjltcXBzSmsrWlQjTFdDe211SDwpUlZKVEQyRiNvdnkKelFfZmdTQlQ3
MWBEdzhFZFYqOV9AdkM9diQ2bDIrdGdEOEhfS3whREtoaXcoRT0kPDtVKmo0SWBee1k7WD5iOX0w
CnpqQTd2bzE3ZVdLbV4oPSZ6NG9uXmh+UXI/QWJxMHJgeF9LSiZ+KDN5X2RoNilhdml7WGNpUUpA
T3hXUTJwUkpFVQp6YUtaWD1DezhXND5HTUZzI0RCVkdaOzh1I2RoUlkhbEI8Q0E4RDh9K0kra3E5
TlNNUlNKQ3xAVTRSYCtPK29taiUKejItPVYtdzwqUSZBdlcrfDB5UWwpaCErMnVIciZVTF80Mnwj
eTdwJU03UX14KSg5PXNfJit7ZS17YTFVPyYjZDhhCnpvSSY/clBTayZfdTglaj8/WS0jej1lNF93
SE0hVSl8NVRwfi1NS2crRT40SkYqSztuaztYKWZPd0JiUzx1bUpNXgp6TVVRam1sWkE0KSojOHJJ
WWw8O29QPGJVMUFsc2RJMj93ez5gX2Vtfj5GZX47LXE8aHIjMSE8ZWFCeUNlelc/dFIKelleI3Mx
dzBDcEU3NzR9Z0V8dVB3cyRkR2dgYiZGRGJKOXpqZmwpdHl7TkdVd3JNOyZiQEJKUTlualN6dyZz
WElCCnoqWkJXdzwpKVhtR299MzFwTXN1KGxzSnJmT3lXT05fXlMmUTEkey0pLSRQT2E2NXVPZSor
fX13I0lRZHgoRVowIwp6bntqYSYzN3NfbG8+JjZgZW1mV0VLYn5yYWdMNGg5aFVNPngmRWV1TTBS
YURhPmN3KGdFWFZIK2JnP0B3bDshc2MKemJhOGZFOUhxYUYmeEt7VkZ0b3FYJklSdGNmTUxIT3F8
WEheeSNWUkk5RT1OfTwtJiNnK3hAKW9YZkdXNlUldXI8Cnp5eUdKTF5MT2EjfDM0YUw4OE4kaT1A
US0jNj9xeDAzaz5xdDNTMWM3MyMwcUwpOThZYSR+R01MY0Q9JXxWZjslZgpSM0x5Q2NTK0ZtSWZg
O1Bke3tpLTA1OChnKwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0
aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LXdpdGhvdXQtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJvcC10ZXh0LXdp
dGhvdXQtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTcwMDdmZjhiMjA2NTBiMzkxYTY3YmVhZGY5ZjIzZDU4NTFjMjUyZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtdGV4dC13aXRob3V0LXNlbGVjdGlvbi1leHBlY3Rl
ZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1FRElUSU5HIERFTEVHQVRFOiBz
aG91bGRJbnNlcnRUZXh0Omh0dHA6Ly93d3cuaWJtLmNvbS8gcmVwbGFjaW5nRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAwIG9mIERJViA+ICNkb2N1bWVudC1mcmFnbWVudCB0byAwIG9mIERJViA+ICNkb2N1
bWVudC1mcmFnbWVudCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uRHJvcHBlZAotRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYgPiAjZG9jdW1lbnQtZnJhZ21lbnQgdG8g
MCBvZiBESVYgPiAjZG9jdW1lbnQtZnJhZ21lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2Yg
I3RleHQgPiBESVYgPiAjZG9jdW1lbnQtZnJhZ21lbnQgdG8gMTkgb2YgI3RleHQgPiBESVYgPiAj
ZG9jdW1lbnQtZnJhZ21lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
c3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi1s
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJCbG9jayB7SFRNTH0g
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6
ZSA3ODR4NTg0Ci0gICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MzYKLSAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTA4eDE4Ci0gICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTA4OiAiVGhpcyBpcyBhIHRlc3QgZm9yICIKLSAgICAg
ICAgUmVuZGVySW5saW5lIHtJfSBhdCAoMCwwKSBzaXplIDc2NHgzNgotICAgICAgICAgIFJlbmRl
cklubGluZSB7QX0gYXQgKDAsMCkgc2l6ZSAzNTN4MTggW2NvbG9yPSMwMDAwRUVdCi0gICAgICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDEwNywwKSBzaXplIDM1M3gxOAotICAgICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTA3LDApIHdpZHRoIDM1MzogImh0dHA6Ly9idWd6aWxsYS5vcGVu
ZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM5NCIKLSAgICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDQ1OSwwKSBzaXplIDc2NHgzNgotICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQ1
OSwwKSB3aWR0aCA1OiAiICIKLSAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0NjMsMCkgd2lkdGgg
MzAxOiAiRWRpdGFibGUgcmVnaW9uIGRvZXMgbm90IGFjY2VwdCBkcm9wcGVkIHRleHQgaWYiCi0g
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMTI4OiAidGhlcmUgaXMgbm8gc2Vs
ZWN0aW9uIgotICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDEyNywxOCkgc2l6ZSA1eDE4
Ci0gICAgICAgICAgdGV4dCBydW4gYXQgKDEyNywxOCkgd2lkdGggNTogIi4iCi0gICAgICBSZW5k
ZXJCbG9jayB7UH0gYXQgKDAsNTIpIHNpemUgNzg0eDE4Ci0gICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDY2N3gxOAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDQ4NzogIlRoZSB0ZXh0IGZpZWxkIHNob3VsZCBhY2NlcHQgZHJhZy1hbmQtZHJvcHBlZCB0
ZXh0LCBzdWNoIGFzIHRoZSBsaW5rLCBldmVuIGlmICIKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAo
NDg2LDApIHdpZHRoIDE4MTogIm5vIHRleHQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiIKLSAgICAg
IFJlbmRlckJsb2NrIHtIUn0gYXQgKDAsODYpIHNpemUgNzg0eDIgW2JvcmRlcjogKDFweCBpbnNl
dCAjMDAwMDAwKV0KLSAgICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgwLDk2KSBzaXpl
IDc4NHgyMwotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUg
MTQ3eDE5IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgycHggaW5zZXQgIzAwMDAwMCldCi0g
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMTUwLDIpIHNpemUgNXgxOAotICAgICAgICAg
IHRleHQgcnVuIGF0ICgxNTAsMikgd2lkdGggNTogIiAiCi0gICAgICAgIFJlbmRlcklubGluZSB7
QX0gYXQgKDAsMCkgc2l6ZSAxNjd4MTggW2NvbG9yPSMwMDAwRUVdCi0gICAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgxNTQsMikgc2l6ZSAxNjd4MTgKLSAgICAgICAgICAgIHRleHQgcnVu
IGF0ICgxNTQsMikgd2lkdGggMTY3OiAiZHJvcCBtZSBpbnRvIHRoZSB0ZXh0IGZpZWxkIgotICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKLSAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCi1sYXllciBhdCAoMTMsMTA5KSBzaXplIDE0
MXgxMwotICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMywzKSBzaXplIDE0MXgxMwotICAgIFJlbmRl
clRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDExMHgxMwotICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMTEwOiAiaHR0cDovL3d3dy5pYm0uY29tLyIKLXNlbGVjdGlvbiBzdGFydDogcG9z
aXRpb24gMCBvZiBjaGlsZCAwIHsjdGV4dH0gb2YgY2hpbGQgMCB7RElWfSBvZiB7I2RvY3VtZW50
LWZyYWdtZW50fSBvZiBjaGlsZCA3IHtJTlBVVH0gb2YgYm9keQotc2VsZWN0aW9uIGVuZDogICBw
b3NpdGlvbiAxOSBvZiBjaGlsZCAwIHsjdGV4dH0gb2YgY2hpbGQgMCB7RElWfSBvZiB7I2RvY3Vt
ZW50LWZyYWdtZW50fSBvZiBjaGlsZCA3IHtJTlBVVH0gb2YgYm9keQo=
</data>
<flag name="review"
          id="420565"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>