<?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>214109</bug_id>
          
          <creation_ts>2020-07-08 16:51:38 -0700</creation_ts>
          <short_desc>Remove live ranges from Document.h, AlternativeTextController.h, DictionaryLookup.h, and WebPage.h</short_desc>
          <delta_ts>2020-07-13 14:13:00 -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>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>philipj</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1669946</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-08 16:51:38 -0700</bug_when>
    <thetext>Remove live ranges from Document.h, AlternativeTextController.h, DictionaryLookup.h, and WebPage.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669957</commentid>
    <comment_count>1</comment_count>
      <attachid>403825</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-08 17:06:34 -0700</bug_when>
    <thetext>Created attachment 403825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670516</commentid>
    <comment_count>2</comment_count>
      <attachid>403986</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 12:16:37 -0700</bug_when>
    <thetext>Created attachment 403986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670541</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 12:58:00 -0700</bug_when>
    <thetext>OK, looks like this new patch is on a patch to be green on all of EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670656</commentid>
    <comment_count>4</comment_count>
      <attachid>403986</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 16:43:07 -0700</bug_when>
    <thetext>Comment on attachment 403986
Patch

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

&gt; Source/WebCore/dom/Document.h:1587
&gt;      enum ConstructionFlags { Synthesized = 1, NonRenderedPlaceholder = 1 &lt;&lt; 1 };
&gt; -    Document(Frame*, const URL&amp;, unsigned = DefaultDocumentClass, unsigned constructionFlags = 0);
&gt; +    Document(Frame*, const URL&amp;, DocumentClassFlags = DefaultDocumentClass, unsigned constructionFlags = 0);

Probably want to convert both DocumentClassFlags and ConstructionFlags to use OptionSet at some point.

&gt; Source/WebCore/editing/AlternativeTextController.cpp:593
&gt;      // Clone the range, since the caller of may keep a refernece to the original range and modify it.
&gt; -    SpellingCorrectionCommand::create(range.cloneRange(), alternative)-&gt;apply();
&gt; +    SpellingCorrectionCommand::create(createLiveRange(range), alternative)-&gt;apply();

Comment is not quite right anymore.

&gt; Source/WebCore/editing/mac/DictionaryLookup.h:60
&gt; -    WEBCORE_EXPORT static std::tuple&lt;RefPtr&lt;Range&gt;, NSDictionary *&gt; rangeForSelection(const VisibleSelection&amp;);
&gt; -    WEBCORE_EXPORT static std::tuple&lt;RefPtr&lt;Range&gt;, NSDictionary *&gt; rangeAtHitTestResult(const HitTestResult&amp;);
&gt; +    WEBCORE_EXPORT static Optional&lt;std::tuple&lt;SimpleRange, NSDictionary *&gt;&gt; rangeForSelection(const VisibleSelection&amp;);
&gt; +    WEBCORE_EXPORT static Optional&lt;std::tuple&lt;SimpleRange, NSDictionary *&gt;&gt; rangeAtHitTestResult(const HitTestResult&amp;);
&gt;      WEBCORE_EXPORT static std::tuple&lt;NSString *, NSDictionary *&gt; stringForPDFSelection(PDFSelection *);

I think these would be easier to understand if they returned used a struct for the return value (or Optional&lt;NewStruct&gt; as the case may be) rather than tuple. Not new, but this is the type of std::pair/std::tuple usage I think we should avoid, where you can&apos;t tell what the values are for straight from the function name.  (/me is scared to blame the file and find out I added the std::tuple use).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670660</commentid>
    <comment_count>5</comment_count>
      <attachid>403986</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 16:56:52 -0700</bug_when>
    <thetext>Comment on attachment 403986
Patch

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

&gt;&gt; Source/WebCore/dom/Document.h:1587
&gt;&gt; +    Document(Frame*, const URL&amp;, DocumentClassFlags = DefaultDocumentClass, unsigned constructionFlags = 0);
&gt; 
&gt; Probably want to convert both DocumentClassFlags and ConstructionFlags to use OptionSet at some point.

Yes!

&gt;&gt; Source/WebCore/editing/AlternativeTextController.cpp:593
&gt;&gt; +    SpellingCorrectionCommand::create(createLiveRange(range), alternative)-&gt;apply();
&gt; 
&gt; Comment is not quite right anymore.

Will fix.

&gt;&gt; Source/WebCore/editing/mac/DictionaryLookup.h:60
&gt;&gt;      WEBCORE_EXPORT static std::tuple&lt;NSString *, NSDictionary *&gt; stringForPDFSelection(PDFSelection *);
&gt; 
&gt; I think these would be easier to understand if they returned used a struct for the return value (or Optional&lt;NewStruct&gt; as the case may be) rather than tuple. Not new, but this is the type of std::pair/std::tuple usage I think we should avoid, where you can&apos;t tell what the values are for straight from the function name.  (/me is scared to blame the file and find out I added the std::tuple use).

OK, I’ll consider doing that to improve this in the future. I agree that a struct would be nicer. Don’t want to do it right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670662</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 17:00:03 -0700</bug_when>
    <thetext>Committed r264247: &lt;https://trac.webkit.org/changeset/264247&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670663</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-10 17:01:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/65372579&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671147</commentid>
    <comment_count>8</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2020-07-13 14:13:00 -0700</bug_when>
    <thetext>Follow up fix for Catalyst in https://trac.webkit.org/changeset/264317/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403825</attachid>
            <date>2020-07-08 17:06:34 -0700</date>
            <delta_ts>2020-07-10 12:16:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214109-20200708170633.patch</filename>
            <type>text/plain</type>
            <size>78618</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmE1ZWZiYWIxMTMyOTY4
Y2JhZGU0YWNkYjAzMjZlODA1MGQyYzJkOS4uODFlYjczYTEyZGU0YWFiZTAzYzVmMTU1NzBjYjFl
OWE3YmQ4ZGU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA3LTA4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBEb2N1bWVudC5oLCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgsIERpY3Rpb25hcnlM
b29rdXAuaCwgYW5kIFdlYlBhZ2UuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE0MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQpOiBVcGRh
dGVkIHRvIGNhbGwKKyAgICAgICAgY2FyZXRQb3NpdGlvbkZyb21Qb2ludCwgaW50ZXJuYWwgZnVu
Y3Rpb24sIGluc3RlYWQgb2YgY2FyZXRSYW5nZUZyb21Qb2ludCwKKyAgICAgICAgcHVibGljIERP
TSBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOiBDaGFuZ2VkIGRvY3VtZW50Q2xhc3NlcyBhcmd1bWVu
dCB0byBEb2N1bWVudENsYXNzRmxhZ3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2Fy
ZXRSYW5nZUZyb21Qb2ludCk6IFJlZmFjdG9yZWQgc28gdGhpcyBjYWxscyBjcmVhdGVMaXZlUmFu
Z2UsCisgICAgICAgIHNpbmNlIGl0J3MgYSBET00gZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjYXJldFBvc2l0aW9uRnJvbVBv
aW50KTogUmVuYW1lZCBzbyB0aGlzIGlzIG5vdCBqdXN0IGFuIG92ZXJsb2FkCisgICAgICAgIGFu
ZCBjaGFuZ2VkIHRvIHJldHVybiBhIEJvdW5kYXJ5UG9pbnQgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6IFNpbXBsaWZpZWQgZm9yd2FyZCBkZWNs
YXJhdGlvbnMgYnkgZ2V0dGluZyByaWQgb2YgYWxsIHRoZSBjb25kaXRpb25hbHMuCisgICAgICAg
IFR3ZWFrZWQgYSBmZXcgdHlwZWRlZiB0aGluZ3MuIFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIGFi
b3ZlLgorCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0YXJ0QWx0ZXJu
YXRpdmVUZXh0VUlUaW1lcik6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgbV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZSBpcyBhbiBPcHRpb25hbDxTaW1wbGVSYW5nZT4uCisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlQ
ZW5kaW5nQ29ycmVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24gY29uc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJB
bGxvd2VkIGNvbnN0KTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJ
ZkFwcHJvcHJpYXRlKToKKyAgICAgICAgVXBkYXRlZCBzaW5jZSBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlIGlzIGFuIE9wdGlvbmFsPFNpbXBsZVJhbmdlPi4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVz
dWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjptYXJrUmV2ZXJzZWQpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJl
c3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNl
ZEJ5UmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6IFVzZSBTaW1wbGVSYW5nZQorICAg
ICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSk6IFRha2UgU2lt
cGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6
IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGxpdmUgcmFuZ2VzLgorCisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9s
bGVyKTogUmVuYW1lZCB0eXBlIGZyb20gUmV2ZWFsVmlldyB0byBDb2NvYVZpZXcuCisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOiBEaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmg6IFNpbXBsaWZpZWQgaGVhZGVyIHNpbmNl
IGl0IGlzIGluY2x1ZGVkIG9ubHkgZnJvbQorICAgICAgICBPYmplY3RpdmUtQyBmaWxlcy4gVXNl
IFNpbXBsZVJhbmdlIGluc3RlYWQgb2YgbGl2ZSByYW5nZXMuCisKKyAgICAgICAgKiBwYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bGVjdENsb3Nlc3RXb3JkRnJvbUhpdFRlc3RSZXN1bHRCYXNlZE9uTG9va3VwKTogVXBkYXRlZAor
ICAgICAgICBzaW5jZSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCByZXR1
cm5zIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6YXV0b3Njcm9sbEFkanVzdG1lbnRG
YWN0b3JGb3JTY3JlZW5Cb3VuZGFyaWVzKTogVXNlIGNvbnN0ZXhwciBpbnN0ZWFkIG9mCisgICAg
ICAgIG1hY3JvcyBmb3IgY29uc3RhbnRzLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
bW06CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlRm9yRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24pOiBVcGRhdGVkCisgICAgICAgIHNpbmNlIERpY3Rpb25hcnlMb29rdXA6OnJh
bmdlQXRIaXRUZXN0UmVzdWx0IHJldHVybnMgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmVuY29kZWRQcmVmZXJlbmNlVmFsdWUpOiBSZW1vdmVkIHVubmVlZGVkIGVy
cm9yIGxvY2FsLCBhbmQKKyAgICAgICAgZml4ZWQgZm9ybWF0dGluZy4KKwogMjAyMC0wNy0wOCAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUGFydCAzIG9mIFNpbXBs
ZUNvbG9yIGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQn
cyBjb252ZXJnZSB0aGVtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDIxNDczMjBhZDI1MTcyMzgxNWI2MGZjZTAwMjMz
NTcwYWViZTIwYzUuLmE0NzQ3YjI3MDllODY0MzdkYTdlZjY1ODAwMGVhNDk5Y2UyOWFjMGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMjAtMDctMDggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBsaXZlIHJhbmdlcyBmcm9tIERvY3VtZW50Lmgs
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCwgRGljdGlvbmFyeUxvb2t1cC5oLCBhbmQgV2Vi
UGFnZS5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTQxMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93
c2VyQ29udGV4dENvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dLV2ViUHJvY2Vzc1BsdWdJbkJy
b3dzZXJDb250ZXh0Q29udHJvbGxlciBzZWxlY3RlZFJhbmdlXSk6IFVwZGF0ZWQgc2luY2UKKyAg
ICAgICAgV2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UgcmV0dXJucyBTaW1wbGVSYW5n
ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbik6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQgcmV0dXJucyBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24pOiBVcGRhdGVkIHNpbmNlCisg
ICAgICAgIERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uIHJldHVybnMgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpk
aWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3VycmVu
dFNlbGVjdGlvbkFzUmFuZ2UpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOiBVc2UgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBsaXZl
IHJhbmdlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUpOiBVcGRhdGVk
IHNpbmNlIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UKKyAgICAgICAgaXMgU2ltcGxlUmFuZ2UuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsZWFyU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KTogUmV0dXJuIFNp
bXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51
bGFyaXR5QXRQb2ludCk6IFVwZGF0ZSBzaW5jZQorICAgICAgICByYW5nZUZvckdyYW51bGFyaXR5
QXRQb2ludCByZXR1cm5zIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1
cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeSk6IFVzZQorICAgICAgICBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0
aEV4dGVudFBvaW50KTogVXNlIGF1dG8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1JbW1l
ZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbik6IFVwZGF0ZQorICAgICAgICBzaW5jZSBsb29r
dXBUZXh0QXRMb2NhdGlvbiByZXR1cm5zIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpsb29rdXBUZXh0QXRMb2NhdGlvbik6IFJldHVybiBTaW1wbGVSYW5nZS4KKwogMjAy
MC0wNy0wOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNjQxMzIgYW5kIHIyNjQxMzkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKaW5kZXggZmU1ZjBhMWFkNWFlYWRmNDAzZWE5Y2I0MmNiNzcyMzVmZGNi
MTkwOS4uOGU1ZjE2NTA0YmFiMzIxYzcwMGU0YTc2NmJjN2RjZTVmMTEzMTA1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA3LTA4ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMgZnJv
bSBEb2N1bWVudC5oLCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgsIERpY3Rpb25hcnlMb29r
dXAuaCwgYW5kIFdlYlBhZ2UuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE0MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW06Cisg
ICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2FuaW1hdGlvbkNvbnRyb2xs
ZXJGb3JUZXh0XSk6IFVwZGF0ZSBzaW5jZQorICAgICAgICBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdCByZXR1cm5zIFNpbXBsZVJhbmdlLgorCiAyMDIwLTA3LTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUy9FTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TIHNob3VsZCBub3QgaGF2
ZSB0cmFpbGluZyBzZW1pY29sb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAppbmRleCA1Nzc4ZTllZjhiOWNmMjY4ZGM2ZjUyNGQzZWJlMzU3Yzdm
NDdjOWY2Li4wNTUwYWE3MTNjNTIyODU4ZjI1NmYxN2VmOWJmODRjNTkzNWU1NjFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTI4NjIs
MjEgKzI4NjIsMjIgQEAgSW50UmVjdCBBWE9iamVjdENhY2hlOjphYnNvbHV0ZUNhcmV0Qm91bmRz
Rm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnMKICAgICByZXR1cm4gYWJzb2x1
dGVCb3VuZHNGb3JMb2NhbENhcmV0UmVjdChjYXJldFBhaW50ZXIsIGxvY2FsUmVjdCk7CiB9CiAK
LUNoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChj
b25zdCBJbnRQb2ludCAmcG9pbnQsIEFYQ29yZU9iamVjdCogb2JqKQorQ2hhcmFjdGVyT2Zmc2V0
IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCwgQVhDb3JlT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJl
dHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKLSAgICAKLSAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJv
dW5kYXJ5UG9pbnQob2JqLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCkpOworICAgIGlm
ICghb2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gYm91bmRhcnkgPSBtYWtl
Qm91bmRhcnlQb2ludChvYmplY3QtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50KSk7CiAg
ICAgaWYgKCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuIHsgfTsKLQogICAgIHJldHVybiBzdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRhcnksICpib3VuZGFyeSB9LCB0
cnVlKTsKIH0KIAotQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNl
dEZvclBvaW50KGNvbnN0IEludFBvaW50ICZwb2ludCkKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVj
dENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7
Ci0gICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSgqbV9kb2N1bWVu
dC5jYXJldFJhbmdlRnJvbVBvaW50KExheW91dFBvaW50KHBvaW50KSksIHRydWUpOworICAgIGF1
dG8gYm91bmRhcnkgPSBtX2RvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQocG9pbnQpOwor
ICAgIGlmICghYm91bmRhcnkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHN0YXJ0
T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSh7ICpib3VuZGFyeSwgKmJvdW5kYXJ5IH0sIHRy
dWUpOwogfQogCiBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0
Rm9yQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgZmlyc3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAppbmRleCA1YjYyZTJkOTYwMjcxNWE2MTcxNjc2ZDcyOGU4NThjNjU0MDQ0MjRlLi43
MTA1ZGI1ZTk3YzNmNTIxZDdlNDhjNGUyMjU2N2ZkZWZkYmFjNzhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKQEAgLTUzNiw3ICs1MzYsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjdXJyZW50T3Jp
ZW50YXRpb24oRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiAwOwogfQogCi1Eb2N1bWVudDo6RG9j
dW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFz
c2VzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncykKK0RvY3VtZW50OjpEb2N1bWVudChGcmFt
ZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBEb2N1bWVudENsYXNzRmxhZ3MgZG9jdW1lbnRDbGFz
c2VzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncykKICAgICA6IENvbnRhaW5lck5vZGUoKnRo
aXMsIENyZWF0ZURvY3VtZW50KQogICAgICwgVHJlZVNjb3BlKCp0aGlzKQogICAgICwgRnJhbWVE
ZXN0cnVjdGlvbk9ic2VydmVyKGZyYW1lKQpAQCAtMTUwOCwzMiArMTUwOCwzNSBAQCBTdHJpbmcg
RG9jdW1lbnQ6OmNvbnRlbnRUeXBlKCkgY29uc3QKIAogUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6
Y2FyZXRSYW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAgcmV0dXJuIGNhcmV0UmFu
Z2VGcm9tUG9pbnQoTGF5b3V0UG9pbnQoeCwgeSkpOworICAgIGF1dG8gYm91bmRhcnkgPSBjYXJl
dFBvc2l0aW9uRnJvbVBvaW50KExheW91dFBvaW50KHgsIHkpKTsKKyAgICBpZiAoIWJvdW5kYXJ5
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHsg
KmJvdW5kYXJ5LCAqYm91bmRhcnkgfSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRG9jdW1lbnQ6OmNh
cmV0UmFuZ2VGcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIGNsaWVudFBvaW50KQorT3B0aW9u
YWw8Qm91bmRhcnlQb2ludD4gRG9jdW1lbnQ6OmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmIGNsaWVudFBvaW50KQogewogICAgIGlmICghaGFzTGl2aW5nUmVuZGVyVHJl
ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQ7CiAgICAgYXV0byBub2RlID0gbm9kZUZy
b21Qb2ludChjbGllbnRQb2ludCwgJmxvY2FsUG9pbnQpOwogICAgIGlmICghbm9kZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBh
dXRvKiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
YXV0byByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQo
bG9jYWxQb2ludCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaWYgKHJhbmdlQ29t
cGxpYW50UG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBvZmZzZXQgPSByYW5nZUNvbXBsaWFu
dFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgIHVuc2lnbmVkIG9mZnNldCA9
IHJhbmdlQ29tcGxpYW50UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgbm9k
ZSA9IHJldGFyZ2V0VG9TY29wZSgqcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5jb250YWluZXJOb2Rl
KCkpOwogICAgIGlmIChub2RlICE9IHJhbmdlQ29tcGxpYW50UG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKQogICAgICAgICBvZmZzZXQgPSAwOwogCi0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoKnRo
aXMsIG5vZGUuZ2V0KCksIG9mZnNldCwgbm9kZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICByZXR1cm4g
eyB7ICpub2RlLCBvZmZzZXQgfSB9OwogfQogCiBib29sIERvY3VtZW50Ojppc0JvZHlQb3RlbnRp
YWxseVNjcm9sbGFibGUoSFRNTEJvZHlFbGVtZW50JiBib2R5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApp
bmRleCBiYjU0OTcwMGVlNmZkZDZlYjk4MjUzYWYzNzI2NDUzNGQ4ZDkwYTVhLi40YmM3OTYzOWE0
MTE3NmZmYTA4ZDg2N2Y0NzcxMDFiMWE2OTMzMTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAt
MTE1LDYgKzExNSwxMSBAQCBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBET01XcmFwcGVyV29ybGQ7
CiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlVGhyZWFkOworY2xhc3MgRGV2aWNlTW90
aW9uQ2xpZW50OworY2xhc3MgRGV2aWNlTW90aW9uQ29udHJvbGxlcjsKK2NsYXNzIERldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsKK2NsYXNzIERldmljZU9yaWVudGF0
aW9uQ2xpZW50OworY2xhc3MgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOwogY2xhc3MgRG9j
dW1lbnRGcmFnbWVudDsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOwpAQCAtMTM3LDYgKzE0Miw3IEBAIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNz
IEZ1bGxzY3JlZW5NYW5hZ2VyOwogY2xhc3MgR1BVQ2FudmFzQ29udGV4dDsKIGNsYXNzIEhUTUxB
bGxDb2xsZWN0aW9uOworY2xhc3MgSFRNTEF0dGFjaG1lbnRFbGVtZW50OwogY2xhc3MgSFRNTEJv
ZHlFbGVtZW50OwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiBjbGFzcyBIVE1MQ29sbGVjdGlv
bjsKQEAgLTE1Nyw2ICsxNjMsNyBAQCBjbGFzcyBJZGxlQ2FsbGJhY2tDb250cm9sbGVyOwogY2xh
c3MgSWRsZVJlcXVlc3RDYWxsYmFjazsKIGNsYXNzIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDsKIGNsYXNzIEludFBvaW50OworY2xhc3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7CiBjbGFzcyBK
U05vZGU7CiBjbGFzcyBMYXlvdXRQb2ludDsKIGNsYXNzIExheW91dFJlY3Q7CkBAIC0xNjksNiAr
MTc2LDcgQEAgY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKIGNsYXNzIE1lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnQ7CiBjbGFzcyBNZWRpYVF1ZXJ5TGlzdDsKIGNsYXNzIE1lZGlhUXVlcnlNYXRj
aGVyOworY2xhc3MgTWVkaWFTZXNzaW9uOwogY2xhc3MgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlk
ZXI7CiBjbGFzcyBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOwogY2xhc3MgTm9kZUZpbHRl
cjsKQEAgLTE4Myw2ICsxOTEsNyBAQCBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlclRyZWVCdWls
ZGVyOwogY2xhc3MgUmVuZGVyVmlldzsKIGNsYXNzIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrOworY2xhc3MgUmVzaXplT2JzZXJ2ZXI7CiBjbGFzcyBTVkdEb2N1bWVudEV4dGVuc2lvbnM7
CiBjbGFzcyBTVkdTVkdFbGVtZW50OwogY2xhc3MgU1ZHVXNlRWxlbWVudDsKQEAgLTIwMiw4ICsy
MTEsMTAgQEAgY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNs
YXNzIFN0eWxlU2hlZXRMaXN0OwogY2xhc3MgVGV4dDsKK2NsYXNzIFRleHRBdXRvU2l6aW5nOwog
Y2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNv
ZGVyOworY2xhc3MgVHJhbnNmb3JtU291cmNlOwogY2xhc3MgVHJlZVdhbGtlcjsKIGNsYXNzIFVu
ZG9NYW5hZ2VyOwogY2xhc3MgVmlzaWJpbGl0eUNoYW5nZUNsaWVudDsKQEAgLTIxOSw2ICsyMzAs
OSBAQCBjbGFzcyBYUGF0aEV4cHJlc3Npb247CiBjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7CiBjbGFz
cyBYUGF0aFJlc3VsdDsKIAorc3RydWN0IEJvdW5kYXJ5UG9pbnQ7CitzdHJ1Y3QgSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJEYXRhOworCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRXhjZXB0aW9uT3I7
CiAKIGVudW0gQ29sbGVjdGlvblR5cGU7CkBAIC0yMjgsNDggKzI0MiwxMiBAQCBlbnVtIGNsYXNz
IFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgOiB1aW50OF90OwogCiB1c2luZyBQbGF0Zm9y
bURpc3BsYXlJRCA9IHVpbnQzMl90OwogCi0jaWYgRU5BQkxFKFhTTFQpCi1jbGFzcyBUcmFuc2Zv
cm1Tb3VyY2U7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pICYmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi1jbGFzcyBEZXZpY2VNb3Rpb25DbGllbnQ7Ci1jbGFzcyBEZXZp
Y2VNb3Rpb25Db250cm9sbGVyOwotY2xhc3MgRGV2aWNlT3JpZW50YXRpb25DbGllbnQ7Ci1jbGFz
cyBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShERVZJ
Q0VfT1JJRU5UQVRJT04pCi1jbGFzcyBEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0Nv
bnRyb2xsZXI7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi1jbGFzcyBU
ZXh0QXV0b1NpemluZzsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCi1jbGFz
cyBNZWRpYVNlc3Npb247Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQp
Ci1jbGFzcyBIVE1MQXR0YWNobWVudEVsZW1lbnQ7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlRF
UlNFQ1RJT05fT0JTRVJWRVIpCi1jbGFzcyBJbnRlcnNlY3Rpb25PYnNlcnZlcjsKLXN0cnVjdCBJ
bnRlcnNlY3Rpb25PYnNlcnZlckRhdGE7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRVNJWkVfT0JT
RVJWRVIpCi1jbGFzcyBSZXNpemVPYnNlcnZlcjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgU3R5bGUg
ewogY2xhc3MgUmVzb2x2ZXI7CiBjbGFzcyBTY29wZTsKLX07Cit9CiAKLWNvbnN0IHVpbnQ2NF90
IEhUTUxNZWRpYUVsZW1lbnRJbnZhbGlkSUQgPSAwOworY29uc3RleHByIHVpbnQ2NF90IEhUTUxN
ZWRpYUVsZW1lbnRJbnZhbGlkSUQgPSAwOwogCiBlbnVtIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5j
ZSB7IFBhZ2VzaG93RXZlbnROb3RQZXJzaXN0ZWQsIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZWQgfTsK
IApAQCAtMjg2LDcgKzI2NCw3IEBAIGVudW0gTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHsKIGNv
bnN0IGludCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9uQW55QXR0
ckNoYW5nZSArIDE7CiAKIGVudW0gY2xhc3MgRXZlbnRIYW5kbGVyUmVtb3ZhbCB7IE9uZSwgQWxs
IH07Ci10eXBlZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUqPiBFdmVudFRhcmdldFNldDsKK3VzaW5n
IEV2ZW50VGFyZ2V0U2V0ID0gSGFzaENvdW50ZWRTZXQ8Tm9kZSo+OwogCiBlbnVtIERvY3VtZW50
Q2xhc3MgewogICAgIERlZmF1bHREb2N1bWVudENsYXNzID0gMCwKQEAgLTI5OSw3ICsyNzcsNyBA
QCBlbnVtIERvY3VtZW50Q2xhc3MgewogICAgIFRleHREb2N1bWVudENsYXNzID0gMSA8PCA2LAog
ICAgIFhNTERvY3VtZW50Q2xhc3MgPSAxIDw8IDcsCiB9OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IERvY3VtZW50Q2xhc3NGbGFnczsKK3VzaW5nIERvY3VtZW50Q2xhc3NGbGFncyA9IHVuc2lnbmVk
IGNoYXI7CiAKIGVudW0gY2xhc3MgRG9jdW1lbnRDb21wYXRpYmlsaXR5TW9kZSA6IHVuc2lnbmVk
IGNoYXIgewogICAgIE5vUXVpcmtzTW9kZSA9IDEsCkBAIC00NTksNyArNDM3LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBDdXN0b21FbGVtZW50TmFtZVZhbGlkYXRpb25TdGF0dXMgdmFsaWRhdGVD
dXN0b21FbGVtZW50TmFtZShjb25zdCBBdG9tU3RyaW5nJik7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8UmFuZ2U+IGNhcmV0UmFuZ2VGcm9tUG9pbnQoaW50IHgsIGludCB5KTsKLSAgICBS
ZWZQdHI8UmFuZ2U+IGNhcmV0UmFuZ2VGcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIGNsaWVu
dFBvaW50KTsKKyAgICBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBjYXJldFBvc2l0aW9uRnJvbVBv
aW50KGNvbnN0IExheW91dFBvaW50JiBjbGllbnRQb2ludCk7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBFbGVtZW50KiBzY3JvbGxpbmdFbGVtZW50Rm9yQVBJKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
RWxlbWVudCogc2Nyb2xsaW5nRWxlbWVudCgpOwpAQCAtMTI4OCw3ICsxMjY2LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzV2hlZWxFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV93aGVl
bEV2ZW50VGFyZ2V0cy5nZXQoKSA/IG1fd2hlZWxFdmVudFRhcmdldHMtPnNpemUoKSA6IGZhbHNl
OyB9CiAgICAgY29uc3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJnZXRzKCkgY29uc3Qg
eyByZXR1cm4gbV93aGVlbEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQogCi0gICAgdHlwZWRlZiBzdGQ6
OnBhaXI8UmVnaW9uLCBib29sPiBSZWdpb25GaXhlZFBhaXI7CisgICAgdXNpbmcgUmVnaW9uRml4
ZWRQYWlyID0gc3RkOjpwYWlyPFJlZ2lvbiwgYm9vbD47CiAgICAgUmVnaW9uRml4ZWRQYWlyIGFi
c29sdXRlRXZlbnRSZWdpb25Gb3JOb2RlKE5vZGUmKTsKICAgICBSZWdpb25GaXhlZFBhaXIgYWJz
b2x1dGVSZWdpb25Gb3JFdmVudFRhcmdldHMoY29uc3QgRXZlbnRUYXJnZXRTZXQqKTsKIApAQCAt
MTYwNiw3ICsxNTg0LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1
Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEg
PDwgMSB9OwotICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5zaWduZWQgPSBEZWZh
dWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKKyAgICBE
b2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIERvY3VtZW50Q2xhc3NGbGFncyA9IERlZmF1bHRE
b2N1bWVudENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwogCiAgICAgdm9p
ZCBjbGVhclhNTFZlcnNpb24oKSB7IG1feG1sVmVyc2lvbiA9IFN0cmluZygpOyB9CiAKQEAgLTE5
MzcsNyArMTkxNSw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRT
aGFyZWRPYmplY3RQb29sPiBtX3NoYXJlZE9iamVjdFBvb2w7CiAKLSAgICB0eXBlZGVmIEhhc2hN
YXA8QXRvbVN0cmluZywgc3RkOjp1bmlxdWVfcHRyPExvY2FsZT4+IExvY2FsZUlkZW50aWZpZXJU
b0xvY2FsZU1hcDsKKyAgICB1c2luZyBMb2NhbGVJZGVudGlmaWVyVG9Mb2NhbGVNYXAgPSBIYXNo
TWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxMb2NhbGU+PjsKICAgICBMb2NhbGVJZGVu
dGlmaWVyVG9Mb2NhbGVNYXAgbV9sb2NhbGVDYWNoZTsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4g
bV90ZW1wbGF0ZURvY3VtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggYmFlM2I1YjNjOWYwNzJlMDA3MmI3MmI4
ZTk1ZTRhMzI2OTdmZmUwYS4uODc4ZDdkMWE4YjU0MzdhMTljMDU0ZGUxNDdiZmY1MWZjOGZhMmY0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZQog
CiAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyByYW5n
ZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KICAgICBpZiAodHlwZSA9
PSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZSA9IG51bGxwdHI7CisgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBXVEY6
Om51bGxvcHQ7CiAgICAgbV90eXBlID0gdHlwZTsKICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChj
b3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsKTsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihB
bHRlcm5hdGl2ZVRleHRUeXBlCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHsKICAgICBtX3RpbWVyLnN0b3AoKTsKLSAgICBtX3Jh
bmdlV2l0aEFsdGVybmF0aXZlID0gbnVsbHB0cjsKKyAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZl
ID0gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0
b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CkBAIC0xMzksMjYgKzEzOSwyNiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFw
cGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcwogICAgIGlmIChk
b0FwcGx5Q29ycmVjdGlvbikKICAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQo
ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7
IAogICAgIGVsc2UKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7Cisg
ICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBXVEY6Om51bGxvcHQ7CiB9CiAKIGJvb2wg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdAog
ewotICAgIHJldHVybiBtX3JhbmdlV2l0aEFsdGVybmF0aXZlOworICAgIHJldHVybiBtX3Jhbmdl
V2l0aEFsdGVybmF0aXZlLmhhc1ZhbHVlKCk7CiB9CiAKLWJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUmFuZ2UmIG1pc3NwZWxsaW5nUmFuZ2Up
IGNvbnN0Citib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJB
bGxvd2VkKGNvbnN0IFNpbXBsZVJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewogICAg
IHJldHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVsbGluZ1Jhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKLXZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNo
b3coY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50KQogewogICAgIGF1dG8gYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShy
YW5nZVRvUmVwbGFjZSk7CiAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlKTsK
LSAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gJnJhbmdlVG9SZXBsYWNlOworICAgIG1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZVRvUmVwbGFjZTsKICAgICBtX2RldGFpbHMgPSByZXBs
YWNlbWVudDsKICAgICBtX2lzQWN0aXZlID0gdHJ1ZTsKICAgICBpZiAoQWx0ZXJuYXRpdmVUZXh0
Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAgLTIwNCwxMyArMjA0
LDEzIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQogCiAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKIAotICAgIGlm
IChtX3JhbmdlV2l0aEFsdGVybmF0aXZlLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24p
IHsKKyAgICBpZiAoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUtPmVuZCkgPT0gY2FyZXRQb3NpdGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2
ZVRleHRVSVJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVU
ZXh0QWNjZXB0ZWQpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKICAgICAKICAgICAv
LyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0
IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlz
cyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCi0gICAgQVNTRVJU
KG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7
CisgICAgQVNTRVJUKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlV2l0aEFsdGVy
bmF0aXZlLT5lbmQpID09IGNhcmV0UG9zaXRpb24pOwogICAgIGRpc21pc3MoUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAg
LTI2NCwxMSArMjY0LDExIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJG
aXJlZCgpCiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczog
ewogICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxhaW5UZXh0KCptX3Jh
bmdlV2l0aEFsdGVybmF0aXZlKSAhPSBtX29yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGgoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOworICAg
ICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGgoY3JlYXRlTGl2ZVJhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKSkucGFyYWdyYXBoUmFu
Z2UoKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwogICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4
dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAg
ICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX3JhbmdlV2l0
aEFsdGVybmF0aXZlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRp
dmUgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CkBAIC0zMDMsMTEg
KzMwMywxMCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQog
CiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJ
UmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewotICAgIFJhbmdlKiByYW5nZVdpdGhBbHRl
cm5hdGl2ZSA9IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFyYW5nZVdp
dGhBbHRlcm5hdGl2ZSB8fCBtX2RvY3VtZW50ICE9IHJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25l
ckRvY3VtZW50KCkpCisgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlIHx8ICZtX2RvY3Vt
ZW50ICE9ICZtX3JhbmdlV2l0aEFsdGVybmF0aXZlLT5zdGFydC5kb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQoKnJhbmdlV2l0
aEFsdGVybmF0aXZlKTsKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQoKm1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUpOwogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBh
cmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5n
IGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCiAgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1f
b3JpZ2luYWxUZXh0KQogICAgICAgICByZXR1cm47CkBAIC0zMTcsMjIgKzMxNiwyMiBAQCB2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0
KGNvbnN0IFN0cmluZyYgcmVzdQogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBBbHRl
cm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbjoKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkK
LSAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUsIHJlc3VsdCwgbV90eXBlLCBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwor
ICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCptX3JhbmdlV2l0aEFsdGVy
bmF0aXZlLCByZXN1bHQsIG1fdHlwZSwgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsK
ICAgICAgICAgZWxzZSBpZiAoIW1faXNEaXNtaXNzZWRCeUVkaXRpbmcpCi0gICAgICAgICAgICBy
YW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5hZGRNYXJrZXIoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0
ZWRDb3JyZWN0aW9uLCBtX29yaWdpbmFsVGV4dCk7CisgICAgICAgICAgICBtX3JhbmdlV2l0aEFs
dGVybmF0aXZlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cigqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVj
dGlvbiwgbV9vcmlnaW5hbFRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0
aXZlVGV4dFR5cGVSZXZlcnNpb246CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxp
bmdTdWdnZXN0aW9uczoKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKLSAgICAgICAgICAg
IGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3Vs
dCwgbV90eXBlLCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkpOworICAgICAgICAgICAgYXBw
bHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlLCByZXN1bHQs
IG1fdHlwZSwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlRGljdGF0aW9uQWx0ZXJuYXRpdmVzOgogICAgICAg
ICBpZiAocmVzdWx0Lmxlbmd0aCgpKQotICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRU
b1JhbmdlKCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVz
Rm9yQXBwbGllZERpY3RhdGlvbkFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgYXBwbHlBbHRl
cm5hdGl2ZVRleHRUb1JhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fdHlw
ZSwgbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwor
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBXVEY6Om51bGxvcHQ7CiB9CiAKIGJvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkKCkKQEAgLTQyMywxMyArNDIyLDEzIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvCiAgICAg
ICAgIGNsaWVudC0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShyZXNwb25zZSwgcmVwbGFj
ZWRTdHJpbmcsIHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlKSk7CiB9CiAKLXZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2UpCit2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChjb25zdCBTaW1wbGVS
YW5nZSYgY2hhbmdlZFJhbmdlKQogewogICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi12b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9uKFJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjptYXJrQ29ycmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIm
IG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJr
ZXJzKCk7CiAgICAgZm9yIChhdXRvIG1hcmtlclR5cGUgOiBtYXJrZXJUeXBlc0ZvckF1dG9jb3Jy
ZWN0aW9uKCkpIHsKQEAgLTQ0MCw3ICs0MzksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtDb3JyZWN0aW9uKFJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbgog
ICAgIH0KIH0KIAotdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNo
ZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSYgcmFuZ2VPZkNvcnJlY3Rp
b24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNl
Rm9yTW9kaWZpZWRDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZU9mQ29ycmVjdGlv
biwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsK
ICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlv
bi5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogICAgIFZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyKj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtl
cnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCk7CkBAIC00ODYsNyArNDg1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpt
YXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBtX2Rv
Y3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0
RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAotYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRD
aGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0
IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQorYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRD
aGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewogICAgIGF1dG8mIG1h
cmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBpZiAobWFya2Vycy5oYXNNYXJrZXJz
KHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7CkBA
IC01MDEsMTAgKzUwMCw4IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vz
c01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUCiAgICAgaWYgKG1hcmtl
cnMuaGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2Vw
dGVkQ2FuZGlkYXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gYmVn
aW5uaW5nT2ZSYW5nZSA9IHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0UG9zaXRpb24oKTsKLSAg
ICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2Uu
cHJldmlvdXMoKTsKLQotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVS
YW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiksICpt
YWtlQm91bmRhcnlQb2ludChiZWdpbm5pbmdPZlJhbmdlKSB9OworICAgIGF1dG8gYmVmb3JlUHJl
Y2VkaW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFs
dGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChiZWZvcmVQcmVjZWRpbmdD
aGFyYWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCB9OwogCiAgICAgZm9yIChhdXRv
JiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKSkgewogICAgICAgICBpZiAo
bWFya2VyLT5kZXNjcmlwdGlvbigpID09IHN0cmluZ1RvQmVSZXBsYWNlZCkKQEAgLTUyNCw3ICs1
MjEsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0
RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICghc2hvdWxkU3RhcnRUaW1l
ckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBlbmRPZldvcmRQb3NpdGlv
bi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZG9jdW1lbnQsIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zm
c2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7ICpub2RlLCBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSB9LCB7ICpub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkgfSB9OwogICAg
IFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UpOwogICAgIGlmICghY3Vy
cmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU3NywyNSArNTc0
LDIzIEBAIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlv
bkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CiB9CiAKLXZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRl
eHRUb1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwg
QWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVR5cGUsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgQWx0ZXJuYXRpdmVUZXh0VHlwZSBh
bHRlcm5hdGl2ZVR5cGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFy
a2VyVHlwZXNUb0FkZCkKIHsKICAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJh
bmdlIHJhbmdlV2l0aEFsdGVybmF0aXZlLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQg
cmFuZ2UuCiAgICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsc3Rv
cmUgdGhlIHN0YXJ0IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbgogICAg
IC8vIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4KIAogICAgIC8vIFRha2Ugbm90ZSBvZiB0
aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBh
ZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBhdXRvIGNvcnJlY3Rpb25TdGFy
dFBvc2l0aW9uID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwotICAgIGF1dG8gY29ycmVjdGlvblN0
YXJ0IHsgbWFrZUJvdW5kYXJ5UG9pbnQoY29ycmVjdGlvblN0YXJ0UG9zaXRpb24pIH07Ci0gICAg
YXV0byBwYXJhZ3JhcGhTdGFydCB7IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgo
Y29ycmVjdGlvblN0YXJ0UG9zaXRpb24pKSB9OwotICAgIGlmICghY29ycmVjdGlvblN0YXJ0IHx8
ICFwYXJhZ3JhcGhTdGFydCkKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5
UG9pbnQoc3RhcnRPZlBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uu
c3RhcnQpKSk7CisgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8gdHJlZVNjb3BlUm9vdCA9IG1ha2VSZWYoY29ycmVjdGlvblN0YXJ0LT5jb250YWluZXIt
PnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpOworICAgIGF1dG8gdHJlZVNjb3BlUm9vdCA9IG1ha2VS
ZWYocmFuZ2Uuc3RhcnQuY29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKTsKICAgICBh
dXRvIHRyZWVTY29wZVN0YXJ0ID0gQm91bmRhcnlQb2ludCB7IHRyZWVTY29wZVJvb3QuZ2V0KCks
IDAgfTsKLSAgICBhdXRvIGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNv
dW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqY29ycmVjdGlvblN0YXJ0IH0pOworICAgIGF1dG8gY29y
cmVjdGlvbk9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3Rh
cnQsIHJhbmdlLnN0YXJ0IH0pOwogICAgIGF1dG8gcGFyYWdyYXBoT2Zmc2V0SW5UcmVlU2NvcGUg
PSBjaGFyYWN0ZXJDb3VudCh7IHRyZWVTY29wZVN0YXJ0LCAqcGFyYWdyYXBoU3RhcnQgfSk7CiAK
ICAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgbWF5IGtlZXAgYSBy
ZWZlcm5lY2UgdG8gdGhlIG9yaWdpbmFsIHJhbmdlIGFuZCBtb2RpZnkgaXQuCi0gICAgU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlLmNsb25lUmFuZ2UoKSwgYWx0ZXJuYXRp
dmUpLT5hcHBseSgpOworICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAKICAgICAvLyBSZWNh
bGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5h
bCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4g
UmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFw
aFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZz
ZXRJblRyZWVTY29wZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5oCmluZGV4IDNkMWZiM2MwYWMxNjg3MWM1MTQ5YzI0MGQ5NmRkM2Q3
OTlmZjhmMDQuLmIxZWFkM2UwNGRkZDY5M2JjNTgyZmYxNjhmODVhMGY5NWQ2NjM3NWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
CkBAIC00MCw3ICs0MCw2IEBAIGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRD
b21wb3NpdGlvbjsKIGNsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgUmFu
Z2U7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAK
QEAgLTY4LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcEFsdGVybmF0aXZlVGV4dFVJ
VGltZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgVU5MRVNTX0VOQUJMRUQoeyB9KQotICAgIHZvaWQg
c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBsYWNlKTsgVU5VU0VEX1BBUkFN
KHJlcGxhY2VtZW50KTsgfSkKKyAgICB2b2lkIHNob3coY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
VG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudCk7IH0p
CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxzZSBv
dGhlcndpc2UuCiAgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQpAQCAtODUsMTYgKzg0
LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpIFVOTEVTU19F
TkFCTEVEKHsgfSkKIAogICAgIGJvb2wgaGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCBVTkxF
U1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKLSAgICBib29sIGlzU3BlbGxpbmdNYXJrZXJB
bGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBp
c1NwZWxsaW5nTWFya2VyQWxsb3dlZChjb25zdCBTaW1wbGVSYW5nZSYgbWlzc3BlbGxpbmdSYW5n
ZSkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7
IHJldHVybiB0cnVlOyB9KQogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9vbCBzaG91
bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKIAogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTaW1wbGVSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFj
ZW1lbnRSYW5nZSk7IH0pCi0gICAgdm9pZCBtYXJrUmV2ZXJzZWQoUmFuZ2UmIGNoYW5nZWRSYW5n
ZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKLSAgICB2
b2lkIG1hcmtDb3JyZWN0aW9uKFJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJhbmdl
KTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKKyAgICB2b2lkIG1hcmtSZXZlcnNl
ZChjb25zdCBTaW1wbGVSYW5nZSYgY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNF
RF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oY29uc3Qg
U2ltcGxlUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcp
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFS
QU0ocmVwbGFjZWRTdHJpbmcpOyB9KQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZh
bHNlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgbm90IGJlIGNhcnJpZWQgb3V0LgotICAgIGJv
b2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQmLCBSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvQmVS
ZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyByZXR1cm4gdHJ1ZTsg
fSk7CisgICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNv
bnN0IFRleHRDaGVja2luZ1Jlc3VsdCYsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBs
YWNlZCwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKHJhbmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVS
ZXBsYWNlZCk7IHJldHVybiB0cnVlOyB9KTsKICAgICB2b2lkIGRlbGV0ZWRBdXRvY29ycmVjdGlv
bkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5n
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvcmlnaW5hbFN0cmluZyk7IH0pCiAKICAg
ICBib29sIGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8RGlj
dGF0aW9uQWx0ZXJuYXRpdmU+JiwgRXZlbnQqKTsKQEAgLTEwNyw3ICsxMDYsNyBAQCBwcml2YXRl
OgogICAgIHVzaW5nIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQgPSBTdHJpbmc7CiAKICAgICBz
dHJ1Y3QgQWx0ZXJuYXRpdmVUZXh0SW5mbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VX
aXRoQWx0ZXJuYXRpdmU7CisgICAgICAgIFNpbXBsZVJhbmdlIHJhbmdlV2l0aEFsdGVybmF0aXZl
OwogICAgICAgICBib29sIGlzQWN0aXZlOwogICAgICAgICBBbHRlcm5hdGl2ZVRleHRUeXBlIHR5
cGU7CiAgICAgICAgIFN0cmluZyBvcmlnaW5hbFRleHQ7CkBAIC0xMTYsNyArMTE1LDcgQEAgcHJp
dmF0ZToKIAogICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJu
YXRpdmVUZXh0KTsKICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHJlY29yZFNwZWxs
Y2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlJiByYW5nZU9mQ29ycmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7
CisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlv
bihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogCiAgICAgYm9vbCBzaG91bGRTdGFy
dFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiwgaW50IGVuZE9mZnNldCkgY29uc3Q7CiAg
ICAgYm9vbCByZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYs
IGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmRQb3NpdGlvbik7CkBAIC0xMjgsNyArMTI3LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9j
b3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKik7CiAKICAgICBUaW1lciBtX3RpbWVy
OwotICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZTsKKyAgICBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZTsKICAgICBib29sIG1faXNBY3Rp
dmU7CiAgICAgYm9vbCBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nOwogICAgIEFsdGVybmF0aXZlVGV4
dFR5cGUgbV90eXBlOwpAQCAtMTQwLDcgKzEzOSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICNpZiBV
U0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykgfHwgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQog
ICAgIFN0cmluZyBtYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0
ZXJuYXRpdmVUZXh0VHlwZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAgIHZvaWQg
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiwgY29uc3QgU3RyaW5nJiwg
QWx0ZXJuYXRpdmVUZXh0VHlwZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
Pik7CisgICAgdm9pZCBhcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmLCBjb25zdCBTdHJpbmcmLCBBbHRlcm5hdGl2ZVRleHRUeXBlLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKICAgICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVy
bmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCAzMjc2OTQ1ZjJjNzg4NzAwYmU3MjY4
NWJiZDg3MjVhOGZkZDc5ZGIzLi5mYzkwYzEzYjFiOWIwY2I3MzY1ZjM4MzYzMGJiYmYxOWY4Njdj
MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9v
a3VwLm1tCkBAIC0yNjAsMTIgKzI2MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBF
TkFCTEUoUkVWRUFMKQogCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAq
PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24pCitPcHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rp
b25hcnkgKj4+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIAogICAgIGlmICghUmV2ZWFsTGlicmFyeSgpIHx8ICFSZXZlYWxDb3JlTGlicmFyeSgpIHx8
ICFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2
ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9w
dGlvbnMuCiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKQEAgLTI3NSw3ICsyNzUsNyBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlv
bmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIGF1dG8g
cGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKICAgICBh
dXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CiAgICAgaWYg
KHBhcmFncmFwaFN0YXJ0LmlzTnVsbCgpIHx8IHBhcmFncmFwaEVuZC5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBhdXRvIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpt
YWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxl
Y3Rpb25TdGFydCkgfSk7CiAgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfSk7CkBAIC0yODUsMzIgKzI4NSwzMiBAQCBzdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGVjdGlvbihjbwogICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KCpmdWxs
Q2hhcmFjdGVyUmFuZ2UpOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBhZG9wdE5TKFth
bGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5n
ZTpyYW5nZVRvUGFzc10pLmdldCgpLmhpZ2hsaWdodFJhbmdlOwogCi0gICAgcmV0dXJuIHsgY3Jl
YXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBo
aWdobGlnaHRSYW5nZSkpLCBuaWwgfTsKKyAgICByZXR1cm4geyB7IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZSksIG5pbCB9IH07CiAKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAKLSAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5n
ZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3Vs
dChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQorT3B0aW9uYWw8c3RkOjp0dXBs
ZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIAogICAgIGlmICghUmV2ZWFsTGlicmFy
eSgpIHx8ICFSZXZlYWxDb3JlTGlicmFyeSgpIHx8ICFnZXRSVkl0ZW1DbGFzcygpKQotICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAKICAgICBhdXRvKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUo
KTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0
byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIg
YXQgdGhlIHBvaW50LgogICAgIGF1dG8gZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRl
ZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwogICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQo
ZnJhbWVQb2ludCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkp
CkBAIC0zMTksMzUgKzMxOSwzNiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlv
bmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdAogICAgIGF1dG8g
c2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgTlNSYW5nZSBzZWxlY3Rpb25S
YW5nZTsKICAgICBOU1VJbnRlZ2VyIGhpdEluZGV4OwotICAgIFJlZlB0cjxSYW5nZT4gZnVsbENo
YXJhY3RlclJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFu
Z2U7CiAgICAgCiAgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNl
bGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9
IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBz
ZWxlY3Rpb24udmlzaWJsZUVuZCgpOwogCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBn
b2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICAgICAg
YXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwot
ICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7
Ci0gICAgICAgIAotICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Ci0gICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdl
KQotICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIGF1dG8gcGFy
YWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
blN0YXJ0KSk7CisgICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQo
ZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKSk7CisgICAgICAgIGlmICghcGFyYWdyYXBoU3Rh
cnQgfHwgIXBhcmFncmFwaEVuZCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7ICpt
YWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxl
Y3Rpb25TdGFydCkgfSksCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHsgeyAqcGFyYWdy
YXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQgfSB9OworICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5T
TWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqbWFrZUJvdW5kYXJ5
UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pLAogICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQoeyAq
bWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2Vs
ZWN0aW9uRW5kKSB9KSk7Ci0gICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRp
b24pIH0pOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0
YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBv
c2l0aW9uIH07CiAgICAgICAgIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5k
VXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSk7CiAgICAg
ICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOwog
CiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3Rl
cnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KLSAgICAgICAgZnVsbENoYXJh
Y3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0
aW9uLCAyNTApOwotICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKLSAgICAgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICBhdXRvIGV4cGFuZGVkUmFuZ2UgPSBy
YW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Cisg
ICAgICAgIGlmICghZXhwYW5kZWRSYW5nZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0geyAqZXhwYW5kZWRSYW5nZSB9Owog
CiAgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0g
ICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoZnVs
bENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9z
aXRpb24pIH0pOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgZnVsbENoYXJh
Y3RlclJhbmdlLT5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKICAgICB9
CiAKICAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJl
dmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07CkBA
IC0zNTYsMTMgKzM1NywxMyBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFy
eSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdAogICAgIGF1dG8gaGln
aGxpZ2h0UmFuZ2UgPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0
Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSkuZ2V0KCkuaGlnaGxpZ2h0
UmFuZ2U7CiAKICAgICBpZiAoaGlnaGxpZ2h0UmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCB8
fCAhaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICByZXR1cm4geyBjcmVh
dGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhp
Z2hsaWdodFJhbmdlKSksIG5pbCB9OworICAgIHJldHVybiB7IHsgcmVzb2x2ZUNoYXJhY3RlclJh
bmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlKSwgbmlsIH0gfTsKICAgICAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKIH0KIApAQCAtNDIzLDcg
KzQyNCw3IEBAIHN0ZDo6dHVwbGU8TlNTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25h
cnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihQCiAgICAgcmV0dXJuIHsgQCIiLCBuaWwg
fTsKIH0KIAotc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBzaG93UG9wdXBPckNyZWF0ZUFuaW1h
dGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXRpb25Db250cm9sbGVyLCBjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBSZXZlYWxWaWV3ICp2aWV3LCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRvcklu
c3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9hdFJl
Y3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3N0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgc2hv
d1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywg
Q29jb2FWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYp
PiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9u
PEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ss
IFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAKQEAgLTUxMyw3ICs1MTQsNyBAQCBzdGF0aWMg
V0tSZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihi
b29sIGNyZWF0ZUFuaW1hdAogICAgIAogfQogCi12b2lkIERpY3Rpb25hcnlMb29rdXA6OnNob3dQ
b3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBSZXZl
YWxWaWV3ICp2aWV3LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYg
dGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZs
b2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2ssIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNsZWFyVGV4dEluZGljYXRvcikKK3ZvaWQgRGljdGlvbmFy
eUxvb2t1cDo6c2hvd1BvcHVwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQ
b3B1cEluZm8sIENvY29hVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJ
bmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RG
OjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lv
bkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCiB7
CiAgICAgc2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGZhbHNlLCBkaWN0aW9u
YXJ5UG9wdXBJbmZvLCB2aWV3LCB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9uQ2FsbGJhY2ssIHJv
b3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNrLCBXVEZNb3ZlKGNsZWFyVGV4dEluZGljYXRv
cikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5o
CmluZGV4IDE2MzE5NjdmZjkyYWRmOGE4ODk1ZjdmZWM1NzgyZDhjNjEyM2E2MzcuLjc5YWM4NWE3
MWE2MmRkMjZmNmQ1ZjVmYTRkOGQ4YTcxYTMyMzE4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKQEAgLTI4LDM4ICsyOCw0MCBAQAogI2lmIFBM
QVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2ltcG9ydCA8cGFsL3Nw
aS9tYWMvTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplclNQSS5oPgotI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNlbmRpZgogCi1PQkpD
X0NMQVNTIE5TVmlldzsKLU9CSkNfQ0xBU1MgVUlWaWV3OwotT0JKQ19DTEFTUyBQREZTZWxlY3Rp
b247CitAY2xhc3MgTlNWaWV3OworQGNsYXNzIFBERlNlbGVjdGlvbjsKK0BjbGFzcyBVSVZpZXc7
CiAKICNpZiBQTEFURk9STShNQUMpCi10eXBlZGVmIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbkNvbnRyb2xsZXI+IFdLUmV2ZWFsQ29udHJvbGxlcjsKLXVzaW5nIFJldmVhbFZpZXcgPSBO
U1ZpZXc7Cit1c2luZyBXS1JldmVhbENvbnRyb2xsZXIgPSBpZCA8TlNJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyPjsKK3VzaW5nIENvY29hVmlldyA9IE5TVmlldzsKICNlbHNlCi10
eXBlZGVmIGlkIFdLUmV2ZWFsQ29udHJvbGxlcjsKLXVzaW5nIFJldmVhbFZpZXcgPSBVSVZpZXc7
Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQordXNpbmcgV0tSZXZlYWxDb250cm9sbGVyID0gaWQ7
Cit1c2luZyBDb2NvYVZpZXcgPSBVSVZpZXc7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOwogCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CisKIGNsYXNzIERpY3Rpb25hcnlMb29rdXAg
ewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnR1cGxlPFJlZlB0cjxS
YW5nZT4sIE5TRGljdGlvbmFyeSAqPiByYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dHVwbGU8UmVmUHRyPFJh
bmdlPiwgTlNEaWN0aW9uYXJ5ICo+IHJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgT3B0aW9uYWw8c3RkOjp0dXBsZTxT
aW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiByYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPHN0ZDo6
dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gcmFuZ2VBdEhpdFRlc3RSZXN1bHQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnR1
cGxlPE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqPiBzdHJpbmdGb3JQREZTZWxlY3Rpb24oUERG
U2VsZWN0aW9uICopOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBtb3ZlL3VuaWZ5IGRpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZSBoZXJlIHRvby4KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiwgUmV2ZWFsVmlldyAq
LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRvciYpPiYgdGV4dEluZGljYXRv
ckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPEZsb2F0UmVjdChGbG9h
dFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJhY2sgPSBudWxscHRyLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IgPSBudWxscHRyKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYsIENvY29hVmlldyAqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoVGV4dEluZGljYXRv
ciYpPiYgdGV4dEluZGljYXRvckluc3RhbGxhdGlvbkNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0
aW9uPEZsb2F0UmVjdChGbG9hdFJlY3QpPiYgcm9vdFZpZXdUb1ZpZXdDb252ZXJzaW9uQ2FsbGJh
Y2sgPSBudWxscHRyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3Ig
PSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBoaWRlUG9wdXAoKTsK
ICAgICAKICNpZiBQTEFURk9STShNQUMpCkBAIC03MCw0ICs3Miw0IEBAIHB1YmxpYzoKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggNzFmMWY5MTQ2
ZjBjOWEyMjg4ZTEwMDRlYjZlODk5NWNmZDc4NTdhMC4uYzA5MzBiNjM0OTVlNzE4MTU5OTFhNDA2
YTRkNjY1YTI3YmE3NzE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxl
ck1hYy5tbQpAQCAtMTEzNywxNCArMTEzNywxMyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cHJvY2Vz
c1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZQog
VmlzaWJsZVNlbGVjdGlvbiBFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbUhpdFRl
c3RSZXN1bHRCYXNlZE9uTG9va3VwKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAg
ICBpZiAoIW1fZnJhbWUuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTZWxlY3RCYXNlZE9uRGlj
dGlvbmFyeUxvb2t1cCgpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBzdGQ6OnRp
ZShyYW5nZSwgc3RkOjppZ25vcmUpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RS
ZXN1bHQocmVzdWx0KTsKKyAgICBhdXRvIHJhbmdlID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VB
dEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKICAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4g
VmlzaWJsZVNlbGVjdGlvbigpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIFZp
c2libGVTZWxlY3Rpb24oKnJhbmdlKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8U2ltcGxlUmFuZ2U+
KCpyYW5nZSk7CiB9CiAKIHN0YXRpYyBJbnRTaXplIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9y
Rm9yU2NyZWVuQm91bmRhcmllcyhjb25zdCBJbnRQb2ludCYgc2NyZWVuUG9pbnQsIGNvbnN0IEZs
b2F0UmVjdCYgc2NyZWVuUmVjdCkKQEAgLTExNTUsMzggKzExNTQsMzggQEAgc3RhdGljIEludFNp
emUgYXV0b3Njcm9sbEFkanVzdG1lbnRGYWN0b3JGb3JTY3JlZW5Cb3VuZGFyaWVzKGNvbnN0IElu
dFBvaW50JiBzY3IKICAgICAvLyB3aWxsIG9jY3VyIGFzIGV4Y3BlY3RlZC4gVGhpcyBmdW5jdGlv
biBmaWd1cmVzIG91dCBqdXN0IGhvdyBtdWNoIHRvIGFkanVzdCB0aGUgYXV0b3Njcm9sbCBhbW91
bnQgYnkKICAgICAvLyBpbiBvcmRlciB0byBnZXQgYXV0b3Njcm9sbGluZyB0byBmZWVsIG5hdHVy
YWwgaW4gdGhpcyBzaXR1YXRpb24uCiAKKyAgICBjb25zdGV4cHIgZmxvYXQgZWRnZURpc3RhbmNl
VGhyZXNob2xkID0gNTA7CisgICAgY29uc3RleHByIGZsb2F0IHBpeGVsc011bHRpcGxpZXIgPSAy
MDsKKwogICAgIEludFNpemUgYWRqdXN0bWVudEZhY3RvcjsKICAgICAKLSNkZWZpbmUgRURHRV9E
SVNUQU5DRV9USFJFU0hPTEQgNTAKLSNkZWZpbmUgUElYRUxTX01VTFRJUExJRVIgMjAKLQogICAg
IGZsb2F0IHNjcmVlbkxlZnRFZGdlID0gc2NyZWVuUmVjdC54KCk7Ci0gICAgZmxvYXQgaW5zZXRT
Y3JlZW5MZWZ0RWRnZSA9IHNjcmVlbkxlZnRFZGdlICsgRURHRV9ESVNUQU5DRV9USFJFU0hPTEQ7
CisgICAgZmxvYXQgaW5zZXRTY3JlZW5MZWZ0RWRnZSA9IHNjcmVlbkxlZnRFZGdlICsgZWRnZURp
c3RhbmNlVGhyZXNob2xkOwogICAgIGZsb2F0IHNjcmVlblJpZ2h0RWRnZSA9IHNjcmVlblJlY3Qu
bWF4WCgpOwotICAgIGZsb2F0IGluc2V0U2NyZWVuUmlnaHRFZGdlID0gc2NyZWVuUmlnaHRFZGdl
IC0gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQ7CisgICAgZmxvYXQgaW5zZXRTY3JlZW5SaWdodEVk
Z2UgPSBzY3JlZW5SaWdodEVkZ2UgLSBlZGdlRGlzdGFuY2VUaHJlc2hvbGQ7CiAgICAgaWYgKHNj
cmVlblBvaW50LngoKSA+PSBzY3JlZW5MZWZ0RWRnZSAmJiBzY3JlZW5Qb2ludC54KCkgPCBpbnNl
dFNjcmVlbkxlZnRFZGdlKSB7Ci0gICAgICAgIGZsb2F0IGRpc3RhbmNlRnJvbUVkZ2UgPSBzY3Jl
ZW5Qb2ludC54KCkgLSBzY3JlZW5MZWZ0RWRnZSAtIEVER0VfRElTVEFOQ0VfVEhSRVNIT0xEOwor
ICAgICAgICBmbG9hdCBkaXN0YW5jZUZyb21FZGdlID0gc2NyZWVuUG9pbnQueCgpIC0gc2NyZWVu
TGVmdEVkZ2UgLSBlZGdlRGlzdGFuY2VUaHJlc2hvbGQ7CiAgICAgICAgIGlmIChkaXN0YW5jZUZy
b21FZGdlIDwgMCkKLSAgICAgICAgICAgIGFkanVzdG1lbnRGYWN0b3Iuc2V0V2lkdGgoKGRpc3Rh
bmNlRnJvbUVkZ2UgLyBFREdFX0RJU1RBTkNFX1RIUkVTSE9MRCkgKiBQSVhFTFNfTVVMVElQTElF
Uik7CisgICAgICAgICAgICBhZGp1c3RtZW50RmFjdG9yLnNldFdpZHRoKChkaXN0YW5jZUZyb21F
ZGdlIC8gZWRnZURpc3RhbmNlVGhyZXNob2xkKSAqIHBpeGVsc011bHRpcGxpZXIpOwogICAgIH0g
ZWxzZSBpZiAoc2NyZWVuUG9pbnQueCgpID49IGluc2V0U2NyZWVuUmlnaHRFZGdlICYmIHNjcmVl
blBvaW50LngoKSA8IHNjcmVlblJpZ2h0RWRnZSkgewotICAgICAgICBmbG9hdCBkaXN0YW5jZUZy
b21FZGdlID0gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQgLSAoc2NyZWVuUmlnaHRFZGdlIC0gc2Ny
ZWVuUG9pbnQueCgpKTsKKyAgICAgICAgZmxvYXQgZGlzdGFuY2VGcm9tRWRnZSA9IGVkZ2VEaXN0
YW5jZVRocmVzaG9sZCAtIChzY3JlZW5SaWdodEVkZ2UgLSBzY3JlZW5Qb2ludC54KCkpOwogICAg
ICAgICBpZiAoZGlzdGFuY2VGcm9tRWRnZSA+IDApCi0gICAgICAgICAgICBhZGp1c3RtZW50RmFj
dG9yLnNldFdpZHRoKChkaXN0YW5jZUZyb21FZGdlIC8gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQp
ICogUElYRUxTX01VTFRJUExJRVIpOworICAgICAgICAgICAgYWRqdXN0bWVudEZhY3Rvci5zZXRX
aWR0aCgoZGlzdGFuY2VGcm9tRWRnZSAvIGVkZ2VEaXN0YW5jZVRocmVzaG9sZCkgKiBwaXhlbHNN
dWx0aXBsaWVyKTsKICAgICB9CiAKICAgICBmbG9hdCBzY3JlZW5Ub3BFZGdlID0gc2NyZWVuUmVj
dC55KCk7Ci0gICAgZmxvYXQgaW5zZXRTY3JlZW5Ub3BFZGdlID0gc2NyZWVuVG9wRWRnZSArIEVE
R0VfRElTVEFOQ0VfVEhSRVNIT0xEOworICAgIGZsb2F0IGluc2V0U2NyZWVuVG9wRWRnZSA9IHNj
cmVlblRvcEVkZ2UgKyBlZGdlRGlzdGFuY2VUaHJlc2hvbGQ7CiAgICAgZmxvYXQgc2NyZWVuQm90
dG9tRWRnZSA9IHNjcmVlblJlY3QubWF4WSgpOwotICAgIGZsb2F0IGluc2V0U2NyZWVuQm90dG9t
RWRnZSA9IHNjcmVlbkJvdHRvbUVkZ2UgLSBFREdFX0RJU1RBTkNFX1RIUkVTSE9MRDsKKyAgICBm
bG9hdCBpbnNldFNjcmVlbkJvdHRvbUVkZ2UgPSBzY3JlZW5Cb3R0b21FZGdlIC0gZWRnZURpc3Rh
bmNlVGhyZXNob2xkOwogCiAgICAgaWYgKHNjcmVlblBvaW50LnkoKSA+PSBzY3JlZW5Ub3BFZGdl
ICYmIHNjcmVlblBvaW50LnkoKSA8IGluc2V0U2NyZWVuVG9wRWRnZSkgewotICAgICAgICBmbG9h
dCBkaXN0YW5jZUZyb21FZGdlID0gc2NyZWVuUG9pbnQueSgpIC0gc2NyZWVuVG9wRWRnZSAtIEVE
R0VfRElTVEFOQ0VfVEhSRVNIT0xEOworICAgICAgICBmbG9hdCBkaXN0YW5jZUZyb21FZGdlID0g
c2NyZWVuUG9pbnQueSgpIC0gc2NyZWVuVG9wRWRnZSAtIGVkZ2VEaXN0YW5jZVRocmVzaG9sZDsK
ICAgICAgICAgaWYgKGRpc3RhbmNlRnJvbUVkZ2UgPCAwKQotICAgICAgICAgICAgYWRqdXN0bWVu
dEZhY3Rvci5zZXRIZWlnaHQoKGRpc3RhbmNlRnJvbUVkZ2UgLyBFREdFX0RJU1RBTkNFX1RIUkVT
SE9MRCkgKiBQSVhFTFNfTVVMVElQTElFUik7CisgICAgICAgICAgICBhZGp1c3RtZW50RmFjdG9y
LnNldEhlaWdodCgoZGlzdGFuY2VGcm9tRWRnZSAvIGVkZ2VEaXN0YW5jZVRocmVzaG9sZCkgKiBw
aXhlbHNNdWx0aXBsaWVyKTsKICAgICB9IGVsc2UgaWYgKHNjcmVlblBvaW50LnkoKSA+PSBpbnNl
dFNjcmVlbkJvdHRvbUVkZ2UgJiYgc2NyZWVuUG9pbnQueSgpIDwgc2NyZWVuQm90dG9tRWRnZSkg
ewotICAgICAgICBmbG9hdCBkaXN0YW5jZUZyb21FZGdlID0gRURHRV9ESVNUQU5DRV9USFJFU0hP
TEQgLSAoc2NyZWVuQm90dG9tRWRnZSAtIHNjcmVlblBvaW50LnkoKSk7CisgICAgICAgIGZsb2F0
IGRpc3RhbmNlRnJvbUVkZ2UgPSBlZGdlRGlzdGFuY2VUaHJlc2hvbGQgLSAoc2NyZWVuQm90dG9t
RWRnZSAtIHNjcmVlblBvaW50LnkoKSk7CiAgICAgICAgIGlmIChkaXN0YW5jZUZyb21FZGdlID4g
MCkKLSAgICAgICAgICAgIGFkanVzdG1lbnRGYWN0b3Iuc2V0SGVpZ2h0KChkaXN0YW5jZUZyb21F
ZGdlIC8gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQpICogUElYRUxTX01VTFRJUExJRVIpOworICAg
ICAgICAgICAgYWRqdXN0bWVudEZhY3Rvci5zZXRIZWlnaHQoKGRpc3RhbmNlRnJvbUVkZ2UgLyBl
ZGdlRGlzdGFuY2VUaHJlc2hvbGQpICogcGl4ZWxzTXVsdGlwbGllcik7CiAgICAgfQogCiAgICAg
cmV0dXJuIGFkanVzdG1lbnRGYWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLm1tCmlu
ZGV4IGUwYjFmMmVlNDVhNTVmNTVmYmMwZDhkMGI0MWRhNTE2MmQ1MmYzYWQuLjdkOWIzNjA2MDcw
MWI3YTg3ODQ5MjEyYmU0N2Q5Yjk1YWJiZGQ5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW1w
b3J0ICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbXBvcnQgIlJhbmdlLmgiCisjaW1wb3J0ICJT
aW1wbGVSYW5nZS5oIgogI2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCiAjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZQbGF5ZXIuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNBY2Nlc3NpYmlsaXR5
U1BJLmg+CkBAIC03MiwxMCArNzMsMTIgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50
ZXJuYWxzOjpyYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGludCB4LAogICAgIGRv
Y3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGNv
bnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsg
SGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0
UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6
QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9OwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZG9j
dW1lbnQtPmZyYW1lKCktPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRB
dFBvaW50KEludFBvaW50KHgsIHkpLCBoaXRUeXBlKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
OwotICAgIHN0ZDo6dGllKHJhbmdlLCBzdGQ6Omlnbm9yZSkgPSBEaWN0aW9uYXJ5TG9va3VwOjpy
YW5nZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIHJldHVybiBXVEZNb3ZlKHJhbmdlKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGRvY3VtZW50LT5mcmFtZSgpLT5tYWluRnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludCh4LCB5KSwgaGl0VHlwZSk7Cisg
ICAgYXV0byByYW5nZSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJl
c3VsdCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gUmVmUHRyPFJhbmdlPiB7IGNyZWF0ZUxpdmVSYW5nZShzdGQ6OmdldDxTaW1wbGVSYW5n
ZT4oKnJhbmdlKSkgfTsKIH0KIAogI2VuZGlmCkBAIC05NSwxMyArOTgsMTAgQEAgZG91YmxlIElu
dGVybmFsczo6cHJpdmF0ZVBsYXllclZvbHVtZShjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVt
ZW50KQogCiBTdHJpbmcgSW50ZXJuYWxzOjplbmNvZGVkUHJlZmVyZW5jZVZhbHVlKGNvbnN0IFN0
cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSkKIHsKLSAgICBhdXRvIHVzZXJEZWZhdWx0
cyA9IGFkb3B0TlMoW1tOU1VzZXJEZWZhdWx0cyBhbGxvY10gaW5pdFdpdGhTdWl0ZU5hbWU6IGRv
bWFpbl0pOwotICAgIGlkIHZhbHVlID0gW3VzZXJEZWZhdWx0cy5nZXQoKSBvYmplY3RGb3JLZXk6
a2V5XTsKLSAgICBOU0Vycm9yICplID0gbmlsOwotICAgIGF1dG8gZGF0YSA9IGFkb3B0TlMoW05T
S2V5ZWRBcmNoaXZlciBhcmNoaXZlZERhdGFXaXRoUm9vdE9iamVjdDp2YWx1ZSByZXF1aXJpbmdT
ZWN1cmVDb2Rpbmc6WUVTIGVycm9yOiZlXSk7Ci0gICAgQVNTRVJUKCFlKTsKLSAgICBhdXRvIGVu
Y29kZWRTdHJpbmcgPSBbZGF0YSBiYXNlNjRFbmNvZGVkU3RyaW5nV2l0aE9wdGlvbnM6MF07Ci0g
ICAgcmV0dXJuIGVuY29kZWRTdHJpbmc7CisgICAgYXV0byB1c2VyRGVmYXVsdHMgPSBhZG9wdE5T
KFtbTlNVc2VyRGVmYXVsdHMgYWxsb2NdIGluaXRXaXRoU3VpdGVOYW1lOmRvbWFpbl0pOworICAg
IGlkIHZhbHVlID0gW3VzZXJEZWZhdWx0cyBvYmplY3RGb3JLZXk6a2V5XTsKKyAgICBhdXRvIGRh
dGEgPSBhZG9wdE5TKFtOU0tleWVkQXJjaGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6
dmFsdWUgcmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFUyBlcnJvcjpudWxscHRyXSk7CisgICAgcmV0
dXJuIFtkYXRhIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKIH0KIAogU3RyaW5n
IEludGVybmFsczo6Z2V0VVRJRnJvbVRhZyhjb25zdCBTdHJpbmcmIHRhZ0NsYXNzLCBjb25zdCBT
dHJpbmcmIHRhZywgY29uc3QgU3RyaW5nJiBjb25mb3JtaW5nVG9VVEkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nl
c3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29u
dGV4dENvbnRyb2xsZXIubW0KaW5kZXggZTc4OGExYWNmMzc0ODNjOThiZDBjZDUxYzc1YmJjMzgw
NDVlMzNlNy4uNDc3ZmY5NDVhNmFiNGFjYTllNzMzMTI1NWIwNDBkZDVmYWQ2ZThlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tX
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQpAQCAtMzY4LDExICszNjgsMTEgQEAgLSAoV0tE
T01Eb2N1bWVudCAqKW1haW5GcmFtZURvY3VtZW50CiAKIC0gKFdLRE9NUmFuZ2UgKilzZWxlY3Rl
ZFJhbmdlCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IF9wYWdlLT5jdXJy
ZW50U2VsZWN0aW9uQXNSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBfcGFnZS0+Y3VycmVudFNl
bGVjdGlvbkFzUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9XS0RPTVJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b1dLRE9NUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCkpOwog
fQogCiAtIChXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZSAqKW1haW5GcmFtZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmlu
ZGV4IDJjNzQ0NTU0OTM0ZWFlNDAxODEzYzU0MzNjNTE0MjI4ODg0MzA1ZTcuLmQwYjBkZjgwMjkw
MzE5NTgzOGVkZDcyMjdkMjlhYjA5OTAwZDY0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTUxLDYgKzUx
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAKICNpZiBQTEFURk9STShJT1Mp
CiAjaW1wb3J0IDxXZWJDb3JlL1BhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLmg+CkBAIC0x
MDksMjMgKzExMCwyOCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRM
b2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQogICAgIAogICAgIC8vIEZpbmQg
dGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgogICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0
VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRP
bmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2Vy
QWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVu
dCB9OwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVu
dEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXco
KS0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkpLCBoaXRUeXBl
KTsKLSAgICBhdXRvIFtyYW5nZSwgb3B0aW9uc10gPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICAKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRv
d1RvQ29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSwgaGl0VHlwZSk7CisKICAg
ICBhdXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1l
LCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpC
b3VuY2UpOworCisgICAgYXV0byByYW5nZVJlc3VsdCA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
QXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7CisgICAgaWYgKCFyYW5nZVJlc3VsdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byBbcmFuZ2UsIG9wdGlvbnNdID0gV1RGTW92ZSgqcmFuZ2VSZXN1
bHQpOworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCBjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Qm91bmNlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJh
bnNpdGlvbikKIHsKLSAgICBhdXRvIFtzZWxlY3RlZFJhbmdlLCBvcHRpb25zXSA9IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNlbGVjdGVk
UmFuZ2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpz
ZWxlY3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICBhdXRv
IHJlc3VsdCA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gW3JhbmdlLCBv
cHRpb25zXSA9IFdURk1vdmUoKnJlc3VsdCk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JSYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgb3B0aW9ucywgcHJlc2VudGF0
aW9uVHJhbnNpdGlvbik7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24oKQpAQCAtMTM0LDI4ICsxNDAsMzAgQEAgdm9pZCBXZWJQYWdl
OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCiAgICAgcGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5k
Q3Jvc3NmYWRlKTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRp
b25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFu
c2l0aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZy
YW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlv
bnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5z
aXRpb24pCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBv
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOwogfQogCi1EaWN0aW9uYXJ5UG9wdXBJ
bmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJh
bmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQorRGljdGlvbmFyeVBvcHVwSW5m
byBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKIHsKICAgICBF
ZGl0b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOwogICAgIGVkaXRvci5zZXRJc0dldHRpbmdE
aWN0aW9uYXJ5UG9wdXBJbmZvKHRydWUpOwogCi0gICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0
aW9uYXJ5UG9wdXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCku
aXNFbXB0eSgpKSB7CisgICAgLy8gRklYTUU6IEluZWZmaWNpZW50IHRvIGNhbGwgc3RyaXBXaGl0
ZVNwYWNlIHRvIGRldGVjdCB3aGV0aGVyIGEgc3RyaW5nIGhhcyBhIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlciBpbiBpdC4KKyAgICBpZiAocGxhaW5UZXh0KHJhbmdlKS5zdHJpcFdoaXRlU3BhY2Uo
KS5pc0VtcHR5KCkpIHsKICAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1
cEluZm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBhdXRvIHF1YWRzID0gUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVRleHRRdWFkcyhyYW5nZSk7CiAgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgewogICAg
ICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAg
ICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAorICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKKwogICAg
IEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRz
WzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA3ZWEwM2M4YjZkMDI2YWFl
MDhiNmZlOTc4ZDAxODhmNDNhZDc5Zjc2Li40N2NkZWE3ZWRlMTk4MDU3OGRjNjk5YzlmYzdiNGNi
NzQ4OTA3YWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtNjI4OSwxMyArNjI4OSwxMyBAQCBib29sIFdlYlBhZ2U6OnBsdWdJbklzUHJpbWFy
eVNpemUoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbAogCiAj
ZW5kaWYgLy8gRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKIAot
UmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpjdXJyZW50U2VsZWN0aW9uQXNSYW5nZSgpCitPcHRpb25h
bDxTaW1wbGVSYW5nZT4gV2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UoKQogewogICAg
IGF1dG8qIGZyYW1lID0gZnJhbWVXaXRoU2VsZWN0aW9uKG1fcGFnZS5nZXQoKSk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6cmVwb3J0VXNlZEZlYXR1cmVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAppbmRleCAwNTk2NjdlMzg4OWFiYWMyZjk4ZTJjODNhZTczNjg1YjMxMDYwZGY5
Li4zZGM5NDlhOTA3MTI1NzA4NDg0NDRhNTU3NDU2M2VmNWRjNTJiZjU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC00ODAsNyArNDgwLDcgQEAgcHVi
bGljOgogICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWUoKSBjb25zdDsgLy8gTWF5IHJldHVy
biBudWxscHRyLgogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogbWFpbkZyYW1lVmlldygpIGNvbnN0
OyAvLyBNYXkgcmV0dXJuIG51bGxwdHIuCiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGN1
cnJlbnRTZWxlY3Rpb25Bc1JhbmdlKCk7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+IGN1cnJlbnRTZWxlY3Rpb25Bc1JhbmdlKCk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKICAgICBSZWZQdHI8UGx1Z2luPiBjcmVhdGVQbHVnaW4oV2ViRnJhbWUqLCBXZWJD
b3JlOjpIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFBsdWdpbjo6UGFyYW1ldGVycyYsIFN0cmlu
ZyYgbmV3TUlNRVR5cGUpOwpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNvbXBsZXRlU3ludGhldGljQ2xpY2soV2ViQ29yZTo6Tm9kZSYgbm9kZVJlc3BvbmRpbmdUb0Ns
aWNrLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbiwgT3B0aW9uU2V0PFdlYktp
dDo6V2ViRXZlbnQ6Ok1vZGlmaWVyPiwgV2ViQ29yZTo6U3ludGhldGljQ2xpY2tUeXBlLCBXZWJD
b3JlOjpQb2ludGVySUQgPSBXZWJDb3JlOjptb3VzZVBvaW50ZXJJRCk7CiAgICAgdm9pZCBzZW5k
VGFwSGlnaGxpZ2h0Rm9yTm9kZUlmTmVjZXNzYXJ5KHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29y
ZTo6Tm9kZSopOwogICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25J
bkZvY3VzZWROb2RlRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChXZWJDb3Jl
OjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6VGV4dEdyYW51bGFy
aXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOworICAgIE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChXZWJDb3Jl
OjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6VGV4dEdyYW51bGFy
aXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIHZvaWQgc2V0
Rm9jdXNlZEZyYW1lQmVmb3JlU2VsZWN0aW5nVGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKICAgICB2b2lkIGRpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNGb3JTZWxl
Y3Rpb25HZXN0dXJlKFNlbGVjdGlvblRvdWNoLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwog
CkBAIC0xNTU5LDggKzE1NTksOCBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKTsKICAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2Vs
ZWN0aW9uKCk7Ci0gICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKFdlYkNv
cmU6OkZyYW1lJiwgV2ViQ29yZTo6UmFuZ2UmLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLSAgICBXZWJDb3JlOjpE
aWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShXZWJDb3JlOjpG
cmFtZSYsIFdlYkNvcmU6OlJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgdm9pZCBwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEZvclJhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UmLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZv
IGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNv
cmU6OlNpbXBsZVJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4p
CiAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvRm9y
U2VsZWN0aW9uSW5QREZQbHVnaW4oUERGU2VsZWN0aW9uICosIFBERlBsdWdpbiYsIE5TRGljdGlv
bmFyeSAqb3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b24pOwogI2VuZGlmCkBAIC0xNjY0LDcgKzE2NjQsNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZvaWQgcGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9u
KFdlYkNvcmU6OkZsb2F0UG9pbnQpOwotICAgIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiwgTlNEaWN0aW9uYXJ5ICo+IGxvb2t1cFRleHRBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0
UG9pbnQpOworICAgIE9wdGlvbmFsPHN0ZDo6dHVwbGU8V2ViQ29yZTo6U2ltcGxlUmFuZ2UsIE5T
RGljdGlvbmFyeSAqPj4gbG9va3VwVGV4dEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCk7
CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKTsKICAgICB2b2lkIGltbWVkaWF0
ZUFjdGlvbkRpZENhbmNlbCgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkQ29tcGxldGUo
KTsKQEAgLTE4ODQsNyArMTg4NCw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIGJvb2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sgeyBmYWxz
ZSB9OwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9zdGFydGluZ0dlc3R1cmVSYW5nZTsK
KyAgICBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gbV9zdGFydGluZ0dlc3R1cmVSYW5n
ZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMTk5MCw3ICsxOTkw
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG1fY3VycmVudFdvcmRSYW5nZTsKKyAgICBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4gbV9jdXJyZW50V29yZFJhbmdlOwogICAgIFJlZlB0cjxXZWJD
b3JlOjpOb2RlPiBtX2ludGVyYWN0aW9uTm9kZTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xh
c3RJbnRlcmFjdGlvbkxvY2F0aW9uOwogCkBAIC0yMDE4LDcgKzIwMTgsNyBAQCBwcml2YXRlOgog
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2F2YWlsYWJsZVNjcmVlblNpemU7CiAgICAgV2ViQ29y
ZTo6RmxvYXRTaXplIG1fb3ZlcnJpZGVTY3JlZW5TaXplOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiBtX2luaXRpYWxTZWxlY3Rpb247CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+IG1faW5pdGlhbFNlbGVjdGlvbjsKICAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSB7IFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb24oKSB9OwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX21heGltdW1Vbm9ic2N1cmVkU2l6
ZTsKICAgICBpbnQzMl90IG1fZGV2aWNlT3JpZW50YXRpb24geyAwIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDk5MmJl
YjFhNWI1YjNiZmJjYjZiYzQ5MzU2NTc1ZmRmMGIxNmI4Y2QuLjAyNjhlMjdkYjgyNmFmOWQ5MTli
MmYyMTY3ZmFhMzRjZTgzOWRkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNDA4LDIwICsxNDA4LDIzIEBAIHZvaWQg
V2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJl
VHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAgIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0
aW9uKHBvc2l0aW9uKTsKICNlbHNlCiAgICAgICAgICAgICBzd2l0Y2ggKHdrR2VzdHVyZVN0YXRl
KSB7Ci0gICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuOgotICAg
ICAgICAgICAgICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgY2FzZSBHZXN0
dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbjogeworICAgICAgICAgICAgICAgIGF1dG8gYm91bmRh
cnkgPSAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOworICAgICAgICAgICAgICAgIG1fc3Rh
cnRpbmdHZXN0dXJlUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IGJvdW5kYXJ5LCBib3VuZGFyeSB9Owog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBH
ZXN0dXJlUmVjb2duaXplclN0YXRlOjpDaGFuZ2VkOgogICAgICAgICAgICAgICAgIGlmIChtX3N0
YXJ0aW5nR2VzdHVyZVJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0aW5n
R2VzdHVyZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkgPCBwb3NpdGlvbikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgbV9zdGFy
dGluZ0dlc3R1cmVSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zdGFy
dGluZ0dlc3R1cmVSYW5nZS0+c3RhcnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQg
PCBwb3NpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc3RhcnQsIHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpm
cmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgbV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHN0YXJ0KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25p
emVyU3RhdGU6OkVuZGVkOgogICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRl
OjpDYW5jZWxsZWQ6Ci0gICAgICAgICAgICAgICAgbV9zdGFydGluZ0dlc3R1cmVSYW5nZSA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgbV9zdGFydGluZ0dlc3R1cmVSYW5nZSA9IFdURjo6bnVs
bG9wdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZTo6RmFpbGVkOgogICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXpl
clN0YXRlOjpQb3NzaWJsZToKQEAgLTE0MzUsMTIgKzE0MzgsMTUgQEAgdm9pZCBXZWJQYWdlOjpz
ZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1
cmVUeXBlLAogICAgICAgICBzd2l0Y2ggKHdrR2VzdHVyZVN0YXRlKSB7CiAgICAgICAgIGNhc2Ug
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6QmVnYW46CiAgICAgICAgICAgICByYW5nZSA9IHdvcmRS
YW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgICAgICBtX2N1cnJlbnRXb3JkUmFu
Z2UgPSByYW5nZSA/IFJlZlB0cjxSYW5nZT4oUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSA6IG51bGxw
dHI7CisgICAgICAgICAgICBpZiAocmFuZ2UpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50V29y
ZFJhbmdlID0geyB7ICpyYW5nZSB9IH07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50V29yZFJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoKICAgICAgICAg
ICAgIGlmICghbV9jdXJyZW50V29yZFJhbmdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBtX2N1cnJl
bnRXb3JkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9jdXJyZW50V29yZFJhbmdlLT5lbmRQb3Np
dGlvbigpKTsKKyAgICAgICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKCptX2N1cnJlbnRX
b3JkUmFuZ2UpOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgcmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSkKICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQocG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKSk7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24gPiByYW5nZS0+ZW5kUG9zaXRpb24o
KSkKQEAgLTE0NDgsNyArMTQ1NCw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkVuZGVkOgog
ICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkNhbmNlbGxlZDoKLSAgICAgICAg
ICAgIG1fY3VycmVudFdvcmRSYW5nZSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2N1cnJlbnRX
b3JkUmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpGYWlsZWQ6CiAgICAgICAgIGNhc2UgR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZTo6UG9zc2libGU6CkBAIC0xNjU2LDcgKzE2NjIsNyBAQCBJbnRSZWN0IFdl
YlBhZ2U6OnJvb3RWaWV3SW50ZXJhY3Rpb25Cb3VuZHNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCiAKIHZvaWQgV2ViUGFnZTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fc3Rh
cnRpbmdHZXN0dXJlUmFuZ2UgPSBudWxscHRyOworICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2Ug
PSBXVEY6Om51bGxvcHQ7CiAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhcigpOwogfQogCkBAIC0yMDg4LDMyICsyMDk0LDUx
IEBAIHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdl
YkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFuCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChGcmFt
ZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgV2ViQ29yZTo6VGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1l
bnQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JHcmFudWxhcml0eUF0
UG9pbnQoRnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIFdlYkNv
cmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZv
Y3VzZWRFbGVtZW50KQogewotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQ
b3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdX
aXRoRm9jdXNlZEVsZW1lbnQpOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBhdXRv
IHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBw
b2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAgICAgc3dpdGNoIChncmFu
dWxhcml0eSkgewotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0
eToKLSAgICAgICAgcmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eToKLSAg
ICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6IHsK
KyAgICAgICAgYXV0byBib3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAg
ICAgICAgaWYgKCFib3VuZGFyeSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybiB7IHsgKmJvdW5kYXJ5LCAqYm91bmRhcnkgfSB9OworICAgIH0KKyAgICBj
YXNlIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5OiB7CisgICAgICAgIGF1dG8gcmFu
Z2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBpZiAoIXJhbmdl
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgKnJh
bmdlIH07CisgICAgfQogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpTZW50ZW5jZUdyYW51bGFy
aXR5OgotICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgVGV4dEdyYW51bGFyaXR5OjpTZW50ZW5jZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkZvcndhcmQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRHcmFudWxhcml0
eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHk6Ci0gICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVu
aXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRleHRHcmFudWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHk6IHsKKyAgICAgICAg
YXV0byByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgZ3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CisgICAgICAgIGlmICghcmFu
Z2UpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyAq
cmFuZ2UgfTsKKyAgICB9CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkRvY3VtZW50R3JhbnVs
YXJpdHk6Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aHkgdGhpcyBtdXRhdGVz
IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgcmV0dXJucyBudWxsLgorICAgICAgICAvLyBGSVhN
RTogTWFrZXMgbm8gc2Vuc2UgdGhhdCB0aGlzIG11dGF0ZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9u
IGFuZCByZXR1cm5zIG51bGwuCiAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdEFsbCgp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUdyYW51
bGFyaXR5OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUJvdW5kYXJ5OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6U2VudGVuY2VCb3VuZGFyeToKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEJvdW5kYXJ5OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBjYXNlIFRleHRH
cmFudWxhcml0eTo6RG9jdW1lbnRCb3VuZGFyeToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiByYW5n
ZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVjdElzVG9vQmlnRm9yU2VsZWN0aW9uKGNvbnN0IElu
dFJlY3QmIGJsb2NrUmVjdCwgY29uc3QgRnJhbWUmIGZyYW1lKQpAQCAtMjEzOCw3ICsyMTYzLDcg
QEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIFcKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byByYW5nZSA9IHJh
bmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KGZyYW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50
ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dl
cmVkKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVM
aXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBtX2luaXRpYWxT
ZWxlY3Rpb24gPSByYW5nZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtMjE1Miwz
NiArMjE3NywzNiBAQCB2b2lkIFdlYlBhZ2U6OmJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24oV2Vi
Q29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgQwogdm9pZCBXZWJQYWdlOjp1cGRh
dGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgcG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7
CiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSByYW5nZUZvckdyYW51
bGFyaXR5QXRQb2ludChmcmFtZSwgcG9pbnQsIGdyYW51bGFyaXR5LCBpc0ludGVyYWN0aW5nV2l0
aEZvY3VzZWRFbGVtZW50KTsKKyAgICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5G
b2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2Vk
RWxlbWVudCk7CisgICAgYXV0byBuZXdSYW5nZSA9IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50
KGZyYW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1l
bnQpOwogICAgIAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSB8fCAhbV9pbml0aWFsU2VsZWN0
aW9uIHx8ICFuZXdSYW5nZSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlVuc2lnbmVkQ2FsbGJhY2soZmFsc2UsIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgIFZpc2libGVQb3NpdGlv
biBzZWxlY3Rpb25TdGFydCA9IG1faW5pdGlhbFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwot
ICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBtX2luaXRpYWxTZWxlY3Rpb24tPmVu
ZFBvc2l0aW9uKCk7CiAKLSAgICBpZiAocG9zaXRpb24gPiBtX2luaXRpYWxTZWxlY3Rpb24tPmVu
ZFBvc2l0aW9uKCkpCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9IG5ld1JhbmdlLT5lbmRQb3NpdGlv
bigpOwotICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgbV9pbml0aWFsU2VsZWN0aW9uLT5zdGFydFBv
c2l0aW9uKCkpCi0gICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gbmV3UmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKTsKLSAgICAKLSAgICBpZiAoc2VsZWN0aW9uU3RhcnQuaXNOb3ROdWxsKCkgJiYgc2VsZWN0
aW9uRW5kLmlzTm90TnVsbCgpKQotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1l
LmRvY3VtZW50KCksIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgIAotICAgIGlm
IChyYW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5n
ZS5nZXQoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLSAgICAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc2VsZWN0aW9uU3RhcnQgPT0gbV9pbml0aWFsU2Vs
ZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIGNhbGxiYWNrSUQpKTsKKyAgICBhdXRvIGluaXRpYWxT
ZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1faW5p
dGlhbFNlbGVjdGlvbi0+c3RhcnQpOworICAgIGF1dG8gaW5pdGlhbFNlbGVjdGlvbkVuZFBvc2l0
aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1faW5pdGlhbFNlbGVjdGlvbi0+ZW5k
KTsKKworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGluaXRpYWxTZWxlY3Rp
b25TdGFydFBvc2l0aW9uOworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBpbml0
aWFsU2VsZWN0aW9uRW5kUG9zaXRpb247CisgICAgaWYgKHBvc2l0aW9uID4gaW5pdGlhbFNlbGVj
dGlvbkVuZFBvc2l0aW9uKQorICAgICAgICBzZWxlY3Rpb25FbmQgPSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24obmV3UmFuZ2UtPmVuZCk7CisgICAgZWxzZSBpZiAocG9zaXRpb24gPCBpbml0
aWFsU2VsZWN0aW9uU3RhcnRQb3NpdGlvbikKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obmV3UmFuZ2UtPnN0YXJ0KTsKKworICAgIGlmIChzZWxl
Y3Rpb25TdGFydC5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb25FbmQuaXNOb3ROdWxsKCkpIHsKKyAg
ICAgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVj
dGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKKyAgICAgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LnB0cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIH0KKworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhzZWxlY3Rpb25TdGFydCA9PSBpbml0aWFsU2Vs
ZWN0aW9uU3RhcnRQb3NpdGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnVw
ZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9p
bnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgUmVzcGVjdFNlbGVjdGlv
bkFuY2hvciByZXNwZWN0U2VsZWN0aW9uQW5jaG9yLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7
CiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQpOworICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3Vz
ZWROb2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVt
ZW50KTsKIAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkgewogICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soZmFsc2UsIGNhbGxiYWNrSUQpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KaW5kZXggNjUwZmMyZjM1OGU5NTdhNTM3NzdiYzIzYzY3YjgzYTc2OTk3MjBkZi4uYWRiOTky
M2Y1MTFkM2FkNmY1MjQ5ODJmOGZhNTJmMzAwYzhjM2JmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg1OSwxNCArODU5
LDEyIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0
aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgaWYgKCFhYnNvbHV0ZUxpbmtVUkwu
aXNFbXB0eSgpICYmIFVSTEVsZW1lbnQpCiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5s
aW5rVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKlVSTEVsZW1lbnQpLCB7IFRleHRJbmRpY2F0b3JPcHRp
b246OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgfSwg
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAKLSAgICBhdXRv
IGxvb2t1cFJlc3VsdCA9IGxvb2t1cFRleHRBdExvY2F0aW9uKGxvY2F0aW9uSW5WaWV3Q29vcmRp
bmF0ZXMpOwotICAgIGlmIChhdXRvKiBsb29rdXBSYW5nZSA9IHN0ZDo6Z2V0PFJlZlB0cjxSYW5n
ZT4+KGxvb2t1cFJlc3VsdCkuZ2V0KCkpIHsKLSAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0
Lmxvb2t1cFRleHQgPSBsb29rdXBSYW5nZS0+dGV4dCgpOworICAgIGlmIChhdXRvIGxvb2t1cFJl
c3VsdCA9IGxvb2t1cFRleHRBdExvY2F0aW9uKGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKSB7
CisgICAgICAgIGF1dG8gW2xvb2t1cFJhbmdlLCBvcHRpb25zXSA9IFdURk1vdmUoKmxvb2t1cFJl
c3VsdCk7CisgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5sb29rdXBUZXh0ID0gcGxhaW5U
ZXh0KGxvb2t1cFJhbmdlKTsKICAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0
LmlubmVyTm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZnJhbWUgPSBub2RlLT5kb2N1
bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIG9wdGlvbnMgPSBzdGQ6Omdl
dDxOU0RpY3Rpb25hcnkgKj4obG9va3VwUmVzdWx0KTsKLSAgICAgICAgICAgICAgICBpbW1lZGlh
dGVBY3Rpb25SZXN1bHQuZGljdGlvbmFyeVBvcHVwSW5mbyA9IGRpY3Rpb25hcnlQb3B1cEluZm9G
b3JSYW5nZSgqZnJhbWUsICpsb29rdXBSYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAg
ICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRpY3Rpb25hcnlQb3B1cEluZm8gPSBkaWN0aW9uYXJ5
UG9wdXBJbmZvRm9yUmFuZ2UoKmZyYW1lLCBsb29rdXBSYW5nZSwgb3B0aW9ucywgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTkzNiwxMSArOTM0LDExIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChp
bW1lZGlhdGVBY3Rpb25SZXN1bHQsIGltbWVkaWF0ZUFjdGlvbkhpdFRlc3RQcmV2ZW50c0RlZmF1
bHQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hh
bmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCi1zdGQ6OnR1cGxlPFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBXZWJQYWdlOjpsb29rdXBUZXh0QXRMb2Nh
dGlvbihGbG9hdFBvaW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpCitPcHRpb25hbDxzdGQ6
OnR1cGxlPFdlYkNvcmU6OlNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IFdlYlBhZ2U6Omxv
b2t1cFRleHRBdExvY2F0aW9uKEZsb2F0UG9pbnQgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcykK
IHsKICAgICBhdXRvJiBtYWluRnJhbWUgPSBjb3JlUGFnZSgpLT5tYWluRnJhbWUoKTsKICAgICBp
ZiAoIW1haW5GcmFtZS52aWV3KCkgfHwgIW1haW5GcmFtZS52aWV3KCktPnJlbmRlclZpZXcoKSkK
LSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBhdXRvIHBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3
Q29vcmRpbmF0ZXMpOwogICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJl
cXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVx
dWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250
ZW50LCBIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyLm1tCmluZGV4IDk2YTYxZTg0MzA1NTM5NTE1MDgxYWNkNzYwYTFjYWI0
NTgyOGNjOTEuLjJkZjgxNjE5ZTU5NWZhZjZhOWVkMmVmZTIwMTZkYmZhMTBiNWE3OWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYklt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAgLTU1MCwxOSArNTUwLDIwIEBAIC0gKGlkPE5T
SW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJG
b3JUZXh0CiAgICAgaWYgKCFQQUw6OmdldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpOb2RlKiBub2RlID0gX2hpdFRl
c3RSZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgYXV0byBub2RlID0gX2hpdFRlc3RSZXN1bHQuaW5u
ZXJOb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8g
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIGF1dG8gW2RpY3Rpb25hcnlSYW5nZSwgb3B0aW9uc10gPSBX
ZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChfaGl0VGVzdFJl
c3VsdCk7Ci0gICAgaWYgKCFkaWN0aW9uYXJ5UmFuZ2UpCisgICAgYXV0byByYW5nZSA9IFdlYkNv
cmU6OkRpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KF9oaXRUZXN0UmVzdWx0
KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBkaWN0
aW9uYXJ5UG9wdXBJbmZvID0gW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZToqZGljdGlvbmFyeVJhbmdlIGluRnJhbWU6ZnJhbWUgd2l0aExv
b2t1cE9wdGlvbnM6b3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOnsgfSB0cmFuc2l0aW9uOiBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluXTsKKyAgICBh
dXRvIFtkaWN0aW9uYXJ5UmFuZ2UsIG9wdGlvbnNdID0gV1RGTW92ZSgqcmFuZ2UpOworICAgIGF1
dG8gZGljdGlvbmFyeVBvcHVwSW5mbyA9IFtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9k
aWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6ZGljdGlvbmFyeVJhbmdlIGluRnJhbWU6ZnJhbWUg
d2l0aExvb2t1cE9wdGlvbnM6b3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOiB7IH0gdHJhbnNpdGlv
bjogV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbl07
CiAgICAgaWYgKCFkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcpCiAgICAgICAg
IHJldHVybiBuaWw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403986</attachid>
            <date>2020-07-10 12:16:37 -0700</date>
            <delta_ts>2020-07-10 16:47:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214109-20200710121636.patch</filename>
            <type>text/plain</type>
            <size>83118</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM3MmU5OThiYmMxN2Zm
ZjQ0NWJlYzYyMTI5NGExZDEyZWM1N2IxYy4uNTM3MjQ2NjI4OGExM2ZmYzBjM2YyZDY4NWZhYjdj
ZjAyOTIzZWI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTA3LTA4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBEb2N1bWVudC5oLCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgsIERpY3Rpb25hcnlM
b29rdXAuaCwgYW5kIFdlYlBhZ2UuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE0MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQpOiBVcGRh
dGVkIHRvIGNhbGwKKyAgICAgICAgY2FyZXRQb3NpdGlvbkZyb21Qb2ludCwgaW50ZXJuYWwgZnVu
Y3Rpb24sIGluc3RlYWQgb2YgY2FyZXRSYW5nZUZyb21Qb2ludCwKKyAgICAgICAgcHVibGljIERP
TSBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOiBDaGFuZ2VkIGRvY3VtZW50Q2xhc3NlcyBhcmd1bWVu
dCB0byBEb2N1bWVudENsYXNzRmxhZ3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2Fy
ZXRSYW5nZUZyb21Qb2ludCk6IFJlZmFjdG9yZWQgc28gdGhpcyBjYWxscyBjcmVhdGVMaXZlUmFu
Z2UsCisgICAgICAgIHNpbmNlIGl0J3MgYSBET00gZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjYXJldFBvc2l0aW9uRnJvbVBv
aW50KTogUmVuYW1lZCBzbyB0aGlzIGlzIG5vdCBqdXN0IGFuIG92ZXJsb2FkCisgICAgICAgIGFu
ZCBjaGFuZ2VkIHRvIHJldHVybiBhIEJvdW5kYXJ5UG9pbnQgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6IFNpbXBsaWZpZWQgZm9yd2FyZCBkZWNs
YXJhdGlvbnMgYnkgZ2V0dGluZyByaWQgb2YgYWxsIHRoZSBjb25kaXRpb25hbHMuCisgICAgICAg
IFR3ZWFrZWQgYSBmZXcgdHlwZWRlZiB0aGluZ3MuIFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIGFi
b3ZlLgorCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0YXJ0QWx0ZXJu
YXRpdmVUZXh0VUlUaW1lcik6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgbV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZSBpcyBhbiBPcHRpb25hbDxTaW1wbGVSYW5nZT4uCisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlQ
ZW5kaW5nQ29ycmVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24gY29uc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJB
bGxvd2VkIGNvbnN0KTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJ
ZkFwcHJvcHJpYXRlKToKKyAgICAgICAgVXBkYXRlZCBzaW5jZSBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlIGlzIGFuIE9wdGlvbmFsPFNpbXBsZVJhbmdlPi4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVz
dWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjptYXJrUmV2ZXJzZWQpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJl
c3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNl
ZEJ5UmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6IFVzZSBTaW1wbGVSYW5nZQorICAg
ICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSk6IFRha2UgU2lt
cGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6
IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGxpdmUgcmFuZ2VzLgorCisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6c2hvd1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9s
bGVyKTogUmVuYW1lZCB0eXBlIGZyb20gUmV2ZWFsVmlldyB0byBDb2NvYVZpZXcuCisgICAgICAg
IChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXApOiBEaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmg6IFNpbXBsaWZpZWQgaGVhZGVyIHNpbmNl
IGl0IGlzIGluY2x1ZGVkIG9ubHkgZnJvbQorICAgICAgICBPYmplY3RpdmUtQyBmaWxlcy4gVXNl
IFNpbXBsZVJhbmdlIGluc3RlYWQgb2YgbGl2ZSByYW5nZXMuCisKKyAgICAgICAgKiBlZGl0aW5n
L21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCk6IERp
dHRvLgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9zZXN0V29yZEZyb21IaXRUZXN0UmVzdWx0
QmFzZWRPbkxvb2t1cCk6IFVwZGF0ZWQKKyAgICAgICAgc2luY2UgRGljdGlvbmFyeUxvb2t1cDo6
cmFuZ2VBdEhpdFRlc3RSZXN1bHQgcmV0dXJucyBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OmF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9yRm9yU2NyZWVuQm91bmRhcmllcyk6IFVzZSBj
b25zdGV4cHIgaW5zdGVhZCBvZgorICAgICAgICBtYWNyb3MgZm9yIGNvbnN0YW50cy4KKworICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpyYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogVXBkYXRlZAorICAgICAgICBz
aW5jZSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCByZXR1cm5zIFNpbXBs
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbmNvZGVkUHJlZmVyZW5jZVZh
bHVlKTogUmVtb3ZlZCB1bm5lZWRlZCBlcnJvciBsb2NhbCwgYW5kCisgICAgICAgIGZpeGVkIGZv
cm1hdHRpbmcuCisKIDIwMjAtMDctMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIExpbWl0IE11bHRpR2FtZXBhZFByb3ZpZGVyIHRvIENhdGFsaW5hIGFuZCBC
aWcgU3VyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBmYWMwNjY0OTVkNzQxYWNlOTBlMWJiMjBkN2RiNzQ3YzBjN2Vk
NDY2Li5jYTllMDNjMTlmNzdkYThlNDZiYzg0Y2NhYjVkMjcxMjliMzhkNGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQzIEBACisyMDIwLTA3LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMgZnJvbSBEb2N1bWVudC5oLCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmgsIERpY3Rpb25hcnlMb29rdXAuaCwgYW5kIFdlYlBhZ2UuaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MTA5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRl
eHRDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29u
dGV4dENvbnRyb2xsZXIgc2VsZWN0ZWRSYW5nZV0pOiBVcGRhdGVkIHNpbmNlCisgICAgICAgIFdl
YlBhZ2U6OmN1cnJlbnRTZWxlY3Rpb25Bc1JhbmdlIHJldHVybnMgU2ltcGxlUmFuZ2UuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBV
cGRhdGVkIHNpbmNlCisgICAgICAgIERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVz
dWx0IHJldHVybnMgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKTogVXBkYXRlZCBzaW5jZQorICAgICAgICBE
aWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbiByZXR1cm5zIFNpbXBsZVJhbmdlLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdl
KTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFy
eVBvcHVwSW5mb0ZvclJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmN1cnJlbnRTZWxlY3Rp
b25Bc1JhbmdlKTogUmV0dXJuIFNpbXBsZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDogVXNlIFNpbXBsZVJhbmdlIGluc3RlYWQgb2YgbGl2ZSByYW5nZXMu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKTogVXBkYXRlZCBzaW5jZSBt
X3N0YXJ0aW5nR2VzdHVyZVJhbmdlCisgICAgICAgIGlzIFNpbXBsZVJhbmdlLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpjbGVhclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludCk6IFJldHVybiBTaW1wbGVSYW5n
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0
UG9pbnQpOiBVcGRhdGUgc2luY2UKKyAgICAgICAgcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQg
cmV0dXJucyBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlU2Vs
ZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkpOiBVc2UKKyAgICAgICAgU2ltcGxlUmFu
Z2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQ
b2ludCk6IFVzZSBhdXRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0
aW9uSGl0VGVzdEF0TG9jYXRpb24pOiBVcGRhdGUKKyAgICAgICAgc2luY2UgbG9va3VwVGV4dEF0
TG9jYXRpb24gcmV0dXJucyBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
bG9va3VwVGV4dEF0TG9jYXRpb24pOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisKIDIwMjAtMDctMTAg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIExpbWl0IE11bHRp
R2FtZXBhZFByb3ZpZGVyIHRvIENhdGFsaW5hIGFuZCBCaWcgU3VyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IDFhNjE2MGUzYjA0YTM5ZWEyMjNhYThmM2JjZWFiNzliNGE0ZWM2ZDMu
LjIyY2NmNmZlMzZiZjlmZjQxY2UxMWEwODY2ZjBmM2ZjMGNjOGFkYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNy0wOCAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGxpdmUgcmFuZ2VzIGZyb20gRG9j
dW1lbnQuaCwgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oLCBEaWN0aW9uYXJ5TG9va3VwLmgs
IGFuZCBXZWJQYWdlLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNDEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAg
ICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9hbmltYXRpb25Db250cm9sbGVyRm9y
VGV4dF0pOiBVcGRhdGUgc2luY2UKKyAgICAgICAgRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQgcmV0dXJucyBTaW1wbGVSYW5nZS4KKwogMjAyMC0wNy0wOSAgQnJpYW4gQnVy
ZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMTcyNDgpOiBBU1NF
UlRfTk9UX1JFQUNIRUQoKSBpbiB0b1dlYkZyYW1lTG9hZFR5cGUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNTc3OGU5ZWY4YjljZjI2
OGRjNmY1MjRkM2ViZTM1N2M3ZjQ3YzlmNi4uMDU1MGFhNzEzYzUyMjg1OGYyNTZmMTdlZjliZjg0
YzU5MzVlNTYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCkBAIC0yODYyLDIxICsyODYyLDIyIEBAIEludFJlY3QgQVhPYmplY3RDYWNoZTo6
YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZz
CiAgICAgcmV0dXJuIGFic29sdXRlQm91bmRzRm9yTG9jYWxDYXJldFJlY3QoY2FyZXRQYWludGVy
LCBsb2NhbFJlY3QpOwogfQogCi1DaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFj
dGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQgJnBvaW50LCBBWENvcmVPYmplY3QqIG9i
aikKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQsIEFYQ29yZU9iamVjdCogb2JqZWN0KQogewotICAgIGlm
ICghb2JqKQotICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7Ci0gICAgCi0gICAgYXV0
byBib3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KG9iai0+dmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQocG9pbnQpKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBh
dXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQob2JqZWN0LT52aXNpYmxlUG9zaXRpb25G
b3JQb2ludChwb2ludCkpOwogICAgIGlmICghYm91bmRhcnkpCiAgICAgICAgIHJldHVybiB7IH07
Ci0KICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsgKmJvdW5k
YXJ5LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CiB9CiAKLUNoYXJhY3Rlck9mZnNldCBBWE9iamVjdENh
Y2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCAmcG9pbnQpCitDaGFy
YWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3Qg
SW50UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0
Rm9yUmFuZ2UoKm1fZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludChMYXlvdXRQb2ludChwb2lu
dCkpLCB0cnVlKTsKKyAgICBhdXRvIGJvdW5kYXJ5ID0gbV9kb2N1bWVudC5jYXJldFBvc2l0aW9u
RnJvbVBvaW50KHBvaW50KTsKKyAgICBpZiAoIWJvdW5kYXJ5KQorICAgICAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRh
cnksICpib3VuZGFyeSB9LCB0cnVlKTsKIH0KIAogQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2Fj
aGU6OmNoYXJhY3Rlck9mZnNldEZvckJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGZp
cnN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNWI2MmUyZDk2MDI3MTVhNjE3MTY3NmQ3
MjhlODU4YzY1NDA0NDI0ZS4uNzEwNWRiNWU5N2MzZjUyMWQ3ZTQ4YzRlMjI1NjdmZGVmZGJhYzc4
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01MzYsNyArNTM2LDcgQEAgc3RhdGljIGlu
bGluZSBpbnQgY3VycmVudE9yaWVudGF0aW9uKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gMDsK
IH0KIAotRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIHVu
c2lnbmVkIGRvY3VtZW50Q2xhc3NlcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MpCitEb2N1
bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgRG9jdW1lbnRDbGFz
c0ZsYWdzIGRvY3VtZW50Q2xhc3NlcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MpCiAgICAg
OiBDb250YWluZXJOb2RlKCp0aGlzLCBDcmVhdGVEb2N1bWVudCkKICAgICAsIFRyZWVTY29wZSgq
dGhpcykKICAgICAsIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcihmcmFtZSkKQEAgLTE1MDgsMzIg
KzE1MDgsMzUgQEAgU3RyaW5nIERvY3VtZW50Ojpjb250ZW50VHlwZSgpIGNvbnN0CiAKIFJlZlB0
cjxSYW5nZT4gRG9jdW1lbnQ6OmNhcmV0UmFuZ2VGcm9tUG9pbnQoaW50IHgsIGludCB5KQogewot
ICAgIHJldHVybiBjYXJldFJhbmdlRnJvbVBvaW50KExheW91dFBvaW50KHgsIHkpKTsKKyAgICBh
dXRvIGJvdW5kYXJ5ID0gY2FyZXRQb3NpdGlvbkZyb21Qb2ludChMYXlvdXRQb2ludCh4LCB5KSk7
CisgICAgaWYgKCFib3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZSh7ICpib3VuZGFyeSwgKmJvdW5kYXJ5IH0pOwogfQogCi1SZWZQdHI8
UmFuZ2U+IERvY3VtZW50OjpjYXJldFJhbmdlRnJvbVBvaW50KGNvbnN0IExheW91dFBvaW50JiBj
bGllbnRQb2ludCkKK09wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IERvY3VtZW50OjpjYXJldFBvc2l0
aW9uRnJvbVBvaW50KGNvbnN0IExheW91dFBvaW50JiBjbGllbnRQb2ludCkKIHsKICAgICBpZiAo
IWhhc0xpdmluZ1JlbmRlclRyZWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50OwogICAg
IGF1dG8gbm9kZSA9IG5vZGVGcm9tUG9pbnQoY2xpZW50UG9pbnQsICZsb2NhbFBvaW50KTsKICAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgYXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIGF1dG8gcmFuZ2VDb21wbGlhbnRQb3NpdGlvbiA9IHJlbmRlcmVy
LT5wb3NpdGlvbkZvclBvaW50KGxvY2FsUG9pbnQpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
OwogICAgIGlmIChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gb2Zm
c2V0ID0gcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAg
ICB1bnNpZ25lZCBvZmZzZXQgPSByYW5nZUNvbXBsaWFudFBvc2l0aW9uLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpOwogICAgIG5vZGUgPSByZXRhcmdldFRvU2NvcGUoKnJhbmdlQ29tcGxpYW50UG9z
aXRpb24uY29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAobm9kZSAhPSByYW5nZUNvbXBsaWFudFBv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKSkKICAgICAgICAgb2Zmc2V0ID0gMDsKIAotICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKCp0aGlzLCBub2RlLmdldCgpLCBvZmZzZXQsIG5vZGUuZ2V0KCksIG9m
ZnNldCk7CisgICAgcmV0dXJuIHsgeyAqbm9kZSwgb2Zmc2V0IH0gfTsKIH0KIAogYm9vbCBEb2N1
bWVudDo6aXNCb2R5UG90ZW50aWFsbHlTY3JvbGxhYmxlKEhUTUxCb2R5RWxlbWVudCYgYm9keSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKaW5kZXggYmI1NDk3MDBlZTZmZGQ2ZWI5ODI1M2FmMzcyNjQ1MzRk
OGQ5MGE1YS4uNGJjNzk2MzlhNDExNzZmZmEwOGQ4NjdmNDc3MTAxYjFhNjkzMzE5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKQEAgLTExNSw2ICsxMTUsMTEgQEAgY2xhc3MgRE9NV2luZG93OwogY2xh
c3MgRE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZVRocmVh
ZDsKK2NsYXNzIERldmljZU1vdGlvbkNsaWVudDsKK2NsYXNzIERldmljZU1vdGlvbkNvbnRyb2xs
ZXI7CitjbGFzcyBEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI7Citj
bGFzcyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKK2NsYXNzIERldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlcjsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsK
IGNsYXNzIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjsKQEAgLTEzNyw2ICsxNDIsNyBAQCBjbGFz
cyBGcmFtZVZpZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0Nv
bnRleHQ7CiBjbGFzcyBIVE1MQWxsQ29sbGVjdGlvbjsKK2NsYXNzIEhUTUxBdHRhY2htZW50RWxl
bWVudDsKIGNsYXNzIEhUTUxCb2R5RWxlbWVudDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50Owog
Y2xhc3MgSFRNTENvbGxlY3Rpb247CkBAIC0xNTcsNiArMTYzLDcgQEAgY2xhc3MgSWRsZUNhbGxi
YWNrQ29udHJvbGxlcjsKIGNsYXNzIElkbGVSZXF1ZXN0Q2FsbGJhY2s7CiBjbGFzcyBJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBJbnRQb2ludDsKK2NsYXNzIEludGVyc2VjdGlv
bk9ic2VydmVyOwogY2xhc3MgSlNOb2RlOwogY2xhc3MgTGF5b3V0UG9pbnQ7CiBjbGFzcyBMYXlv
dXRSZWN0OwpAQCAtMTY5LDYgKzE3Niw3IEBAIGNsYXNzIE1lZGlhUGxheWJhY2tUYXJnZXQ7CiBj
bGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50OwogY2xhc3MgTWVkaWFRdWVyeUxpc3Q7CiBj
bGFzcyBNZWRpYVF1ZXJ5TWF0Y2hlcjsKK2NsYXNzIE1lZGlhU2Vzc2lvbjsKIGNsYXNzIE1lc3Nh
Z2VQb3J0Q2hhbm5lbFByb3ZpZGVyOwogY2xhc3MgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
czsKIGNsYXNzIE5vZGVGaWx0ZXI7CkBAIC0xODMsNiArMTkxLDcgQEAgY2xhc3MgUmFuZ2U7CiBj
bGFzcyBSZW5kZXJUcmVlQnVpbGRlcjsKIGNsYXNzIFJlbmRlclZpZXc7CiBjbGFzcyBSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKK2NsYXNzIFJlc2l6ZU9ic2VydmVyOwogY2xhc3MgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOwogY2xhc3MgU1ZHU1ZHRWxlbWVudDsKIGNsYXNzIFNWR1VzZUVs
ZW1lbnQ7CkBAIC0yMDIsOCArMjExLDEwIEBAIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHls
ZVNoZWV0Q29udGVudHM7CiBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKIGNsYXNzIFRleHQ7CitjbGFz
cyBUZXh0QXV0b1NpemluZzsKIGNsYXNzIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOwogY2xh
c3MgVGV4dFJlc291cmNlRGVjb2RlcjsKK2NsYXNzIFRyYW5zZm9ybVNvdXJjZTsKIGNsYXNzIFRy
ZWVXYWxrZXI7CiBjbGFzcyBVbmRvTWFuYWdlcjsKIGNsYXNzIFZpc2liaWxpdHlDaGFuZ2VDbGll
bnQ7CkBAIC0yMTksNiArMjMwLDkgQEAgY2xhc3MgWFBhdGhFeHByZXNzaW9uOwogY2xhc3MgWFBh
dGhOU1Jlc29sdmVyOwogY2xhc3MgWFBhdGhSZXN1bHQ7CiAKK3N0cnVjdCBCb3VuZGFyeVBvaW50
Oworc3RydWN0IEludGVyc2VjdGlvbk9ic2VydmVyRGF0YTsKKwogdGVtcGxhdGU8dHlwZW5hbWU+
IGNsYXNzIEV4Y2VwdGlvbk9yOwogCiBlbnVtIENvbGxlY3Rpb25UeXBlOwpAQCAtMjI4LDQ4ICsy
NDIsMTIgQEAgZW51bSBjbGFzcyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IDogdWludDhf
dDsKIAogdXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKIAotI2lmIEVOQUJMRShY
U0xUKQotY2xhc3MgVHJhbnNmb3JtU291cmNlOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREVWSUNF
X09SSUVOVEFUSU9OKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQotY2xhc3MgRGV2aWNlTW90aW9u
Q2xpZW50OwotY2xhc3MgRGV2aWNlTW90aW9uQ29udHJvbGxlcjsKLWNsYXNzIERldmljZU9yaWVu
dGF0aW9uQ2xpZW50OwotY2xhc3MgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOwotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotY2xhc3MgRGV2aWNlT3JpZW50YXRp
b25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVEVYVF9B
VVRPU0laSU5HKQotY2xhc3MgVGV4dEF1dG9TaXppbmc7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShN
RURJQV9TRVNTSU9OKQotY2xhc3MgTWVkaWFTZXNzaW9uOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQotY2xhc3MgSFRNTEF0dGFjaG1lbnRFbGVtZW50OwotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoSU5URVJTRUNUSU9OX09CU0VSVkVSKQotY2xhc3MgSW50ZXJzZWN0aW9u
T2JzZXJ2ZXI7Ci1zdHJ1Y3QgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhOwotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoUkVTSVpFX09CU0VSVkVSKQotY2xhc3MgUmVzaXplT2JzZXJ2ZXI7Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFN0eWxlIHsKIGNsYXNzIFJlc29sdmVyOwogY2xhc3MgU2NvcGU7Ci19Owor
fQogCi1jb25zdCB1aW50NjRfdCBIVE1MTWVkaWFFbGVtZW50SW52YWxpZElEID0gMDsKK2NvbnN0
ZXhwciB1aW50NjRfdCBIVE1MTWVkaWFFbGVtZW50SW52YWxpZElEID0gMDsKIAogZW51bSBQYWdl
c2hvd0V2ZW50UGVyc2lzdGVuY2UgeyBQYWdlc2hvd0V2ZW50Tm90UGVyc2lzdGVkLCBQYWdlc2hv
d0V2ZW50UGVyc2lzdGVkIH07CiAKQEAgLTI4Niw3ICsyNjQsNyBAQCBlbnVtIE5vZGVMaXN0SW52
YWxpZGF0aW9uVHlwZSB7CiBjb25zdCBpbnQgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlcyA9
IEludmFsaWRhdGVPbkFueUF0dHJDaGFuZ2UgKyAxOwogCiBlbnVtIGNsYXNzIEV2ZW50SGFuZGxl
clJlbW92YWwgeyBPbmUsIEFsbCB9OwotdHlwZWRlZiBIYXNoQ291bnRlZFNldDxOb2RlKj4gRXZl
bnRUYXJnZXRTZXQ7Cit1c2luZyBFdmVudFRhcmdldFNldCA9IEhhc2hDb3VudGVkU2V0PE5vZGUq
PjsKIAogZW51bSBEb2N1bWVudENsYXNzIHsKICAgICBEZWZhdWx0RG9jdW1lbnRDbGFzcyA9IDAs
CkBAIC0yOTksNyArMjc3LDcgQEAgZW51bSBEb2N1bWVudENsYXNzIHsKICAgICBUZXh0RG9jdW1l
bnRDbGFzcyA9IDEgPDwgNiwKICAgICBYTUxEb2N1bWVudENsYXNzID0gMSA8PCA3LAogfTsKLXR5
cGVkZWYgdW5zaWduZWQgY2hhciBEb2N1bWVudENsYXNzRmxhZ3M7Cit1c2luZyBEb2N1bWVudENs
YXNzRmxhZ3MgPSB1bnNpZ25lZCBjaGFyOwogCiBlbnVtIGNsYXNzIERvY3VtZW50Q29tcGF0aWJp
bGl0eU1vZGUgOiB1bnNpZ25lZCBjaGFyIHsKICAgICBOb1F1aXJrc01vZGUgPSAxLApAQCAtNDU5
LDcgKzQzNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ3VzdG9tRWxlbWVudE5hbWVWYWxpZGF0
aW9uU3RhdHVzIHZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWUoY29uc3QgQXRvbVN0cmluZyYpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBjYXJldFJhbmdlRnJvbVBvaW50KGlu
dCB4LCBpbnQgeSk7Ci0gICAgUmVmUHRyPFJhbmdlPiBjYXJldFJhbmdlRnJvbVBvaW50KGNvbnN0
IExheW91dFBvaW50JiBjbGllbnRQb2ludCk7CisgICAgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4g
Y2FyZXRQb3NpdGlvbkZyb21Qb2ludChjb25zdCBMYXlvdXRQb2ludCYgY2xpZW50UG9pbnQpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogc2Nyb2xsaW5nRWxlbWVudEZvckFQSSgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHNjcm9sbGluZ0VsZW1lbnQoKTsKQEAgLTEyODgs
NyArMTI2Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1doZWVsRXZlbnRIYW5kbGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fd2hlZWxFdmVudFRhcmdldHMuZ2V0KCkgPyBtX3doZWVsRXZlbnRUYXJn
ZXRzLT5zaXplKCkgOiBmYWxzZTsgfQogICAgIGNvbnN0IEV2ZW50VGFyZ2V0U2V0KiB3aGVlbEV2
ZW50VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxFdmVudFRhcmdldHMuZ2V0KCk7IH0K
IAotICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlZ2lvbiwgYm9vbD4gUmVnaW9uRml4ZWRQYWlyOwor
ICAgIHVzaW5nIFJlZ2lvbkZpeGVkUGFpciA9IHN0ZDo6cGFpcjxSZWdpb24sIGJvb2w+OwogICAg
IFJlZ2lvbkZpeGVkUGFpciBhYnNvbHV0ZUV2ZW50UmVnaW9uRm9yTm9kZShOb2RlJik7CiAgICAg
UmVnaW9uRml4ZWRQYWlyIGFic29sdXRlUmVnaW9uRm9yRXZlbnRUYXJnZXRzKGNvbnN0IEV2ZW50
VGFyZ2V0U2V0Kik7CiAKQEAgLTE2MDYsNyArMTU4NCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVk
OgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRl
cmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKLSAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVS
TCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlv
bkZsYWdzID0gMCk7CisgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCBEb2N1bWVudENs
YXNzRmxhZ3MgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxh
Z3MgPSAwKTsKIAogICAgIHZvaWQgY2xlYXJYTUxWZXJzaW9uKCkgeyBtX3htbFZlcnNpb24gPSBT
dHJpbmcoKTsgfQogCkBAIC0xOTM3LDcgKzE5MTUsNyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbD4gbV9zaGFyZWRPYmplY3RQb29sOwog
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxMb2NhbGU+
PiBMb2NhbGVJZGVudGlmaWVyVG9Mb2NhbGVNYXA7CisgICAgdXNpbmcgTG9jYWxlSWRlbnRpZmll
clRvTG9jYWxlTWFwID0gSGFzaE1hcDxBdG9tU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxl
Pj47CiAgICAgTG9jYWxlSWRlbnRpZmllclRvTG9jYWxlTWFwIG1fbG9jYWxlQ2FjaGU7CiAKICAg
ICBSZWZQdHI8RG9jdW1lbnQ+IG1fdGVtcGxhdGVEb2N1bWVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGJhZTNi
NWIzYzlmMDcyZTAwNzJiNzJiOGU5NWU0YTMyNjk3ZmZlMGEuLjg3OGQ3ZDFhOGI1NDM3YTE5YzA1
NGRlMTQ3YmZmNTFmYzhmYTJmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFs
dGVybmF0aXZlVGV4dFR5cGUKIAogICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9u
LCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIg
aXQuCiAgICAgaWYgKHR5cGUgPT0gQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb24pCi0gICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOworICAgICAgICBtX3JhbmdlV2l0
aEFsdGVybmF0aXZlID0gV1RGOjpudWxsb3B0OwogICAgIG1fdHlwZSA9IHR5cGU7CiAgICAgbV90
aW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CiB9CkBAIC0x
MDksNyArMTA5LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdGFydEFsdGVy
bmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZQogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB7CiAgICAgbV90aW1l
ci5zdG9wKCk7Ci0gICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7CisgICAgbV9y
YW5nZVdpdGhBbHRlcm5hdGl2ZSA9IFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgb2xkU2VsZWN0aW9uKQpAQCAtMTM5LDI2ICsxMzksMjYgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHMKICAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCiAgICAgICAgIGhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5h
dGl2ZVRleHRBY2NlcHRlZCkpOyAKICAgICBlbHNlCi0gICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgPSBudWxscHRyOworICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RGOjpu
dWxsb3B0OwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdD
b3JyZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZTsK
KyAgICByZXR1cm4gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5oYXNWYWx1ZSgpOwogfQogCi1ib29s
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdl
JiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAorYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChjb25zdCBTaW1wbGVSYW5nZSYgbWlzc3BlbGxpbmdS
YW5nZSkgY29uc3QKIHsKICAgICByZXR1cm4gIW1fZG9jdW1lbnQubWFya2VycygpLmhhc01hcmtl
cnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3coUmFuZ2UmIHJh
bmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQordm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpzaG93KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKICAgICBhdXRvIGJvdW5kaW5nQm94ID0gcm9v
dFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UpOwogICAgIGlmIChib3VuZGluZ0JveC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4
dChyYW5nZVRvUmVwbGFjZSk7Ci0gICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9ICZyYW5nZVRv
UmVwbGFjZTsKKyAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2VUb1JlcGxhY2U7CiAg
ICAgbV9kZXRhaWxzID0gcmVwbGFjZW1lbnQ7CiAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CiAgICAg
aWYgKEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50
KCkpCkBAIC0yMDQsMTMgKzIwNCwxMyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKIAogICAgIFBv
c2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCk7CiAKLSAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24o
KSA9PSBjYXJldFBvc2l0aW9uKSB7CisgICAgaWYgKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihtX3JhbmdlV2l0aEFsdGVybmF0aXZlLT5lbmQpID09IGNhcmV0UG9zaXRpb24pIHsKICAgICAg
ICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0gCiAgICAgCiAgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUg
d2hlcmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBz
dGlsbCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3Jy
ZWN0aW9uLgotICAgIEFTU0VSVChtX3JhbmdlV2l0aEFsdGVybmF0aXZlLT5lbmRQb3NpdGlvbigp
ID09IGNhcmV0UG9zaXRpb24pOworICAgIEFTU0VSVChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24obV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kKSA9PSBjYXJldFBvc2l0aW9uKTsKICAgICBk
aXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVkKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkBAIC0yNjQsMTEgKzI2NCwxMSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNw
ZWxsaW5nU3VnZ2VzdGlvbnM6IHsKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZl
IHx8IHBsYWluVGV4dCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkgIT0gbV9vcmlnaW5hbFRleHQp
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQo
VGV4dENoZWNraW5nUGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZSgqbV9yYW5nZVdpdGhBbHRlcm5h
dGl2ZSkpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0
aW9uczsKICAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9vcmlnaW5h
bFRleHQsIHBhcmFncmFwaFRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IHN1Z2dlc3Rpb25zKTsKICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7CisgICAgICAgICAgICBt
X3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5m
aXJzdCgpOwpAQCAtMzAzLDExICszMDMsMTAgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjp0aW1lckZpcmVkKCkKIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5k
bGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICBS
YW5nZSogcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgp
OwotICAgIGlmICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgbV9kb2N1bWVudCAhPSByYW5nZVdp
dGhBbHRlcm5hdGl2ZS0+b3duZXJEb2N1bWVudCgpKQorICAgIGlmICghbV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZSB8fCAmbV9kb2N1bWVudCAhPSAmbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnQu
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGN1cnJlbnRXb3JkID0g
cGxhaW5UZXh0KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3Jk
ID0gcGxhaW5UZXh0KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAvLyBDaGVjayB0byBz
ZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBi
ZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgogICAgIGlm
IChjdXJyZW50V29yZCAhPSBtX29yaWdpbmFsVGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzE3
LDIyICszMTYsMjIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRl
cm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3UKICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246CiAgICAgICAgIGlm
IChyZXN1bHQubGVuZ3RoKCkpCi0gICAgICAgICAgICBhcHBseUFsdGVybmF0aXZlVGV4dFRvUmFu
Z2UoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fdHlwZSwgbWFya2VyVHlwZXNGb3JB
dXRvY29ycmVjdGlvbigpKTsKKyAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZSgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVzRm9y
QXV0b2NvcnJlY3Rpb24oKSk7CiAgICAgICAgIGVsc2UgaWYgKCFtX2lzRGlzbWlzc2VkQnlFZGl0
aW5nKQotICAgICAgICAgICAgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9j
dW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9vcmlnaW5hbFRleHQpOworICAgICAg
ICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGRNYXJrZXIoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFy
a2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOgogICAgIGNhc2UgQWx0ZXJu
YXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CiAgICAgICAgIGlmIChyZXN1bHQubGVu
Z3RoKCkpCi0gICAgICAgICAgICBhcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoKnJhbmdlV2l0
aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fdHlwZSwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgp
KTsKKyAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqbV9yYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZURpY3RhdGlvbkFs
dGVybmF0aXZlczoKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGFw
cGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3VsdCwg
bV90eXBlLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2ZSgpKTsKKyAg
ICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqbV9yYW5nZVdpdGhBbHRlcm5h
dGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVzRm9yQXBwbGllZERpY3RhdGlvbkFsdGVy
bmF0aXZlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX3JhbmdlV2l0aEFsdGVy
bmF0aXZlID0gbnVsbHB0cjsKKyAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RGOjpudWxs
b3B0OwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCkBAIC00MjMsMTMgKzQyMiwxMyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2Nv
cnJlY3Rpb25SZXNwbwogICAgICAgICBjbGllbnQtPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UocmVzcG9uc2UsIHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZSkp
OwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChSYW5n
ZSYgY2hhbmdlZFJhbmdlKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2
ZXJzZWQoY29uc3QgU2ltcGxlUmFuZ2UmIGNoYW5nZWRSYW5nZSkKIHsKICAgICBjaGFuZ2VkUmFu
Z2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKGNo
YW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIGNoYW5n
ZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihj
aGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0K
IAotdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5nZSYg
cmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKK3ZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHJl
cGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiB7CiAgICAgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS5zdGFydENvbnRhaW5l
cigpLmRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDogbWFy
a2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CkBAIC00NDAsNyArNDM5LDcgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRS
YW5nZSwgY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLXZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFu
Z2UmIHJhbmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3Ry
aW5nJiBjb3JyZWN0aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRT
cGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24pCiB7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJz
ID0gcmFuZ2VPZkNvcnJlY3Rpb24uc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMo
KTsKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IGNvcnJlY3RlZE9uY2VNYXJr
ZXJzID0gbWFya2Vycy5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRN
YXJrZXI6OkF1dG9jb3JyZWN0ZWQpOwpAQCAtNDg2LDcgKzQ4NSw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2Nv
cnJlY3Rpb25BCiAgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0No
YXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29y
aWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0
aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNl
ZCkKIHsKICAgICBhdXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgaWYg
KG1hcmtlcnMuaGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50KSkgewpAQCAtNTAxLDEwICs1MDAsOCBAQCBib29sIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29u
c3QgVAogICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERv
Y3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVdpdGhBbHRlcm5hdGl2ZS5z
dGFydFBvc2l0aW9uKCk7Ci0gICAgUG9zaXRpb24gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24g
PSBiZWdpbm5pbmdPZlJhbmdlLnByZXZpb3VzKCk7Ci0KLSAgICBhdXRvIHByZWNlZGluZ0NoYXJh
Y3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQocHJlY2VkaW5nQ2hh
cmFjdGVyUG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYmVnaW5uaW5nT2ZSYW5nZSkgfTsK
KyAgICBhdXRvIGJlZm9yZVByZWNlZGluZ0NoYXJhY3RlciA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCkucHJldmlvdXMoKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9p
bnQoYmVmb3JlUHJlY2VkaW5nQ2hhcmFjdGVyKSwgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuc3RhcnQg
fTsKIAogICAgIGZvciAoYXV0byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZShwcmVj
ZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlv
bikpIHsKICAgICAgICAgaWYgKG1hcmtlci0+ZGVzY3JpcHRpb24oKSA9PSBzdHJpbmdUb0JlUmVw
bGFjZWQpCkBAIC01MjQsNyArNTIxLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBp
ZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2Rl
ID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwg
bm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFNpbXBsZVJh
bmdlIHsgeyAqbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCkgfSwgeyAqbm9kZSwgbWFya2VyLmVu
ZE9mZnNldCgpIH0gfTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJh
bmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NzcsMjUgKzU3NCwyMyBAQCBTdHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KEFsdAogICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0
cmluZyYgYWx0ZXJuYXRpdmUsIEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQpCit2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUsIEFs
dGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQpCiB7CiAgICAgLy8gQWZ0ZXIgd2UgcmVw
bGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgd2UgbmVlZCB0byBh
ZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgogICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQg
dGhlIHJlcGxhY2VtZW50LHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUg
c3RhcnQgcG9zaXRpb24KICAgICAvLyBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguCiAKICAg
ICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQg
d2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAg
YXV0byBjb3JyZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHJhbmdlLnN0YXJ0UG9zaXRpb24oKTsKLSAg
ICBhdXRvIGNvcnJlY3Rpb25TdGFydCB7IG1ha2VCb3VuZGFyeVBvaW50KGNvcnJlY3Rpb25TdGFy
dFBvc2l0aW9uKSB9OwotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgeyBtYWtlQm91bmRhcnlQb2lu
dChzdGFydE9mUGFyYWdyYXBoKGNvcnJlY3Rpb25TdGFydFBvc2l0aW9uKSkgfTsKLSAgICBpZiAo
IWNvcnJlY3Rpb25TdGFydCB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgYXV0byBwYXJhZ3JhcGhT
dGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSkpOworICAgIGlmICghcGFyYWdyYXBoU3RhcnQpCiAg
ICAgICAgIHJldHVybjsKLSAgICBhdXRvIHRyZWVTY29wZVJvb3QgPSBtYWtlUmVmKGNvcnJlY3Rp
b25TdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKTsKKyAgICBhdXRvIHRy
ZWVTY29wZVJvb3QgPSBtYWtlUmVmKHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJlZVNjb3BlKCku
cm9vdE5vZGUoKSk7CiAgICAgYXV0byB0cmVlU2NvcGVTdGFydCA9IEJvdW5kYXJ5UG9pbnQgeyB0
cmVlU2NvcGVSb290LmdldCgpLCAwIH07Ci0gICAgYXV0byBjb3JyZWN0aW9uT2Zmc2V0SW5QYXJh
Z3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKmNvcnJlY3Rpb25TdGFy
dCB9KTsKKyAgICBhdXRvIGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNv
dW50KHsgKnBhcmFncmFwaFN0YXJ0LCByYW5nZS5zdGFydCB9KTsKICAgICBhdXRvIHBhcmFncmFw
aE9mZnNldEluVHJlZVNjb3BlID0gY2hhcmFjdGVyQ291bnQoeyB0cmVlU2NvcGVTdGFydCwgKnBh
cmFncmFwaFN0YXJ0IH0pOwogCiAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2Fs
bGVyIG9mIG1heSBrZWVwIGEgcmVmZXJuZWNlIHRvIHRoZSBvcmlnaW5hbCByYW5nZSBhbmQgbW9k
aWZ5IGl0LgotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZS5jbG9u
ZVJhbmdlKCksIGFsdGVybmF0aXZlKS0+YXBwbHkoKTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgYWx0ZXJuYXRpdmUpLT5hcHBs
eSgpOwogCiAgICAgLy8gUmVjYWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLCBzaW5jZSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00sIHN1
Y2ggdGhhdCB0aGUgb3JpZ2luYWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiBp
cyBubyBsb25nZXIgdmFsaWQuIFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKICAgICBh
dXRvIHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmVzb2x2ZUNo
YXJhY3RlckxvY2F0aW9uKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyh0cmVlU2NvcGVS
b290KSwgcGFyYWdyYXBoT2Zmc2V0SW5UcmVlU2NvcGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAppbmRleCAzZDFmYjNjMGFjMTY4
NzFjNTE0OWMyNDBkOTZkZDNkNzk5ZmY4ZjA0Li5iMWVhZDNlMDRkZGQ2OTNiYzU4MmZmMTY4Zjg1
YTBmOTVkNjYzNzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtNDAsNyArNDAsNiBAQCBjbGFzcyBFZGl0Q29tbWFuZDsK
IGNsYXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBFZGl0b3JDbGllbnQ7CiBjbGFz
cyBFdmVudDsKLWNsYXNzIFJhbmdlOwogY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogCkBAIC02OCw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0
b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCiAgICAgdm9p
ZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIFVOTEVTU19FTkFC
TEVEKHsgfSkKLSAgICB2b2lkIHNob3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVw
bGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudCk7IH0pCisgICAgdm9pZCBzaG93KGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFS
QU0ocmVwbGFjZW1lbnQpOyB9KQogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3
YXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxz
ZTsgfSkKQEAgLTg1LDE2ICs4NCwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVDYW5jZWxP
cGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAgICBib29sIGhhc1BlbmRpbmdDb3Jy
ZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCi0gICAgYm9v
bCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3Qg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0
cnVlOyB9KQorICAgIGJvb2wgaXNTcGVsbGluZ01hcmtlckFsbG93ZWQoY29uc3QgU2ltcGxlUmFu
Z2UmIG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFN
KG1pc3NwZWxsaW5nUmFuZ2UpOyByZXR1cm4gdHJ1ZTsgfSkKICAgICBib29sIGlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNl
OyB9KQogICAgIGJvb2wgc2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCk7CiAKICAgICB2
b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU2ltcGxlUmFuZ2UmIHJlcGxhY2Vt
ZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9KQotICAgIHZvaWQgbWFya1JldmVyc2Vk
KFJhbmdlJiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5n
ZWRSYW5nZSk7IH0pCi0gICAgdm9pZCBtYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRSYW5n
ZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCisg
ICAgdm9pZCBtYXJrUmV2ZXJzZWQoY29uc3QgU2ltcGxlUmFuZ2UmIGNoYW5nZWRSYW5nZSkgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKKyAgICB2b2lkIG1h
cmtDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNl
ZFJhbmdlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKIAogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIG5vdCBiZSBj
YXJyaWVkIG91dC4KLSAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiwgUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2Vk
LCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVT
RURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJlcGxh
Y2VkKTsgcmV0dXJuIHRydWU7IH0pOworICAgIGJvb2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0Jl
UmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmLCBjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2Vk
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNF
RF9QQVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyByZXR1cm4gdHJ1ZTsgfSk7CiAgICAgdm9pZCBk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5hbFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob3JpZ2lu
YWxTdHJpbmcpOyB9KQogCiAgICAgYm9vbCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5n
JiwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYsIEV2ZW50Kik7CkBAIC0xMDcs
NyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50
ID0gU3RyaW5nOwogCiAgICAgc3RydWN0IEFsdGVybmF0aXZlVGV4dEluZm8gewotICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlV2l0aEFsdGVybmF0aXZlOworICAgICAgICBTaW1wbGVSYW5nZSBy
YW5nZVdpdGhBbHRlcm5hdGl2ZTsKICAgICAgICAgYm9vbCBpc0FjdGl2ZTsKICAgICAgICAgQWx0
ZXJuYXRpdmVUZXh0VHlwZSB0eXBlOwogICAgICAgICBTdHJpbmcgb3JpZ2luYWxUZXh0OwpAQCAt
MTE2LDcgKzExNSw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CiAgICAgdm9pZCB0aW1lckZpcmVkKCk7Ci0g
ICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihS
YW5nZSYgcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pOworICAgIHZvaWQgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VG
b3JNb2RpZmllZENvcnJlY3Rpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlT2ZDb3JyZWN0aW9u
LCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKIAog
ICAgIGJvb2wgc2hvdWxkU3RhcnRUaW1lckZvcihjb25zdCBEb2N1bWVudE1hcmtlciYsIGludCBl
bmRPZmZzZXQpIGNvbnN0OwogICAgIGJvb2wgcmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29u
c3QgRG9jdW1lbnRNYXJrZXImLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZXb3JkUG9zaXRpb24pOwpA
QCAtMTI4LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVz
cGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwog
CiAgICAgVGltZXIgbV90aW1lcjsKLSAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmU7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmU7
CiAgICAgYm9vbCBtX2lzQWN0aXZlOwogICAgIGJvb2wgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZzsK
ICAgICBBbHRlcm5hdGl2ZVRleHRUeXBlIG1fdHlwZTsKQEAgLTE0MCw3ICsxMzksNyBAQCBwcml2
YXRlOgogI2VuZGlmCiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpIHx8IFVTRShBVVRP
Q09SUkVDVElPTl9QQU5FTCkKICAgICBTdHJpbmcgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVk
QWx0ZXJuYXRpdmVUZXh0KEFsdGVybmF0aXZlVGV4dFR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlKTsKLSAgICB2b2lkIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5n
ZSYsIGNvbnN0IFN0cmluZyYsIEFsdGVybmF0aXZlVGV4dFR5cGUsIE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4pOworICAgIHZvaWQgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1Jh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU3RyaW5nJiwgQWx0ZXJuYXRpdmVUZXh0VHlw
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CiAgICAgQWx0ZXJuYXRp
dmVUZXh0Q2xpZW50KiBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKTsKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KaW5kZXggMzI3
Njk0NWYyYzc4ODcwMGJlNzI2ODViYmQ4NzI1YThmZGQ3OWRiMy4uZmM5MGMxM2IxYjliMGNiNzM2
NWYzODM2MzBiYmJmMTlmODY3YzEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMjYwLDEyICsyNjAsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFJFVkVBTCkKIAotc3RkOjp0dXBsZTxSZWZQdHI8UmFu
Z2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQorT3B0aW9uYWw8c3RkOjp0dXBsZTxT
aW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCiAKICAgICBpZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2
ZWFsQ29yZUxpYnJhcnkoKSB8fCAhZ2V0UlZJdGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBT
aW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBn
cmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCk7CkBAIC0yNzUsNyArMjc1LDcgQEAgc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxl
Y3Rpb24oY28KICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxl
Y3Rpb25TdGFydCk7CiAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxl
Y3Rpb25FbmQpOwogICAgIGlmIChwYXJhZ3JhcGhTdGFydC5pc051bGwoKSB8fCBwYXJhZ3JhcGhF
bmQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0g
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwogICAgIGF1dG8gc2VsZWN0aW9uQ2hh
cmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rp
b25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOwpAQCAtMjg1LDMy
ICsyODUsMzIgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICBTdHJpbmcgaXRlbVN0cmlu
ZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdo
dFJhbmdlID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVt
U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsK
IAotICAgIHJldHVybiB7IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1
bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2UpKSwgbmlsIH07CisgICAgcmV0dXJuIHsg
eyByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFu
Z2UpLCBuaWwgfSB9OwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCi0gICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotc3Rk
Ojp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6
cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkK
K09wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAKICAg
ICBpZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2ZWFsQ29yZUxpYnJhcnkoKSB8fCAhZ2V0UlZJ
dGVtQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgYXV0byogbm9kZSA9IGhpdFRlc3RSZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
cmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRoZSBwb2ludC4KICAgICBhdXRvIGZyYW1lUG9pbnQgPSBo
aXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gcG9zaXRp
b24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CiAgICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKQpAQCAtMzE5LDM1ICszMTksMzYgQEAgc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRl
c3RSZXN1bHQKICAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7CiAgICAgTlNVSW50ZWdlciBoaXRJbmRleDsKLSAgICBS
ZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gZnVsbENoYXJhY3RlclJhbmdlOwogICAgIAogICAgIGlmIChzZWxlY3Rpb24uc2VsZWN0aW9u
VHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uKSB7CiAgICAgICAgIGF1
dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAgICAgIGF1
dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKIAogICAgICAgICAvLyBB
cyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhz
IG9mIHRleHQuCi0gICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpOwotICAgICAgICAKLSAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgICAgICBpZiAo
IWZ1bGxDaGFyYWN0ZXJSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9
OworICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRP
ZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpOworICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9
IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCkpOworICAgICAg
ICBpZiAoIXBhcmFncmFwaFN0YXJ0IHx8ICFwYXJhZ3JhcGhFbmQpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2Uo
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pLAorICAgICAgICBmdWxsQ2hhcmFjdGVy
UmFuZ2UgPSB7IHsgKnBhcmFncmFwaFN0YXJ0LCAqcGFyYWdyYXBoRW5kIH0gfTsKKyAgICAgICAg
c2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KSwKICAgICAgICAgICAg
IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfSkpOwotICAgICAgICBoaXRJbmRleCA9IGNo
YXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VC
b3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJD
b3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsK
ICAgICB9IGVsc2UgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRp
bmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5n
Rm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5OjpXb3Jk
R3JhbnVsYXJpdHkpOwogICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JM
aW5lUnVsZXMuc3RhcnQoKTsKIAogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcg
dG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQu
Ci0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlv
bkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVy
UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKyAgICAgICAgYXV0
byBleHBhbmRlZFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJz
KHBvc2l0aW9uLCAyNTApOworICAgICAgICBpZiAoIWV4cGFuZGVkUmFuZ2UpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHsg
KmV4cGFuZGVkUmFuZ2UgfTsKIAogICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdl
KE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKm1h
a2VCb3VuZGFyeVBvaW50KGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1h
a2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0
ZXJDb3VudCh7IGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnQsICptYWtlQm91bmRhcnlQb2ludChw
b3NpdGlvbikgfSk7CiAgICAgfQogCiAgICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJW
U2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5n
ZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0
ZVNlbGVjdGlvbjpuaWxdOwpAQCAtMzU2LDEzICszNTcsMTMgQEAgc3RkOjp0dXBsZTxSZWZQdHI8
UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RS
ZXN1bHQKICAgICBhdXRvIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0
YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5n
ZV0pLmdldCgpLmhpZ2hsaWdodFJhbmdlOwogCiAgICAgaWYgKGhpZ2hsaWdodFJhbmdlLmxvY2F0
aW9uID09IE5TTm90Rm91bmQgfHwgIWhpZ2hsaWdodFJhbmdlLmxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
Ci0gICAgcmV0dXJuIHsgY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZnVs
bENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZSkpLCBuaWwgfTsKKyAgICByZXR1cm4geyB7
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5n
ZSksIG5pbCB9IH07CiAgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIAot
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgCiB9CiAKQEAgLTQyMyw3ICs0MjQsNyBAQCBzdGQ6OnR1cGxlPE5TU3RyaW5nICosIE5TRGlj
dGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oUAogICAg
IHJldHVybiB7IEAiIiwgbmlsIH07CiB9CiAKLXN0YXRpYyBXS1JldmVhbENvbnRyb2xsZXIgc2hv
d1BvcHVwT3JDcmVhdGVBbmltYXRpb25Db250cm9sbGVyKGJvb2wgY3JlYXRlQW5pbWF0aW9uQ29u
dHJvbGxlciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbywg
UmV2ZWFsVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0b3Im
KT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlv
bjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxiYWNr
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0b3IpCitzdGF0aWMgV0tS
ZXZlYWxDb250cm9sbGVyIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJvbGxlcihib29s
IGNyZWF0ZUFuaW1hdGlvbkNvbnRyb2xsZXIsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRp
Y3Rpb25hcnlQb3B1cEluZm8sIENvY29hVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywg
Y29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3
Q29udmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRp
Y2F0b3IpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgCkBAIC01MTMs
NyArNTE0LDcgQEAgc3RhdGljIFdLUmV2ZWFsQ29udHJvbGxlciBzaG93UG9wdXBPckNyZWF0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIoYm9vbCBjcmVhdGVBbmltYXQKICAgICAKIH0KIAotdm9pZCBEaWN0
aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlv
bmFyeVBvcHVwSW5mbywgUmV2ZWFsVmlldyAqdmlldywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lk
KFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29u
c3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29u
dmVyc2lvbkNhbGxiYWNrLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjbGVhclRleHRJbmRpY2F0
b3IpCit2b2lkIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cChjb25zdCBEaWN0aW9uYXJ5UG9w
dXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvLCBDb2NvYVZpZXcgKnZpZXcsIGNvbnN0IFdURjo6
RnVuY3Rpb248dm9pZChUZXh0SW5kaWNhdG9yJik+JiB0ZXh0SW5kaWNhdG9ySW5zdGFsbGF0aW9u
Q2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRSZWN0KEZsb2F0UmVjdCk+JiByb290
Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xl
YXJUZXh0SW5kaWNhdG9yKQogewogICAgIHNob3dQb3B1cE9yQ3JlYXRlQW5pbWF0aW9uQ29udHJv
bGxlcihmYWxzZSwgZGljdGlvbmFyeVBvcHVwSW5mbywgdmlldywgdGV4dEluZGljYXRvckluc3Rh
bGxhdGlvbkNhbGxiYWNrLCByb290Vmlld1RvVmlld0NvbnZlcnNpb25DYWxsYmFjaywgV1RGTW92
ZShjbGVhclRleHRJbmRpY2F0b3IpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXAuaAppbmRleCAxNjMxOTY3ZmY5MmFkZjhhODg5NWY3ZmVjNTc4MmQ4
YzYxMjNhNjM3Li43OWFjODVhNzFhNjJkZDI2ZjZkNWY1ZmE0ZDhkOGE3MWEzMjMxOGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cC5oCkBAIC0yOCwz
OCArMjgsNDAgQEAKICNpZiBQTEFURk9STShDT0NPQSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnlQ
b3B1cEluZm8uaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKwogI2lmIFBMQVRGT1JNKE1B
QykKICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6
ZXJTUEkuaD4KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CisjZW5kaWYKIAotT0JKQ19DTEFTUyBOU1ZpZXc7Ci1PQkpDX0NMQVNTIFVJVmlldzsKLU9C
SkNfQ0xBU1MgUERGU2VsZWN0aW9uOworQGNsYXNzIE5TVmlldzsKK0BjbGFzcyBQREZTZWxlY3Rp
b247CitAY2xhc3MgVUlWaWV3OwogCiAjaWYgUExBVEZPUk0oTUFDKQotdHlwZWRlZiBpZCA8TlNJ
bW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPiBXS1JldmVhbENvbnRyb2xsZXI7Ci11
c2luZyBSZXZlYWxWaWV3ID0gTlNWaWV3OwordXNpbmcgV0tSZXZlYWxDb250cm9sbGVyID0gaWQg
PE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj47Cit1c2luZyBDb2NvYVZpZXcg
PSBOU1ZpZXc7CiAjZWxzZQotdHlwZWRlZiBpZCBXS1JldmVhbENvbnRyb2xsZXI7Ci11c2luZyBS
ZXZlYWxWaWV3ID0gVUlWaWV3OwotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK3VzaW5nIFdLUmV2
ZWFsQ29udHJvbGxlciA9IGlkOwordXNpbmcgQ29jb2FWaWV3ID0gVUlWaWV3OworI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKLWNsYXNzIFJhbmdl
OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAorc3RydWN0IFNpbXBsZVJhbmdlOworCiBjbGFz
cyBEaWN0aW9uYXJ5TG9va3VwIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gcmFuZ2VGb3JTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiByYW5nZUF0SGl0VGVzdFJl
c3VsdChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE9w
dGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gcmFuZ2VGb3JT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBPcHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IHJh
bmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp0dXBsZTxOU1N0cmluZyAqLCBOU0RpY3Rpb25hcnkgKj4gc3RyaW5n
Rm9yUERGU2VsZWN0aW9uKFBERlNlbGVjdGlvbiAqKTsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQg
bW92ZS91bmlmeSBkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UgaGVyZSB0b28uCiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzaG93UG9wdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYsIFJldmVhbFZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFRleHRJbmRpY2F0
b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFjaywgY29uc3QgV1RGOjpGdW5j
dGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9WaWV3Q29udmVyc2lvbkNhbGxi
YWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2xlYXJUZXh0SW5kaWNhdG9y
ID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2hvd1BvcHVwKGNv
bnN0IERpY3Rpb25hcnlQb3B1cEluZm8mLCBDb2NvYVZpZXcgKiwgY29uc3QgV1RGOjpGdW5jdGlv
bjx2b2lkKFRleHRJbmRpY2F0b3ImKT4mIHRleHRJbmRpY2F0b3JJbnN0YWxsYXRpb25DYWxsYmFj
aywgY29uc3QgV1RGOjpGdW5jdGlvbjxGbG9hdFJlY3QoRmxvYXRSZWN0KT4mIHJvb3RWaWV3VG9W
aWV3Q29udmVyc2lvbkNhbGxiYWNrID0gbnVsbHB0ciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y2xlYXJUZXh0SW5kaWNhdG9yID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgaGlkZVBvcHVwKCk7CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNzAsNCArNzIs
NCBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggOGYwMDhkNTEzMjg2NGZkYWI3N2VkYTNlYjk0
ZmM0OGFjNDBjZmNkNi4uNGYyNzJlZWU4MTM4MTQwYzliMzY1Y2EyMTE3M2Y2YjM0MDk0ZjIxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExl
Z2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
TGVnYWN5Lm1tCkBAIC03NSwxMSArNzUsMTEgQEAgc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFp
bnNQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWaXMKICAg
ICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29udGFpbnMocG9zaXRp
b24pOwogfQogCi1zdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0
aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCitPcHRpb25hbDxzdGQ6OnR1cGxlPFNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkg
Kj4+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5l
ZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0
ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwpAQCAtODksNyArODksNyBAQCBzdGQ6OnR1cGxl
PFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZv
clNlbGVjdGlvbihjbwogICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2lu
dChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CiAgICAgYXV0byBwYXJhZ3JhcGhF
bmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKICAg
ICBpZiAoIXBhcmFncmFwaFN0YXJ0IHx8ICFwYXJhZ3JhcGhFbmQpCi0gICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVj
dGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKICAgICBhdXRv
IHBhcmFncmFwaFJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3Jh
cGhFbmQgfTsKQEAgLTk3LDIzICs5NywyMyBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAg
IE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICB0b2tlblJhbmdlKHBsYWluVGV4dChw
YXJhZ3JhcGhSYW5nZSksIGNoYXJhY3RlclJhbmdlKHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25S
YW5nZSksICZvcHRpb25zKTsKIAotICAgIHJldHVybiB7IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
ZWRSYW5nZSksIG9wdGlvbnMgfTsKKyAgICByZXR1cm4geyB7ICpzZWxlY3RlZFJhbmdlLCBvcHRp
b25zIH0gfTsKIH0KIAotc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4g
RGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYgaGl0VGVzdFJlc3VsdCkKK09wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGlj
dGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKIHsKICAgICBhdXRvKiBub2RlID0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBEb24ndCBkbyBhbnl0aGlu
ZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgogICAgIGF1dG8gZnJhbWVQ
b2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpOwogICAg
IGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCi0gICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0
byBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsK
ICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBzdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdAogICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2Ug
MjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KICAgICBh
dXRvIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hh
cmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKLSAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBhdXRvIGZ1bGxDaGFyYWN0ZXJTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZ1
bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKICAgICBhdXRvIHBvc2l0aW9uQm91
bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7CiAgICAgaWYgKCFmdWxsQ2hhcmFj
dGVyU3RhcnQgfHwgIXBvc2l0aW9uQm91bmRhcnkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgTlNSYW5nZSByYW5n
ZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKmZ1bGxDaGFyYWN0ZXJTdGFy
dCwgKnBvc2l0aW9uQm91bmRhcnkgfSksIDApOwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9
IG5pbDsKQEAgLTE0NSw5ICsxNDUsOSBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGlj
dGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdAogICAgIC8v
IHRva2VuUmFuZ2Ugc29tZXRpbWVzIHJldHVybnMge05TTm90Rm91bmQsIDB9IGlmIGl0IHdhcyB1
bmFibGUgdG8gZGV0ZXJtaW5lIGEgZ29vZCBzdHJpbmcuCiAgICAgLy8gRklYTUUgKDE1OTA2Myk6
IFdlIHNob3VsZG4ndCBuZWVkIHRvIGNoZWNrIGZvciB6ZXJvIGxlbmd0aCBoZXJlLgogICAgIGlm
IChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kIHx8ICFleHRyYWN0ZWRSYW5n
ZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHsgY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVD
aGFyYWN0ZXJSYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBleHRyYWN0ZWRSYW5nZSkpLCBvcHRp
b25zIH07CisgICAgcmV0dXJuIHsgeyByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1bGxDaGFyYWN0
ZXJSYW5nZSwgZXh0cmFjdGVkUmFuZ2UpLCBvcHRpb25zIH0gfTsKIH0KIAogc3RhdGljIHZvaWQg
ZXhwYW5kU2VsZWN0aW9uQnlDaGFyYWN0ZXJzKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uLCBOU0lu
dGVnZXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0Fk
ZGVkQmVmb3JlU3RhcnQsIE5TSW50ZWdlciYgY2hhcmFjdGVyc0FkZGVkQWZ0ZXJFbmQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggNzFmMWY5MTQ2ZjBj
OWEyMjg4ZTEwMDRlYjZlODk5NWNmZDc4NTdhMC4uYzA5MzBiNjM0OTVlNzE4MTU5OTFhNDA2YTRk
NjY1YTI3YmE3NzE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRI
YW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1h
Yy5tbQpAQCAtMTEzNywxNCArMTEzNywxMyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1do
ZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZQogVmlz
aWJsZVNlbGVjdGlvbiBFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbUhpdFRlc3RS
ZXN1bHRCYXNlZE9uTG9va3VwKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBp
ZiAoIW1fZnJhbWUuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTZWxlY3RCYXNlZE9uRGljdGlv
bmFyeUxvb2t1cCgpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOworICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICBzdGQ6OnRpZShy
YW5nZSwgc3RkOjppZ25vcmUpID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1
bHQocmVzdWx0KTsKKyAgICBhdXRvIHJhbmdlID0gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQocmVzdWx0KTsKICAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gVmlz
aWJsZVNlbGVjdGlvbigpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIFZpc2li
bGVTZWxlY3Rpb24oKnJhbmdlKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8U2ltcGxlUmFuZ2U+KCpy
YW5nZSk7CiB9CiAKIHN0YXRpYyBJbnRTaXplIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9yRm9y
U2NyZWVuQm91bmRhcmllcyhjb25zdCBJbnRQb2ludCYgc2NyZWVuUG9pbnQsIGNvbnN0IEZsb2F0
UmVjdCYgc2NyZWVuUmVjdCkKQEAgLTExNTUsMzggKzExNTQsMzggQEAgc3RhdGljIEludFNpemUg
YXV0b3Njcm9sbEFkanVzdG1lbnRGYWN0b3JGb3JTY3JlZW5Cb3VuZGFyaWVzKGNvbnN0IEludFBv
aW50JiBzY3IKICAgICAvLyB3aWxsIG9jY3VyIGFzIGV4Y3BlY3RlZC4gVGhpcyBmdW5jdGlvbiBm
aWd1cmVzIG91dCBqdXN0IGhvdyBtdWNoIHRvIGFkanVzdCB0aGUgYXV0b3Njcm9sbCBhbW91bnQg
YnkKICAgICAvLyBpbiBvcmRlciB0byBnZXQgYXV0b3Njcm9sbGluZyB0byBmZWVsIG5hdHVyYWwg
aW4gdGhpcyBzaXR1YXRpb24uCiAKKyAgICBjb25zdGV4cHIgZmxvYXQgZWRnZURpc3RhbmNlVGhy
ZXNob2xkID0gNTA7CisgICAgY29uc3RleHByIGZsb2F0IHBpeGVsc011bHRpcGxpZXIgPSAyMDsK
KwogICAgIEludFNpemUgYWRqdXN0bWVudEZhY3RvcjsKICAgICAKLSNkZWZpbmUgRURHRV9ESVNU
QU5DRV9USFJFU0hPTEQgNTAKLSNkZWZpbmUgUElYRUxTX01VTFRJUExJRVIgMjAKLQogICAgIGZs
b2F0IHNjcmVlbkxlZnRFZGdlID0gc2NyZWVuUmVjdC54KCk7Ci0gICAgZmxvYXQgaW5zZXRTY3Jl
ZW5MZWZ0RWRnZSA9IHNjcmVlbkxlZnRFZGdlICsgRURHRV9ESVNUQU5DRV9USFJFU0hPTEQ7Cisg
ICAgZmxvYXQgaW5zZXRTY3JlZW5MZWZ0RWRnZSA9IHNjcmVlbkxlZnRFZGdlICsgZWRnZURpc3Rh
bmNlVGhyZXNob2xkOwogICAgIGZsb2F0IHNjcmVlblJpZ2h0RWRnZSA9IHNjcmVlblJlY3QubWF4
WCgpOwotICAgIGZsb2F0IGluc2V0U2NyZWVuUmlnaHRFZGdlID0gc2NyZWVuUmlnaHRFZGdlIC0g
RURHRV9ESVNUQU5DRV9USFJFU0hPTEQ7CisgICAgZmxvYXQgaW5zZXRTY3JlZW5SaWdodEVkZ2Ug
PSBzY3JlZW5SaWdodEVkZ2UgLSBlZGdlRGlzdGFuY2VUaHJlc2hvbGQ7CiAgICAgaWYgKHNjcmVl
blBvaW50LngoKSA+PSBzY3JlZW5MZWZ0RWRnZSAmJiBzY3JlZW5Qb2ludC54KCkgPCBpbnNldFNj
cmVlbkxlZnRFZGdlKSB7Ci0gICAgICAgIGZsb2F0IGRpc3RhbmNlRnJvbUVkZ2UgPSBzY3JlZW5Q
b2ludC54KCkgLSBzY3JlZW5MZWZ0RWRnZSAtIEVER0VfRElTVEFOQ0VfVEhSRVNIT0xEOworICAg
ICAgICBmbG9hdCBkaXN0YW5jZUZyb21FZGdlID0gc2NyZWVuUG9pbnQueCgpIC0gc2NyZWVuTGVm
dEVkZ2UgLSBlZGdlRGlzdGFuY2VUaHJlc2hvbGQ7CiAgICAgICAgIGlmIChkaXN0YW5jZUZyb21F
ZGdlIDwgMCkKLSAgICAgICAgICAgIGFkanVzdG1lbnRGYWN0b3Iuc2V0V2lkdGgoKGRpc3RhbmNl
RnJvbUVkZ2UgLyBFREdFX0RJU1RBTkNFX1RIUkVTSE9MRCkgKiBQSVhFTFNfTVVMVElQTElFUik7
CisgICAgICAgICAgICBhZGp1c3RtZW50RmFjdG9yLnNldFdpZHRoKChkaXN0YW5jZUZyb21FZGdl
IC8gZWRnZURpc3RhbmNlVGhyZXNob2xkKSAqIHBpeGVsc011bHRpcGxpZXIpOwogICAgIH0gZWxz
ZSBpZiAoc2NyZWVuUG9pbnQueCgpID49IGluc2V0U2NyZWVuUmlnaHRFZGdlICYmIHNjcmVlblBv
aW50LngoKSA8IHNjcmVlblJpZ2h0RWRnZSkgewotICAgICAgICBmbG9hdCBkaXN0YW5jZUZyb21F
ZGdlID0gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQgLSAoc2NyZWVuUmlnaHRFZGdlIC0gc2NyZWVu
UG9pbnQueCgpKTsKKyAgICAgICAgZmxvYXQgZGlzdGFuY2VGcm9tRWRnZSA9IGVkZ2VEaXN0YW5j
ZVRocmVzaG9sZCAtIChzY3JlZW5SaWdodEVkZ2UgLSBzY3JlZW5Qb2ludC54KCkpOwogICAgICAg
ICBpZiAoZGlzdGFuY2VGcm9tRWRnZSA+IDApCi0gICAgICAgICAgICBhZGp1c3RtZW50RmFjdG9y
LnNldFdpZHRoKChkaXN0YW5jZUZyb21FZGdlIC8gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQpICog
UElYRUxTX01VTFRJUExJRVIpOworICAgICAgICAgICAgYWRqdXN0bWVudEZhY3Rvci5zZXRXaWR0
aCgoZGlzdGFuY2VGcm9tRWRnZSAvIGVkZ2VEaXN0YW5jZVRocmVzaG9sZCkgKiBwaXhlbHNNdWx0
aXBsaWVyKTsKICAgICB9CiAKICAgICBmbG9hdCBzY3JlZW5Ub3BFZGdlID0gc2NyZWVuUmVjdC55
KCk7Ci0gICAgZmxvYXQgaW5zZXRTY3JlZW5Ub3BFZGdlID0gc2NyZWVuVG9wRWRnZSArIEVER0Vf
RElTVEFOQ0VfVEhSRVNIT0xEOworICAgIGZsb2F0IGluc2V0U2NyZWVuVG9wRWRnZSA9IHNjcmVl
blRvcEVkZ2UgKyBlZGdlRGlzdGFuY2VUaHJlc2hvbGQ7CiAgICAgZmxvYXQgc2NyZWVuQm90dG9t
RWRnZSA9IHNjcmVlblJlY3QubWF4WSgpOwotICAgIGZsb2F0IGluc2V0U2NyZWVuQm90dG9tRWRn
ZSA9IHNjcmVlbkJvdHRvbUVkZ2UgLSBFREdFX0RJU1RBTkNFX1RIUkVTSE9MRDsKKyAgICBmbG9h
dCBpbnNldFNjcmVlbkJvdHRvbUVkZ2UgPSBzY3JlZW5Cb3R0b21FZGdlIC0gZWRnZURpc3RhbmNl
VGhyZXNob2xkOwogCiAgICAgaWYgKHNjcmVlblBvaW50LnkoKSA+PSBzY3JlZW5Ub3BFZGdlICYm
IHNjcmVlblBvaW50LnkoKSA8IGluc2V0U2NyZWVuVG9wRWRnZSkgewotICAgICAgICBmbG9hdCBk
aXN0YW5jZUZyb21FZGdlID0gc2NyZWVuUG9pbnQueSgpIC0gc2NyZWVuVG9wRWRnZSAtIEVER0Vf
RElTVEFOQ0VfVEhSRVNIT0xEOworICAgICAgICBmbG9hdCBkaXN0YW5jZUZyb21FZGdlID0gc2Ny
ZWVuUG9pbnQueSgpIC0gc2NyZWVuVG9wRWRnZSAtIGVkZ2VEaXN0YW5jZVRocmVzaG9sZDsKICAg
ICAgICAgaWYgKGRpc3RhbmNlRnJvbUVkZ2UgPCAwKQotICAgICAgICAgICAgYWRqdXN0bWVudEZh
Y3Rvci5zZXRIZWlnaHQoKGRpc3RhbmNlRnJvbUVkZ2UgLyBFREdFX0RJU1RBTkNFX1RIUkVTSE9M
RCkgKiBQSVhFTFNfTVVMVElQTElFUik7CisgICAgICAgICAgICBhZGp1c3RtZW50RmFjdG9yLnNl
dEhlaWdodCgoZGlzdGFuY2VGcm9tRWRnZSAvIGVkZ2VEaXN0YW5jZVRocmVzaG9sZCkgKiBwaXhl
bHNNdWx0aXBsaWVyKTsKICAgICB9IGVsc2UgaWYgKHNjcmVlblBvaW50LnkoKSA+PSBpbnNldFNj
cmVlbkJvdHRvbUVkZ2UgJiYgc2NyZWVuUG9pbnQueSgpIDwgc2NyZWVuQm90dG9tRWRnZSkgewot
ICAgICAgICBmbG9hdCBkaXN0YW5jZUZyb21FZGdlID0gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQg
LSAoc2NyZWVuQm90dG9tRWRnZSAtIHNjcmVlblBvaW50LnkoKSk7CisgICAgICAgIGZsb2F0IGRp
c3RhbmNlRnJvbUVkZ2UgPSBlZGdlRGlzdGFuY2VUaHJlc2hvbGQgLSAoc2NyZWVuQm90dG9tRWRn
ZSAtIHNjcmVlblBvaW50LnkoKSk7CiAgICAgICAgIGlmIChkaXN0YW5jZUZyb21FZGdlID4gMCkK
LSAgICAgICAgICAgIGFkanVzdG1lbnRGYWN0b3Iuc2V0SGVpZ2h0KChkaXN0YW5jZUZyb21FZGdl
IC8gRURHRV9ESVNUQU5DRV9USFJFU0hPTEQpICogUElYRUxTX01VTFRJUExJRVIpOworICAgICAg
ICAgICAgYWRqdXN0bWVudEZhY3Rvci5zZXRIZWlnaHQoKGRpc3RhbmNlRnJvbUVkZ2UgLyBlZGdl
RGlzdGFuY2VUaHJlc2hvbGQpICogcGl4ZWxzTXVsdGlwbGllcik7CiAgICAgfQogCiAgICAgcmV0
dXJuIGFkanVzdG1lbnRGYWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLm1tCmluZGV4
IGUwYjFmMmVlNDVhNTVmNTVmYmMwZDhkMGI0MWRhNTE2MmQ1MmYzYWQuLjdkOWIzNjA2MDcwMWI3
YTg3ODQ5MjEyYmU0N2Q5Yjk1YWJiZGQ5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
Lm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0
ICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbXBvcnQgIlJhbmdlLmgiCisjaW1wb3J0ICJTaW1w
bGVSYW5nZS5oIgogI2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZQbGF5ZXIuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNBY2Nlc3NpYmlsaXR5U1BJ
Lmg+CkBAIC03MiwxMCArNzMsMTIgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJu
YWxzOjpyYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGludCB4LAogICAgIGRvY3Vt
ZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGNvbnN0
ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0
VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVx
dWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6QWxs
b3dDaGlsZEZyYW1lQ29udGVudCB9OwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZG9jdW1l
bnQtPmZyYW1lKCktPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBv
aW50KEludFBvaW50KHgsIHkpLCBoaXRUeXBlKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwot
ICAgIHN0ZDo6dGllKHJhbmdlLCBzdGQ6Omlnbm9yZSkgPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIHJldHVybiBXVEZNb3ZlKHJhbmdlKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGRvY3VtZW50LT5mcmFtZSgpLT5tYWluRnJhbWUoKS5ldmVudEhhbmRs
ZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludCh4LCB5KSwgaGl0VHlwZSk7CisgICAg
YXV0byByYW5nZSA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KHJlc3Vs
dCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gUmVmUHRyPFJhbmdlPiB7IGNyZWF0ZUxpdmVSYW5nZShzdGQ6OmdldDxTaW1wbGVSYW5nZT4o
KnJhbmdlKSkgfTsKIH0KIAogI2VuZGlmCkBAIC05NSwxMyArOTgsMTAgQEAgZG91YmxlIEludGVy
bmFsczo6cHJpdmF0ZVBsYXllclZvbHVtZShjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50
KQogCiBTdHJpbmcgSW50ZXJuYWxzOjplbmNvZGVkUHJlZmVyZW5jZVZhbHVlKGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSkKIHsKLSAgICBhdXRvIHVzZXJEZWZhdWx0cyA9
IGFkb3B0TlMoW1tOU1VzZXJEZWZhdWx0cyBhbGxvY10gaW5pdFdpdGhTdWl0ZU5hbWU6IGRvbWFp
bl0pOwotICAgIGlkIHZhbHVlID0gW3VzZXJEZWZhdWx0cy5nZXQoKSBvYmplY3RGb3JLZXk6a2V5
XTsKLSAgICBOU0Vycm9yICplID0gbmlsOwotICAgIGF1dG8gZGF0YSA9IGFkb3B0TlMoW05TS2V5
ZWRBcmNoaXZlciBhcmNoaXZlZERhdGFXaXRoUm9vdE9iamVjdDp2YWx1ZSByZXF1aXJpbmdTZWN1
cmVDb2Rpbmc6WUVTIGVycm9yOiZlXSk7Ci0gICAgQVNTRVJUKCFlKTsKLSAgICBhdXRvIGVuY29k
ZWRTdHJpbmcgPSBbZGF0YSBiYXNlNjRFbmNvZGVkU3RyaW5nV2l0aE9wdGlvbnM6MF07Ci0gICAg
cmV0dXJuIGVuY29kZWRTdHJpbmc7CisgICAgYXV0byB1c2VyRGVmYXVsdHMgPSBhZG9wdE5TKFtb
TlNVc2VyRGVmYXVsdHMgYWxsb2NdIGluaXRXaXRoU3VpdGVOYW1lOmRvbWFpbl0pOworICAgIGlk
IHZhbHVlID0gW3VzZXJEZWZhdWx0cyBvYmplY3RGb3JLZXk6a2V5XTsKKyAgICBhdXRvIGRhdGEg
PSBhZG9wdE5TKFtOU0tleWVkQXJjaGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6dmFs
dWUgcmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFUyBlcnJvcjpudWxscHRyXSk7CisgICAgcmV0dXJu
IFtkYXRhIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXTsKIH0KIAogU3RyaW5nIElu
dGVybmFsczo6Z2V0VVRJRnJvbVRhZyhjb25zdCBTdHJpbmcmIHRhZ0NsYXNzLCBjb25zdCBTdHJp
bmcmIHRhZywgY29uc3QgU3RyaW5nJiBjb25mb3JtaW5nVG9VVEkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQ
bHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4
dENvbnRyb2xsZXIubW0KaW5kZXggZTc4OGExYWNmMzc0ODNjOThiZDBjZDUxYzc1YmJjMzgwNDVl
MzNlNy4uNDc3ZmY5NDVhNmFiNGFjYTllNzMzMTI1NWIwNDBkZDVmYWQ2ZThlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQ
cm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJy
b3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQpAQCAtMzY4LDExICszNjgsMTEgQEAgLSAoV0tET01E
b2N1bWVudCAqKW1haW5GcmFtZURvY3VtZW50CiAKIC0gKFdLRE9NUmFuZ2UgKilzZWxlY3RlZFJh
bmdlCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IF9wYWdlLT5jdXJyZW50
U2VsZWN0aW9uQXNSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBfcGFnZS0+Y3VycmVudFNlbGVj
dGlvbkFzUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgcmV0dXJuIFdlYktpdDo6dG9XS0RPTVJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b1dLRE9NUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCkpOwogfQog
CiAtIChXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZSAqKW1haW5GcmFtZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4
IGQ0NTNkZTJlNTY1NzMwNzNhOTk5OGFkZWQ2ZTRjZTBiMDAyOGU1MDQuLjUyOTk3NDZkM2MwOGIz
MDJjZjk0ODE5ZmQxMTY5NWEzNmQzYzgzMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTUyLDYgKzUyLDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAKICNpZiBQTEFURk9STShJT1MpCiAj
aW1wb3J0IDxXZWJDb3JlL1BhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLmg+CkBAIC0xMTMs
MjMgKzExNCwyOCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2Nh
dGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQogICAgIAogICAgIC8vIEZpbmQgdGhl
IGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgogICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVz
dFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5
LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdl
bnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9
OwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+
d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQoZmxvYXRQb2ludCkpLCBoaXRUeXBlKTsK
LSAgICBhdXRvIFtyYW5nZSwgb3B0aW9uc10gPSBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0
VGVzdFJlc3VsdChyZXN1bHQpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
aGl0VGVzdFJlc3VsdEF0UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMocm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpKSwgaGl0VHlwZSk7CisKICAgICBh
dXRvKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCAq
cmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2UpOworCisgICAgYXV0byByYW5nZVJlc3VsdCA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRI
aXRUZXN0UmVzdWx0KHJlc3VsdCk7CisgICAgaWYgKCFyYW5nZVJlc3VsdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBbcmFuZ2UsIG9wdGlvbnNdID0gV1RGTW92ZSgqcmFuZ2VSZXN1bHQp
OworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKIHsKLSAgICBhdXRvIFtzZWxlY3RlZFJhbmdlLCBvcHRpb25zXSA9IERpY3Rpb25hcnlM
b29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgaWYgKHNlbGVjdGVkUmFu
Z2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxl
Y3RlZFJhbmdlLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICBhdXRvIHJl
c3VsdCA9IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7Cisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gW3JhbmdlLCBvcHRp
b25zXSA9IFdURk1vdmUoKnJlc3VsdCk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JS
YW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgb3B0aW9ucywgcHJlc2VudGF0aW9u
VHJhbnNpdGlvbik7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBP
ZkN1cnJlbnRTZWxlY3Rpb24oKQpAQCAtMTM4LDI4ICsxNDQsMzAgQEAgdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCiAgICAgcGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jv
c3NmYWRlKTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25z
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0
aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1l
JiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMs
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pCiB7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRGljdGlv
bmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoZnJhbWUsIHJhbmdlLCBvcHRp
b25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkpOwogfQogCi1EaWN0aW9uYXJ5UG9wdXBJbmZv
IFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdl
JiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQorRGljdGlvbmFyeVBvcHVwSW5mbyBX
ZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKIHsKICAgICBFZGl0
b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOwogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0
aW9uYXJ5UG9wdXBJbmZvKHRydWUpOwogCi0gICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9u
YXJ5UG9wdXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNF
bXB0eSgpKSB7CisgICAgLy8gRklYTUU6IEluZWZmaWNpZW50IHRvIGNhbGwgc3RyaXBXaGl0ZVNw
YWNlIHRvIGRldGVjdCB3aGV0aGVyIGEgc3RyaW5nIGhhcyBhIG5vbi13aGl0ZXNwYWNlIGNoYXJh
Y3RlciBpbiBpdC4KKyAgICBpZiAocGxhaW5UZXh0KHJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKS5p
c0VtcHR5KCkpIHsKICAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cElu
Zm8oZmFsc2UpOwotICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBhdXRvIHF1YWRzID0gUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRRdWFkcyhyYW5nZSk7CiAgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgewogICAgICAg
ICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Ci0gICAgICAg
IHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAorICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKKwogICAgIElu
dFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBd
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA3ZWEwM2M4YjZkMDI2YWFlMDhi
NmZlOTc4ZDAxODhmNDNhZDc5Zjc2Li40N2NkZWE3ZWRlMTk4MDU3OGRjNjk5YzlmYzdiNGNiNzQ4
OTA3YWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cApAQCAtNjI4OSwxMyArNjI4OSwxMyBAQCBib29sIFdlYlBhZ2U6OnBsdWdJbklzUHJpbWFyeVNp
emUoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbAogCiAjZW5k
aWYgLy8gRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKIAotUmVm
UHRyPFJhbmdlPiBXZWJQYWdlOjpjdXJyZW50U2VsZWN0aW9uQXNSYW5nZSgpCitPcHRpb25hbDxT
aW1wbGVSYW5nZT4gV2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UoKQogewogICAgIGF1
dG8qIGZyYW1lID0gZnJhbWVXaXRoU2VsZWN0aW9uKG1fcGFnZS5nZXQoKSk7CiAgICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6
cmVwb3J0VXNlZEZlYXR1cmVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAppbmRleCAwNTk2NjdlMzg4OWFiYWMyZjk4ZTJjODNhZTczNjg1YjMxMDYwZGY5Li4z
ZGM5NDlhOTA3MTI1NzA4NDg0NDRhNTU3NDU2M2VmNWRjNTJiZjU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC00ODAsNyArNDgwLDcgQEAgcHVibGlj
OgogICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWUoKSBjb25zdDsgLy8gTWF5IHJldHVybiBu
dWxscHRyLgogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogbWFpbkZyYW1lVmlldygpIGNvbnN0OyAv
LyBNYXkgcmV0dXJuIG51bGxwdHIuCiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGN1cnJl
bnRTZWxlY3Rpb25Bc1JhbmdlKCk7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
IGN1cnJlbnRTZWxlY3Rpb25Bc1JhbmdlKCk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKICAgICBSZWZQdHI8UGx1Z2luPiBjcmVhdGVQbHVnaW4oV2ViRnJhbWUqLCBXZWJDb3Jl
OjpIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFBsdWdpbjo6UGFyYW1ldGVycyYsIFN0cmluZyYg
bmV3TUlNRVR5cGUpOwpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBsZXRlU3ludGhldGljQ2xpY2soV2ViQ29yZTo6Tm9kZSYgbm9kZVJlc3BvbmRpbmdUb0NsaWNr
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbiwgT3B0aW9uU2V0PFdlYktpdDo6
V2ViRXZlbnQ6Ok1vZGlmaWVyPiwgV2ViQ29yZTo6U3ludGhldGljQ2xpY2tUeXBlLCBXZWJDb3Jl
OjpQb2ludGVySUQgPSBXZWJDb3JlOjptb3VzZVBvaW50ZXJJRCk7CiAgICAgdm9pZCBzZW5kVGFw
SGlnaGxpZ2h0Rm9yTm9kZUlmTmVjZXNzYXJ5KHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
Tm9kZSopOwogICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25JbkZv
Y3VzZWROb2RlRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChXZWJDb3JlOjpG
cmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOworICAgIE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChXZWJDb3JlOjpG
cmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIHZvaWQgc2V0Rm9j
dXNlZEZyYW1lQmVmb3JlU2VsZWN0aW5nVGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKTsKICAgICB2b2lkIGRpc3BhdGNoU3ludGhldGljTW91c2VFdmVudHNGb3JTZWxlY3Rp
b25HZXN0dXJlKFNlbGVjdGlvblRvdWNoLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCkBA
IC0xNTU5LDggKzE1NTksOCBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZv
aWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmKTsKICAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKCk7Ci0gICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKFdlYkNvcmU6
OkZyYW1lJiwgV2ViQ29yZTo6UmFuZ2UmLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKLSAgICBXZWJDb3JlOjpEaWN0
aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShXZWJDb3JlOjpGcmFt
ZSYsIFdlYkNvcmU6OlJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgdm9pZCBwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclJhbmdlKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxl
UmFuZ2UmLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRp
Y3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6
OlNpbXBsZVJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAg
ICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yU2Vs
ZWN0aW9uSW5QREZQbHVnaW4oUERGU2VsZWN0aW9uICosIFBERlBsdWdpbiYsIE5TRGljdGlvbmFy
eSAqb3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24p
OwogI2VuZGlmCkBAIC0xNjY0LDcgKzE2NjQsNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIHZvaWQgcGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdl
YkNvcmU6OkZsb2F0UG9pbnQpOwotICAgIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiwgTlNEaWN0aW9uYXJ5ICo+IGxvb2t1cFRleHRBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9p
bnQpOworICAgIE9wdGlvbmFsPHN0ZDo6dHVwbGU8V2ViQ29yZTo6U2ltcGxlUmFuZ2UsIE5TRGlj
dGlvbmFyeSAqPj4gbG9va3VwVGV4dEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCk7CiAg
ICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKTsKICAgICB2b2lkIGltbWVkaWF0ZUFj
dGlvbkRpZENhbmNlbCgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkQ29tcGxldGUoKTsK
QEAgLTE4ODQsNyArMTg4NCw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIGJvb2wgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sgeyBmYWxzZSB9
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9zdGFydGluZ0dlc3R1cmVSYW5nZTsKKyAg
ICBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gbV9zdGFydGluZ0dlc3R1cmVSYW5nZTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMTk5MCw3ICsxOTkwLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6UmFuZ2U+IG1fY3VycmVudFdvcmRSYW5nZTsKKyAgICBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4gbV9jdXJyZW50V29yZFJhbmdlOwogICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBtX2ludGVyYWN0aW9uTm9kZTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RJ
bnRlcmFjdGlvbkxvY2F0aW9uOwogCkBAIC0yMDE4LDcgKzIwMTgsNyBAQCBwcml2YXRlOgogICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2F2YWlsYWJsZVNjcmVlblNpemU7CiAgICAgV2ViQ29yZTo6
RmxvYXRTaXplIG1fb3ZlcnJpZGVTY3JlZW5TaXplOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiBtX2luaXRpYWxTZWxlY3Rpb247CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+IG1faW5pdGlhbFNlbGVjdGlvbjsKICAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIG1f
c3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eSB7IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rp
b24oKSB9OwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX21heGltdW1Vbm9ic2N1cmVkU2l6ZTsK
ICAgICBpbnQzMl90IG1fZGV2aWNlT3JpZW50YXRpb24geyAwIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDk5MmJlYjFh
NWI1YjNiZmJjYjZiYzQ5MzU2NTc1ZmRmMGIxNmI4Y2QuLjAyNjhlMjdkYjgyNmFmOWQ5MTliMmYy
MTY3ZmFhMzRjZTgzOWRkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNDA4LDIwICsxNDA4LDIzIEBAIHZvaWQgV2Vi
UGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlw
ZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAgIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9u
KHBvc2l0aW9uKTsKICNlbHNlCiAgICAgICAgICAgICBzd2l0Y2ggKHdrR2VzdHVyZVN0YXRlKSB7
Ci0gICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuOgotICAgICAg
ICAgICAgICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5k
b2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOworICAgICAgICAgICAgY2FzZSBHZXN0dXJl
UmVjb2duaXplclN0YXRlOjpCZWdhbjogeworICAgICAgICAgICAgICAgIGF1dG8gYm91bmRhcnkg
PSAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOworICAgICAgICAgICAgICAgIG1fc3RhcnRp
bmdHZXN0dXJlUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IGJvdW5kYXJ5LCBib3VuZGFyeSB9OwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHZXN0
dXJlUmVjb2duaXplclN0YXRlOjpDaGFuZ2VkOgogICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0
aW5nR2VzdHVyZVJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0aW5nR2Vz
dHVyZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkgPCBwb3NpdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgbV9zdGFydGlu
Z0dlc3R1cmVSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zdGFydGlu
Z0dlc3R1cmVSYW5nZS0+c3RhcnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCBw
b3NpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgc3RhcnQsIHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgbV9zdGFydGluZ0dlc3R1cmVSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHN0YXJ0KTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVy
U3RhdGU6OkVuZGVkOgogICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpD
YW5jZWxsZWQ6Ci0gICAgICAgICAgICAgICAgbV9zdGFydGluZ0dlc3R1cmVSYW5nZSA9IG51bGxw
dHI7CisgICAgICAgICAgICAgICAgbV9zdGFydGluZ0dlc3R1cmVSYW5nZSA9IFdURjo6bnVsbG9w
dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZTo6RmFpbGVkOgogICAgICAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplclN0
YXRlOjpQb3NzaWJsZToKQEAgLTE0MzUsMTIgKzE0MzgsMTUgQEAgdm9pZCBXZWJQYWdlOjpzZWxl
Y3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVU
eXBlLAogICAgICAgICBzd2l0Y2ggKHdrR2VzdHVyZVN0YXRlKSB7CiAgICAgICAgIGNhc2UgR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZTo6QmVnYW46CiAgICAgICAgICAgICByYW5nZSA9IHdvcmRSYW5n
ZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgICAgICBtX2N1cnJlbnRXb3JkUmFuZ2Ug
PSByYW5nZSA/IFJlZlB0cjxSYW5nZT4oUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSA6IG51bGxwdHI7
CisgICAgICAgICAgICBpZiAocmFuZ2UpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50V29yZFJh
bmdlID0geyB7ICpyYW5nZSB9IH07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9jdXJyZW50V29yZFJhbmdlID0gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6Q2hhbmdlZDoKICAgICAgICAgICAg
IGlmICghbV9jdXJyZW50V29yZFJhbmdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBtX2N1cnJlbnRX
b3JkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9jdXJyZW50V29yZFJhbmdlLT5lbmRQb3NpdGlv
bigpKTsKKyAgICAgICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKCptX2N1cnJlbnRXb3Jk
UmFuZ2UpOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSkKICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQocG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKSk7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24gPiByYW5nZS0+ZW5kUG9zaXRpb24oKSkK
QEAgLTE0NDgsNyArMTQ1NCw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29u
c3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkVuZGVkOgogICAg
ICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkNhbmNlbGxlZDoKLSAgICAgICAgICAg
IG1fY3VycmVudFdvcmRSYW5nZSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2N1cnJlbnRXb3Jk
UmFuZ2UgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBH
ZXN0dXJlUmVjb2duaXplclN0YXRlOjpGYWlsZWQ6CiAgICAgICAgIGNhc2UgR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZTo6UG9zc2libGU6CkBAIC0xNjU2LDcgKzE2NjIsNyBAQCBJbnRSZWN0IFdlYlBh
Z2U6OnJvb3RWaWV3SW50ZXJhY3Rpb25Cb3VuZHNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpCiAKIHZvaWQgV2ViUGFnZTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fc3RhcnRp
bmdHZXN0dXJlUmFuZ2UgPSBudWxscHRyOworICAgIG1fc3RhcnRpbmdHZXN0dXJlUmFuZ2UgPSBX
VEY6Om51bGxvcHQ7CiAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhcigpOwogfQogCkBAIC0yMDg4LDMyICsyMDk0LDUxIEBA
IHZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNv
cmU6OlRleHRHcmFudWxhcml0eSBncmFuCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAot
UmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChGcmFtZSYg
ZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQp
CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JHcmFudWxhcml0eUF0UG9p
bnQoRnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3Vz
ZWRFbGVtZW50KQogewotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3Np
dGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRo
Rm9jdXNlZEVsZW1lbnQpOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBhdXRvIHBv
c2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2lu
dCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAgICAgc3dpdGNoIChncmFudWxh
cml0eSkgewotICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eToK
LSAgICAgICAgcmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eToKLSAgICAg
ICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6IHsKKyAg
ICAgICAgYXV0byBib3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICAg
ICAgaWYgKCFib3VuZGFyeSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIHJldHVybiB7IHsgKmJvdW5kYXJ5LCAqYm91bmRhcnkgfSB9OworICAgIH0KKyAgICBjYXNl
IFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5OiB7CisgICAgICAgIGF1dG8gcmFuZ2Ug
PSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBpZiAoIXJhbmdlKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgKnJhbmdl
IH07CisgICAgfQogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpTZW50ZW5jZUdyYW51bGFyaXR5
OgotICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlv
biwgVGV4dEdyYW51bGFyaXR5OjpTZW50ZW5jZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkZvcndhcmQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6
UGFyYWdyYXBoR3JhbnVsYXJpdHk6Ci0gICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRP
ZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFy
aXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpOwotICAgICAgICBicmVhazsKKyAgICBj
YXNlIFRleHRHcmFudWxhcml0eTo6UGFyYWdyYXBoR3JhbnVsYXJpdHk6IHsKKyAgICAgICAgYXV0
byByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgZ3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CisgICAgICAgIGlmICghcmFuZ2Up
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyAqcmFu
Z2UgfTsKKyAgICB9CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkRvY3VtZW50R3JhbnVsYXJp
dHk6Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aHkgdGhpcyBtdXRhdGVzIHRo
ZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgcmV0dXJucyBudWxsLgorICAgICAgICAvLyBGSVhNRTog
TWFrZXMgbm8gc2Vuc2UgdGhhdCB0aGlzIG11dGF0ZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFu
ZCByZXR1cm5zIG51bGwuCiAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUdyYW51bGFy
aXR5OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUJvdW5kYXJ5OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBjYXNlIFRleHRHcmFudWxhcml0eTo6U2VudGVuY2VCb3VuZGFyeToKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgY2FzZSBU
ZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEJvdW5kYXJ5OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBjYXNlIFRleHRHcmFu
dWxhcml0eTo6RG9jdW1lbnRCb3VuZGFyeToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiByYW5nZTsK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgcmVjdElzVG9vQmlnRm9yU2VsZWN0aW9uKGNvbnN0IEludFJl
Y3QmIGJsb2NrUmVjdCwgY29uc3QgRnJhbWUmIGZyYW1lKQpAQCAtMjEzOCw3ICsyMTYzLDcgQEAg
dm9pZCBXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQsIFcKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYXV0byByYW5nZSA9IHJhbmdl
Rm9yR3JhbnVsYXJpdHlBdFBvaW50KGZyYW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJh
Y3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogICAgIGlmIChyYW5nZSkKLSAgICAgICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZl
UmFuZ2UoKnJhbmdlKS5wdHIoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICBtX2luaXRpYWxTZWxl
Y3Rpb24gPSByYW5nZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtMjE1MiwzNiAr
MjE3NywzNiBAQCB2b2lkIFdlYlBhZ2U6OmJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24oV2ViQ29y
ZTo6U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgQwogdm9pZCBXZWJQYWdlOjp1cGRhdGVT
ZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBpc0lu
dGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAg
ICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbklu
Rm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSByYW5nZUZvckdyYW51bGFy
aXR5QXRQb2ludChmcmFtZSwgcG9pbnQsIGdyYW51bGFyaXR5LCBpc0ludGVyYWN0aW5nV2l0aEZv
Y3VzZWRFbGVtZW50KTsKKyAgICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1
c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxl
bWVudCk7CisgICAgYXV0byBuZXdSYW5nZSA9IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KGZy
YW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQp
OwogICAgIAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSB8fCAhbV9pbml0aWFsU2VsZWN0aW9u
IHx8ICFuZXdSYW5nZSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVu
c2lnbmVkQ2FsbGJhY2soZmFsc2UsIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25TdGFydCA9IG1faW5pdGlhbFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwotICAg
IFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBtX2luaXRpYWxTZWxlY3Rpb24tPmVuZFBv
c2l0aW9uKCk7CiAKLSAgICBpZiAocG9zaXRpb24gPiBtX2luaXRpYWxTZWxlY3Rpb24tPmVuZFBv
c2l0aW9uKCkpCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9IG5ld1JhbmdlLT5lbmRQb3NpdGlvbigp
OwotICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgbV9pbml0aWFsU2VsZWN0aW9uLT5zdGFydFBvc2l0
aW9uKCkpCi0gICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gbmV3UmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KTsKLSAgICAKLSAgICBpZiAoc2VsZWN0aW9uU3RhcnQuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9u
RW5kLmlzTm90TnVsbCgpKQotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgIAotICAgIGlmIChy
YW5nZSkKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5n
ZXQoKSwgVVBTVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLSAgICAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc2VsZWN0aW9uU3RhcnQgPT0gbV9pbml0aWFsU2VsZWN0
aW9uLT5zdGFydFBvc2l0aW9uKCksIGNhbGxiYWNrSUQpKTsKKyAgICBhdXRvIGluaXRpYWxTZWxl
Y3Rpb25TdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1faW5pdGlh
bFNlbGVjdGlvbi0+c3RhcnQpOworICAgIGF1dG8gaW5pdGlhbFNlbGVjdGlvbkVuZFBvc2l0aW9u
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1faW5pdGlhbFNlbGVjdGlvbi0+ZW5kKTsK
KworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGluaXRpYWxTZWxlY3Rpb25T
dGFydFBvc2l0aW9uOworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBpbml0aWFs
U2VsZWN0aW9uRW5kUG9zaXRpb247CisgICAgaWYgKHBvc2l0aW9uID4gaW5pdGlhbFNlbGVjdGlv
bkVuZFBvc2l0aW9uKQorICAgICAgICBzZWxlY3Rpb25FbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24obmV3UmFuZ2UtPmVuZCk7CisgICAgZWxzZSBpZiAocG9zaXRpb24gPCBpbml0aWFs
U2VsZWN0aW9uU3RhcnRQb3NpdGlvbikKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24obmV3UmFuZ2UtPnN0YXJ0KTsKKworICAgIGlmIChzZWxlY3Rp
b25TdGFydC5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb25FbmQuaXNOb3ROdWxsKCkpIHsKKyAgICAg
ICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlv
blN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKKyAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0
cigpLCBVUFNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMsIFVzZXJUcmlnZ2VyZWQpOworICAgIH0KKworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhzZWxlY3Rpb25TdGFydCA9PSBpbml0aWFsU2VsZWN0
aW9uU3RhcnRQb3NpdGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnVwZGF0
ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQs
IGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgUmVzcGVjdFNlbGVjdGlvbkFu
Y2hvciByZXNwZWN0U2VsZWN0aW9uQW5jaG9yLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAg
ICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbklu
Rm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQpOworICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWRO
b2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50
KTsKIAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soZmFsc2UsIGNhbGxiYWNrSUQpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
aW5kZXggNjUwZmMyZjM1OGU5NTdhNTM3NzdiYzIzYzY3YjgzYTc2OTk3MjBkZi4uYWRiOTkyM2Y1
MTFkM2FkNmY1MjQ5ODJmOGZhNTJmMzAwYzhjM2JmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg1OSwxNCArODU5LDEy
IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9u
KFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgaWYgKCFhYnNvbHV0ZUxpbmtVUkwuaXNF
bXB0eSgpICYmIFVSTEVsZW1lbnQpCiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5saW5r
VGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoKlVSTEVsZW1lbnQpLCB7IFRleHRJbmRpY2F0b3JPcHRpb246
OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgfSwgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAKLSAgICBhdXRvIGxv
b2t1cFJlc3VsdCA9IGxvb2t1cFRleHRBdExvY2F0aW9uKGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0
ZXMpOwotICAgIGlmIChhdXRvKiBsb29rdXBSYW5nZSA9IHN0ZDo6Z2V0PFJlZlB0cjxSYW5nZT4+
KGxvb2t1cFJlc3VsdCkuZ2V0KCkpIHsKLSAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0Lmxv
b2t1cFRleHQgPSBsb29rdXBSYW5nZS0+dGV4dCgpOworICAgIGlmIChhdXRvIGxvb2t1cFJlc3Vs
dCA9IGxvb2t1cFRleHRBdExvY2F0aW9uKGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKSB7Cisg
ICAgICAgIGF1dG8gW2xvb2t1cFJhbmdlLCBvcHRpb25zXSA9IFdURk1vdmUoKmxvb2t1cFJlc3Vs
dCk7CisgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5sb29rdXBUZXh0ID0gcGxhaW5UZXh0
KGxvb2t1cFJhbmdlKTsKICAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBoaXRUZXN0UmVzdWx0Lmlu
bmVyTm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVu
dCgpLmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIG9wdGlvbnMgPSBzdGQ6OmdldDxO
U0RpY3Rpb25hcnkgKj4obG9va3VwUmVzdWx0KTsKLSAgICAgICAgICAgICAgICBpbW1lZGlhdGVB
Y3Rpb25SZXN1bHQuZGljdGlvbmFyeVBvcHVwSW5mbyA9IGRpY3Rpb25hcnlQb3B1cEluZm9Gb3JS
YW5nZSgqZnJhbWUsICpsb29rdXBSYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246OkZhZGVJbik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YXV0byogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAgICAg
aW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRpY3Rpb25hcnlQb3B1cEluZm8gPSBkaWN0aW9uYXJ5UG9w
dXBJbmZvRm9yUmFuZ2UoKmZyYW1lLCBsb29rdXBSYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTkzNiwxMSArOTM0LDExIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhp
dFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChpbW1l
ZGlhdGVBY3Rpb25SZXN1bHQsIGltbWVkaWF0ZUFjdGlvbkhpdFRlc3RQcmV2ZW50c0RlZmF1bHQs
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCi1zdGQ6OnR1cGxlPFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBXZWJQYWdlOjpsb29rdXBUZXh0QXRMb2NhdGlv
bihGbG9hdFBvaW50IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpCitPcHRpb25hbDxzdGQ6OnR1
cGxlPFdlYkNvcmU6OlNpbXBsZVJhbmdlLCBOU0RpY3Rpb25hcnkgKj4+IFdlYlBhZ2U6Omxvb2t1
cFRleHRBdExvY2F0aW9uKEZsb2F0UG9pbnQgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcykKIHsK
ICAgICBhdXRvJiBtYWluRnJhbWUgPSBjb3JlUGFnZSgpLT5tYWluRnJhbWUoKTsKICAgICBpZiAo
IW1haW5GcmFtZS52aWV3KCkgfHwgIW1haW5GcmFtZS52aWV3KCktPnJlbmRlclZpZXcoKSkKLSAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBhdXRvIHBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3Q29v
cmRpbmF0ZXMpOwogICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVl
c3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVz
dDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50
LCBIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyLm1tCmluZGV4IDk2YTYxZTg0MzA1NTM5NTE1MDgxYWNkNzYwYTFjYWI0NTgy
OGNjOTEuLjJkZjgxNjE5ZTU5NWZhZjZhOWVkMmVmZTIwMTZkYmZhMTBiNWE3OWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAgLTU1MCwxOSArNTUwLDIwIEBAIC0gKGlkPE5TSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JU
ZXh0CiAgICAgaWYgKCFQQUw6OmdldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpOb2RlKiBub2RlID0gX2hpdFRlc3RS
ZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgYXV0byBub2RlID0gX2hpdFRlc3RSZXN1bHQuaW5uZXJO
b2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8gZnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIGF1dG8gW2RpY3Rpb25hcnlSYW5nZSwgb3B0aW9uc10gPSBXZWJD
b3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChfaGl0VGVzdFJlc3Vs
dCk7Ci0gICAgaWYgKCFkaWN0aW9uYXJ5UmFuZ2UpCisgICAgYXV0byByYW5nZSA9IFdlYkNvcmU6
OkRpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KF9oaXRUZXN0UmVzdWx0KTsK
KyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBkaWN0aW9u
YXJ5UG9wdXBJbmZvID0gW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JSYW5nZToqZGljdGlvbmFyeVJhbmdlIGluRnJhbWU6ZnJhbWUgd2l0aExvb2t1
cE9wdGlvbnM6b3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOnsgfSB0cmFuc2l0aW9uOiBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluXTsKKyAgICBhdXRv
IFtkaWN0aW9uYXJ5UmFuZ2UsIG9wdGlvbnNdID0gV1RGTW92ZSgqcmFuZ2UpOworICAgIGF1dG8g
ZGljdGlvbmFyeVBvcHVwSW5mbyA9IFtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0
aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6ZGljdGlvbmFyeVJhbmdlIGluRnJhbWU6ZnJhbWUgd2l0
aExvb2t1cE9wdGlvbnM6b3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOiB7IH0gdHJhbnNpdGlvbjog
V2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbl07CiAg
ICAgaWYgKCFkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAK
</data>
<flag name="review"
          id="419390"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>