<?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>208322</bug_id>
          
          <creation_ts>2020-02-27 09:05:29 -0800</creation_ts>
          <short_desc>Improve some media code</short_desc>
          <delta_ts>2020-03-06 08:09:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1623515</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-27 09:05:29 -0800</bug_when>
    <thetext>Fir issues noticed in audit of media code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624305</commentid>
    <comment_count>1</comment_count>
      <attachid>392068</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-29 11:56:23 -0800</bug_when>
    <thetext>Created attachment 392068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624306</commentid>
    <comment_count>2</comment_count>
      <attachid>392068</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-29 12:03:48 -0800</bug_when>
    <thetext>Comment on attachment 392068
Patch

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

&gt; Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp:77
&gt; +void MediaControlsHost::ref()

The alternative to having MediaControlsHost having its lifetime tied completely to the HTMLMediaElement and forwarding ref/deref calls would be to use a WeakPtr and then add null checks to every function. I think this is a better solution, but I suppose there is some risk of a reference cycle if I don’t understand the ownership relationships correctly. Like what can hold a reference to the media controls host object and is there a chance of a cycle.

&gt; Source/WebCore/loader/TextTrackLoader.h:66
&gt;      Vector&lt;Ref&lt;VTTCue&gt;&gt; getNewCues();
&gt; -    void getNewRegions(Vector&lt;RefPtr&lt;VTTRegion&gt;&gt;&amp; outputRegions);
&gt; +    Vector&lt;Ref&lt;VTTRegion&gt;&gt; getNewRegions();
&gt;      Vector&lt;String&gt; getNewStyleSheets();

We could also consider renaming these three functions to take or takeNew instead of getNew, since they transfer ownership to the caller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624554</commentid>
    <comment_count>3</comment_count>
      <attachid>392068</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-02 08:21:16 -0800</bug_when>
    <thetext>Comment on attachment 392068
Patch

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

r=me except one problem.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:342
&gt; +                m_regionList.remove(i);

This is a O(n^2) algorithm that mutates the collection while iterating, so it would miss regions right after the removed region.  removeAllMatching would be faster and more correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624569</commentid>
    <comment_count>4</comment_count>
      <attachid>392068</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-03-02 09:24:33 -0800</bug_when>
    <thetext>Comment on attachment 392068
Patch

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

&gt;&gt; Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp:77
&gt;&gt; +void MediaControlsHost::ref()
&gt; 
&gt; The alternative to having MediaControlsHost having its lifetime tied completely to the HTMLMediaElement and forwarding ref/deref calls would be to use a WeakPtr and then add null checks to every function. I think this is a better solution, but I suppose there is some risk of a reference cycle if I don’t understand the ownership relationships correctly. Like what can hold a reference to the media controls host object and is there a chance of a cycle.

HTMLMediaElement creates MediaControlsHost and exposes it to the JavaScript that implements controls in the shadow DOM. The controls JS puts the MediaControlsHost into a global variable. 

HTMLMediaElement owns the JS, and the JS now refs HTMLMediaElement, so doesn&apos;t this create a retain cycle?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624585</commentid>
    <comment_count>5</comment_count>
      <attachid>392068</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-02 10:01:31 -0800</bug_when>
    <thetext>Comment on attachment 392068
Patch

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

&gt;&gt; Source/WebCore/html/track/WebVTTParser.cpp:342
&gt;&gt; +                m_regionList.remove(i);
&gt; 
&gt; This is a O(n^2) algorithm that mutates the collection while iterating, so it would miss regions right after the removed region.  removeAllMatching would be faster and more correct.

Agreed that it’s O(n^2), but note that this breaks out of the loop when it finds a region that matches; so there are no &quot;missed regions&quot; because this removes only the first. All I did here was get rid of the second unnecessary loop over the vector inside the removeFirst function. While it’s OK for someone to change this to removeAllMatching I don’t think that change is necessary as part of this patch. I also don’t think removeAllMatching would be significantly faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624587</commentid>
    <comment_count>6</comment_count>
      <attachid>392068</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-02 10:03:24 -0800</bug_when>
    <thetext>Comment on attachment 392068
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp:77
&gt;&gt;&gt; +void MediaControlsHost::ref()
&gt;&gt; 
&gt;&gt; The alternative to having MediaControlsHost having its lifetime tied completely to the HTMLMediaElement and forwarding ref/deref calls would be to use a WeakPtr and then add null checks to every function. I think this is a better solution, but I suppose there is some risk of a reference cycle if I don’t understand the ownership relationships correctly. Like what can hold a reference to the media controls host object and is there a chance of a cycle.
&gt; 
&gt; HTMLMediaElement creates MediaControlsHost and exposes it to the JavaScript that implements controls in the shadow DOM. The controls JS puts the MediaControlsHost into a global variable. 
&gt; 
&gt; HTMLMediaElement owns the JS, and the JS now refs HTMLMediaElement, so doesn&apos;t this create a retain cycle?

Sounds like it probably does create a retain cycle. I need to find some other solution, because the old code has a potentially dangling pointer that I can’t just leave as-is. I suppose I could use a WeakPtr and add a null check to every use of m_mediaElement. Any other ideas about how to handle this back-pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624621</commentid>
    <comment_count>7</comment_count>
      <attachid>392068</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-02 11:07:02 -0800</bug_when>
    <thetext>Comment on attachment 392068
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp:77
&gt;&gt;&gt;&gt; +void MediaControlsHost::ref()
&gt;&gt;&gt; 
&gt;&gt;&gt; The alternative to having MediaControlsHost having its lifetime tied completely to the HTMLMediaElement and forwarding ref/deref calls would be to use a WeakPtr and then add null checks to every function. I think this is a better solution, but I suppose there is some risk of a reference cycle if I don’t understand the ownership relationships correctly. Like what can hold a reference to the media controls host object and is there a chance of a cycle.
&gt;&gt; 
&gt;&gt; HTMLMediaElement creates MediaControlsHost and exposes it to the JavaScript that implements controls in the shadow DOM. The controls JS puts the MediaControlsHost into a global variable. 
&gt;&gt; 
&gt;&gt; HTMLMediaElement owns the JS, and the JS now refs HTMLMediaElement, so doesn&apos;t this create a retain cycle?
&gt; 
&gt; Sounds like it probably does create a retain cycle. I need to find some other solution, because the old code has a potentially dangling pointer that I can’t just leave as-is. I suppose I could use a WeakPtr and add a null check to every use of m_mediaElement. Any other ideas about how to handle this back-pointer?

Sounds like this needs a WeakPtr and a bunch of null checks then.

&gt;&gt;&gt; Source/WebCore/html/track/WebVTTParser.cpp:342
&gt;&gt;&gt; +                m_regionList.remove(i);
&gt;&gt; 
&gt;&gt; This is a O(n^2) algorithm that mutates the collection while iterating, so it would miss regions right after the removed region.  removeAllMatching would be faster and more correct.
&gt; 
&gt; Agreed that it’s O(n^2), but note that this breaks out of the loop when it finds a region that matches; so there are no &quot;missed regions&quot; because this removes only the first. All I did here was get rid of the second unnecessary loop over the vector inside the removeFirst function. While it’s OK for someone to change this to removeAllMatching I don’t think that change is necessary as part of this patch. I also don’t think removeAllMatching would be significantly faster.

Ah, I didn&apos;t read all the way to the break. This is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626502</commentid>
    <comment_count>8</comment_count>
      <attachid>392673</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-05 21:37:36 -0800</bug_when>
    <thetext>Created attachment 392673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626503</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-05 21:38:01 -0800</bug_when>
    <thetext>OK, new version up for review uses WeakPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626666</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-06 08:08:39 -0800</bug_when>
    <thetext>Committed r257997: &lt;https://trac.webkit.org/changeset/257997&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626667</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-06 08:09:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/60151665&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392068</attachid>
            <date>2020-02-29 11:56:23 -0800</date>
            <delta_ts>2020-03-05 21:37:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208322-20200229115619.patch</filename>
            <type>text/plain</type>
            <size>100422</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ5MmFlNzliOGZkMDU2
NWZlYzg4MzFiY2YzZGEzYTNkOGM4ZDkyMC4uYzJkM2VkNmNmOGFmNWI4NTFhN2ZlY2FmNjVlZmVi
NmQzYjgzOTUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxOSBAQAorMjAyMC0wMi0yNyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBzb21lIG1lZGlh
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
ODMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0g
VGV4dFRyYWNrIG9iamVjdHMgbm93IHRha2UgRG9jdW1lbnQgaW5zdGVhZCBvZiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0LgorICAgICAgICAtIE1hZGUgbW9yZSBUZXh0VHJhY2sgZnVuY3Rpb25zIHBy
aXZhdGUgYW5kIHByb3RlY3RlZC4KKyAgICAgICAgLSBNYWRlIFRleHRUcmFjayBwYXJzaW5nIGZ1
bmN0aW9ucyB1c2UgcmV0dXJuIHZhbHVlcyByYXRoZXIgdGhhbiBvdXQgYXJndW1lbnRzLgorICAg
ICAgICAtIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50ZXJzIGFuZCBSZWYgcmF0aGVy
IHRoYW4gUmVmUHRyIGZvciBub24tbnVsbCB0aGluZ3MuCisgICAgICAgIC0gTWVkaWFDb250cm9s
c0hvc3QsIG5vdCB3ZWItZXhwb3NlZCwgbmVlZGVkIGEgYmV0dGVyIG9iamVjdCBsaWZldGltZSBz
dHJhdGVneS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xz
SG9zdC5jcHA6IERvIG5vdCBkZXJpdmUgZnJvbSBSZWZDb3VudGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sc0hvc3Q6Ok1lZGlhQ29udHJvbHNIb3N0KTogVGFrZSBhIHJlZmVyZW5j
ZSBpbnN0ZWFkIG9mIGEKKyAgICAgICAgcG9pbnRlciB0byB0aGUgb3duaW5nIG1lZGlhIGVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6cmVmKTogUmVmZXJlbmNl
IHRoZSBvd25pbmcgbWVkaWEgZWxlbWVudCByYXRoZXIgdGhhbgorICAgICAgICBoYXZpbmcgYSBz
ZXBhcmF0ZSByZWZlcmVuY2UgY291bnQgb2Ygb3VyIG93bi4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbHNIb3N0OjpkZXJlZik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUpOiBVc2UgcmVmZXJlbmNlIHJhdGhl
ciB0aGFuCisgICAgICAgIHBvaW50ZXIgZm9yIG1fbWVkaWFFbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OmRpc3BsYXlOYW1lRm9yVHJhY2spOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpjYXB0aW9uTWVudU9mZkl0ZW0pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpjYXB0aW9uTWVudUF1
dG9tYXRpY0l0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0
OjpjYXB0aW9uRGlzcGxheU1vZGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbHNIb3N0OjpzZXRTZWxlY3RlZFRleHRUcmFjayk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0NvbnRhaW5lcik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OmFsbG93c0lubGluZU1lZGlhUGxh
eWJhY2sgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0
OjpzdXBwb3J0c0Z1bGxzY3JlZW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbHNIb3N0Ojppc1ZpZGVvTGF5ZXJJbmxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0Ojppc0luTWVkaWFEb2N1bWVudCBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnNldFByZXBhcmVk
VG9SZXR1cm5WaWRlb0xheWVyVG9JbmxpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbHNIb3N0Ojp1c2VyR2VzdHVyZVJlcXVpcmVkIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3Bs
YXkgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0Ojpl
eHRlcm5hbERldmljZURpc3BsYXlOYW1lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xzSG9zdDo6ZXh0ZXJuYWxEZXZpY2VUeXBlIGNvbnN0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6Y29udHJvbHNEZXBlbmRPblBhZ2VT
Y2FsZUZhY3RvciBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
c0hvc3Q6OnNldENvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpnZW5lcmF0ZVVVSUQpOiBEaXR0by4gQWxz
byBtYWRlIGEgc3RhdGljIG1lbWJlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNI
b3N0OjpzaGFkb3dSb290Q1NTVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OmJhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OmZvcm1hdHRlZFN0cmluZ0ZvckR1cmF0
aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6Y29tcGFj
dE1vZGUgY29uc3QpOiBEaXR0by4gVHdlYWtlZCBsb2dpYyBhIGJpdC4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oOiBNYWtlIE1lZGlhQ29udHJv
bHNIb3N0IHVzZSBpc28gaGVhcAorICAgICAgICBhbGxvY2F0aW9uIChwcm9iYWJseSBkaWQgdGhp
cyB3cm9uZywgbmVlZCBzb21lb25lIHRvIHZldCB0aGlzIGJlZm9yZSBJIHdvdWxkCisgICAgICAg
IGNvbnNkZXIgbGFuZGluZyBpdCkuIE1hZGUgdmVyc2lvdXMgbWVtYmVyIGZ1bmN0aW9ucyBpbnRv
IHN0YXRpYyBtZW1iZXIgZnVjbnRpb25zCisgICAgICAgIGFuZCB1c2VkIHJlZmVyZW5jZXMgaW5z
dGVhZCBvZiBwb2ludGVycyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIG51bGwuCisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6
YXRpb25TZWdtZW50KToKKyAgICAgICAgRG9jdW1lbnQgaW5zdGVhZCBvZiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlkQWRkVGV4dFRyYWNr
KTogRG9jdW1lbnQgaW5zdGVhZCBvZgorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0Lgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5l
cik6IFVzZSBtYWtlVW5pcXVlIHJhdGhlcgorICAgICAgICB0aGVuIE1lZGlhQ29udHJvbHNIb3N0
OjpjcmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxlY3Rl
ZFRleHRUcmFjayk6IFVwZGF0ZSBzaW5jZSBzcGVjaWFsIGl0ZW1zCisgICAgICAgIGFyZSBub3cg
cmVmZXJlbmNlcyByYXRoZXIgdGhhbiBwb2ludGVycy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkpOiBVc2UgbWFrZVVuaXF1ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOiBVc2Ugc3Rk
Ojp1bmlxdWVfcHRyIGZvciBtX21lZGlhQ29udHJvbHNIb3N0LgorICAgICAgICBUaGlzIGlzIG5v
dCBhbiBvYmplY3QgdGhhdCBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIGxpZmV0aW1lOyBtdXN0IG5v
dCBvdXRsaXZlCisgICAgICAgIHRoZSBtZWRpYSBlbGVtZW50LgorCisgICAgICAgICogaHRtbC9I
VE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKTogUmVtb3ZlZCBzZXRJc0RlZmF1bHQgZnVuY3Rpb24KKyAgICAgICAg
c2luY2UgdGhlIHRyYWNrIGNhbiBzaW1wbHkgcmVhZCB0aGUgYXR0cmlidXRlIG91dCBvZiB0aGUg
ZWxlbWVudCBpbnN0ZWFkLgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNU
cmFja0xpc3RFbGVtZW50Ojp1cGRhdGVEaXNwbGF5KToKKyAgICAgICAgVXBkYXRlIHNpbmNlIHNw
ZWNpYWwgaXRlbXMgYXJlIG5vdyByZWZlcmVuY3NlIHJhdGhlciB0aGFuIHBvaW50ZXJzLgorCisg
ICAgICAgICogaHRtbC90cmFjay9EYXRhQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFD
dWU6OkRhdGFDdWUpOiBEb2N1bWVudCBpbnN0ZWFkIG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpjcmVhdGUpOiBNb3ZlZCB0aGVzZSBmdW5jdGlv
bnMgb3V0IG9mIHRoZSBoZWFkZXIuCisgICAgICAgICogaHRtbC90cmFjay9EYXRhQ3VlLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL0RhdGFDdWUuaWRsOiBE
aXR0by4KKworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmJhbmREYXRhVGV4dFRyYWNrOjpJbmJhbmREYXRhVGV4dFRyYWNr
KTogRG9jdW1lbnQgaW5zdGVhZAorICAgICAgICBvZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Lgor
ICAgICAgICAoV2ViQ29yZTo6SW5iYW5kRGF0YVRleHRUcmFjazo6Y3JlYXRlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpJbmJhbmREYXRhVGV4dFRyYWNrOjphZGREYXRhQ3VlKTogRGl0dG8u
IEFsc28gdXNlIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIHBvaW50ZXIgd2hlbiBjYWxs
aW5nIGhhc0N1ZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRHZW5l
cmljVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZEdlbmVyaWNUZXh0VHJh
Y2s6OkluYmFuZEdlbmVyaWNUZXh0VHJhY2spOiBEb2N1bWVudAorICAgICAgICBpbnN0ZWFkIG9m
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmlj
VGV4dFRyYWNrOjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZEdlbmVy
aWNUZXh0VHJhY2s6OmFkZEdlbmVyaWNDdWUpOiBEaXR0by4gQWxzbyB1c2UKKyAgICAgICAgcmVm
ZXJlbmNlIGluc3RlYWQgb2YgcG9pbnRlciB3aGVuIGNhbGxpbmcgaGFzQ3VlLgorICAgICAgICAo
V2ViQ29yZTo6SW5iYW5kR2VuZXJpY1RleHRUcmFjazo6cGFyc2VyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpuZXdDdWVzUGFyc2VkKTogRGl0dG8u
IEFsc28gdXNlCisgICAgICAgIHJldHVybiB2YWx1ZSBmcm9tIHRha2VDdWVzIGluc3RlYWQgb2Yg
b3V0IGFyZ3Vlbm10IGZyb20gZ2V0TmV3Q3Vlcy4KKyAgICAgICAgQWxzbyB1c2UgcmVmZXJlbmNl
IGluc3RlYWQgb2YgcG9pbnRlciB3aGVuIGNhbGxpbmcgaGFzQ3VlLgorICAgICAgICAoV2ViQ29y
ZTo6SW5iYW5kR2VuZXJpY1RleHRUcmFjazo6bmV3UmVnaW9uc1BhcnNlZCk6IERpdHRvLgorICAg
ICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5oOiBVcGRhdGUgZm9yIGFi
b3ZlLgorCisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjpjcmVhdGUpOiBEb2N1bWVudCBpbnN0ZWFkIG9m
CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpJbmJh
bmRUZXh0VHJhY2s6OkluYmFuZFRleHRUcmFjayk6IERpdHRvLgorICAgICAgICAqIGh0bWwvdHJh
Y2svSW5iYW5kVGV4dFRyYWNrLmg6IFVwZGF0ZSBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBodG1s
L3RyYWNrL0luYmFuZFdlYlZUVFRleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJh
bmRXZWJWVFRUZXh0VHJhY2s6OkluYmFuZFdlYlZUVFRleHRUcmFjayk6IERvY3VtZW50CisgICAg
ICAgIGluc3RlYWQgb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFdlYlZUVFRleHRUcmFjazo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbmJhbmRXZWJWVFRUZXh0VHJhY2s6OnBhcnNlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW5iYW5kV2ViVlRUVGV4dFRyYWNrOjpuZXdDdWVzUGFyc2VkKTogRGl0dG8uIEFsc28gdXNl
CisgICAgICAgIHJldHVybiB2YWx1ZSBmcm9tIHRha2VDdWVzIGluc3RlYWQgb2Ygb3V0IGFyZ3Vl
bm10IGZyb20gZ2V0TmV3Q3Vlcy4KKyAgICAgICAgQWxzbyB1c2UgcmVmZXJlbmNlIGluc3RlYWQg
b2YgcG9pbnRlciB3aGVuIGNhbGxpbmcgaGFzQ3VlLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
V2ViVlRUVGV4dFRyYWNrOjpuZXdSZWdpb25zUGFyc2VkKTogRGl0dG8uCisgICAgICAgICogaHRt
bC90cmFjay9JbmJhbmRXZWJWVFRUZXh0VHJhY2suaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAg
ICAgICAqIGh0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGFibGVUZXh0VHJhY2s6OmNyZWF0ZSk6IE1vdmVkIGhlcmUgZnJvbSBoZWFkZXIuCisg
ICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVRleHRUcmFjazo6bG9hZFRpbWVyRmlyZWQpOiBEb2N1
bWVudCBpbnN0ZWFkIG9mCisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAg
IChXZWJDb3JlOjpMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVnaW9uc0F2YWlsYWJsZSk6IFVzZSBy
ZXR1cm4gdmFsdWUKKyAgICAgICAgZnJvbSBnZXROZXdSZWdpb25zIGluc3RlYWQgb2Ygb3V0IGFy
Z3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVUZXh0VHJhY2s6OmlzRGVmYXVsdCBj
b25zdCk6IE5ldyBpbXBsZW1lbnRhdGlvbiB0aGF0CisgICAgICAgIGRvZXMgbm90IHJlbHkgb24g
YSBkYXRhIG1lbWJlcjsgY2hlY2tzIGF0dHJpYnV0ZSBvbiB2aWRlbyBlbGVtZW50LgorICAgICAg
ICAqIGh0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suaDogVXBkYXRlZCBmb3IgYWJvdmUgY2hh
bmdlcy4KKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKTogUmV0dXJuIGEgcmVmZXJlbmNl
IHJhdGhlcgorICAgICAgICB0aGFuIGEgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2s6OmNyZWF0ZSk6IERvY3VtZW50IHJhdGhlciB0aGFuIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmRvY3VtZW50IGNvbnN0KTog
QWRkZWQuIEZvciB1c2UgYnkgZGVyaXZlZCBjbGFzc2VzLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFRyYWNrOjphZGRSZWdpb24pOiBSZWYgcmF0aGVyIHRoYW4gUmVmUHRyLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFRyYWNrOjpyZW1vdmVSZWdpb24pOiBSZWZlcmVuY2UgcmF0aGVyIHRoYW4gcG9p
bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6Y3VlV2lsbENoYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpjdWVEaWRDaGFuZ2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6aGFzQ3VlKTogRGl0dG8uCisKKyAgICAgICAgKiBo
dG1sL3RyYWNrL1RleHRUcmFjay5oOiBSZW1vdmVkIGRlY2xhcmF0aW9ucyBvZiBub24tZXhpc3Rl
bnQKKyAgICAgICAgZGlzYWJsZWRLZXl3b3JkLCBoaWRkZW5LZXl3b3JkLCBhbmQgc2hvd2luZ0tl
eXdvcmQgZnVuY3Rpb25zLgorICAgICAgICBNYWRlIHNldEtpbmQsIGNsaWVudCwgYW5kIGhhc0N1
ZSBwcm90ZWN0ZWQuIE1hZGUgb3ZlcnJpZGVzIG9mCisgICAgICAgIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBhbmQgbG9nQ2xhc3NOYW1lCisgICAgICAgIHBy
aXZhdGUuIFJlbW92ZWQgc2V0SXNEZWZhdWx0LiBVcGRhdGVkIGZvciBjaGFuZ2VzIGFib3ZlLgor
CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaWRsOiBEaWQgd2hhdCBGSVhNRSBzdWdn
ZXN0ZWQsIG1ha2luZyB0aGUgcmVnaW9uCisgICAgICAgIHBhcmFtZXRlcnMgbm9uLW51bGxhYmxl
LiBQYXNzaW5nIG51bGwgc2lsZW50bHkgZGlkIG5vdGhpbmcgYmVmb3JlLiBUaGVyZQorICAgICAg
ICBpcyBzb21lIHNtYWxsIHJpc2sgb2Ygd2Vic2l0ZSBpbmNvbXBhdGliaWxpdHkgaWYgc29tZW9u
ZSBhY2NpZGVudGFsbHkKKyAgICAgICAgcmVsaWVkIG9uIHRoaXMgV2ViS2l0LXNwZWNpZmljIGJl
aGF2aW9yLgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpjcmVhdGUpOiBEb2N1bWVudCBpbnN0ZWFkIG9mIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OlRl
eHRUcmFja0N1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjp3aWxs
Q2hhbmdlKTogUGFzcyByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6
OmRpZENoYW5nZSk6IERpdHRvLgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmg6
IFVwZGF0ZSBmb3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5pZGw6IERpdHRvLgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5l
cmljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OlRleHRUcmFj
a0N1ZUdlbmVyaWMpOiBVcGRhdGUgc2luY2UgdGhlIGJhc2UKKyAgICAgICAgY2xhc3Mgbm93IHRh
a2VzIGFuIHJ2YWx1ZSByZWZlcmVuY2UgdG8gdGhlIHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRUcmFja0N1ZUdlbmVyaWM6OmlzT3JkZXJlZEJlZm9yZSBjb25zdCk6IFVzZSBhdXRvLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6aXNQb3NpdGlvbmVkQWJvdmUg
Y29uc3QpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3VlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZUVEN1ZTo6Y3JlYXRlKTogRG9jdW1lbnQgaW5zdGVhZCBvZiBTY3JpcHRF
eGVjdXRpb25Db250ZXh0LgorICAgICAgICBBbHNvIHRha2UgU3RyaW5nIHdpdGggYW4gcnZhbHVl
IHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6VlRUQ3VlKTogRGl0dG8uCisg
ICAgICAgICogaHRtbC90cmFjay9WVFRDdWUuaDogVXBkYXRlIGZvciBhYm92ZSBjaGFuZ2VzLgor
ICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3VlLmlkbDogRGl0dG8uCisKKyAgICAgICAgKiBodG1s
L3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6
OldlYlZUVFBhcnNlcik6IERvY3VtZW50IGluc3RlYWQgb2YKKyAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC4gUmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLiBJbml0aWFsaXplCisg
ICAgICAgIG1fc3RhdGUgaW4gY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YlZUVFBhcnNlcjo6dGFrZUN1ZXMpOiBSZW5hbWVkIGZyb20gZ2V0TmV3Q3VlcyBhbmQgY2hhbmdl
ZAorICAgICAgICB0byB1c2UgYSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBhbiBvdXQgYXJndW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnRha2VSZWdpb25zKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnRha2VTdHlsZVNoZWV0cyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpwYXJzZUN1ZURhdGEpOiBSZW1vdmUg
bnVsbCBjaGVjayBvZiBtX2NsaWVudC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6
cGFyc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6Y29sbGVjdFdl
YlZUVEJsb2NrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OmNoZWNr
QW5kQ3JlYXRlUmVnaW9uKTogUGFzcyBkb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlZU
VFBhcnNlcjo6Y2hlY2tBbmRTdG9yZVJlZ2lvbik6IE9wdGltaXplIHRvIHVzZQorICAgICAgICBW
ZWN0b3I6OnJlbW92ZSBpbnN0ZWFkIG9mIFZlY3Rvcjo6cmVtb3ZlRmlyc3QuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJWVFRQYXJzZXI6OmNyZWF0ZU5ld0N1ZSk6IFJlbW92ZSBudWxsIGNoZWNrIG9m
IG1fY2xpZW50LgorICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmg6IFVwZGF0ZSBm
b3IgYWJvdmUgY2hhbmdlcy4KKworICAgICAgICAqIGxvYWRlci9UZXh0VHJhY2tMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrTG9hZGVyOjpUZXh0VHJhY2tMb2FkZXIpOiBE
b2N1bWVudCBpbnN0ZWFkIG9mCisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuIFJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycy4gSW5pdGlhbGl6ZQorICAgICAgICBkYXRhIG1lbWJl
cnMgaW4gaW4gY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xv
YWRlcjo6cHJvY2Vzc05ld0N1ZURhdGEpOiBQYXNzIHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tMb2FkZXI6OmNvcnNQb2xpY3lQcmV2ZW50ZWRMb2FkKTogVXNlIG1fZG9j
dW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tMb2FkZXI6OmxvYWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3Vlcyk6IFVzZSB0YWtl
Q3Vlcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3UmVnaW9ucyk6
IENoYW5nZWQgdG8gcmV0dXJuIGEgdmVjdG9yCisgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgYW4g
b3V0IGFyZ3VtZW50LiBVc2UgdGFrZVJlZ2lvbnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tMb2FkZXI6OmdldE5ld1N0eWxlU2hlZXRzKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1Rl
eHRUcmFja0xvYWRlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dHJhY2tEaXNw
bGF5TmFtZSk6IFVwZGF0ZWQgc2luY2UgdGhlc2UgYXJlIHJlZmVyZW5jZXMuCisgICAgICAgIChX
ZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzOjptZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRy
YWNrIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KTogRGl0dG8uCisgICAgICAgICogcGFnZS9DYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFja0Rp
c3BsYXlOYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdExlZ2li
bGVNZWRpYU9wdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXggY29uc3QpOgorICAg
ICAgICBVcGRhdGVkIHRvIHVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50ZXJzLiBSZWZh
Y3RvcmVkIHRoZSBsb2dpYyB0bworICAgICAgICB1c2UgT3B0aW9uYWwgYW5kIG5lc3RlZCBpZiBz
dGF0ZW1lbnRzIHRvIG1ha2UgdGhlIGFsZ29yaXRobSBjbGVhcmVyLgorCiAyMDIwLTAyLTI5ICBa
YWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bQkZDXSBDb25z
b2xpZGF0ZSBwcmVjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckFuY2VzdG9ycyBhbmQgcHJlY29t
cHV0ZVZlcnRpY2FsUG9zaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IDUzNjY3NGFlZjMz
ZGFjOGU4ZWZlOTAzMDJiY2Y5Mzk2ZDJkZDUzMzkuLmQ0M2ZmOTg3NGY5ZTRhNjg2NmRkYjM3ODNk
ZGIxYzFjY2MyYjMyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIk1lZGlhQ29udHJvbHNIb3N0LmgiCiAKICNpbmNsdWRlICJDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxl
bWVudHMuaCIKQEAgLTY4LDIzICs2NywyNiBAQCBjb25zdCBBdG9tU3RyaW5nJiBNZWRpYUNvbnRy
b2xzSG9zdDo6bWFudWFsS2V5d29yZCgpCiAgICAgcmV0dXJuIGFsd2F5c09uOwogfQogCi0KLVJl
ZjxNZWRpYUNvbnRyb2xzSG9zdD4gTWVkaWFDb250cm9sc0hvc3Q6OmNyZWF0ZShIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQpCitNZWRpYUNvbnRyb2xzSG9zdDo6TWVkaWFDb250cm9sc0hv
c3QoSFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQorICAgIDogbV9tZWRpYUVsZW1lbnQo
bWVkaWFFbGVtZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhQ29udHJvbHNI
b3N0KG1lZGlhRWxlbWVudCkpOwogfQogCi1NZWRpYUNvbnRyb2xzSG9zdDo6TWVkaWFDb250cm9s
c0hvc3QoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotICAgIDogbV9tZWRpYUVsZW1l
bnQobWVkaWFFbGVtZW50KQorTWVkaWFDb250cm9sc0hvc3Q6On5NZWRpYUNvbnRyb2xzSG9zdCgp
ID0gZGVmYXVsdDsKKwordm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6cmVmKCkKIHsKLSAgICBBU1NF
UlQobWVkaWFFbGVtZW50KTsKKyAgICBtX21lZGlhRWxlbWVudC5yZWYoKTsKIH0KIAotTWVkaWFD
b250cm9sc0hvc3Q6On5NZWRpYUNvbnRyb2xzSG9zdCgpID0gZGVmYXVsdDsKK3ZvaWQgTWVkaWFD
b250cm9sc0hvc3Q6OmRlcmVmKCkKK3sKKyAgICBtX21lZGlhRWxlbWVudC5kZXJlZigpOworfQog
CiBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IE1lZGlhQ29udHJvbHNIb3N0Ojpzb3J0ZWRUcmFj
a0xpc3RGb3JNZW51KFRleHRUcmFja0xpc3QmIHRyYWNrTGlzdCkKIHsKLSAgICBQYWdlKiBwYWdl
ID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBt
X21lZGlhRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybiB7IH07CiAKQEAgLTkzLDcgKzk1LDcgQEAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+
PiBNZWRpYUNvbnRyb2xzSG9zdDo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudShUZXh0VHJhY2tMaXMK
IAogVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gTWVkaWFDb250cm9sc0hvc3Q6OnNvcnRlZFRy
YWNrTGlzdEZvck1lbnUoQXVkaW9UcmFja0xpc3QmIHRyYWNrTGlzdCkKIHsKLSAgICBQYWdlKiBw
YWdlID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOworICAgIFBhZ2UqIHBhZ2Ug
PSBtX21lZGlhRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAg
ICAgIHJldHVybiB7IH07CiAKQEAgLTEwNSw3ICsxMDcsNyBAQCBTdHJpbmcgTWVkaWFDb250cm9s
c0hvc3Q6OmRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3QgT3B0aW9uYWw8VGV4dE9yQXVkaW9UcmFj
az4mCiAgICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAg
ICBQYWdlKiBwYWdlID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOworICAgIFBh
Z2UqIHBhZ2UgPSBtX21lZGlhRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCkBAIC0xMTQsMTkgKzExNiwxOSBA
QCBTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3QgT3B0
aW9uYWw8VGV4dE9yQXVkaW9UcmFjaz4mCiAgICAgfSwgdHJhY2sudmFsdWUoKSk7CiB9CiAKLVRl
eHRUcmFjayogTWVkaWFDb250cm9sc0hvc3Q6OmNhcHRpb25NZW51T2ZmSXRlbSgpCitUZXh0VHJh
Y2smIE1lZGlhQ29udHJvbHNIb3N0OjpjYXB0aW9uTWVudU9mZkl0ZW0oKQogewogICAgIHJldHVy
biBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOwogfQogCi1UZXh0VHJhY2sqIE1lZGlh
Q29udHJvbHNIb3N0OjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKQorVGV4dFRyYWNrJiBNZWRp
YUNvbnRyb2xzSG9zdDo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkKIHsKICAgICByZXR1cm4g
VGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKTsKIH0KIAogQXRvbVN0cmluZyBN
ZWRpYUNvbnRyb2xzSG9zdDo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QKIHsKLSAgICBQYWdl
KiBwYWdlID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOworICAgIFBhZ2UqIHBh
Z2UgPSBtX21lZGlhRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKIApAQCAtMTQ3LDE0ICsxNDksMTQgQEAgQXRvbVN0
cmluZyBNZWRpYUNvbnRyb2xzSG9zdDo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QKIAogdm9p
ZCBNZWRpYUNvbnRyb2xzSG9zdDo6c2V0U2VsZWN0ZWRUZXh0VHJhY2soVGV4dFRyYWNrKiB0cmFj
aykKIHsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodHJhY2spOwor
ICAgIG1fbWVkaWFFbGVtZW50LnNldFNlbGVjdGVkVGV4dFRyYWNrKHRyYWNrKTsKIH0KIAogRWxl
bWVudCogTWVkaWFDb250cm9sc0hvc3Q6OnRleHRUcmFja0NvbnRhaW5lcigpCiB7CiAgICAgaWYg
KCFtX3RleHRUcmFja0NvbnRhaW5lcikgewotICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5lciA9
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxl
bWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyLT5zZXRNZWRp
YUNvbnRyb2xsZXIobV9tZWRpYUVsZW1lbnQpOworICAgICAgICBtX3RleHRUcmFja0NvbnRhaW5l
ciA9IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlh
RWxlbWVudC5kb2N1bWVudCgpKTsKKyAgICAgICAgbV90ZXh0VHJhY2tDb250YWluZXItPnNldE1l
ZGlhQ29udHJvbGxlcigmbV9tZWRpYUVsZW1lbnQpOwogICAgIH0KICAgICByZXR1cm4gbV90ZXh0
VHJhY2tDb250YWluZXIuZ2V0KCk7CiB9CkBAIC0xODUsNTEgKzE4Nyw1MSBAQCB2b2lkIE1lZGlh
Q29udHJvbHNIb3N0Ojp1cGRhdGVDYXB0aW9uRGlzcGxheVNpemVzKEZvcmNlVXBkYXRlIGZvcmNl
KQogICAgIAogYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6YWxsb3dzSW5saW5lTWVkaWFQbGF5YmFj
aygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCku
cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworICAgIHJldHVybiAhbV9tZWRp
YUVsZW1lbnQubWVkaWFTZXNzaW9uKCkucmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFj
aygpOwogfQogCiBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBj
b25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKKyAgICBy
ZXR1cm4gbV9tZWRpYUVsZW1lbnQuc3VwcG9ydHNGdWxsc2NyZWVuKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKTsKIH0KIAogYm9vbCBNZWRpYUNvbnRy
b2xzSG9zdDo6aXNWaWRlb0xheWVySW5saW5lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRp
YUVsZW1lbnQtPmlzVmlkZW9MYXllcklubGluZSgpOworICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dC5pc1ZpZGVvTGF5ZXJJbmxpbmUoKTsKIH0KIAogYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6aXNJ
bk1lZGlhRG9jdW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZG9j
dW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xzSG9zdDo6
c2V0UHJlcGFyZWRUb1JldHVyblZpZGVvTGF5ZXJUb0lubGluZShib29sIHZhbHVlKQogewotICAg
IG1fbWVkaWFFbGVtZW50LT5zZXRQcmVwYXJlZFRvUmV0dXJuVmlkZW9MYXllclRvSW5saW5lKHZh
bHVlKTsKKyAgICBtX21lZGlhRWxlbWVudC5zZXRQcmVwYXJlZFRvUmV0dXJuVmlkZW9MYXllclRv
SW5saW5lKHZhbHVlKTsKIH0KIAogYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6dXNlckdlc3R1cmVS
ZXF1aXJlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNz
aW9uKCkucGxheWJhY2tQZXJtaXR0ZWQoKTsKKyAgICByZXR1cm4gIW1fbWVkaWFFbGVtZW50Lm1l
ZGlhU2Vzc2lvbigpLnBsYXliYWNrUGVybWl0dGVkKCk7CiB9CiAKIGJvb2wgTWVkaWFDb250cm9s
c0hvc3Q6OnNob3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9tZWRpYUVsZW1lbnQtPnNob3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5KCk7CisgICAgcmV0dXJu
IG1fbWVkaWFFbGVtZW50LnNob3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5KCk7CiB9CiAKIFN0cmlu
ZyBNZWRpYUNvbnRyb2xzSG9zdDo6ZXh0ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZSgpIGNvbnN0CiB7
CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBhdXRvIHBsYXllciA9
IG1fbWVkaWFFbGVtZW50LT5wbGF5ZXIoKTsKKyAgICBhdXRvIHBsYXllciA9IG1fbWVkaWFFbGVt
ZW50LnBsYXllcigpOwogICAgIGlmICghcGxheWVyKSB7CiAgICAgICAgIExPRyhNZWRpYSwgIk1l
ZGlhQ29udHJvbHNIb3N0OjpleHRlcm5hbERldmljZURpc3BsYXlOYW1lIC0gcmV0dXJuaW5nIFwi
XCIgYmVjYXVzZSBwbGF5ZXIgaXMgTlVMTCIpOwogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKICAgICB9Ci0gICAgCisKICAgICBTdHJpbmcgbmFtZSA9IHBsYXllci0+d2lyZWxlc3NQbGF5
YmFja1RhcmdldE5hbWUoKTsKICAgICBMT0coTWVkaWEsICJNZWRpYUNvbnRyb2xzSG9zdDo6ZXh0
ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZSAtIHJldHVybmluZyBcIiVzXCIiLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwotICAgIAorCiAgICAgcmV0dXJuIG5hbWU7CiAjZWxzZQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwpAQCAtMjQxLDEyICsyNDMsMTIgQEAgYXV0byBNZWRpYUNvbnRyb2xzSG9zdDo6
ZXh0ZXJuYWxEZXZpY2VUeXBlKCkgY29uc3QgLT4gRGV2aWNlVHlwZQogI2lmICFFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIHJldHVybiBEZXZpY2VUeXBlOjpOb25lOwogI2Vs
c2UKLSAgICBhdXRvIHBsYXllciA9IG1fbWVkaWFFbGVtZW50LT5wbGF5ZXIoKTsKKyAgICBhdXRv
IHBsYXllciA9IG1fbWVkaWFFbGVtZW50LnBsYXllcigpOwogICAgIGlmICghcGxheWVyKSB7CiAg
ICAgICAgIExPRyhNZWRpYSwgIk1lZGlhQ29udHJvbHNIb3N0OjpleHRlcm5hbERldmljZVR5cGUg
LSByZXR1cm5pbmcgXCJub25lXCIgYmVjYXVzZSBwbGF5ZXIgaXMgTlVMTCIpOwogICAgICAgICBy
ZXR1cm4gRGV2aWNlVHlwZTo6Tm9uZTsKICAgICB9Ci0gICAgCisKICAgICBzd2l0Y2ggKHBsYXll
ci0+d2lyZWxlc3NQbGF5YmFja1RhcmdldFR5cGUoKSkgewogICAgIGNhc2UgTWVkaWFQbGF5ZXI6
OlRhcmdldFR5cGVOb25lOgogICAgICAgICByZXR1cm4gRGV2aWNlVHlwZTo6Tm9uZTsKQEAgLTI2
Myw0MyArMjY1LDQwIEBAIGF1dG8gTWVkaWFDb250cm9sc0hvc3Q6OmV4dGVybmFsRGV2aWNlVHlw
ZSgpIGNvbnN0IC0+IERldmljZVR5cGUKIAogYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6Y29udHJv
bHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFF
bGVtZW50LT5tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoKTsKKyAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQubWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCk7
CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnNldENvbnRyb2xzRGVwZW5kT25QYWdlU2Nh
bGVGYWN0b3IoYm9vbCB2YWx1ZSkKIHsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0TWVkaWFDb250
cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKHZhbHVlKTsKKyAgICBtX21lZGlhRWxlbWVudC5z
ZXRNZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IodmFsdWUpOwogfQogCi1TdHJp
bmcgTWVkaWFDb250cm9sc0hvc3Q6OmdlbmVyYXRlVVVJRCgpIGNvbnN0CitTdHJpbmcgTWVkaWFD
b250cm9sc0hvc3Q6OmdlbmVyYXRlVVVJRCgpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKTsKIH0KIAotU3RyaW5nIE1lZGlhQ29udHJvbHNIb3N0OjpzaGFkb3dSb290
Q1NTVGV4dCgpIGNvbnN0CitTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OnNoYWRvd1Jvb3RDU1NU
ZXh0KCkKIHsKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1vZGVybk1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0KCk7CiB9CiAKLVN0cmluZyBNZWRpYUNvbnRyb2xzSG9zdDo6YmFz
ZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUsIGNvbnN0
IFN0cmluZyYgaWNvblR5cGUpIGNvbnN0CitTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmJhc2U2
NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZShjb25zdCBTdHJpbmcmIGljb25OYW1lLCBjb25zdCBT
dHJpbmcmIGljb25UeXBlKQogewogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCku
bWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZShpY29uTmFtZSwgaWNv
blR5cGUpOwogfQogCi1TdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmZvcm1hdHRlZFN0cmluZ0Zv
ckR1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbkluU2Vjb25kcykgY29uc3QKK1N0cmluZyBNZWRpYUNv
bnRyb2xzSG9zdDo6Zm9ybWF0dGVkU3RyaW5nRm9yRHVyYXRpb24oZG91YmxlIGR1cmF0aW9uSW5T
ZWNvbmRzKQogewogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250
cm9sc0Zvcm1hdHRlZFN0cmluZ0ZvckR1cmF0aW9uKGR1cmF0aW9uSW5TZWNvbmRzKTsKIH0KIAog
Ym9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6Y29tcGFjdE1vZGUoKSBjb25zdAogewotICAgIGlmICht
X3NpbXVsYXRlQ29tcGFjdE1vZGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAjaWYgUExBVEZP
Uk0oV0FUQ0hPUykKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBtX3NpbXVsYXRlQ29tcGFjdE1vZGU7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hv
c3QuaAppbmRleCA5ZDI2MGQ4MTQwYmJiNWNjOTZmMWIwYTkyNjcwOGE4ZjEyNDhmZjQ0Li42ZTEy
OWUzNzE2YjdkNmY4N2UxNjRlZTAwZWJmMjY3YzVjYmVkMWRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaApA
QCAtNDIsMTEgKzQyLDE1IEBAIGNsYXNzIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ7CiBjbGFzcyBUZXh0VHJhY2s7CiBjbGFzcyBUZXh0VHJhY2tMaXN0OwogCi1jbGFzcyBN
ZWRpYUNvbnRyb2xzSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhQ29udHJvbHNIb3N0PiB7
CitjbGFzcyBNZWRpYUNvbnRyb2xzSG9zdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQo
TWVkaWFDb250cm9sc0hvc3QpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9s
c0hvc3Q+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgZXhwbGljaXQgTWVkaWFDb250
cm9sc0hvc3QoSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIH5NZWRpYUNvbnRyb2xzSG9zdCgpOwog
CisgICAgdm9pZCByZWYoKTsKKyAgICB2b2lkIGRlcmVmKCk7CisKICAgICBzdGF0aWMgY29uc3Qg
QXRvbVN0cmluZyYgYXV0b21hdGljS2V5d29yZCgpOwogICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBmb3JjZWRPbmx5S2V5d29yZCgpOwogICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBh
bHdheXNPbktleXdvcmQoKTsKQEAgLTU4LDggKzYyLDggQEAgcHVibGljOgogICAgIHVzaW5nIFRl
eHRPckF1ZGlvVHJhY2sgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPFRleHRUcmFjaz4sIFJlZlB0cjxB
dWRpb1RyYWNrPj47CiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3QgT3B0aW9u
YWw8VGV4dE9yQXVkaW9UcmFjaz4mKTsKIAotICAgIFRleHRUcmFjayogY2FwdGlvbk1lbnVPZmZJ
dGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKTsKKyAgICBz
dGF0aWMgVGV4dFRyYWNrJiBjYXB0aW9uTWVudU9mZkl0ZW0oKTsKKyAgICBzdGF0aWMgVGV4dFRy
YWNrJiBjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKTsKICAgICBBdG9tU3RyaW5nIGNhcHRpb25E
aXNwbGF5TW9kZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0VHJhY2soVGV4dFRy
YWNrKik7CiAgICAgRWxlbWVudCogdGV4dFRyYWNrQ29udGFpbmVyKCk7CkBAIC03Myw3ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFByZXBhcmVkVG9SZXR1cm5WaWRlb0xheWVyVG9Jbmxp
bmUoYm9vbCk7CiAKICAgICBlbnVtIGNsYXNzIEZvcmNlVXBkYXRlIHsgWWVzLCBObyB9OwotICAg
IHZvaWQgdXBkYXRlQ2FwdGlvbkRpc3BsYXlTaXplcyhGb3JjZVVwZGF0ZSBmb3JjZSA9IEZvcmNl
VXBkYXRlOjpObyk7CisgICAgdm9pZCB1cGRhdGVDYXB0aW9uRGlzcGxheVNpemVzKEZvcmNlVXBk
YXRlID0gRm9yY2VVcGRhdGU6Ok5vKTsKICAgICB2b2lkIGVudGVyZWRGdWxsc2NyZWVuKCk7CiAg
ICAgdm9pZCBleGl0ZWRGdWxsc2NyZWVuKCk7CiAKQEAgLTg4LDE2ICs5MiwxNCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBjb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKGJvb2wgdik7CiAKLSAgICBT
dHJpbmcgZ2VuZXJhdGVVVUlEKCkgY29uc3Q7CisgICAgc3RhdGljIFN0cmluZyBnZW5lcmF0ZVVV
SUQoKTsKIAotICAgIFN0cmluZyBzaGFkb3dSb290Q1NTVGV4dCgpIGNvbnN0OwotICAgIFN0cmlu
ZyBiYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5cGUoY29uc3QgU3RyaW5nJiBpY29uTmFtZSwg
Y29uc3QgU3RyaW5nJiBpY29uVHlwZSkgY29uc3Q7Ci0gICAgU3RyaW5nIGZvcm1hdHRlZFN0cmlu
Z0ZvckR1cmF0aW9uKGRvdWJsZSkgY29uc3Q7CisgICAgc3RhdGljIFN0cmluZyBzaGFkb3dSb290
Q1NTVGV4dCgpOworICAgIHN0YXRpYyBTdHJpbmcgYmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRU
eXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUsIGNvbnN0IFN0cmluZyYgaWNvblR5cGUpOworICAg
IHN0YXRpYyBTdHJpbmcgZm9ybWF0dGVkU3RyaW5nRm9yRHVyYXRpb24oZG91YmxlKTsKIAogcHJp
dmF0ZToKLSAgICBNZWRpYUNvbnRyb2xzSG9zdChIVE1MTWVkaWFFbGVtZW50Kik7Ci0KLSAgICBI
VE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVudDsKKyAgICBIVE1MTWVkaWFFbGVtZW50JiBt
X21lZGlhRWxlbWVudDsKICAgICBSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudD4gbV90ZXh0VHJhY2tDb250YWluZXI7CiAgICAgYm9vbCBtX3NpbXVsYXRlQ29tcGFj
dE1vZGUgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCA3M2NkMDQzMjIyMTM2NDdlNjdlOTA5NzI0
MjdjMGU1ZjgyOGE1OTVlLi5kYjczMTA0NzQ0MWI1Y2RmOTljNmM4YTExOGUxOGUyYzFkOGQ5MDhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuY3BwCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNl
QnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoY29uc3QgSW5pdAog
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdGVwcyA1LjQuMS01LjQuOC4xIGFzIHBl
ciBFZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIwMTUsIGFuZCByZW9yZGVyIHRoaXMKICAgICAg
ICAgICAgIC8vIDUuNC4xIExldCBuZXcgdGV4dCB0cmFjayBiZSBhIG5ldyBUZXh0VHJhY2sgb2Jq
ZWN0IHdpdGggaXRzIHByb3BlcnRpZXMgcG9wdWxhdGVkIHdpdGggdGhlCiAgICAgICAgICAgICAv
LyBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiBzZWdtZW50
LgotICAgICAgICAgICAgYXV0byBuZXdUZXh0VHJhY2sgPSBJbmJhbmRUZXh0VHJhY2s6OmNyZWF0
ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqdGhpcywgdGV4dFRyYWNrUHJpdmF0ZSk7Cisg
ICAgICAgICAgICBhdXRvIG5ld1RleHRUcmFjayA9IEluYmFuZFRleHRUcmFjazo6Y3JlYXRlKGRv
Y3VtZW50KCksICp0aGlzLCB0ZXh0VHJhY2tQcml2YXRlKTsKIAogICAgICAgICAgICAgLy8gNS40
LjIgSWYgdGhlIG1vZGUgcHJvcGVydHkgb24gbmV3IHRleHQgdHJhY2sgZXF1YWxzICJzaG93aW5n
IiBvciAiaGlkZGVuIiwgdGhlbiBzZXQgYWN0aXZlCiAgICAgICAgICAgICAvLyB0cmFjayBmbGFn
IHRvIHRydWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBm
ZGM3MjhhYjY4NjczMjRmYTE3MGU3ZWEwMDBjMTM3N2E3ODFjOTUzLi5lYmQ3NjZkN2U4ZjlhMDYy
ZTJkYTBiNTY5NWYwNzBlMmUxNGYzNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKQEAgLTYzNCw2ICs2MzQsNyBAQCBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1l
ZGlhRWxlbWVudCgpCiAgICAgbV9tZWRpYVNlc3Npb24gPSBudWxscHRyOwogICAgIHNjaGVkdWxl
UGxheWJhY2tDb250cm9sc01hbmFnZXJVcGRhdGUoKTsKIH0KKwogUmVmUHRyPEhUTUxNZWRpYUVs
ZW1lbnQ+IEhUTUxNZWRpYUVsZW1lbnQ6OmJlc3RNZWRpYUVsZW1lbnRGb3JTaG93aW5nUGxheWJh
Y2tDb250cm9sc01hbmFnZXIoTWVkaWFFbGVtZW50U2Vzc2lvbjo6UGxheWJhY2tDb250cm9sc1B1
cnBvc2UgcHVycG9zZSkKIHsKICAgICBWZWN0b3I8TWVkaWFFbGVtZW50U2Vzc2lvbkluZm8+IGNh
bmRpZGF0ZVNlc3Npb25zOwpAQCAtNDAyMiw3ICs0MDIzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVBsYXllckRpZEFkZFRleHRUcmFjayhJbmJhbmRUZXh0VHJhY2tQcml2YXRlJiB0
cmFjaykKIHsKICAgICAvLyA0LjguMTAuMTIuMiBTb3VyY2luZyBpbi1iYW5kIHRleHQgdHJhY2tz
CiAgICAgLy8gMS4gQXNzb2NpYXRlIHRoZSByZWxldmFudCBkYXRhIHdpdGggYSBuZXcgdGV4dCB0
cmFjayBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgbmV3IFRleHRUcmFjayBvYmplY3QuCi0gICAgYXV0
byB0ZXh0VHJhY2sgPSBJbmJhbmRUZXh0VHJhY2s6OmNyZWF0ZSgqQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksICp0aGlzLCB0cmFjayk7CisgICAgYXV0byB0ZXh0VHJh
Y2sgPSBJbmJhbmRUZXh0VHJhY2s6OmNyZWF0ZShkb2N1bWVudCgpLCAqdGhpcywgdHJhY2spOwog
ICAgIHRleHRUcmFjay0+c2V0TWVkaWFFbGVtZW50KG1ha2VXZWFrUHRyKHRoaXMpKTsKIAogICAg
IC8vIDIuIFNldCB0aGUgbmV3IHRleHQgdHJhY2sncyBraW5kLCBsYWJlbCwgYW5kIGxhbmd1YWdl
IGJhc2VkIG9uIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIHJlbGV2YW50IGRhdGEsCkBAIC00MTY5LDcg
KzQxNzAsNyBAQCBFeGNlcHRpb25PcjxUZXh0VHJhY2smPiBIVE1MTWVkaWFFbGVtZW50OjphZGRU
ZXh0VHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdAogCiAgICAgLy8gNS4gQ3JlYXRlIGEg
bmV3IHRleHQgdHJhY2sgY29ycmVzcG9uZGluZyB0byB0aGUgbmV3IG9iamVjdCwgYW5kIHNldCBp
dHMgdGV4dCB0cmFjayBraW5kIHRvIGtpbmQsIGl0cyB0ZXh0CiAgICAgLy8gdHJhY2sgbGFiZWwg
dG8gbGFiZWwsIGl0cyB0ZXh0IHRyYWNrIGxhbmd1YWdlIHRvIGxhbmd1YWdlLi4uCi0gICAgYXV0
byB0cmFjayA9IFRleHRUcmFjazo6Y3JlYXRlKEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCB0aGlzLCBraW5kLCBlbXB0eVN0cmluZygpLCBsYWJlbCwgbGFuZ3VhZ2Up
OworICAgIGF1dG8gdHJhY2sgPSBUZXh0VHJhY2s6OmNyZWF0ZSgmZG9jdW1lbnQoKSwgdGhpcywg
a2luZCwgZW1wdHlTdHJpbmcoKSwgbGFiZWwsIGxhbmd1YWdlKTsKICAgICBhdXRvJiB0cmFja1Jl
ZmVyZW5jZSA9IHRyYWNrLmdldCgpOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIHRy
YWNrUmVmZXJlbmNlLnNldExvZ2dlcihsb2dnZXIoKSwgbG9nSWRlbnRpZmllcigpKTsKQEAgLTQ0
MzIsNyArNDQzMyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRh
aW5lcigpCiAgICAgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKIAogICAgIGlmICgh
bV9tZWRpYUNvbnRyb2xzSG9zdCkKLSAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdCA9IE1lZGlh
Q29udHJvbHNIb3N0OjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3Qg
PSBtYWtlVW5pcXVlPE1lZGlhQ29udHJvbHNIb3N0PigqdGhpcyk7CiAKICAgICBzZXR1cEFuZENh
bGxKUyhbdGhpc10oSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgU2NyaXB0Q29udHJvbGxlciYsIERPTVdyYXBw
ZXJXb3JsZCYpIHsKICAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKQEAgLTQ1
MDUsMTAgKzQ1MDYsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRU
cmFjayhUZXh0VHJhY2sqIHRyYWNrVG9TZWxlY3QpCiAgICAgaWYgKCF0cmFja0xpc3QgfHwgIXRy
YWNrTGlzdC0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0cmFja1RvU2Vs
ZWN0ID09IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpIHsKKyAgICBpZiAo
dHJhY2tUb1NlbGVjdCA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkg
ewogICAgICAgICBpZiAoY2FwdGlvbkRpc3BsYXlNb2RlKCkgIT0gQ2FwdGlvblVzZXJQcmVmZXJl
bmNlczo6QXV0b21hdGljKQogICAgICAgICAgICAgbV90ZXh0VHJhY2tzLT5zY2hlZHVsZUNoYW5n
ZUV2ZW50KCk7Ci0gICAgfSBlbHNlIGlmICh0cmFja1RvU2VsZWN0ID09IFRleHRUcmFjazo6Y2Fw
dGlvbk1lbnVPZmZJdGVtKCkpIHsKKyAgICB9IGVsc2UgaWYgKHRyYWNrVG9TZWxlY3QgPT0gJlRl
eHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDAs
IGxlbmd0aCA9IHRyYWNrTGlzdC0+bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAg
ICAgIHRyYWNrTGlzdC0+aXRlbShpKS0+c2V0TW9kZShUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVk
KTsKIApAQCAtNDUzMiw5ICs0NTMzLDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxl
Y3RlZFRleHRUcmFjayhUZXh0VHJhY2sqIHRyYWNrVG9TZWxlY3QpCiAKICAgICBhdXRvJiBjYXB0
aW9uUHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVy
ZW5jZXMoKTsKICAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUg
ZGlzcGxheU1vZGU7Ci0gICAgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4dFRyYWNrOjpjYXB0aW9u
TWVudU9mZkl0ZW0oKSkKKyAgICBpZiAodHJhY2tUb1NlbGVjdCA9PSAmVGV4dFRyYWNrOjpjYXB0
aW9uTWVudU9mZkl0ZW0oKSkKICAgICAgICAgZGlzcGxheU1vZGUgPSBDYXB0aW9uVXNlclByZWZl
cmVuY2VzOjpGb3JjZWRPbmx5OwotICAgIGVsc2UgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4dFRy
YWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkKKyAgICBlbHNlIGlmICh0cmFja1RvU2Vs
ZWN0ID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpKQogICAgICAgICBk
aXNwbGF5TW9kZSA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYzsKICAgICBlbHNl
IHsKICAgICAgICAgZGlzcGxheU1vZGUgPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBbHdheXNP
bjsKQEAgLTYzMzgsNyArNjMzOSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVGV4
dFRyYWNrRGlzcGxheSgpCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBl
bnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwogICAgIGlmICghbV9tZWRpYUNvbnRyb2xz
SG9zdCkKLSAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdCA9IE1lZGlhQ29udHJvbHNIb3N0Ojpj
cmVhdGUodGhpcyk7CisgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBtYWtlVW5pcXVlPE1l
ZGlhQ29udHJvbHNIb3N0PigqdGhpcyk7CiAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdC0+dXBkYXRl
VGV4dFRyYWNrQ29udGFpbmVyKCk7CiAjZWxzZQogICAgIGlmICghaGFzTWVkaWFDb250cm9scygp
ICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCkBAIC03MzgyLDcgKzczODMsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9v
dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoIW1fbWVkaWFDb250
cm9sc0hvc3QpCi0gICAgICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0ID0gTWVkaWFDb250cm9s
c0hvc3Q6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBt
YWtlVW5pcXVlPE1lZGlhQ29udHJvbHNIb3N0PigqdGhpcyk7CiAKICAgICAgICAgYXV0byBtZWRp
YUpTV3JhcHBlciA9IHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsICp0
aGlzKTsKICAgICAgICAgYXV0byBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlciA9IHRvSlMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsICptX21lZGlhQ29udHJvbHNIb3N0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZWYwMGMzNTAzOTU1MmFi
NDgyNWIzNjhiOTMxZmY0ZjFmMWY0YzVmMy4uOGIxODRlNDU4N2VlZWY2OGFkOWQ5Zjc5NWM0YWYw
NTgwMWIwMjVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTEx
OTYsNyArMTE5Niw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NS
SVBUKQogICAgIGZyaWVuZCBjbGFzcyBNZWRpYUNvbnRyb2xzSG9zdDsKLSAgICBSZWZQdHI8TWVk
aWFDb250cm9sc0hvc3Q+IG1fbWVkaWFDb250cm9sc0hvc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRy
PE1lZGlhQ29udHJvbHNIb3N0PiBtX21lZGlhQ29udHJvbHNIb3N0OwogICAgIFJlZlB0cjxET01X
cmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVHJhY2tFbGVtZW50LmNwcAppbmRleCA3NGMyYjBhMDdjYmYwMGMyMTE4MmE2ZWU3MmU2
YTE4ZWJjMGM1ZmU0Li5kMzNmOGQ1MTJiODliNTczYmQ5OGZiMjlhYTAzY2Q2MTZiNDdkNzFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTExMSw4ICsxMTEs
NiBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbgogICAgICAgICB0cmFjaygpLnNldExhYmVsKHZh
bHVlKTsKICAgICBlbHNlIGlmIChuYW1lID09IHNyY2xhbmdBdHRyKQogICAgICAgICB0cmFjaygp
LnNldExhbmd1YWdlKHZhbHVlKTsKLSAgICBlbHNlIGlmIChuYW1lID09IGRlZmF1bHRBdHRyKQot
ICAgICAgICB0cmFjaygpLnNldElzRGVmYXVsdCghdmFsdWUuaXNOdWxsKCkpOwogCiAgICAgSFRN
TEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBlZWJh
ODk0YzVlYTUyMTVhMDNhMTE3Y2RiNjZhZjgxODQ5ZDBkMDlmLi42ZDBmMzc5ZDVmNzExYjI3YTM0
MWVkZjA5N2FjNGVlMDMwY2Y5YTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC03ODAsMTIgKzc4MCwxMiBAQCB2b2lk
IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6dXBkYXRlRGlzcGxh
eSgpCiAgICAgICAgIGlmICghdGV4dFRyYWNrKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgaWYgKHRleHRUcmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpKSB7
CisgICAgICAgIGlmICh0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVt
KCkpIHsKICAgICAgICAgICAgIG9mZk1lbnVJdGVtID0gdHJhY2tJdGVtOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodGV4dFRyYWNrID09IFRleHRUcmFj
azo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpIHsKKyAgICAgICAgaWYgKHRleHRUcmFjayA9
PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkgewogICAgICAgICAgICAg
aWYgKGRpc3BsYXlNb2RlID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYykKICAg
ICAgICAgICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFs
dWUpOwogICAgICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9EYXRhQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAK
aW5kZXggM2IwMzJmMTA3Mzc5NGE5ZmYyZjgzMTllMTY1OTEwZjdjNTFmNjYxMC4uNGJjMDI3NWQy
YTU0MjdhZWQzN2VjNTFiNTRjMDlmZWE4ZDMzNzcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9EYXRhQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0RhdGFDdWUuY3BwCkBAIC00MiwzNyArNDIsNTUgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKERhdGFDdWUpOwogCi1EYXRhQ3VlOjpEYXRhQ3Vl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQs
IGNvbnN0IE1lZGlhVGltZSYgZW5kLCBBcnJheUJ1ZmZlciYgZGF0YSwgY29uc3QgU3RyaW5nJiB0
eXBlKQotICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQpCitEYXRhQ3VlOjpE
YXRhQ3VlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3Qg
TWVkaWFUaW1lJiBlbmQsIEFycmF5QnVmZmVyJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUpCisg
ICAgOiBUZXh0VHJhY2tDdWUoZG9jdW1lbnQsIHN0YXJ0LCBlbmQpCiAgICAgLCBtX3R5cGUodHlw
ZSkKIHsKICAgICBzZXREYXRhKGRhdGEpOwogfQogCi1EYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1l
ZGlhVGltZSYgZW5kLCBjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBU
ZXh0VHJhY2tDdWUoY29udGV4dCwgc3RhcnQsIGVuZCkKK0RhdGFDdWU6OkRhdGFDdWUoRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVu
ZCwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogVGV4dFRyYWNrQ3Vl
KGRvY3VtZW50LCBzdGFydCwgZW5kKQogICAgICwgbV9kYXRhKEFycmF5QnVmZmVyOjpjcmVhdGUo
ZGF0YSwgbGVuZ3RoKSkKIHsKIH0KIAotRGF0YUN1ZTo6RGF0YUN1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUm
IGVuZCwgUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWU+JiYgcGxhdGZvcm1WYWx1ZSwg
Y29uc3QgU3RyaW5nJiB0eXBlKQotICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBl
bmQpCitEYXRhQ3VlOjpEYXRhQ3VlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1l
JiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJlZjxTZXJpYWxpemVkUGxhdGZvcm1EYXRh
Q3VlPiYmIHBsYXRmb3JtVmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKKyAgICA6IFRleHRUcmFj
a0N1ZShkb2N1bWVudCwgc3RhcnQsIGVuZCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9w
bGF0Zm9ybVZhbHVlKFdURk1vdmUocGxhdGZvcm1WYWx1ZSkpCiB7CiB9CiAKLURhdGFDdWU6OkRh
dGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBz
dGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiB0eXBlKQotICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQpCitEYXRh
Q3VlOjpEYXRhQ3VlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwg
Y29uc3QgTWVkaWFUaW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0
eXBlKQorICAgIDogVGV4dFRyYWNrQ3VlKGRvY3VtZW50LCBzdGFydCwgZW5kKQogICAgICwgbV90
eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlKGNvbnRleHQudm0oKSwgdmFsdWUpCisgICAgLCBtX3Zh
bHVlKGRvY3VtZW50LnZtKCksIHZhbHVlKQogewogfQogCi1EYXRhQ3VlOjp+RGF0YUN1ZSgpCitS
ZWY8RGF0YUN1ZT4gRGF0YUN1ZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVk
aWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IHZvaWQqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGRvY3Vt
ZW50LCBzdGFydCwgZW5kLCBkYXRhLCBsZW5ndGgpKTsKIH0KIAorUmVmPERhdGFDdWU+IERhdGFD
dWU6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNv
bnN0IE1lZGlhVGltZSYgZW5kLCBSZWY8U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZT4mJiBwbGF0
Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRGF0YUN1ZShkb2N1bWVudCwgc3RhcnQsIGVuZCwgV1RGTW92ZShwbGF0Zm9ybVZhbHVlKSwg
dHlwZSkpOworfQorCitSZWY8RGF0YUN1ZT4gRGF0YUN1ZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1
bWVudCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBBcnJheUJ1ZmZlciYgZGF0YSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGRvY3VtZW50LCBNZWRpYVRpbWU6OmNyZWF0
ZVdpdGhEb3VibGUoc3RhcnQpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoZW5kKSwgZGF0
YSwgZW1wdHlTdHJpbmcoKSkpOworfQorCitSZWY8RGF0YUN1ZT4gRGF0YUN1ZTo6Y3JlYXRlKERv
Y3VtZW50JiBkb2N1bWVudCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
YXRhQ3VlKGRvY3VtZW50LCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoc3RhcnQpLCBNZWRp
YVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoZW5kKSwgdmFsdWUsIHR5cGUpKTsKK30KKworRGF0YUN1
ZTo6fkRhdGFDdWUoKSA9IGRlZmF1bHQ7CisKIFJlZlB0cjxBcnJheUJ1ZmZlcj4gRGF0YUN1ZTo6
ZGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxhdGZvcm1WYWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9EYXRhQ3VlLmgKaW5kZXggNTdlOWFlOWQwNWYwNzE4ZjYwNjA3NGFhM2Q0ZDU2NDAxMjU0
N2Q0MC4uMzExZTU1MDdmN2Y4N2JkMzU3ZTViYWQ2ZWJhYzEyMTMzNjQ0ZmY4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKQEAgLTQ1LDM0ICs0NSwxMCBAQCBjbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogY2xhc3MgRGF0YUN1ZSBmaW5hbCA6IHB1YmxpYyBUZXh0VHJhY2tD
dWUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRGF0YUN1ZSk7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEFycmF5QnVm
ZmVyJiBkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1ZShj
b250ZXh0LCBzdGFydCwgZW5kLCBkYXRhLCBlbXB0eVN0cmluZygpKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERhdGFDdWUoY29udGV4dCwgc3RhcnQsIGVuZCwgZGF0YSwgbGVuZ3RoKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQs
IEFycmF5QnVmZmVyJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGRhdGEsIHR5
cGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPERhdGFDdWU+IGNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRp
YVRpbWUmIGVuZCwgUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWU+JiYgcGxhdGZvcm1W
YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRGF0YUN1ZShjb250ZXh0LCBzdGFydCwgZW5kLCBXVEZNb3ZlKHBsYXRmb3JtVmFsdWUp
LCB0eXBlKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBBcnJh
eUJ1ZmZlciYgZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFD
dWUoY29udGV4dCwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0YXJ0KSwgTWVkaWFUaW1l
OjpjcmVhdGVXaXRoRG91YmxlKGVuZCksIGRhdGEsIGVtcHR5U3RyaW5nKCkpKTsKLSAgICB9Ci0g
ICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBKU0M6OkpTVmFsdWUgdmFsdWUsIGNvbnN0
IFN0cmluZyYgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFD
dWUoY29udGV4dCwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0YXJ0KSwgTWVkaWFUaW1l
OjpjcmVhdGVXaXRoRG91YmxlKGVuZCksIHZhbHVlLCB0eXBlKSk7Ci0gICAgfQorICAgIHN0YXRp
YyBSZWY8RGF0YUN1ZT4gY3JlYXRlKERvY3VtZW50JiwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5k
LCBBcnJheUJ1ZmZlciYgZGF0YSk7CisgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoRG9j
dW1lbnQmLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIEpTQzo6SlNWYWx1ZSwgY29uc3QgU3Ry
aW5nJiB0eXBlKTsKKyAgICBzdGF0aWMgUmVmPERhdGFDdWU+IGNyZWF0ZShEb2N1bWVudCYsIGNv
bnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCB2b2lkKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8RGF0YUN1ZT4gY3JlYXRlKERv
Y3VtZW50JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJl
ZjxTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlPiYmLCBjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAg
ICAgdmlydHVhbCB+RGF0YUN1ZSgpOwogCkBAIC04OCwxMCArNjQsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQogCiBw
cml2YXRlOgotICAgIERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlh
VGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBBcnJheUJ1ZmZlciYsIGNvbnN0IFN0
cmluZyYpOwotICAgIERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlh
VGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCB2b2lkKiwgdW5zaWduZWQp
OwotICAgIERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYg
c3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtRGF0
YUN1ZT4mJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpTQzo6
SlNWYWx1ZSwgY29uc3QgU3RyaW5nJik7CisgICAgRGF0YUN1ZShEb2N1bWVudCYsIGNvbnN0IE1l
ZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBBcnJheUJ1ZmZlciYsIGNvbnN0
IFN0cmluZyYpOworICAgIERhdGFDdWUoRG9jdW1lbnQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0
LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKKyAgICBEYXRh
Q3VlKERvY3VtZW50JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBl
bmQsIFJlZjxTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlPiYmLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICBEYXRhQ3VlKERvY3VtZW50JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFU
aW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSwgY29uc3QgU3RyaW5nJik7CiAKICAgICBKU0M6OkpTVmFs
dWUgdmFsdWVPck51bGwoKSBjb25zdDsKICAgICBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBEYXRhOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0RhdGFDdWUuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmlkbAppbmRl
eCAzYTk1ODNmZGRiNjU2NGRkMjk1YzI3Y2YwYjc2NDljMjJlODhlZDM4Li5iOWUzNTdhOWYwOTBk
MTAwNTE3OGNhOTdmNzFkYzg0ODRjNjU5ODBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0RhdGFDdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0
YUN1ZS5pZGwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBDb25kaXRpb25hbD1WSURFT19UUkFDSywK
ICAgICBDb25zdHJ1Y3Rvcih1bnJlc3RyaWN0ZWQgZG91YmxlIHN0YXJ0VGltZSwgdW5yZXN0cmlj
dGVkIGRvdWJsZSBlbmRUaW1lLCBBcnJheUJ1ZmZlciBkYXRhKSwKICAgICBDb25zdHJ1Y3Rvcih1
bnJlc3RyaWN0ZWQgZG91YmxlIHN0YXJ0VGltZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBlbmRUaW1l
LCBhbnkgdmFsdWUsIG9wdGlvbmFsIERPTVN0cmluZyB0eXBlKSwKLSAgICBDb25zdHJ1Y3RvckNh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURv
Y3VtZW50CiBdIGludGVyZmFjZSBEYXRhQ3VlIDogVGV4dFRyYWNrQ3VlIHsKICAgICBhdHRyaWJ1
dGUgQXJyYXlCdWZmZXIgZGF0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
SW5iYW5kRGF0YVRleHRUcmFjay5jcHAKaW5kZXggNGQ2MGQ2YmEwODRlNzZiZDdiZDkxMDg4ZGUz
NDY1NzllNzM1ODIzZC4uMGRjMGQ5NGQ1MzYwY2Q4YzYyYjViYjViNDMyMzhkYjE2MzdiZDhiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2su
Y3BwCkBAIC0zOCwyMSArMzgsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW5iYW5kRGF0YVRleHRUcmFjayk7CiAKLWlubGluZSBJbmJhbmRE
YXRhVGV4dFRyYWNrOjpJbmJhbmREYXRhVGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIFRleHRUcmFja0NsaWVudCYgY2xpZW50LCBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
JiB0cmFja1ByaXZhdGUpCi0gICAgOiBJbmJhbmRUZXh0VHJhY2soY29udGV4dCwgY2xpZW50LCB0
cmFja1ByaXZhdGUpCitpbmxpbmUgSW5iYW5kRGF0YVRleHRUcmFjazo6SW5iYW5kRGF0YVRleHRU
cmFjayhEb2N1bWVudCYgZG9jdW1lbnQsIFRleHRUcmFja0NsaWVudCYgY2xpZW50LCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlJiB0cmFja1ByaXZhdGUpCisgICAgOiBJbmJhbmRUZXh0VHJhY2soZG9j
dW1lbnQsIGNsaWVudCwgdHJhY2tQcml2YXRlKQogewogfQogCi1SZWY8SW5iYW5kRGF0YVRleHRU
cmFjaz4gSW5iYW5kRGF0YVRleHRUcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIFRleHRUcmFja0NsaWVudCYgY2xpZW50LCBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
JiB0cmFja1ByaXZhdGUpCitSZWY8SW5iYW5kRGF0YVRleHRUcmFjaz4gSW5iYW5kRGF0YVRleHRU
cmFjazo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQs
IEluYmFuZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBJbmJhbmREYXRhVGV4dFRyYWNrKGNvbnRleHQsIGNsaWVudCwgdHJhY2tQcml2
YXRlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5iYW5kRGF0YVRleHRUcmFjayhkb2N1
bWVudCwgY2xpZW50LCB0cmFja1ByaXZhdGUpKTsKIH0KIAogSW5iYW5kRGF0YVRleHRUcmFjazo6
fkluYmFuZERhdGFUZXh0VHJhY2soKSA9IGRlZmF1bHQ7CiAKIHZvaWQgSW5iYW5kRGF0YVRleHRU
cmFjazo6YWRkRGF0YUN1ZShjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUm
IGVuZCwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGFkZEN1ZShE
YXRhQ3VlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgZGF0
YSwgbGVuZ3RoKSk7CisgICAgYWRkQ3VlKERhdGFDdWU6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dCwgZW5kLCBkYXRhLCBsZW5ndGgpKTsKIH0KIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQpA
QCAtNjIsOCArNjIsOCBAQCB2b2lkIEluYmFuZERhdGFUZXh0VHJhY2s6OmFkZERhdGFDdWUoY29u
c3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbgogICAgIGlmIChmaW5kSW5j
b21wbGV0ZUN1ZShwbGF0Zm9ybVZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBj
dWUgPSBEYXRhQ3VlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVu
ZCwgcGxhdGZvcm1WYWx1ZS5jb3B5UmVmKCksIHR5cGUpOwotICAgIGlmIChoYXNDdWUoY3VlLnB0
cigpLCBUZXh0VHJhY2tDdWU6Oklnbm9yZUR1cmF0aW9uKSkgeworICAgIGF1dG8gY3VlID0gRGF0
YUN1ZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0LCBlbmQsIHBsYXRmb3JtVmFsdWUuY29weVJl
ZigpLCB0eXBlKTsKKyAgICBpZiAoaGFzQ3VlKGN1ZSwgVGV4dFRyYWNrQ3VlOjpJZ25vcmVEdXJh
dGlvbikpIHsKICAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImlnbm9yaW5nIGFscmVh
ZHkgYWRkZWQgY3VlOiAiLCBjdWUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suaAppbmRleCA0
ZmMzMTNlYWNjNTE3NDEyMzA0Njk4ZjQyZTNjYWVlYTlkMTkzOTU4Li4zYzVjMTkzODE2MTZlYThh
YzVkNDRmYWJmMTliNDY4NDIxYjgxNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0luYmFuZERhdGFUZXh0VHJhY2suaApAQCAtMzcsMTEgKzM3LDExIEBAIGNsYXNzIERhdGFD
dWU7CiBjbGFzcyBJbmJhbmREYXRhVGV4dFRyYWNrIGZpbmFsIDogcHVibGljIEluYmFuZFRleHRU
cmFjayB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmJhbmREYXRhVGV4dFRyYWNrKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluYmFuZERhdGFUZXh0VHJhY2s+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZSYpOworICAgIHN0YXRpYyBSZWY8SW5iYW5kRGF0YVRleHRUcmFjaz4gY3JlYXRlKERvY3Vt
ZW50JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwogICAgIHZp
cnR1YWwgfkluYmFuZERhdGFUZXh0VHJhY2soKTsKIAogcHJpdmF0ZToKLSAgICBJbmJhbmREYXRh
VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlJik7CisgICAgSW5iYW5kRGF0YVRleHRUcmFjayhEb2N1bWVudCYs
IFRleHRUcmFja0NsaWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsKIAogICAgIHZvaWQg
YWRkRGF0YUN1ZShjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwg
Y29uc3Qgdm9pZCosIHVuc2lnbmVkKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKaW5kZXggYzk1NjhhZGRjNmYz
NWEwYjFmYzU2NWRhZjc4MzFlNDZiMWMzZGQ3MS4uZmY4MmQ4OGNmOWYwOTI0N2E0MmZhZmQ2ZTZh
ZDkyY2JlMjdjMDc0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJh
bmRHZW5lcmljVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0lu
YmFuZEdlbmVyaWNUZXh0VHJhY2suY3BwCkBAIC02MywxNCArNjMsMTQgQEAgdm9pZCBHZW5lcmlj
VGV4dFRyYWNrQ3VlTWFwOjpyZW1vdmUoVGV4dFRyYWNrQ3VlJiBwdWJsaWNDdWUpCiAgICAgICAg
IG1fZGF0YVRvQ3VlTWFwLnJlbW92ZShjdWVJZGVudGlmaWVyKTsKIH0KIAotaW5saW5lIEluYmFu
ZEdlbmVyaWNUZXh0VHJhY2s6OkluYmFuZEdlbmVyaWNUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRUcmFj
a1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKLSAgICA6IEluYmFuZFRleHRUcmFjayhjb250ZXh0LCBj
bGllbnQsIHRyYWNrUHJpdmF0ZSkKK2lubGluZSBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpJbmJh
bmRHZW5lcmljVGV4dFRyYWNrKERvY3VtZW50JiBkb2N1bWVudCwgVGV4dFRyYWNrQ2xpZW50JiBj
bGllbnQsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKKyAgICA6IEluYmFu
ZFRleHRUcmFjayhkb2N1bWVudCwgY2xpZW50LCB0cmFja1ByaXZhdGUpCiB7CiB9CiAKLVJlZjxJ
bmJhbmRHZW5lcmljVGV4dFRyYWNrPiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIElu
YmFuZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKK1JlZjxJbmJhbmRHZW5lcmljVGV4
dFRyYWNrPiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50
LCBUZXh0VHJhY2tDbGllbnQmIGNsaWVudCwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2tQ
cml2YXRlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluYmFuZEdlbmVyaWNUZXh0VHJh
Y2soY29udGV4dCwgY2xpZW50LCB0cmFja1ByaXZhdGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJbmJhbmRHZW5lcmljVGV4dFRyYWNrKGRvY3VtZW50LCBjbGllbnQsIHRyYWNrUHJpdmF0
ZSkpOwogfQogCiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjp+SW5iYW5kR2VuZXJpY1RleHRUcmFj
aygpID0gZGVmYXVsdDsKQEAgLTExOSw5ICsxMTksOSBAQCB2b2lkIEluYmFuZEdlbmVyaWNUZXh0
VHJhY2s6OmFkZEdlbmVyaWNDdWUoSW5iYW5kR2VuZXJpY0N1ZSYgaW5iYW5kQ3VlKQogICAgIGlm
IChtX2N1ZU1hcC5maW5kKGluYmFuZEN1ZS51bmlxdWVJZCgpKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBjdWUgPSBUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUoKnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgaW5iYW5kQ3VlLnN0YXJ0VGltZSgpLCBpbmJhbmRDdWUuZW5kVGltZSgp
LCBpbmJhbmRDdWUuY29udGVudCgpKTsKKyAgICBhdXRvIGN1ZSA9IFRleHRUcmFja0N1ZUdlbmVy
aWM6OmNyZWF0ZShkb2N1bWVudCgpLCBpbmJhbmRDdWUuc3RhcnRUaW1lKCksIGluYmFuZEN1ZS5l
bmRUaW1lKCksIGluYmFuZEN1ZS5jb250ZW50KCkpOwogICAgIHVwZGF0ZUN1ZUZyb21DdWVEYXRh
KGN1ZS5nZXQoKSwgaW5iYW5kQ3VlKTsKLSAgICBpZiAoaGFzQ3VlKGN1ZS5wdHIoKSwgVGV4dFRy
YWNrQ3VlOjpJZ25vcmVEdXJhdGlvbikpIHsKKyAgICBpZiAoaGFzQ3VlKGN1ZSwgVGV4dFRyYWNr
Q3VlOjpJZ25vcmVEdXJhdGlvbikpIHsKICAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwg
Imlnbm9yaW5nIGFscmVhZHkgYWRkZWQgY3VlOiAiLCBjdWUuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTY4LDcgKzE2OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEluYmFuZEdl
bmVyaWNUZXh0VHJhY2s6OnJlbW92ZUN1ZShUZXh0VHJhY2tDdWUmIGN1ZSkKIFdlYlZUVFBhcnNl
ciYgSW5iYW5kR2VuZXJpY1RleHRUcmFjazo6cGFyc2VyKCkKIHsKICAgICBpZiAoIW1fd2ViVlRU
UGFyc2VyKQotICAgICAgICBtX3dlYlZUVFBhcnNlciA9IG1ha2VVbmlxdWU8V2ViVlRUUGFyc2Vy
PihzdGF0aWNfY2FzdDxXZWJWVFRQYXJzZXJDbGllbnQqPih0aGlzKSwgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKKyAgICAgICAgbV93ZWJWVFRQYXJzZXIgPSBtYWtlVW5pcXVlPFdlYlZUVFBh
cnNlcj4oc3RhdGljX2Nhc3Q8V2ViVlRUUGFyc2VyQ2xpZW50Jj4oKnRoaXMpLCBkb2N1bWVudCgp
KTsKICAgICByZXR1cm4gKm1fd2ViVlRUUGFyc2VyOwogfQogCkBAIC0xODQsMzEgKzE4NCwyMiBA
QCB2b2lkIEluYmFuZEdlbmVyaWNUZXh0VHJhY2s6OnBhcnNlV2ViVlRURmlsZUhlYWRlcihTdHJp
bmcmJiBoZWFkZXIpCiAKIHZvaWQgSW5iYW5kR2VuZXJpY1RleHRUcmFjazo6bmV3Q3Vlc1BhcnNl
ZCgpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJWVFRDdWVEYXRhPj4gY3VlczsKLSAgICBwYXJz
ZXIoKS5nZXROZXdDdWVzKGN1ZXMpOwotCi0gICAgZm9yIChhdXRvJiBjdWVEYXRhIDogY3Vlcykg
ewotICAgICAgICBhdXRvIHZ0dEN1ZSA9IFZUVEN1ZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksICpjdWVEYXRhKTsKLQotICAgICAgICBpZiAoaGFzQ3VlKHZ0dEN1ZS5wdHIoKSwg
VGV4dFRyYWNrQ3VlOjpJZ25vcmVEdXJhdGlvbikpIHsKLSAgICAgICAgICAgIElORk9fTE9HKExP
R0lERU5USUZJRVIsICJpZ25vcmluZyBhbHJlYWR5IGFkZGVkIGN1ZTogIiwgdnR0Q3VlLmdldCgp
KTsKKyAgICBmb3IgKGF1dG8mIGN1ZURhdGEgOiBwYXJzZXIoKS50YWtlQ3VlcygpKSB7CisgICAg
ICAgIGF1dG8gY3VlID0gVlRUQ3VlOjpjcmVhdGUoZG9jdW1lbnQoKSwgY3VlRGF0YSk7CisgICAg
ICAgIGlmIChoYXNDdWUoY3VlLCBUZXh0VHJhY2tDdWU6Oklnbm9yZUR1cmF0aW9uKSkgeworICAg
ICAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImlnbm9yaW5nIGFscmVhZHkgYWRkZWQg
Y3VlOiAiLCBjdWUuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAg
ICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgdnR0Q3VlLmdldCgpKTsKLQotICAgICAgICBh
ZGRDdWUoV1RGTW92ZSh2dHRDdWUpKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwg
Y3VlLmdldCgpKTsKKyAgICAgICAgYWRkQ3VlKFdURk1vdmUoY3VlKSk7CiAgICAgfQogfQogCiB2
b2lkIEluYmFuZEdlbmVyaWNUZXh0VHJhY2s6Om5ld1JlZ2lvbnNQYXJzZWQoKQogewotICAgIFZl
Y3RvcjxSZWZQdHI8VlRUUmVnaW9uPj4gbmV3UmVnaW9uczsKLSAgICBwYXJzZXIoKS5nZXROZXdS
ZWdpb25zKG5ld1JlZ2lvbnMpOwotCi0gICAgZm9yIChhdXRvJiByZWdpb24gOiBuZXdSZWdpb25z
KSB7CisgICAgZm9yIChhdXRvJiByZWdpb24gOiBwYXJzZXIoKS50YWtlUmVnaW9ucygpKSB7CiAg
ICAgICAgIHJlZ2lvbi0+c2V0VHJhY2sodGhpcyk7Ci0gICAgICAgIHJlZ2lvbnMoKS0+YWRkKHJl
Z2lvbi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgcmVnaW9ucygpLT5hZGQoV1RGTW92ZShy
ZWdpb24pKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmRHZW5lcmljVGV4dFRyYWNrLmgKaW5kZXggYjFmNDMwYzVhZjQwY2IwNDJjOTgyNDE4YzFk
YzIxODY1M2UzNTE4NC4uZmFjM2RjNjBkZWVjYTNmM2UxNjA0ZDJiYTM0N2EyMzYyMTViOTNkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRy
YWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRy
YWNrLmgKQEAgLTUzLDExICs1MywxMSBAQCBwcml2YXRlOgogY2xhc3MgSW5iYW5kR2VuZXJpY1Rl
eHRUcmFjayBmaW5hbCA6IHB1YmxpYyBJbmJhbmRUZXh0VHJhY2ssIHByaXZhdGUgV2ViVlRUUGFy
c2VyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEluYmFuZEdlbmVyaWNUZXh0
VHJhY2spOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW5iYW5kR2VuZXJpY1RleHRUcmFjaz4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlJik7CisgICAgc3RhdGljIFJlZjxJbmJhbmRHZW5lcmljVGV4dFRyYWNr
PiBjcmVhdGUoRG9jdW1lbnQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlJik7CiAgICAgdmlydHVhbCB+SW5iYW5kR2VuZXJpY1RleHRUcmFjaygpOwogCiBwcml2YXRl
OgotICAgIEluYmFuZEdlbmVyaWNUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFRl
eHRUcmFja0NsaWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsKKyAgICBJbmJhbmRHZW5l
cmljVGV4dFRyYWNrKERvY3VtZW50JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZSYpOwogCiAgICAgdm9pZCBhZGRHZW5lcmljQ3VlKEluYmFuZEdlbmVyaWNDdWUmKSBm
aW5hbDsKICAgICB2b2lkIHVwZGF0ZUdlbmVyaWNDdWUoSW5iYW5kR2VuZXJpY0N1ZSYpIGZpbmFs
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCmluZGV4
IDZlODdlYTE4MWQzOTc4ZjE4N2VhOTY4MjhjZTllZDg1ZTMyOGU0ZDcuLjg1ZjI4ZDFjZjMwNmFl
MDI2YTNmZGRlYzU3ZDMzNzZjNDg0YjAwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0luYmFuZFRleHRUcmFjay5jcHAKQEAgLTM5LDIyICszOSwyMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbmJhbmRUZXh0VHJhY2spOwog
Ci1SZWY8SW5iYW5kVGV4dFRyYWNrPiBJbmJhbmRUZXh0VHJhY2s6OmNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBUZXh0VHJhY2tDbGllbnQmIGNsaWVudCwgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2YXRlKQorUmVmPEluYmFuZFRleHRUcmFjaz4gSW5iYW5k
VGV4dFRyYWNrOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBUZXh0VHJhY2tDbGllbnQmIGNs
aWVudCwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2YXRlKQogewogICAgIHN3aXRj
aCAodHJhY2tQcml2YXRlLmN1ZUZvcm1hdCgpKSB7CiAgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlOjpDdWVGb3JtYXQ6OkRhdGE6Ci0gICAgICAgIHJldHVybiBJbmJhbmREYXRhVGV4dFRy
YWNrOjpjcmVhdGUoY29udGV4dCwgY2xpZW50LCB0cmFja1ByaXZhdGUpOworICAgICAgICByZXR1
cm4gSW5iYW5kRGF0YVRleHRUcmFjazo6Y3JlYXRlKGRvY3VtZW50LCBjbGllbnQsIHRyYWNrUHJp
dmF0ZSk7CiAgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpDdWVGb3JtYXQ6OkdlbmVy
aWM6Ci0gICAgICAgIHJldHVybiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpjcmVhdGUoY29udGV4
dCwgY2xpZW50LCB0cmFja1ByaXZhdGUpOworICAgICAgICByZXR1cm4gSW5iYW5kR2VuZXJpY1Rl
eHRUcmFjazo6Y3JlYXRlKGRvY3VtZW50LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSk7CiAgICAgY2Fz
ZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpDdWVGb3JtYXQ6OldlYlZUVDoKLSAgICAgICAgcmV0
dXJuIEluYmFuZFdlYlZUVFRleHRUcmFjazo6Y3JlYXRlKGNvbnRleHQsIGNsaWVudCwgdHJhY2tQ
cml2YXRlKTsKKyAgICAgICAgcmV0dXJuIEluYmFuZFdlYlZUVFRleHRUcmFjazo6Y3JlYXRlKGRv
Y3VtZW50LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBJbmJhbmREYXRhVGV4dFRyYWNrOjpjcmVhdGUoY29udGV4dCwg
Y2xpZW50LCB0cmFja1ByaXZhdGUpOworICAgIHJldHVybiBJbmJhbmREYXRhVGV4dFRyYWNrOjpj
cmVhdGUoZG9jdW1lbnQsIGNsaWVudCwgdHJhY2tQcml2YXRlKTsKIH0KIAotSW5iYW5kVGV4dFRy
YWNrOjpJbmJhbmRUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgVGV4
dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0
ZSkKLSAgICA6IFRleHRUcmFjaygmY29udGV4dCwgJmNsaWVudCwgZW1wdHlBdG9tKCksIHRyYWNr
UHJpdmF0ZS5pZCgpLCB0cmFja1ByaXZhdGUubGFiZWwoKSwgdHJhY2tQcml2YXRlLmxhbmd1YWdl
KCksIEluQmFuZCkKK0luYmFuZFRleHRUcmFjazo6SW5iYW5kVGV4dFRyYWNrKERvY3VtZW50JiBk
b2N1bWVudCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRUcmFja1ByaXZhdGUm
IHRyYWNrUHJpdmF0ZSkKKyAgICA6IFRleHRUcmFjaygmZG9jdW1lbnQsICZjbGllbnQsIGVtcHR5
QXRvbSgpLCB0cmFja1ByaXZhdGUuaWQoKSwgdHJhY2tQcml2YXRlLmxhYmVsKCksIHRyYWNrUHJp
dmF0ZS5sYW5ndWFnZSgpLCBJbkJhbmQpCiAgICAgLCBtX3ByaXZhdGUodHJhY2tQcml2YXRlKQog
ewogICAgIG1fcHJpdmF0ZS0+c2V0Q2xpZW50KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svSW5iYW5kVGV4dFRyYWNrLmgKaW5kZXggMzBmYzI1MjdmMDUyYjQ3ZjgwNDdkMTYyNzky
ZmU3ZDdhYmYyOTk1YS4uZGRjYjhhMDIzOWIwZmMwZTA3Mzc3MjBhOWFmMDRjM2NmMmI4MmNkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oCkBAIC0zNSw3
ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEluYmFuZFRleHRUcmFjayA6IHB1
YmxpYyBUZXh0VHJhY2ssIHByaXZhdGUgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudCB7CiAg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmJhbmRUZXh0VHJhY2spOwogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8SW5iYW5kVGV4dFRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFRleHRUcmFja0NsaWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsKKyAgICBzdGF0
aWMgUmVmPEluYmFuZFRleHRUcmFjaz4gY3JlYXRlKERvY3VtZW50JiwgVGV4dFRyYWNrQ2xpZW50
JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwogICAgIHZpcnR1YWwgfkluYmFuZFRleHRUcmFj
aygpOwogCiAgICAgYm9vbCBpc0Nsb3NlZENhcHRpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC01
NSw3ICs1NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5iYW5kVGV4
dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlJik7CisgICAgSW5iYW5kVGV4dFRyYWNrKERvY3VtZW50JiwgVGV4dFRy
YWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwogCiAgICAgdm9pZCBzZXRNb2Rl
SW50ZXJuYWwoTW9kZSk7CiAgICAgdm9pZCB1cGRhdGVLaW5kRnJvbVByaXZhdGUoKTsKQEAgLTcz
LDggKzczLDggQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQogICAgIHZv
aWQgYWRkRGF0YUN1ZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmLCBSZWY8U2Vy
aWFsaXplZFBsYXRmb3JtRGF0YUN1ZT4mJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZvaWQgdXBkYXRlRGF0YUN1ZShjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmLCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJikgb3ZlcnJp
ZGUgIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2b2lkIHJlbW92ZURhdGFDdWUoY29u
c3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJiwgU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1
ZSYpIG92ZXJyaWRlICB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCB1cGRhdGVE
YXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYsIFNlcmlhbGl6ZWRQbGF0
Zm9ybURhdGFDdWUmKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9p
ZCByZW1vdmVEYXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYsIFNlcmlh
bGl6ZWRQbGF0Zm9ybURhdGFDdWUmKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CiAjZW5kaWYKIAogICAgIHZvaWQgYWRkR2VuZXJpY0N1ZShJbmJhbmRHZW5lcmljQ3VlJikgb3Zl
cnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9JbmJhbmRXZWJWVFRUZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9JbmJhbmRXZWJWVFRUZXh0VHJhY2suY3BwCmluZGV4IDdlNzIzMzJmMjFjZDk4
Y2ViY2M5ZTMzNDRiNzgwNjA2NzVmODE2NDkuLmUxZjY0ODVhNTI1OWYxN2RlNDY3ZDVmNDc2MTkx
ZTllYjg3ZmU0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5k
V2ViVlRUVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFu
ZFdlYlZUVFRleHRUcmFjay5jcHAKQEAgLTM5LDE0ICszOSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbmJhbmRXZWJWVFRUZXh0VHJhY2sp
OwogCi1pbmxpbmUgSW5iYW5kV2ViVlRUVGV4dFRyYWNrOjpJbmJhbmRXZWJWVFRUZXh0VHJhY2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQs
IEluYmFuZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKLSAgICA6IEluYmFuZFRleHRU
cmFjayhjb250ZXh0LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSkKK2lubGluZSBJbmJhbmRXZWJWVFRU
ZXh0VHJhY2s6OkluYmFuZFdlYlZUVFRleHRUcmFjayhEb2N1bWVudCYgZG9jdW1lbnQsIFRleHRU
cmFja0NsaWVudCYgY2xpZW50LCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlJiB0cmFja1ByaXZhdGUp
CisgICAgOiBJbmJhbmRUZXh0VHJhY2soZG9jdW1lbnQsIGNsaWVudCwgdHJhY2tQcml2YXRlKQog
ewogfQogCi1SZWY8SW5iYW5kVGV4dFRyYWNrPiBJbmJhbmRXZWJWVFRUZXh0VHJhY2s6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBUZXh0VHJhY2tDbGllbnQmIGNsaWVu
dCwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2YXRlKQorUmVmPEluYmFuZFRleHRU
cmFjaz4gSW5iYW5kV2ViVlRUVGV4dFRyYWNrOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBU
ZXh0VHJhY2tDbGllbnQmIGNsaWVudCwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2
YXRlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluYmFuZFdlYlZUVFRleHRUcmFjayhj
b250ZXh0LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEluYmFuZFdlYlZUVFRleHRUcmFjayhkb2N1bWVudCwgY2xpZW50LCB0cmFja1ByaXZhdGUpKTsK
IH0KIAogSW5iYW5kV2ViVlRUVGV4dFRyYWNrOjp+SW5iYW5kV2ViVlRUVGV4dFRyYWNrKCkgPSBk
ZWZhdWx0OwpAQCAtNTQsNyArNTQsNyBAQCBJbmJhbmRXZWJWVFRUZXh0VHJhY2s6On5JbmJhbmRX
ZWJWVFRUZXh0VHJhY2soKSA9IGRlZmF1bHQ7CiBXZWJWVFRQYXJzZXImIEluYmFuZFdlYlZUVFRl
eHRUcmFjazo6cGFyc2VyKCkKIHsKICAgICBpZiAoIW1fd2ViVlRUUGFyc2VyKQotICAgICAgICBt
X3dlYlZUVFBhcnNlciA9IG1ha2VVbmlxdWU8V2ViVlRUUGFyc2VyPihzdGF0aWNfY2FzdDxXZWJW
VFRQYXJzZXJDbGllbnQqPih0aGlzKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAg
ICAgbV93ZWJWVFRQYXJzZXIgPSBtYWtlVW5pcXVlPFdlYlZUVFBhcnNlcj4oc3RhdGljX2Nhc3Q8
V2ViVlRUUGFyc2VyQ2xpZW50Jj4oKnRoaXMpLCBkb2N1bWVudCgpKTsKICAgICByZXR1cm4gKm1f
d2ViVlRUUGFyc2VyOwogfQogCkBAIC03MCwyOCArNzAsMjIgQEAgdm9pZCBJbmJhbmRXZWJWVFRU
ZXh0VHJhY2s6OnBhcnNlV2ViVlRUQ3VlRGF0YShJU09XZWJWVFRDdWUmJiBjdWVEYXRhKQogCiB2
b2lkIEluYmFuZFdlYlZUVFRleHRUcmFjazo6bmV3Q3Vlc1BhcnNlZCgpCiB7Ci0gICAgVmVjdG9y
PFJlZlB0cjxXZWJWVFRDdWVEYXRhPj4gY3VlczsKLSAgICBwYXJzZXIoKS5nZXROZXdDdWVzKGN1
ZXMpOwotICAgIGZvciAoYXV0byYgY3VlRGF0YSA6IGN1ZXMpIHsKLSAgICAgICAgYXV0byB2dHRD
dWUgPSBWVFRDdWU6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqY3VlRGF0YSk7
Ci0gICAgICAgIGlmIChoYXNDdWUodnR0Q3VlLnB0cigpLCBUZXh0VHJhY2tDdWU6Oklnbm9yZUR1
cmF0aW9uKSkgewotICAgICAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImlnbm9yaW5n
IGFscmVhZHkgYWRkZWQgY3VlOiAiLCB2dHRDdWUuZ2V0KCkpOworICAgIGZvciAoYXV0byYgY3Vl
RGF0YSA6IHBhcnNlcigpLnRha2VDdWVzKCkpIHsKKyAgICAgICAgYXV0byBjdWUgPSBWVFRDdWU6
OmNyZWF0ZShkb2N1bWVudCgpLCBjdWVEYXRhKTsKKyAgICAgICAgaWYgKGhhc0N1ZShjdWUsIFRl
eHRUcmFja0N1ZTo6SWdub3JlRHVyYXRpb24pKSB7CisgICAgICAgICAgICBJTkZPX0xPRyhMT0dJ
REVOVElGSUVSLCAiaWdub3JpbmcgYWxyZWFkeSBhZGRlZCBjdWU6ICIsIGN1ZS5nZXQoKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCB2dHRDdWUuZ2V0KCkpOwotCi0gICAgICAgIGFkZEN1ZShXVEZNb3ZlKHZ0dEN1ZSkp
OworICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCBjdWUuZ2V0KCkpOworICAgICAgICBh
ZGRDdWUoV1RGTW92ZShjdWUpKTsKICAgICB9CiB9CiAgICAgCiB2b2lkIEluYmFuZFdlYlZUVFRl
eHRUcmFjazo6bmV3UmVnaW9uc1BhcnNlZCgpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxWVFRSZWdp
b24+PiBuZXdSZWdpb25zOwotICAgIHBhcnNlcigpLmdldE5ld1JlZ2lvbnMobmV3UmVnaW9ucyk7
Ci0gICAgZm9yIChhdXRvJiByZWdpb24gOiBuZXdSZWdpb25zKSB7CisgICAgZm9yIChhdXRvJiBy
ZWdpb24gOiBwYXJzZXIoKS50YWtlUmVnaW9ucygpKSB7CiAgICAgICAgIHJlZ2lvbi0+c2V0VHJh
Y2sodGhpcyk7Ci0gICAgICAgIHJlZ2lvbnMoKS0+YWRkKHJlZ2lvbi5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICAgICAgcmVnaW9ucygpLT5hZGQoV1RGTW92ZShyZWdpb24pKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kV2ViVlRUVGV4dFRy
YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFdlYlZUVFRleHRUcmFjay5o
CmluZGV4IGFjMmI4ZDU4ZTY4MzM2ZDZlMzcyZTY3MzliZjU5NGZmMTc3ZWEzODAuLjE0MTVhMmFh
ZTJmN2ZlZTQyMTI3Y2FhYWFiOTAwMzExNzAxNzE3YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9JbmJhbmRXZWJWVFRUZXh0VHJhY2suaApAQCAtMzYsMTEgKzM2LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEluYmFuZFdlYlZUVFRleHRUcmFjayBmaW5hbCA6
IHB1YmxpYyBJbmJhbmRUZXh0VHJhY2ssIHByaXZhdGUgV2ViVlRUUGFyc2VyQ2xpZW50IHsKICAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEluYmFuZFdlYlZUVFRleHRUcmFjayk7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxJbmJhbmRUZXh0VHJhY2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOworICAg
IHN0YXRpYyBSZWY8SW5iYW5kVGV4dFRyYWNrPiBjcmVhdGUoRG9jdW1lbnQmLCBUZXh0VHJhY2tD
bGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlJik7CiAgICAgdmlydHVhbCB+SW5iYW5kV2Vi
VlRUVGV4dFRyYWNrKCk7CiAKIHByaXZhdGU6Ci0gICAgSW5iYW5kV2ViVlRUVGV4dFRyYWNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlJik7CisgICAgSW5iYW5kV2ViVlRUVGV4dFRyYWNrKERvY3VtZW50JiwgVGV4dFRyYWNr
Q2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwogCiAgICAgV2ViVlRUUGFyc2VyJiBw
YXJzZXIoKTsKICAgICB2b2lkIHBhcnNlV2ViVlRUQ3VlRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xv
YWRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCBjZWIwMmNmNGJlNDUzYzBkNjQxOTI3OWZkNDdlOWU1
NDliNjY2NTg5Li5iMjUwMDIwMDZmNWRkYzFmOTc0ZWZhZmI1MzBlYTQwODgxMzc0ZTBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsNiArNDYsMTEgQEAgTG9hZGFibGVUZXh0VHJhY2s6OkxvYWRhYmxlVGV4dFRyYWNr
KEhUTUxUcmFja0VsZW1lbnQmIHRyYWNrLCBjb25zdCBTdHJpbmcmIGtpbmQKIHsKIH0KIAorUmVm
PExvYWRhYmxlVGV4dFRyYWNrPiBMb2FkYWJsZVRleHRUcmFjazo6Y3JlYXRlKEhUTUxUcmFja0Vs
ZW1lbnQmIHRyYWNrLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNv
bnN0IFN0cmluZyYgbGFuZ3VhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTG9hZGFi
bGVUZXh0VHJhY2sodHJhY2ssIGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkpOworfQorCiB2b2lkIExv
YWRhYmxlVGV4dFRyYWNrOjpzY2hlZHVsZUxvYWQoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYg
KHVybCA9PSBtX3VybCkKQEAgLTgzLDcgKzg4LDcgQEAgdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6
bG9hZFRpbWVyRmlyZWQoKQogICAgIC8vIDQuIERvd25sb2FkOiBJZiBVUkwgaXMgbm90IHRoZSBl
bXB0eSBzdHJpbmcsIHBlcmZvcm0gYSBwb3RlbnRpYWxseSBDT1JTLWVuYWJsZWQgZmV0Y2ggb2Yg
VVJMLCB3aXRoIHRoZQogICAgIC8vIG1vZGUgYmVpbmcgdGhlIHN0YXRlIG9mIHRoZSBtZWRpYSBl
bGVtZW50J3MgY3Jvc3NvcmlnaW4gY29udGVudCBhdHRyaWJ1dGUsIHRoZSBvcmlnaW4gYmVpbmcg
dGhlCiAgICAgLy8gb3JpZ2luIG9mIHRoZSBtZWRpYSBlbGVtZW50J3MgRG9jdW1lbnQsIGFuZCB0
aGUgZGVmYXVsdCBvcmlnaW4gYmVoYXZpb3VyIHNldCB0byBmYWlsLgotICAgIG1fbG9hZGVyID0g
bWFrZVVuaXF1ZTxUZXh0VHJhY2tMb2FkZXI+KHN0YXRpY19jYXN0PFRleHRUcmFja0xvYWRlckNs
aWVudCY+KCp0aGlzKSwgc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZtX3Ry
YWNrRWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgIG1fbG9hZGVyID0gbWFrZVVuaXF1ZTxUZXh0
VHJhY2tMb2FkZXI+KHN0YXRpY19jYXN0PFRleHRUcmFja0xvYWRlckNsaWVudCY+KCp0aGlzKSwg
bV90cmFja0VsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIGlmICghbV9sb2FkZXItPmxvYWQobV91
cmwsICptX3RyYWNrRWxlbWVudCkpCiAgICAgICAgIG1fdHJhY2tFbGVtZW50LT5kaWRDb21wbGV0
ZUxvYWQoSFRNTFRyYWNrRWxlbWVudDo6RmFpbHVyZSk7CiB9CkBAIC0xMjAsMTMgKzEyNSw5IEBA
IHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmN1ZUxvYWRpbmdDb21wbGV0ZWQoVGV4dFRyYWNrTG9h
ZGVyJiBsb2FkZXIsIGJvb2wgbG9hZGluCiB2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpuZXdSZWdp
b25zQXZhaWxhYmxlKFRleHRUcmFja0xvYWRlciYgbG9hZGVyKQogewogICAgIEFTU0VSVF9VTlVT
RUQobG9hZGVyLCBtX2xvYWRlci5nZXQoKSA9PSAmbG9hZGVyKTsKLQotICAgIFZlY3RvcjxSZWZQ
dHI8VlRUUmVnaW9uPj4gbmV3UmVnaW9uczsKLSAgICBtX2xvYWRlci0+Z2V0TmV3UmVnaW9ucyhu
ZXdSZWdpb25zKTsKLQotICAgIGZvciAoYXV0byYgbmV3UmVnaW9uIDogbmV3UmVnaW9ucykgewor
ICAgIGZvciAoYXV0byYgbmV3UmVnaW9uIDogbV9sb2FkZXItPmdldE5ld1JlZ2lvbnMoKSkgewog
ICAgICAgICBuZXdSZWdpb24tPnNldFRyYWNrKHRoaXMpOwotICAgICAgICByZWdpb25zKCktPmFk
ZChuZXdSZWdpb24ucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJlZ2lvbnMoKS0+YWRkKFdU
Rk1vdmUobmV3UmVnaW9uKSk7CiAgICAgfQogfQogCkBAIC0xNjEsNiArMTYyLDExIEBAIHNpemVf
dCBMb2FkYWJsZVRleHRUcmFjazo6dHJhY2tFbGVtZW50SW5kZXgoKQogICAgIHJldHVybiAwOwog
fQogCitib29sIExvYWRhYmxlVGV4dFRyYWNrOjppc0RlZmF1bHQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3RyYWNrRWxlbWVudCAmJiBtX3RyYWNrRWxlbWVudC0+aGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihkZWZhdWx0QXR0cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRh
YmxlVGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRy
YWNrLmgKaW5kZXggZGM0NzEyNDMwODdkNjc1MmNiZDdjZGE2NTVhNDk2YjU2YTQ1MzlkYy4uM2Qy
MjNhMDM1OGMwOWViY2UzOTQ0NDI1YThmYWVlMTJmMjI2YWFkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTAgKzM4LDcgQEAgY2xh
c3MgSFRNTFRyYWNrRWxlbWVudDsKIGNsYXNzIExvYWRhYmxlVGV4dFRyYWNrIGZpbmFsIDogcHVi
bGljIFRleHRUcmFjaywgcHJpdmF0ZSBUZXh0VHJhY2tMb2FkZXJDbGllbnQgewogICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoTG9hZGFibGVUZXh0VHJhY2spOwogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TG9hZGFibGVUZXh0VHJhY2s+IGNyZWF0ZShIVE1MVHJhY2tFbGVtZW50JiB0cmFjaywg
Y29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxh
bmd1YWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTG9hZGFibGVUZXh0
VHJhY2sodHJhY2ssIGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkpOwotICAgIH0KKyAgICBzdGF0aWMg
UmVmPExvYWRhYmxlVGV4dFRyYWNrPiBjcmVhdGUoSFRNTFRyYWNrRWxlbWVudCYsIGNvbnN0IFN0
cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7
CiAKICAgICB2b2lkIHNjaGVkdWxlTG9hZChjb25zdCBVUkwmKTsKIApAQCAtNDksOCArNDYsNiBA
QCBwdWJsaWM6CiAgICAgSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFja0VsZW1lbnQ7IH0KICAgICB2b2lkIGNsZWFyRWxlbWVudCgpIHsgbV90cmFj
a0VsZW1lbnQgPSBudWxscHRyOyB9CiAKLSAgICB2b2lkIHNldElzRGVmYXVsdChib29sIGlzRGVm
YXVsdCkgZmluYWwgeyBtX2lzRGVmYXVsdCA9IGlzRGVmYXVsdDsgfQotCiBwcml2YXRlOgogICAg
IExvYWRhYmxlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGtpbmQs
IGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpOwogCkBAIC02MCw3
ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBuZXdTdHlsZVNoZWV0c0F2YWlsYWJsZShUZXh0
VHJhY2tMb2FkZXImKSBmaW5hbDsKIAogICAgIEF0b21TdHJpbmcgaWQoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIGlzRGVmYXVsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNEZWZhdWx0OyB9
CisgICAgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCBmaW5hbDsKICAgICBFbGVtZW50KiBlbGVtZW50
KCkgZmluYWw7CiAKICAgICB2b2lkIGxvYWRUaW1lckZpcmVkKCk7CkBAIC03Myw3ICs2OCw2IEBA
IHByaXZhdGU6CiAgICAgVGltZXIgbV9sb2FkVGltZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRl
eHRUcmFja0xvYWRlcj4gbV9sb2FkZXI7CiAgICAgVVJMIG1fdXJsOwotICAgIGJvb2wgbV9pc0Rl
ZmF1bHQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCmluZGV4IDNmZTA1NDAyZTQ1OTY3MzdiYTcwNGM1
ZTE4MzgzOGU1NzEwZTlmMWUuLmM2NWExMTg3OWU2NTEzMjM5NTEzMTQzNzI4MDdiY2NkNmUxZmNj
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKQEAgLTg2LDE2ICs4
NiwxNiBAQCBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZm9yY2VkS2V5d29yZCgpCiAgICAgcmV0
dXJuIGZvcmNlZDsKIH0KIAotVGV4dFRyYWNrKiBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRl
bSgpCitUZXh0VHJhY2smIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkKIHsKICAgICBz
dGF0aWMgVGV4dFRyYWNrJiBvZmYgPSBUZXh0VHJhY2s6OmNyZWF0ZShudWxscHRyLCBudWxscHRy
LCAib2ZmIG1lbnUgaXRlbSIsIGVtcHR5QXRvbSgpLCBlbXB0eUF0b20oKSwgZW1wdHlBdG9tKCkp
LmxlYWtSZWYoKTsKLSAgICByZXR1cm4gJm9mZjsKKyAgICByZXR1cm4gb2ZmOwogfQogCi1UZXh0
VHJhY2sqIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkKK1RleHRUcmFjayYg
VGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKQogewogICAgIHN0YXRpYyBUZXh0
VHJhY2smIGF1dG9tYXRpYyA9IFRleHRUcmFjazo6Y3JlYXRlKG51bGxwdHIsIG51bGxwdHIsICJh
dXRvbWF0aWMgbWVudSBpdGVtIiwgZW1wdHlBdG9tKCksIGVtcHR5QXRvbSgpLCBlbXB0eUF0b20o
KSkubGVha1JlZigpOwotICAgIHJldHVybiAmYXV0b21hdGljOworICAgIHJldHVybiBhdXRvbWF0
aWM7CiB9CiAKIFRleHRUcmFjazo6VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFRleHRUcmFja0NsaWVudCogY2xpZW50LCBjb25zdCBBdG9tU3RyaW5nJiBraW5kLCBj
b25zdCBBdG9tU3RyaW5nJiBpZCwgY29uc3QgQXRvbVN0cmluZyYgbGFiZWwsIGNvbnN0IEF0b21T
dHJpbmcmIGxhbmd1YWdlLCBUZXh0VHJhY2tUeXBlIHR5cGUpCkBAIC0xMTYsNiArMTE2LDExIEBA
IFRleHRUcmFjazo6VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFRl
eHRUcmFja0NsaWVudCogY2xpZW50LCBjCiAgICAgICAgIG1fa2luZCA9IEtpbmQ6Ok1ldGFkYXRh
OwogfQogCitSZWY8VGV4dFRyYWNrPiBUZXh0VHJhY2s6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQsIFRleHRUcmFja0NsaWVudCogY2xpZW50LCBjb25zdCBBdG9tU3RyaW5nJiBraW5kLCBjb25z
dCBBdG9tU3RyaW5nJiBpZCwgY29uc3QgQXRvbVN0cmluZyYgbGFiZWwsIGNvbnN0IEF0b21TdHJp
bmcmIGxhbmd1YWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRUcmFjayhkb2N1
bWVudCwgY2xpZW50LCBraW5kLCBpZCwgbGFiZWwsIGxhbmd1YWdlLCBBZGRUcmFjaykpOworfQor
CiBUZXh0VHJhY2s6On5UZXh0VHJhY2soKQogewogICAgIGlmIChtX2N1ZXMpIHsKQEAgLTEzMCw2
ICsxMzUsMTIgQEAgVGV4dFRyYWNrOjp+VGV4dFRyYWNrKCkKICAgICB9CiB9CiAKK0RvY3VtZW50
JiBUZXh0VHJhY2s6OmRvY3VtZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOworfQorCiBib29sIFRleHRUcmFjazo6ZW5hYmxlZCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fbW9kZSAhPSBNb2RlOjpEaXNhYmxlZDsKQEAgLTM4MCwxMSArMzkxLDgg
QEAgVlRUUmVnaW9uTGlzdCogVGV4dFRyYWNrOjpyZWdpb25zKCkKICAgICByZXR1cm4gJmVuc3Vy
ZVZUVFJlZ2lvbkxpc3QoKTsKIH0KIAotdm9pZCBUZXh0VHJhY2s6OmFkZFJlZ2lvbihSZWZQdHI8
VlRUUmVnaW9uPiYmIHJlZ2lvbikKK3ZvaWQgVGV4dFRyYWNrOjphZGRSZWdpb24oUmVmPFZUVFJl
Z2lvbj4mJiByZWdpb24pCiB7Ci0gICAgaWYgKCFyZWdpb24pCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGF1dG8mIHJlZ2lvbkxpc3QgPSBlbnN1cmVWVFRSZWdpb25MaXN0KCk7CiAKICAgICAvLyAx
LiBJZiB0aGUgZ2l2ZW4gcmVnaW9uIGlzIGluIGEgdGV4dCB0cmFjayBsaXN0IG9mIHJlZ2lvbnMs
IHRoZW4gcmVtb3ZlCkBAIC0zOTksNTEgKzQwNyw0OCBAQCB2b2lkIFRleHRUcmFjazo6YWRkUmVn
aW9uKFJlZlB0cjxWVFRSZWdpb24+JiYgcmVnaW9uKQogICAgIC8vIGF0dHJpYnV0ZXMgd2l0aCB0
aG9zZSBvZiByZWdpb24uCiAgICAgYXV0byBleGlzdGluZ1JlZ2lvbiA9IG1ha2VSZWZQdHIocmVn
aW9uTGlzdC5nZXRSZWdpb25CeUlkKHJlZ2lvbi0+aWQoKSkpOwogICAgIGlmIChleGlzdGluZ1Jl
Z2lvbikgewotICAgICAgICBleGlzdGluZ1JlZ2lvbi0+dXBkYXRlUGFyYW1ldGVyc0Zyb21SZWdp
b24oKnJlZ2lvbik7CisgICAgICAgIGV4aXN0aW5nUmVnaW9uLT51cGRhdGVQYXJhbWV0ZXJzRnJv
bVJlZ2lvbihyZWdpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3
aXNlOiBhZGQgcmVnaW9uIHRvIHRoZSBtZXRob2QncyBUZXh0VHJhY2sgb2JqZWN0J3MgdGV4dCB0
cmFjayBsaXN0IG9mIHJlZ2lvbnMuCiAgICAgcmVnaW9uLT5zZXRUcmFjayh0aGlzKTsKLSAgICBy
ZWdpb25MaXN0LmFkZChyZWdpb24ucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmVnaW9uTGlzdC5h
ZGQoV1RGTW92ZShyZWdpb24pKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gVGV4dFRyYWNrOjpy
ZW1vdmVSZWdpb24oVlRUUmVnaW9uKiByZWdpb24pCitFeGNlcHRpb25Pcjx2b2lkPiBUZXh0VHJh
Y2s6OnJlbW92ZVJlZ2lvbihWVFRSZWdpb24mIHJlZ2lvbikKIHsKLSAgICBpZiAoIXJlZ2lvbikK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQogICAgIC8vIDEuIElmIHRoZSBnaXZlbiByZWdpb24gaXMg
bm90IGN1cnJlbnRseSBsaXN0ZWQgaW4gdGhlIG1ldGhvZCdzIFRleHRUcmFjawogICAgIC8vIG9i
amVjdCdzIHRleHQgdHJhY2sgbGlzdCBvZiByZWdpb25zLCB0aGVuIHRocm93IGEgTm90Rm91bmRF
cnJvciBleGNlcHRpb24uCi0gICAgaWYgKHJlZ2lvbi0+dHJhY2soKSAhPSB0aGlzKQorICAgIGlm
IChyZWdpb24udHJhY2soKSAhPSB0aGlzKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90
Rm91bmRFcnJvciB9OwogCiAgICAgQVNTRVJUKG1fcmVnaW9ucyk7Ci0gICAgbV9yZWdpb25zLT5y
ZW1vdmUoKnJlZ2lvbik7Ci0gICAgcmVnaW9uLT5zZXRUcmFjayhudWxscHRyKTsKKyAgICBtX3Jl
Z2lvbnMtPnJlbW92ZShyZWdpb24pOworICAgIHJlZ2lvbi5zZXRUcmFjayhudWxscHRyKTsKICAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIFRleHRUcmFjazo6Y3VlV2lsbENoYW5nZShUZXh0VHJh
Y2tDdWUqIGN1ZSkKK3ZvaWQgVGV4dFRyYWNrOjpjdWVXaWxsQ2hhbmdlKFRleHRUcmFja0N1ZSYg
Y3VlKQogewogICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRo
ZSBjdWUgbWF5IG5lZWQgdG8gYmUgcmVwb3NpdGlvbmVkIGluIHRoZSBtZWRpYSBlbGVtZW50J3Mg
aW50ZXJ2YWwgdHJlZSwgbWF5IG5lZWQgdG8KICAgICAvLyBiZSByZS1yZW5kZXJlZCwgZXRjLCBz
byByZW1vdmUgaXQgYmVmb3JlIHRoZSBtb2RpZmljYXRpb24uLi4KLSAgICBtX2NsaWVudC0+dGV4
dFRyYWNrUmVtb3ZlQ3VlKCp0aGlzLCAqY3VlKTsKKyAgICBtX2NsaWVudC0+dGV4dFRyYWNrUmVt
b3ZlQ3VlKCp0aGlzLCBjdWUpOwogfQogCi12b2lkIFRleHRUcmFjazo6Y3VlRGlkQ2hhbmdlKFRl
eHRUcmFja0N1ZSogY3VlKQordm9pZCBUZXh0VHJhY2s6OmN1ZURpZENoYW5nZShUZXh0VHJhY2tD
dWUmIGN1ZSkKIHsKICAgICBpZiAoIW1fY2xpZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBNYWtlIHN1cmUgdGhlIFRleHRUcmFja0N1ZUxpc3Qgb3JkZXIgaXMgdXAtdG8tZGF0ZS4KLSAg
ICBlbnN1cmVUZXh0VHJhY2tDdWVMaXN0KCkudXBkYXRlQ3VlSW5kZXgoKmN1ZSk7CisgICAgZW5z
dXJlVGV4dFRyYWNrQ3VlTGlzdCgpLnVwZGF0ZUN1ZUluZGV4KGN1ZSk7CiAKICAgICAvLyAuLi4g
YW5kIGFkZCBpdCBiYWNrIGFnYWluLgotICAgIG1fY2xpZW50LT50ZXh0VHJhY2tBZGRDdWUoKnRo
aXMsICpjdWUpOworICAgIG1fY2xpZW50LT50ZXh0VHJhY2tBZGRDdWUoKnRoaXMsIGN1ZSk7CiB9
CiAKIGludCBUZXh0VHJhY2s6OnRyYWNrSW5kZXgoKQpAQCAtNDg1LDkgKzQ5MCw5IEBAIGludCBU
ZXh0VHJhY2s6OnRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MoKQogICAgIHJldHVy
biBtX3JlbmRlcmVkVHJhY2tJbmRleC52YWx1ZSgpOwogfQogCi1ib29sIFRleHRUcmFjazo6aGFz
Q3VlKFRleHRUcmFja0N1ZSogY3VlLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVsZXMgbWF0Y2gp
Citib29sIFRleHRUcmFjazo6aGFzQ3VlKFRleHRUcmFja0N1ZSYgY3VlLCBUZXh0VHJhY2tDdWU6
OkN1ZU1hdGNoUnVsZXMgbWF0Y2gpCiB7Ci0gICAgaWYgKGN1ZS0+c3RhcnRNZWRpYVRpbWUoKSA8
IE1lZGlhVGltZTo6emVyb1RpbWUoKSB8fCBjdWUtPmVuZE1lZGlhVGltZSgpIDwgTWVkaWFUaW1l
Ojp6ZXJvVGltZSgpKQorICAgIGlmIChjdWUuc3RhcnRNZWRpYVRpbWUoKSA8IE1lZGlhVGltZTo6
emVyb1RpbWUoKSB8fCBjdWUuZW5kTWVkaWFUaW1lKCkgPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAoIW1fY3VlcyB8fCAhbV9jdWVz
LT5sZW5ndGgoKSkKQEAgLTUwOSw3ICs1MTQsNyBAQCBib29sIFRleHRUcmFjazo6aGFzQ3VlKFRl
eHRUcmFja0N1ZSogY3VlLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVsZXMgbWF0Y2gpCiAKICAg
ICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY3VlIHdpdGggdGhlIHNhbWUg
c3RhcnQgdGltZSwgYmFjayB1cCB0byBmaXJzdCBvbmUgc28gd2UKICAgICAgICAgICAgIC8vIGNv
bnNpZGVyIGFsbCBvZiB0aGVtLgotICAgICAgICAgICAgd2hpbGUgKHNlYXJjaFN0YXJ0ID49IDIg
JiYgY3VlLT5oYXNFcXVpdmFsZW50U3RhcnRUaW1lKCptX2N1ZXMtPml0ZW0oc2VhcmNoU3RhcnQg
LSAyKSkpCisgICAgICAgICAgICB3aGlsZSAoc2VhcmNoU3RhcnQgPj0gMiAmJiBjdWUuaGFzRXF1
aXZhbGVudFN0YXJ0VGltZSgqbV9jdWVzLT5pdGVtKHNlYXJjaFN0YXJ0IC0gMikpKQogICAgICAg
ICAgICAgICAgIC0tc2VhcmNoU3RhcnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wg
Zmlyc3RDb21wYXJlID0gdHJ1ZTsKQEAgLTUyNCwxNyArNTI5LDE3IEBAIGJvb2wgVGV4dFRyYWNr
OjpoYXNDdWUoVGV4dFRyYWNrQ3VlKiBjdWUsIFRleHRUcmFja0N1ZTo6Q3VlTWF0Y2hSdWxlcyBt
YXRjaCkKICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nQ3VlKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBpZiAoY3VlLT5zdGFydE1lZGlh
VGltZSgpID4gKGV4aXN0aW5nQ3VlLT5zdGFydE1lZGlhVGltZSgpICsgc3RhcnRUaW1lVmFyaWFu
Y2UoKSkpCisgICAgICAgICAgICAgICAgaWYgKGN1ZS5zdGFydE1lZGlhVGltZSgpID4gKGV4aXN0
aW5nQ3VlLT5zdGFydE1lZGlhVGltZSgpICsgc3RhcnRUaW1lVmFyaWFuY2UoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIGlmIChleGlzdGlu
Z0N1ZS0+aXNFcXVhbCgqY3VlLCBtYXRjaCkpCisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5n
Q3VlLT5pc0VxdWFsKGN1ZSwgbWF0Y2gpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IGlu
ZGV4ID0gKHNlYXJjaFN0YXJ0ICsgc2VhcmNoRW5kKSAvIDI7CiAgICAgICAgIGV4aXN0aW5nQ3Vl
ID0gbV9jdWVzLT5pdGVtKGluZGV4KTsKLSAgICAgICAgaWYgKChjdWUtPnN0YXJ0TWVkaWFUaW1l
KCkgKyBzdGFydFRpbWVWYXJpYW5jZSgpKSA8IGV4aXN0aW5nQ3VlLT5zdGFydE1lZGlhVGltZSgp
IHx8IChtYXRjaCAhPSBUZXh0VHJhY2tDdWU6Oklnbm9yZUR1cmF0aW9uICYmIGN1ZS0+aGFzRXF1
aXZhbGVudFN0YXJ0VGltZSgqZXhpc3RpbmdDdWUpICYmIGN1ZS0+ZW5kTWVkaWFUaW1lKCkgPiBl
eGlzdGluZ0N1ZS0+ZW5kTWVkaWFUaW1lKCkpKQorICAgICAgICBpZiAoKGN1ZS5zdGFydE1lZGlh
VGltZSgpICsgc3RhcnRUaW1lVmFyaWFuY2UoKSkgPCBleGlzdGluZ0N1ZS0+c3RhcnRNZWRpYVRp
bWUoKSB8fCAobWF0Y2ggIT0gVGV4dFRyYWNrQ3VlOjpJZ25vcmVEdXJhdGlvbiAmJiBjdWUuaGFz
RXF1aXZhbGVudFN0YXJ0VGltZSgqZXhpc3RpbmdDdWUpICYmIGN1ZS5lbmRNZWRpYVRpbWUoKSA+
IGV4aXN0aW5nQ3VlLT5lbmRNZWRpYVRpbWUoKSkpCiAgICAgICAgICAgICBzZWFyY2hFbmQgPSBp
bmRleDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2VhcmNoU3RhcnQgPSBpbmRleCArIDE7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAppbmRleCAwNzM2NTJmNDQ0NTE1ZThk
OGEwY2RlZWIyMWMwNmM0MzY3NzExMmU3Li40ZmU0NmZlMmI0OGM5OGMyZjEyOGJlYjk3NmQ1ZWJk
NzgzNDViYzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKQEAgLTU0LDI4
ICs1NCwxNyBAQCBwdWJsaWM6CiBjbGFzcyBUZXh0VHJhY2sgOiBwdWJsaWMgVHJhY2tCYXNlLCBw
dWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIENvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFRleHRUcmFjayk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxUZXh0VHJhY2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCwgY29uc3QgQXRvbVN0cmluZyYg
a2luZCwgY29uc3QgQXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25z
dCBBdG9tU3RyaW5nJiBsYW5ndWFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFRleHRUcmFjayhjb250ZXh0LCBjbGllbnQsIGtpbmQsIGlkLCBsYWJlbCwgbGFuZ3VhZ2Us
IEFkZFRyYWNrKSk7Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8VGV4dFRyYWNrPiBjcmVhdGUoRG9j
dW1lbnQqLCBUZXh0VHJhY2tDbGllbnQqLCBjb25zdCBBdG9tU3RyaW5nJiBraW5kLCBjb25zdCBB
dG9tU3RyaW5nJiBpZCwgY29uc3QgQXRvbVN0cmluZyYgbGFiZWwsIGNvbnN0IEF0b21TdHJpbmcm
IGxhbmd1YWdlKTsKICAgICB2aXJ0dWFsIH5UZXh0VHJhY2soKTsKIAotICAgIEV2ZW50VGFyZ2V0
SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVGV4
dFRyYWNrRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENvbnRl
eHREZXN0cnVjdGlvbk9ic2VydmVyOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAg
IHN0YXRpYyBUZXh0VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRlbSgpOwotICAgIHN0YXRpYyBUZXh0
VHJhY2sqIGNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOworICAgIHN0YXRpYyBUZXh0VHJhY2sm
IGNhcHRpb25NZW51T2ZmSXRlbSgpOworICAgIHN0YXRpYyBUZXh0VHJhY2smIGNhcHRpb25NZW51
QXV0b21hdGljSXRlbSgpOwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHN1YnRpdGxl
c0tleXdvcmQoKTsKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkS2luZEtleXdvcmQoY29uc3QgQXRv
bVN0cmluZyYpOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGRpc2FibGVkS2V5d29y
ZCgpOwotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBoaWRkZW5LZXl3b3JkKCk7Ci0gICAg
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNob3dpbmdLZXl3b3JkKCk7Ci0KICAgICBlbnVtIGNs
YXNzIEtpbmQgeyBTdWJ0aXRsZXMsIENhcHRpb25zLCBEZXNjcmlwdGlvbnMsIENoYXB0ZXJzLCBN
ZXRhZGF0YSwgRm9yY2VkIH07CiAgICAgS2luZCBraW5kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRL
aW5kKEtpbmQpOwogCiAgICAgS2luZCBraW5kRm9yQmluZGluZ3MoKSBjb25zdDsKICAgICB2b2lk
IHNldEtpbmRGb3JCaW5kaW5ncyhLaW5kKTsKQEAgLTk5LDE5ICs4OCwxNiBAQCBwdWJsaWM6CiAg
ICAgVGV4dFRyYWNrQ3VlTGlzdCogY3Vlc0ludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9jdWVz
LmdldCgpOyB9CiAKICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgb3ZlcnJpZGUgeyBtX2NsaWVudCA9
IG51bGxwdHI7IH0KLSAgICBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xp
ZW50OyB9CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBhZGRDdWUoUmVmPFRleHRUcmFja0N1ZT4m
Jik7CiAgICAgdmlydHVhbCBFeGNlcHRpb25Pcjx2b2lkPiByZW1vdmVDdWUoVGV4dFRyYWNrQ3Vl
Jik7CiAKLSAgICBib29sIGhhc0N1ZShUZXh0VHJhY2tDdWUqLCBUZXh0VHJhY2tDdWU6OkN1ZU1h
dGNoUnVsZXMgPSBUZXh0VHJhY2tDdWU6Ok1hdGNoQWxsRmllbGRzKTsKLQogICAgIFZUVFJlZ2lv
bkxpc3QqIHJlZ2lvbnMoKTsKLSAgICB2b2lkIGFkZFJlZ2lvbihSZWZQdHI8VlRUUmVnaW9uPiYm
KTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiByZW1vdmVSZWdpb24oVlRUUmVnaW9uKik7CisgICAg
dm9pZCBhZGRSZWdpb24oUmVmPFZUVFJlZ2lvbj4mJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4g
cmVtb3ZlUmVnaW9uKFZUVFJlZ2lvbiYpOwogCi0gICAgdm9pZCBjdWVXaWxsQ2hhbmdlKFRleHRU
cmFja0N1ZSopOwotICAgIHZvaWQgY3VlRGlkQ2hhbmdlKFRleHRUcmFja0N1ZSopOworICAgIHZv
aWQgY3VlV2lsbENoYW5nZShUZXh0VHJhY2tDdWUmKTsKKyAgICB2b2lkIGN1ZURpZENoYW5nZShU
ZXh0VHJhY2tDdWUmKTsKIAogICAgIGVudW0gVGV4dFRyYWNrVHlwZSB7IFRyYWNrRWxlbWVudCwg
QWRkVHJhY2ssIEluQmFuZCB9OwogICAgIFRleHRUcmFja1R5cGUgdHJhY2tUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFja1R5cGU7IH0KQEAgLTEzMiw3ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRIYXNCZWVuQ29uZmlndXJlZChib29sIGZsYWcpIHsgbV9oYXNCZWVuQ29uZmlndXJl
ZCA9IGZsYWc7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0RlZmF1bHQoYm9vbCkgeyB9CiAKICAg
ICB2b2lkIHJlbW92ZUFsbEN1ZXMoKTsKIApAQCAtMTQ0LDI3ICsxMjksMzYgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBNZWRpYVRpbWUgc3RhcnRUaW1lVmFyaWFuY2UoKSBjb25zdCB7IHJldHVy
biBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KIAotICAgIHVzaW5nIFJlZkNvdW50ZWQ8VHJhY2tC
YXNlPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8VHJhY2tCYXNlPjo6ZGVyZWY7CisgICAg
dXNpbmcgUmVmQ291bnRlZDo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwogCiAg
ICAgY29uc3QgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+JiBzdHlsZVNoZWV0cygpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGVTaGVldHM7IH0KIAogcHJvdGVjdGVkOgogICAgIFRleHRUcmFjayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgVGV4dFRyYWNrQ2xpZW50KiwgY29uc3QgQXRvbVN0cmluZyYg
a2luZCwgY29uc3QgQXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25z
dCBBdG9tU3RyaW5nJiBsYW5ndWFnZSwgVGV4dFRyYWNrVHlwZSk7CiAKLSNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKLSAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAiVGV4dFRyYWNrIjsgfQotI2VuZGlmCisgICAgRG9jdW1lbnQmIGRvY3VtZW50
KCkgY29uc3Q7CisgICAgVGV4dFRyYWNrQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQorCisgICAgYm9vbCBoYXNDdWUoVGV4dFRyYWNrQ3VlJiwgVGV4dFRyYWNrQ3VlOjpDdWVN
YXRjaFJ1bGVzID0gVGV4dFRyYWNrQ3VlOjpNYXRjaEFsbEZpZWxkcyk7CisgICAgdm9pZCBzZXRL
aW5kKEtpbmQpOwogCiAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IG1fY3VlczsKICAgICBP
cHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gbV9zdHlsZVNoZWV0czsKIAogcHJpdmF0ZToKKyAgICBF
dmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFRleHRUcmFja0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQorICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OyB9CisKICAgICBib29sIGVuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgcmVm
RXZlbnRUYXJnZXQoKSBmaW5hbCB7IHJlZigpOyB9CiAgICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgZmluYWwgeyBkZXJlZigpOyB9CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBj
b25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiVGV4dFRy
YWNrIjsgfQorI2VuZGlmCisKICAgICBWVFRSZWdpb25MaXN0JiBlbnN1cmVWVFRSZWdpb25MaXN0
KCk7CiAgICAgUmVmUHRyPFZUVFJlZ2lvbkxpc3Q+IG1fcmVnaW9uczsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suaWRsCmluZGV4IGNmOTAzYTliMjU3NWE1MzFjNTFhNzA0OGUy
YjJlZDUxNDcwYzcxZmYuLjg5NmM5NGNmM2FmYzhhYTYzODg4ODg1ZDViOTQ3YjBiMDExMTVmMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5pZGwKQEAgLTQ5LDcgKzQ5LDYg
QEAgZW51bSBUZXh0VHJhY2tLaW5kIHsgInN1YnRpdGxlcyIsICJjYXB0aW9ucyIsICJkZXNjcmlw
dGlvbnMiLCAiY2hhcHRlcnMiLCAibWV0YWQKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9u
Y3VlY2hhbmdlOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFZUVFJlZ2lvbkxpc3QgcmVnaW9u
czsKLSAgICAvLyBGSVhNRTogcmVnaW9uIHBhcmFtZXRlciBzaG91bGQgbm90IGJlIG51bGxhYmxl
IGluIGFkZFJlZ2lvbiBhbmQgcmVtb3ZlUmVnaW9uLgotICAgIHZvaWQgYWRkUmVnaW9uKFZUVFJl
Z2lvbj8gcmVnaW9uKTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgcmVtb3ZlUmVnaW9u
KFZUVFJlZ2lvbj8gcmVnaW9uKTsKKyAgICB2b2lkIGFkZFJlZ2lvbihWVFRSZWdpb24gcmVnaW9u
KTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgcmVtb3ZlUmVnaW9uKFZUVFJlZ2lvbiBy
ZWdpb24pOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApp
bmRleCBmYTM3ZGI4NDQ3YzJiYmYxNGRiN2QyZDY4YTJmM2IzNzVjNzdlZDVmLi4yNDE4NzdjMzIx
ZWQxOWQwZWQ4Mjk5MzQ4ODAzMWY3ZjU2MTY1Y2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwCkBAIC0xODMsMTAgKzE4Myw4IEBAIHN0YXRpYyB2b2lkIHJl
bW92ZVBzZXVkb0F0dHJpYnV0ZXMoTm9kZSYgbm9kZSkKICAgICAgICAgcmVtb3ZlUHNldWRvQXR0
cmlidXRlcygqY2hpbGQpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8VGV4dFRyYWNrQ3VlPj4gVGV4
dFRyYWNrQ3VlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgZG91Ymxl
IHN0YXJ0LCBkb3VibGUgZW5kLCBEb2N1bWVudEZyYWdtZW50JiBjdWVGcmFnbWVudCkKK0V4Y2Vw
dGlvbk9yPFJlZjxUZXh0VHJhY2tDdWU+PiBUZXh0VHJhY2tDdWU6OmNyZWF0ZShEb2N1bWVudCYg
ZG9jdW1lbnQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRG9jdW1lbnRGcmFnbWVudCYgY3Vl
RnJhZ21lbnQpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29u
dGV4dCk7Ci0KICAgICBpZiAoIWN1ZUZyYWdtZW50LmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yLCAiRW1wdHkgY3VlIGZyYWdtZW50
IiB9OwogCkBAIC0yMjQsMTAgKzIyMiwxMCBAQCBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZAogewog
fQogCi1UZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCkKK1Rl
eHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKERvY3VtZW50JiBjb250ZXh0LCBjb25zdCBNZWRpYVRp
bWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCkKICAgICA6IG1fc3RhcnRUaW1lKHN0YXJ0
KQogICAgICwgbV9lbmRUaW1lKGVuZCkKLSAgICAsIG1fZG9jdW1lbnQoZG93bmNhc3Q8RG9jdW1l
bnQ+KGNvbnRleHQpKQorICAgICwgbV9kb2N1bWVudChjb250ZXh0KQogewogfQogCkBAIC0yNDIs
NyArMjQwLDcgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OndpbGxDaGFuZ2UoKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobV90cmFjaykKLSAgICAgICAgbV90cmFjay0+Y3VlV2lsbENoYW5nZSh0
aGlzKTsKKyAgICAgICAgbV90cmFjay0+Y3VlV2lsbENoYW5nZSgqdGhpcyk7CiB9CiAKIHZvaWQg
VGV4dFRyYWNrQ3VlOjpkaWRDaGFuZ2UoKQpAQCAtMjU0LDcgKzI1Miw3IEBAIHZvaWQgVGV4dFRy
YWNrQ3VlOjpkaWRDaGFuZ2UoKQogICAgIG1fZGlzcGxheVRyZWVOZWVkc1VwZGF0ZSA9IHRydWU7
CiAKICAgICBpZiAobV90cmFjaykKLSAgICAgICAgbV90cmFjay0+Y3VlRGlkQ2hhbmdlKHRoaXMp
OworICAgICAgICBtX3RyYWNrLT5jdWVEaWRDaGFuZ2UoKnRoaXMpOwogfQogCiBUZXh0VHJhY2sq
IFRleHRUcmFja0N1ZTo6dHJhY2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmgKaW5kZXggYzZlNzM4YjA1YjZkYmRjMTM4OGQyZmNkOGYwNzJiZDU1ZWI4NGU5
Ni4uZTJmNGE1MDM0MzY2NGE0OGI2NGNkZTM1ZDk2OWRmZmY1MjA5Y2NiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgY3VlQmFja2Ryb3BTaGFkb3dQc2V1ZG9JZCgp
OwogICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBjdWVCb3hTaGFkb3dQc2V1ZG9JZCgpOwog
Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxUZXh0VHJhY2tDdWU+PiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRG9jdW1lbnRGcmFn
bWVudCYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8VGV4dFRyYWNrQ3VlPj4gY3JlYXRl
KERvY3VtZW50JiwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBEb2N1bWVudEZyYWdtZW50Jik7
CiAKICAgICBUZXh0VHJhY2sqIHRyYWNrKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUcmFjayhUZXh0
VHJhY2sqKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY3VlSW5k
ZXgoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIFRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQp
OworICAgIFRleHRUcmFja0N1ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNv
bnN0IE1lZGlhVGltZSYgZW5kKTsKIAogICAgIERvY3VtZW50JiBvd25lckRvY3VtZW50KCkgeyBy
ZXR1cm4gbV9kb2N1bWVudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0N1ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5pZGwKaW5kZXggZDU0ZDAxNWY1YzBlMWMyYjAzZDZjOTIxODlhOGUzOWYwM2VhODc3OS4u
N2UwMjcyMTYxZGQ0NjBhYjk1NDY0YWVmYzZhZTgxZjZhZjczNDQ4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmlkbApAQCAtMzEsNyArMzEsNyBAQAogICAgIEpT
Q3VzdG9tTWFya0Z1bmN0aW9uLAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogICAgIENvbnN0
cnVjdG9yKGRvdWJsZSBzdGFydFRpbWUsIGRvdWJsZSBlbmRUaW1lLCBEb2N1bWVudEZyYWdtZW50
IGN1ZU5vZGUpLAotICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwKKyAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAogICAgIENvbnN0cnVjdG9yRW5h
YmxlZEJ5U2V0dGluZz1HZW5lcmljQ3VlQVBJLAogICAgIENvbnN0cnVjdG9yTWF5VGhyb3dFeGNl
cHRpb24sCiBdIGludGVyZmFjZSBUZXh0VHJhY2tDdWUgOiBFdmVudFRhcmdldCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAppbmRleCBl
ZWZlY2FhZjVkOWJiYWQ3NDExMGNlY2YzMTQ3ZTdkZmFiOWExYzg4Li44ODcxMGEwNzhmNGJkNTE5
ZjQwMmE1ZmNlMWIyMmQwOGQ3Mjc1YTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCBSZWY8VGV4
dFRyYWNrQ3VlR2VuZXJpYz4gVGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbgogfQogCiBUZXh0VHJhY2tDdWVHZW5lcmljOjpUZXh0VHJhY2tDdWVH
ZW5lcmljKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3Qg
TWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLSAgICA6IFZUVEN1ZShkb2N1
bWVudCwgc3RhcnQsIGVuZCwgY29udGVudCkKKyAgICA6IFZUVEN1ZShkb2N1bWVudCwgc3RhcnQs
IGVuZCwgU3RyaW5nIHsgY29udGVudCB9KQogewogfQogCkBAIC0yMTksOCArMjE5LDggQEAgYm9v
bCBUZXh0VHJhY2tDdWVHZW5lcmljOjppc09yZGVyZWRCZWZvcmUoY29uc3QgVGV4dFRyYWNrQ3Vl
KiB0aGF0KSBjb25zdAogCiAgICAgaWYgKGlzPFRleHRUcmFja0N1ZUdlbmVyaWM+KCp0aGF0KSAm
JiBzdGFydFRpbWUoKSA9PSB0aGF0LT5zdGFydFRpbWUoKSAmJiBlbmRUaW1lKCkgPT0gdGhhdC0+
ZW5kVGltZSgpKSB7CiAgICAgICAgIC8vIEZ1cnRoZXIgb3JkZXIgZ2VuZXJpYyBjdWVzIGJ5IHRo
ZWlyIGNhbGN1bGF0ZWQgbGluZSB2YWx1ZS4KLSAgICAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91
YmxlPiB0aGlzUG9zaXRpb24gPSBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7Ci0gICAgICAgIHN0
ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gdGhhdFBvc2l0aW9uID0gZG93bmNhc3Q8VGV4dFRyYWNr
Q3VlR2VuZXJpYz4oKnRoYXQpLmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgYXV0
byB0aGlzUG9zaXRpb24gPSBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7CisgICAgICAgIGF1dG8g
dGhhdFBvc2l0aW9uID0gZG93bmNhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oKnRoYXQpLmdldFBv
c2l0aW9uQ29vcmRpbmF0ZXMoKTsKICAgICAgICAgcmV0dXJuIHRoaXNQb3NpdGlvbi5zZWNvbmQg
PiB0aGF0UG9zaXRpb24uc2Vjb25kIHx8ICh0aGlzUG9zaXRpb24uc2Vjb25kID09IHRoYXRQb3Np
dGlvbi5zZWNvbmQgJiYgdGhpc1Bvc2l0aW9uLmZpcnN0IDwgdGhhdFBvc2l0aW9uLmZpcnN0KTsK
ICAgICB9CiAKQEAgLTIzMiw4ICsyMzIsOCBAQCBib29sIFRleHRUcmFja0N1ZUdlbmVyaWM6Omlz
UG9zaXRpb25lZEFib3ZlKGNvbnN0IFRleHRUcmFja0N1ZSogdGhhdCkgY29uc3QKICAgICBpZiAo
aXM8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oKnRoYXQpKSB7CiAgICAgICAgIGlmIChzdGFydFRpbWUo
KSA9PSB0aGF0LT5zdGFydFRpbWUoKSAmJiBlbmRUaW1lKCkgPT0gdGhhdC0+ZW5kVGltZSgpKSB7
CiAgICAgICAgICAgICAvLyBGdXJ0aGVyIG9yZGVyIGdlbmVyaWMgY3VlcyBieSB0aGVpciBjYWxj
dWxhdGVkIGxpbmUgdmFsdWUuCi0gICAgICAgICAgICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+
IHRoaXNQb3NpdGlvbiA9IGdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKLSAgICAgICAgICAgIHN0
ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gdGhhdFBvc2l0aW9uID0gZG93bmNhc3Q8VGV4dFRyYWNr
Q3VlR2VuZXJpYz4oKnRoYXQpLmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgICAg
IGF1dG8gdGhpc1Bvc2l0aW9uID0gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpOworICAgICAgICAg
ICAgYXV0byB0aGF0UG9zaXRpb24gPSBkb3duY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljPigqdGhh
dCkuZ2V0UG9zaXRpb25Db29yZGluYXRlcygpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXNQb3Np
dGlvbi5zZWNvbmQgPiB0aGF0UG9zaXRpb24uc2Vjb25kIHx8ICh0aGlzUG9zaXRpb24uc2Vjb25k
ID09IHRoYXRQb3NpdGlvbi5zZWNvbmQgJiYgdGhpc1Bvc2l0aW9uLmZpcnN0IDwgdGhhdFBvc2l0
aW9uLmZpcnN0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RhcnRUaW1lKCkgPiB0aGF0
LT5zdGFydFRpbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRU
Q3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAppbmRleCBkNDhm
MzI5YThhYjczNjc1NzI2MmZhZTJlMzViNGIxNDRjNjYzNTkyLi4zYThhNjFhNWVjNWE5NDE0OWFk
OTJjOThmOWFhZGEwZTNmZjc0NjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1ZUVEN1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3Bw
CkBAIC0yMzcsMjQgKzIzNywxOSBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gVlRUQ3VlQm94
OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgYwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVJlZjxWVFRDdWU+IFZUVEN1ZTo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KQorUmVmPFZUVEN1ZT4gVlRUQ3VlOjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIFN0cmluZyYmIGNvbnRlbnQp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlRUQ3VlKGRvd25jYXN0PERvY3VtZW50Pihj
b250ZXh0KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0YXJ0KSwgTWVkaWFUaW1lOjpj
cmVhdGVXaXRoRG91YmxlKGVuZCksIGNvbnRlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBWVFRDdWUoZG9jdW1lbnQsIE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShzdGFydCksIE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShlbmQpLCBXVEZNb3ZlKGNvbnRlbnQpKSk7CiB9CiAK
LVJlZjxWVFRDdWU+IFZUVEN1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpCitSZWY8VlRUQ3VlPiBWVFRDdWU6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFdlYlZUVEN1ZURhdGEmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgVlRUQ3VlKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwgc3RhcnQsIGVuZCwgY29u
dGVudCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZUVEN1ZShkb2N1bWVudCwgZGF0YSkp
OwogfQogCi1SZWY8VlRUQ3VlPiBWVFRDdWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBXZWJWVFRDdWVEYXRhJiBkYXRhKQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFZUVEN1ZShkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIGRhdGEpKTsKLX0K
LQotVlRUQ3VlOjpWVFRDdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBNZWRpYVRpbWUmIHN0
YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorVlRUQ3Vl
OjpWVFRDdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25z
dCBNZWRpYVRpbWUmIGVuZCwgU3RyaW5nJiYgY29udGVudCkKICAgICA6IFRleHRUcmFja0N1ZShk
b2N1bWVudCwgc3RhcnQsIGVuZCkKLSAgICAsIG1fY29udGVudChjb250ZW50KQorICAgICwgbV9j
b250ZW50KFdURk1vdmUoY29udGVudCkpCiAgICAgLCBtX29yaWdpbmFsU3RhcnRUaW1lKE1lZGlh
VGltZTo6emVyb1RpbWUoKSkKIHsKICAgICBpbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9WVFRDdWUuaAppbmRleCBhZWFjOGRmMGZlNGNmZjRhMTlmOWJmN2QxNzA3MDgzMTU1MDk5ZjU5
Li4yYmNlMDMyMzJlOGM0ZDVhZTY4MmM2OTFiMGU2YzhkNDIyYTRkNzFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVlRUQ3VlLmgKQEAgLTc4LDkgKzc4LDggQEAgcHJpdmF0ZToKIGNsYXNzIFZUVEN1
ZSA6IHB1YmxpYyBUZXh0VHJhY2tDdWUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoVlRU
Q3VlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFZUVEN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29u
dGVudCk7Ci0gICAgc3RhdGljIFJlZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0
IFN0cmluZyYgY29udGVudCk7Ci0gICAgc3RhdGljIFJlZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgV2ViVlRUQ3VlRGF0YSYpOworICAgIHN0YXRpYyBSZWY8
VlRUQ3VlPiBjcmVhdGUoRG9jdW1lbnQmLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIFN0cmlu
ZyYmIGNvbnRlbnQpOworICAgIHN0YXRpYyBSZWY8VlRUQ3VlPiBjcmVhdGUoRG9jdW1lbnQmLCBj
b25zdCBXZWJWVFRDdWVEYXRhJik7CiAKICAgICB2aXJ0dWFsIH5WVFRDdWUoKTsKIApAQCAtMTY3
LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgY2FsY3VsYXRlQ29tcHV0ZWRUZXh0UG9z
aXRpb24oKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIFZUVEN1ZShEb2N1bWVudCYsIGNvbnN0
IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpOworICAgIFZUVEN1ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNv
bnN0IE1lZGlhVGltZSYgZW5kLCBTdHJpbmcmJiBjb250ZW50KTsKIAogICAgIGJvb2wgY3VlQ29u
dGVudHNNYXRjaChjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuaWRsIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9WVFRDdWUuaWRsCmluZGV4IDlkZWJhOTVlM2JjNWM2NWZhYzljMjk3NTlk
MThjZjNlYjE5OWQwZGMuLjhlZTM3Zjc4Yzc0MzI2NzAwZWJkZGE0OWNjODFhYmQyMjk3YWUxYzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5pZGwKQEAgLTI5LDcgKzI5LDcgQEAgdHlw
ZWRlZiAoZG91YmxlIG9yIEF1dG9LZXl3b3JkKSBMaW5lQW5kUG9zaXRpb25TZXR0aW5nOwogWwog
ICAgIENvbmRpdGlvbmFsPVZJREVPX1RSQUNLLAogICAgIENvbnN0cnVjdG9yKGRvdWJsZSBzdGFy
dFRpbWUsIGRvdWJsZSBlbmRUaW1lLCBET01TdHJpbmcgdGV4dCksCi0gICAgQ29uc3RydWN0b3JD
YWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LAorICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9
RG9jdW1lbnQsCiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAgSlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0LAogXSBpbnRlcmZhY2UgVlRUQ3VlIDogVGV4dFRyYWNrQ3VlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcAppbmRleCAzMzY3ZTk2ZGJmZTU1YTk3
ZGQzYzkxZjYzMWI4OGYwMjdhYjk3YTZmLi5iZThkZjhlMmE3N2QwNzBiZmM0YWMyYjA4MjE2YjUz
MDAyN2QyYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3Bw
CkBAIC05MCwyNSArOTAsMjQgQEAgYm9vbCBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50
YWdlVmFsdWVQYWlyKFZUVFNjYW5uZXImIHZhbHVlU2Nhbm5lciwgY2hhcgogICAgIHJldHVybiB0
cnVlOwogfQogCi1XZWJWVFRQYXJzZXI6OldlYlZUVFBhcnNlcihXZWJWVFRQYXJzZXJDbGllbnQq
IGNsaWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAgICwgbV9zdGF0ZShJbml0aWFsKQorV2ViVlRU
UGFyc2VyOjpXZWJWVFRQYXJzZXIoV2ViVlRUUGFyc2VyQ2xpZW50JiBjbGllbnQsIERvY3VtZW50
JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2RlY29kZXIo
VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgVVRGOEVuY29kaW5nKCkp
KQogICAgICwgbV9jbGllbnQoY2xpZW50KQogewogfQogCi12b2lkIFdlYlZUVFBhcnNlcjo6Z2V0
TmV3Q3VlcyhWZWN0b3I8UmVmUHRyPFdlYlZUVEN1ZURhdGE+PiYgb3V0cHV0Q3VlcykKK1ZlY3Rv
cjxSZWY8V2ViVlRUQ3VlRGF0YT4+IFdlYlZUVFBhcnNlcjo6dGFrZUN1ZXMoKQogewotICAgIG91
dHB1dEN1ZXMgPSBXVEZNb3ZlKG1fY3VlbGlzdCk7CisgICAgcmV0dXJuIFdURk1vdmUobV9jdWVs
aXN0KTsKIH0KIAotdm9pZCBXZWJWVFRQYXJzZXI6OmdldE5ld1JlZ2lvbnMoVmVjdG9yPFJlZlB0
cjxWVFRSZWdpb24+PiYgb3V0cHV0UmVnaW9ucykKK1ZlY3RvcjxSZWY8VlRUUmVnaW9uPj4gV2Vi
VlRUUGFyc2VyOjp0YWtlUmVnaW9ucygpCiB7Ci0gICAgb3V0cHV0UmVnaW9ucyA9IFdURk1vdmUo
bV9yZWdpb25MaXN0KTsKKyAgICByZXR1cm4gV1RGTW92ZShtX3JlZ2lvbkxpc3QpOwogfQogCi1W
ZWN0b3I8U3RyaW5nPiBXZWJWVFRQYXJzZXI6OmdldFN0eWxlU2hlZXRzKCkKK1ZlY3RvcjxTdHJp
bmc+IFdlYlZUVFBhcnNlcjo6dGFrZVN0eWxlU2hlZXRzKCkKIHsKICAgICByZXR1cm4gV1RGTW92
ZShtX3N0eWxlU2hlZXRzKTsKIH0KQEAgLTE0NCw4ICsxNDMsNyBAQCB2b2lkIFdlYlZUVFBhcnNl
cjo6cGFyc2VDdWVEYXRhKGNvbnN0IElTT1dlYlZUVEN1ZSYgZGF0YSkKICAgICAgICAgY3VlLT5z
ZXRPcmlnaW5hbFN0YXJ0VGltZShvcmlnaW5hbFN0YXJ0VGltZSk7CiAKICAgICBtX2N1ZWxpc3Qu
YXBwZW5kKFdURk1vdmUoY3VlKSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVu
dC0+bmV3Q3Vlc1BhcnNlZCgpOworICAgIG1fY2xpZW50Lm5ld0N1ZXNQYXJzZWQoKTsKIH0KIAog
dm9pZCBXZWJWVFRQYXJzZXI6OmZsdXNoKCkKQEAgLTE2NSw4ICsxNjMsNyBAQCB2b2lkIFdlYlZU
VFBhcnNlcjo6cGFyc2UoKQogICAgICAgICBjYXNlIEluaXRpYWw6CiAgICAgICAgICAgICAvLyBT
dGVwcyA0IC0gOSAtIENoZWNrIGZvciBhIHZhbGlkIFdlYlZUVCBzaWduYXR1cmUuCiAgICAgICAg
ICAgICBpZiAoIWhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoKmxpbmUpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZmlsZUZh
aWxlZFRvUGFyc2UoKTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC5maWxlRmFpbGVkVG9QYXJz
ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjc2LDEy
ICsyNzMsMTAgQEAgV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVj
dFdlYlZUVEJsb2NrKGNvbnN0IFN0cmluZyYgbGluZSkKICAgICAvLyBIYW5kbGUgY3VlIGJsb2Nr
LgogICAgIFBhcnNlU3RhdGUgc3RhdGUgPSBjaGVja0FuZFJlY292ZXJDdWUobGluZSk7CiAgICAg
aWYgKHN0YXRlICE9IEhlYWRlcikgewotICAgICAgICBpZiAobV9jbGllbnQpIHsKLSAgICAgICAg
ICAgIGlmICghbV9yZWdpb25MaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+bmV3UmVnaW9uc1BhcnNlZCgpOwotICAgICAgICAgICAgaWYgKCFtX3N0eWxlU2hlZXRzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+bmV3U3R5bGVTaGVldHNQYXJzZWQo
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIW1fcmVnaW9uTGlzdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBtX2NsaWVudC5uZXdSZWdpb25zUGFyc2VkKCk7CisgICAgICAgIGlmICghbV9zdHls
ZVNoZWV0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2NsaWVudC5uZXdTdHlsZVNoZWV0c1Bh
cnNlZCgpOwogICAgICAgICBpZiAoIW1fcHJldmlvdXNMaW5lLmlzRW1wdHkoKSAmJiAhbV9wcmV2
aW91c0xpbmUuY29udGFpbnMoIi0tPiIpKQogICAgICAgICAgICAgbV9jdXJyZW50SWQgPSBtX3By
ZXZpb3VzTGluZTsKICAgICAgICAgCkBAIC0zMjcsNyArMzIyLDcgQEAgYm9vbCBXZWJWVFRQYXJz
ZXI6OmNoZWNrQW5kQ3JlYXRlUmVnaW9uKGNvbnN0IFN0cmluZyYgbGluZSkKICAgICAvLyB6ZXJv
IG9yIG1vcmUgVSswMDIwIFNQQUNFIGNoYXJhY3RlcnMgb3IgVSswMDA5IENIQVJBQ1RFUiBUQUJV
TEFUSU9OCiAgICAgLy8gKHRhYikgY2hhcmFjdGVycyBleHBlY3RlZCBvdGhlciB0aGFuIHRoZXNl
IGNoYXJlY3RlcnMgaXQgaXMgaW52YWxpZC4KICAgICBpZiAobGluZS5zdGFydHNXaXRoKCJSRUdJ
T04iKSAmJiBsaW5lLnN1YnN0cmluZyhyZWdpb25JZGVudGlmaWVyTGVuZ3RoKS5pc0FsbFNwZWNp
YWxDaGFyYWN0ZXJzPGlzQVNwYWNlPigpKSB7Ci0gICAgICAgIG1fY3VycmVudFJlZ2lvbiA9IFZU
VFJlZ2lvbjo6Y3JlYXRlKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICBtX2N1
cnJlbnRSZWdpb24gPSBWVFRSZWdpb246OmNyZWF0ZShtX2RvY3VtZW50KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MSwxMyArMzM2LDE0IEBA
IGJvb2wgV2ViVlRUUGFyc2VyOjpjaGVja0FuZFN0b3JlUmVnaW9uKGNvbnN0IFN0cmluZyYgbGlu
ZSkKICAgICBpZiAoIW1fY3VycmVudFJlZ2lvbi0+aWQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gSWYgdGhlIHRleHQgdHJhY2sgbGlzdCBvZiByZWdpb25zIHJlZ2lvbnMgY29udGFpbnMgYSBy
ZWdpb24KICAgICAgICAgLy8gd2l0aCB0aGUgc2FtZSByZWdpb24gaWRlbnRpZmllciB2YWx1ZSBh
cyByZWdpb24sIHJlbW92ZSB0aGF0IHJlZ2lvbi4KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBy
ZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgICAgIGlmIChyZWdpb24tPmlkKCkgPT0g
bV9jdXJyZW50UmVnaW9uLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9yZWdpb25MaXN0LnJl
bW92ZUZpcnN0KHJlZ2lvbik7CisgICAgICAgIHNpemVfdCBzaXplID0gbV9yZWdpb25MaXN0LnNp
emUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChtX3JlZ2lvbkxpc3RbaV0tPmlkKCkgPT0gbV9jdXJyZW50UmVnaW9uLT5pZCgp
KSB7CisgICAgICAgICAgICAgICAgbV9yZWdpb25MaXN0LnJlbW92ZShpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtX3JlZ2lvbkxp
c3QuYXBwZW5kKG1fY3VycmVudFJlZ2lvbik7CisgICAgICAgIG1fcmVnaW9uTGlzdC5hcHBlbmQo
bV9jdXJyZW50UmVnaW9uLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KICAgICBtX2N1cnJlbnRS
ZWdpb24gPSBudWxscHRyOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTU4LDggKzU1NCw3IEBAIHZv
aWQgV2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdDdWUoKQogICAgIGN1ZS0+c2V0U2V0dGluZ3MobV9j
dXJyZW50U2V0dGluZ3MpOwogCiAgICAgbV9jdWVsaXN0LmFwcGVuZChXVEZNb3ZlKGN1ZSkpOwot
ICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsKKyAg
ICBtX2NsaWVudC5uZXdDdWVzUGFyc2VkKCk7CiB9CiAKIHZvaWQgV2ViVlRUUGFyc2VyOjpyZXNl
dEN1ZVZhbHVlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZU
VFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaAppbmRl
eCA1ZWJlYTc1MDllNTEwNWM5OTUyMWIwM2FhNWYzYzdkNzY3ZTRlYjQzLi45YmVlNzM0ZTE0YzA1
MzFmNDAyY2U2MGNjYTYxMTEzNjUwZGY1ZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRUUGFyc2VyLmgKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIEZpbmlz
aGVkCiAgICAgfTsKIAotICAgIFdlYlZUVFBhcnNlcihXZWJWVFRQYXJzZXJDbGllbnQqLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgV2ViVlRUUGFyc2VyKFdlYlZUVFBhcnNlckNsaWVu
dCYsIERvY3VtZW50Jik7CiAKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWNvZ25pemVkVGFn
KGNvbnN0IEF0b21TdHJpbmcmIHRhZ05hbWUpCiAgICAgewpAQCAtMTUwLDE4ICsxNTAsMTMgQEAg
cHVibGljOgogICAgIHZvaWQgZmlsZUZpbmlzaGVkKCk7CiAKICAgICAvLyBUcmFuc2ZlcnMgb3du
ZXJzaGlwIG9mIGxhc3QgcGFyc2VkIGN1ZXMgdG8gY2FsbGVyLgotICAgIHZvaWQgZ2V0TmV3Q3Vl
cyhWZWN0b3I8UmVmUHRyPFdlYlZUVEN1ZURhdGE+PiYpOwotICAgIHZvaWQgZ2V0TmV3UmVnaW9u
cyhWZWN0b3I8UmVmUHRyPFZUVFJlZ2lvbj4+Jik7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBnZXRT
dHlsZVNoZWV0cygpOworICAgIFZlY3RvcjxSZWY8V2ViVlRUQ3VlRGF0YT4+IHRha2VDdWVzKCk7
CisgICAgVmVjdG9yPFJlZjxWVFRSZWdpb24+PiB0YWtlUmVnaW9ucygpOworICAgIFZlY3RvcjxT
dHJpbmc+IHRha2VTdHlsZVNoZWV0cygpOwogICAgIAogICAgIC8vIENyZWF0ZSB0aGUgRG9jdW1l
bnRGcmFnbWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGUgV2ViVlRUIGN1ZSB0ZXh0LgogICAgIHN0
YXRpYyBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZyb21DdWVU
ZXh0KERvY3VtZW50JiwgY29uc3QgU3RyaW5nJik7CiAKLXByb3RlY3RlZDoKLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgUGFyc2VTdGF0
ZSBtX3N0YXRlOwotCiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2UoKTsKICAgICB2b2lkIGZsdXNo
UGVuZGluZ0N1ZSgpOwpAQCAtMTg1LDYgKzE4MCw5IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMg
Ym9vbCBjb2xsZWN0VGltZVN0YW1wKFZUVFNjYW5uZXImIGlucHV0LCBNZWRpYVRpbWUmIHRpbWVT
dGFtcCk7CiAKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKKyAgICBQYXJzZVN0YXRlIG1fc3Rh
dGUgeyBJbml0aWFsIH07CisKICAgICBCdWZmZXJlZExpbmVSZWFkZXIgbV9saW5lUmVhZGVyOwog
ICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAgICAgU3RyaW5nIG1f
Y3VycmVudElkOwpAQCAtMTk2LDEwICsxOTQsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VlRU
UmVnaW9uPiBtX2N1cnJlbnRSZWdpb247CiAgICAgU3RyaW5nIG1fY3VycmVudFNvdXJjZVN0eWxl
U2hlZXQ7CiAgICAgCi0gICAgV2ViVlRUUGFyc2VyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBXZWJW
VFRQYXJzZXJDbGllbnQmIG1fY2xpZW50OwogCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJWVFRDdWVE
YXRhPj4gbV9jdWVsaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8VlRUUmVnaW9uPj4gbV9yZWdpb25M
aXN0OworICAgIFZlY3RvcjxSZWY8V2ViVlRUQ3VlRGF0YT4+IG1fY3VlbGlzdDsKKyAgICBWZWN0
b3I8UmVmPFZUVFJlZ2lvbj4+IG1fcmVnaW9uTGlzdDsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3N0
eWxlU2hlZXRzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRU
cmFja0xvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNw
cAppbmRleCA4NzRmOWU1ZDBiYTk3YzYyNGFjMDZhZjA3NmI0ZjBlZTEzMzM2NTEwLi41YTNlZjYz
NWUzZWFhM2MzYjJkZjIxYTA2YTczZDE0YzdlNjliM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFRyYWNrTG9hZGVyLmNwcApAQCAtNDUsMTMgKzQ1LDEwIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLVRleHRUcmFja0xvYWRlcjo6VGV4dFRyYWNrTG9hZGVyKFRleHRUcmFj
a0xvYWRlckNsaWVudCYgY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQor
VGV4dFRyYWNrTG9hZGVyOjpUZXh0VHJhY2tMb2FkZXIoVGV4dFRyYWNrTG9hZGVyQ2xpZW50JiBj
bGllbnQsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAs
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9kb2N1bWVudChkb2N1
bWVudCkKICAgICAsIG1fY3VlTG9hZFRpbWVyKCp0aGlzLCAmVGV4dFRyYWNrTG9hZGVyOjpjdWVM
b2FkVGltZXJGaXJlZCkKLSAgICAsIG1fc3RhdGUoSWRsZSkKLSAgICAsIG1fcGFyc2VPZmZzZXQo
MCkKLSAgICAsIG1fbmV3Q3Vlc0F2YWlsYWJsZShmYWxzZSkKIHsKIH0KIApAQCAtNjcsNyArNjQs
NyBAQCB2b2lkIFRleHRUcmFja0xvYWRlcjo6Y3VlTG9hZFRpbWVyRmlyZWQoKQogICAgICAgICBt
X25ld0N1ZXNBdmFpbGFibGUgPSBmYWxzZTsKICAgICAgICAgbV9jbGllbnQubmV3Q3Vlc0F2YWls
YWJsZSgqdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKG1fc3RhdGUgPj0gRmluaXNoZWQp
CiAgICAgICAgIG1fY2xpZW50LmN1ZUxvYWRpbmdDb21wbGV0ZWQoKnRoaXMsIG1fc3RhdGUgPT0g
RmFpbGVkKTsKIH0KQEAgLTkyLDcgKzg5LDcgQEAgdm9pZCBUZXh0VHJhY2tMb2FkZXI6OnByb2Nl
c3NOZXdDdWVEYXRhKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFtX2N1ZVBhcnNlcikKLSAgICAgICAgbV9jdWVQYXJzZXIgPSBtYWtlVW5pcXVl
PFdlYlZUVFBhcnNlcj4oc3RhdGljX2Nhc3Q8V2ViVlRUUGFyc2VyQ2xpZW50Kj4odGhpcyksIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIG1fY3VlUGFyc2VyID0gbWFrZVVuaXF1
ZTxXZWJWVFRQYXJzZXI+KHN0YXRpY19jYXN0PFdlYlZUVFBhcnNlckNsaWVudCY+KCp0aGlzKSwg
bV9kb2N1bWVudCk7CiAKICAgICB3aGlsZSAobV9wYXJzZU9mZnNldCA8IGJ1ZmZlci0+c2l6ZSgp
KSB7CiAgICAgICAgIGF1dG8gZGF0YSA9IGJ1ZmZlci0+Z2V0U29tZURhdGEobV9wYXJzZU9mZnNl
dCk7CkBAIC0xMTUsOCArMTEyLDcgQEAgdm9pZCBUZXh0VHJhY2tMb2FkZXI6OmRlcHJlY2F0ZWRE
aWRSZWNlaXZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmMKIHZvaWQgVGV4
dFRyYWNrTG9hZGVyOjpjb3JzUG9saWN5UHJldmVudGVkTG9hZCgpCiB7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoIkNyb3NzLW9yaWdpbiB0ZXh0IHRyYWNrIGxvYWQgZGVuaWVkIGJ5IENyb3NzLU9yaWdpbiBS
ZXNvdXJjZSBTaGFyaW5nIHBvbGljeS4iKSk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgZG9jdW1lbnQt
PmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6
OkVycm9yLCBjb25zb2xlTWVzc2FnZSk7CisgICAgbV9kb2N1bWVudC5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgY29uc29sZU1l
c3NhZ2UpOwogICAgIG1fc3RhdGUgPSBGYWlsZWQ7CiB9CiAKQEAgLTE0OCwyMCArMTQ0LDE3IEBA
IGJvb2wgVGV4dFRyYWNrTG9hZGVyOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBIVE1MVHJhY2tFbGVt
ZW50JiBlbGVtZW50KQogewogICAgIGNhbmNlbExvYWQoKTsKIAotICAgIEFTU0VSVChpczxEb2N1
bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSk7Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotCiAgICAg
UmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVm
YXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwogICAgIG9wdGlvbnMuc2FtZU9yaWdpbkRhdGFV
UkxGbGFnID0gU2FtZU9yaWdpbkRhdGFVUkxGbGFnOjpTZXQ7CiAgICAgb3B0aW9ucy5jb250ZW50
U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uID0gZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93VHJl
ZSgpID8gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrIDog
Q29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lDaGVjazsKIAotICAgIFJl
c291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQuY29tcGxldGVVUkwodXJsKSk7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChtX2RvY3VtZW50LmNvbXBsZXRl
VVJMKHVybCkpOwogCiAgICAgaWYgKGF1dG8gbWVkaWFFbGVtZW50ID0gZWxlbWVudC5tZWRpYUVs
ZW1lbnQoKSkKICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldEluc3BlY3RvckluaXRpYXRvck5v
ZGVJZGVudGlmaWVyKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aWRlbnRpZmllckZvck5vZGUo
Km1lZGlhRWxlbWVudCkpOwogCi0gICAgYXV0byBjdWVSZXF1ZXN0ID0gY3JlYXRlUG90ZW50aWFs
QWNjZXNzQ29udHJvbFJlcXVlc3QoV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpLCBXVEZNb3ZlKG9w
dGlvbnMpLCBkb2N1bWVudCwgZWxlbWVudC5tZWRpYUVsZW1lbnRDcm9zc09yaWdpbkF0dHJpYnV0
ZSgpLCBTYW1lT3JpZ2luRmxhZzo6WWVzKTsKLSAgICBtX3Jlc291cmNlID0gZG9jdW1lbnQuY2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS5yZXF1ZXN0VGV4dFRyYWNrKFdURk1vdmUoY3VlUmVxdWVzdCkp
LnZhbHVlX29yKG51bGxwdHIpOworICAgIGF1dG8gY3VlUmVxdWVzdCA9IGNyZWF0ZVBvdGVudGlh
bEFjY2Vzc0NvbnRyb2xSZXF1ZXN0KFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0KSwgV1RGTW92ZShv
cHRpb25zKSwgbV9kb2N1bWVudCwgZWxlbWVudC5tZWRpYUVsZW1lbnRDcm9zc09yaWdpbkF0dHJp
YnV0ZSgpLCBTYW1lT3JpZ2luRmxhZzo6WWVzKTsKKyAgICBtX3Jlc291cmNlID0gbV9kb2N1bWVu
dC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJlcXVlc3RUZXh0VHJhY2soV1RGTW92ZShjdWVSZXF1
ZXN0KSkudmFsdWVfb3IobnVsbHB0cik7CiAgICAgaWYgKCFtX3Jlc291cmNlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KCp0aGlzKTsKQEAgLTIwNSwy
OSArMTk4LDI4IEBAIFZlY3RvcjxSZWY8VlRUQ3VlPj4gVGV4dFRyYWNrTG9hZGVyOjpnZXROZXdD
dWVzKCkKICAgICBpZiAoIW1fY3VlUGFyc2VyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
VmVjdG9yPFJlZlB0cjxXZWJWVFRDdWVEYXRhPj4gbmV3Q3VlczsKLSAgICBtX2N1ZVBhcnNlci0+
Z2V0TmV3Q3VlcyhuZXdDdWVzKTsKLQorICAgIGF1dG8gY3VlcyA9IG1fY3VlUGFyc2VyLT50YWtl
Q3VlcygpOwogICAgIFZlY3RvcjxSZWY8VlRUQ3VlPj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG5ld0N1ZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGN1ZURh
dGEgOiBuZXdDdWVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFZUVEN1ZTo6Y3Jl
YXRlKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICpjdWVEYXRhKSk7CisgICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY3Vlcy5zaXplKCkpOworICAgIGZvciAoYXV0byYgY3VlRGF0
YSA6IGN1ZXMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoVlRUQ3VlOjpjcmVhdGUo
bV9kb2N1bWVudCwgY3VlRGF0YSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgVGV4
dFRyYWNrTG9hZGVyOjpnZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VlRUUmVnaW9uPj4mIG91
dHB1dFJlZ2lvbnMpCitWZWN0b3I8UmVmPFZUVFJlZ2lvbj4+IFRleHRUcmFja0xvYWRlcjo6Z2V0
TmV3UmVnaW9ucygpCiB7CiAgICAgQVNTRVJUKG1fY3VlUGFyc2VyKTsKLSAgICBpZiAobV9jdWVQ
YXJzZXIpCi0gICAgICAgIG1fY3VlUGFyc2VyLT5nZXROZXdSZWdpb25zKG91dHB1dFJlZ2lvbnMp
OworICAgIGlmICghbV9jdWVQYXJzZXIpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJu
IG1fY3VlUGFyc2VyLT50YWtlUmVnaW9ucygpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBUZXh0VHJh
Y2tMb2FkZXI6OmdldE5ld1N0eWxlU2hlZXRzKCkKIHsKICAgICBBU1NFUlQobV9jdWVQYXJzZXIp
OwotICAgIGlmIChtX2N1ZVBhcnNlcikKLSAgICAgICAgcmV0dXJuIG1fY3VlUGFyc2VyLT5nZXRT
dHlsZVNoZWV0cygpOwotICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgIGlmICghbV9j
dWVQYXJzZXIpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fY3VlUGFyc2VyLT50
YWtlU3R5bGVTaGVldHMoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1RleHRUcmFja0xvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xv
YWRlci5oCmluZGV4IGMwZTc4MjkxZGE3ODBiNmZlNWJkZjEyODJmMGFlODgwNjAxMzgxNTkuLjVk
ODk0OWU3NTcyM2FiNDc2YzZkYTJmNzc3ODJkN2EwZWUyMmUyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvVGV4dFRyYWNrTG9hZGVyLmgKQEAgLTM5LDcgKzM5LDYgQEAgY2xhc3MgQ2FjaGVkVGV4
dFRyYWNrOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MVHJhY2tFbGVtZW50OwogY2xhc3Mg
VGV4dFRyYWNrTG9hZGVyOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFZU
VEN1ZTsKIAogY2xhc3MgVGV4dFRyYWNrTG9hZGVyQ2xpZW50IHsKQEAgLTUyLDMxICs1MSwzMCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG5ld1N0eWxlU2hlZXRzQXZhaWxhYmxlKFRleHRU
cmFja0xvYWRlciYpID0gMDsKIH07CiAKLWNsYXNzIFRleHRUcmFja0xvYWRlciA6IHB1YmxpYyBD
YWNoZWRSZXNvdXJjZUNsaWVudCwgcHJpdmF0ZSBXZWJWVFRQYXJzZXJDbGllbnQgeworY2xhc3Mg
VGV4dFRyYWNrTG9hZGVyIGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50LCBwcml2
YXRlIFdlYlZUVFBhcnNlckNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dFRy
YWNrTG9hZGVyKTsgCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
VGV4dFRyYWNrTG9hZGVyKFRleHRUcmFja0xvYWRlckNsaWVudCYsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKKyAgICBUZXh0VHJhY2tMb2FkZXIoVGV4dFRyYWNrTG9hZGVyQ2xpZW50JiwgRG9j
dW1lbnQmKTsKICAgICB2aXJ0dWFsIH5UZXh0VHJhY2tMb2FkZXIoKTsKIAogICAgIGJvb2wgbG9h
ZChjb25zdCBVUkwmLCBIVE1MVHJhY2tFbGVtZW50Jik7CiAgICAgdm9pZCBjYW5jZWxMb2FkKCk7
CiAKICAgICBWZWN0b3I8UmVmPFZUVEN1ZT4+IGdldE5ld0N1ZXMoKTsKLSAgICB2b2lkIGdldE5l
d1JlZ2lvbnMoVmVjdG9yPFJlZlB0cjxWVFRSZWdpb24+PiYgb3V0cHV0UmVnaW9ucyk7CisgICAg
VmVjdG9yPFJlZjxWVFRSZWdpb24+PiBnZXROZXdSZWdpb25zKCk7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gZ2V0TmV3U3R5bGVTaGVldHMoKTsKIAogcHJpdmF0ZToKLQogICAgIC8vIENhY2hlZFJlc291
cmNlQ2xpZW50Ci0gICAgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGVwcmVjYXRlZERpZFJlY2VpdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZSYpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UmKSBmaW5hbDsKKyAgICB2b2lkIGRlcHJlY2F0ZWREaWRSZWNlaXZlQ2FjaGVkUmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2UmKSBmaW5hbDsKIAogICAgIC8vIFdlYlZUVFBhcnNlckNsaWVudAotICAg
IHZvaWQgbmV3Q3Vlc1BhcnNlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgbmV3UmVnaW9uc1BhcnNl
ZCgpIG92ZXJyaWRlOworICAgIHZvaWQgbmV3Q3Vlc1BhcnNlZCgpIGZpbmFsOworICAgIHZvaWQg
bmV3UmVnaW9uc1BhcnNlZCgpIGZpbmFsOwogICAgIHZvaWQgbmV3U3R5bGVTaGVldHNQYXJzZWQo
KSBmaW5hbDsKLSAgICB2b2lkIGZpbGVGYWlsZWRUb1BhcnNlKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmaWxlRmFpbGVkVG9QYXJzZSgpIGZpbmFsOwogCiAgICAgdm9pZCBwcm9jZXNzTmV3Q3VlRGF0
YShDYWNoZWRSZXNvdXJjZSYpOwogICAgIHZvaWQgY3VlTG9hZFRpbWVyRmlyZWQoKTsKQEAgLTg3
LDExICs4NSwxMSBAQCBwcml2YXRlOgogICAgIFRleHRUcmFja0xvYWRlckNsaWVudCYgbV9jbGll
bnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlZUVFBhcnNlcj4gbV9jdWVQYXJzZXI7CiAgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkVGV4dFRyYWNrPiBtX3Jlc291cmNlOwotICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBEb2N1
bWVudCYgbV9kb2N1bWVudDsKICAgICBUaW1lciBtX2N1ZUxvYWRUaW1lcjsKLSAgICBTdGF0ZSBt
X3N0YXRlOwotICAgIHVuc2lnbmVkIG1fcGFyc2VPZmZzZXQ7Ci0gICAgYm9vbCBtX25ld0N1ZXNB
dmFpbGFibGU7CisgICAgU3RhdGUgbV9zdGF0ZSB7IElkbGUgfTsKKyAgICB1bnNpZ25lZCBtX3Bh
cnNlT2Zmc2V0IHsgMCB9OworICAgIGJvb2wgbV9uZXdDdWVzQXZhaWxhYmxlIHsgZmFsc2UgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nh
cHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwCmluZGV4IGQ5NmY2OTczYWFlZGNiOWJiYzliODAwZjA1
ZjI4NGY3ZmI0Njg4ZTIuLmFiNDg3OTZiYzRlZjg2M2NlMWQ0YTRhMzJiMjE1YWEzMDYzZWJlMTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcApA
QCAtMTk4LDkgKzE5OCw5IEBAIFZlY3RvcjxTdHJpbmc+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCkgY29uc3QKIAogc3RhdGljIFN0cmluZyB0
cmFja0Rpc3BsYXlOYW1lKFRleHRUcmFjayogdHJhY2spCiB7Ci0gICAgaWYgKHRyYWNrID09IFRl
eHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpCisgICAgaWYgKHRyYWNrID09ICZUZXh0VHJh
Y2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpKQogICAgICAgICByZXR1cm4gdGV4dFRyYWNrT2ZmTWVu
dUl0ZW1UZXh0KCk7Ci0gICAgaWYgKHRyYWNrID09IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRv
bWF0aWNJdGVtKCkpCisgICAgaWYgKHRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0
b21hdGljSXRlbSgpKQogICAgICAgICByZXR1cm4gdGV4dFRyYWNrQXV0b21hdGljTWVudUl0ZW1U
ZXh0KCk7CiAKICAgICBpZiAodHJhY2stPmxhYmVsKCkuaXNFbXB0eSgpICYmIHRyYWNrLT52YWxp
ZEJDUDQ3TGFuZ3VhZ2UoKS5pc0VtcHR5KCkpCkBAIC0yMTgsOSArMjE4LDkgQEAgU3RyaW5nIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OmRpc3BsYXlOYW1lRm9yVHJhY2soVGV4dFRyYWNrKiB0cmFj
aykgY29uc3QKIE1lZGlhU2VsZWN0aW9uT3B0aW9uIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6Om1l
ZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soVGV4dFRyYWNrKiB0cmFjaykgY29uc3QKIHsKICAg
ICBhdXRvIHR5cGUgPSBNZWRpYVNlbGVjdGlvbk9wdGlvbjo6VHlwZTo6UmVndWxhcjsKLSAgICBp
ZiAodHJhY2sgPT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKKyAgICBpZiAodHJh
Y2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpCiAgICAgICAgIHR5cGUgPSBN
ZWRpYVNlbGVjdGlvbk9wdGlvbjo6VHlwZTo6TGVnaWJsZU9mZjsKLSAgICBlbHNlIGlmICh0cmFj
ayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpKQorICAgIGVsc2UgaWYg
KHRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpKQogICAgICAg
ICB0eXBlID0gTWVkaWFTZWxlY3Rpb25PcHRpb246OlR5cGU6OkxlZ2libGVBdXRvOwogICAgIHJl
dHVybiB7IGRpc3BsYXlOYW1lRm9yVHJhY2sodHJhY2spLCB0eXBlIH07CiB9CkBAIC0yNDIsOCAr
MjQyLDggQEAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
Ojpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KFRleHRUcmEKICAgICAgICAgcmV0dXJuIGNvZGVQb2lu
dENvbXBhcmUodHJhY2tEaXNwbGF5TmFtZShhLmdldCgpKSwgdHJhY2tEaXNwbGF5TmFtZShiLmdl
dCgpKSkgPCAwOwogICAgIH0pOwogCi0gICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMCwgVGV4dFRy
YWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSk7Ci0gICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMSwg
VGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSk7CisgICAgdHJhY2tzRm9yTWVu
dS5pbnNlcnQoMCwgJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpOworICAgIHRyYWNr
c0Zvck1lbnUuaW5zZXJ0KDEsICZUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
KTsKIAogICAgIHJldHVybiB0cmFja3NGb3JNZW51OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAppbmRleCBhMzgzYTg5
ZjY5OGIyMzgzNTQ2NTdkMDMxM2U1ZWUwNmMxOTgzZmUzLi42OTE3ZWI4M2UwNWJjOWFiNDgxZDY5
NjBjODRiZjAwYzY5Nzc5MzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcApAQCAtNjgxLDkgKzY4MSw5IEBAIFN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6ZGlzcGxheU5hbWVGb3JUcmFjayhBdWRp
b1RyYWNrKiB0cmFjaykgY29uCiAKIHN0YXRpYyBTdHJpbmcgdHJhY2tEaXNwbGF5TmFtZShUZXh0
VHJhY2sqIHRyYWNrKQogewotICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51
T2ZmSXRlbSgpKQorICAgIGlmICh0cmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0
ZW0oKSkKICAgICAgICAgcmV0dXJuIHRleHRUcmFja09mZk1lbnVJdGVtVGV4dCgpOwotICAgIGlm
ICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpKQorICAgIGlm
ICh0cmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkKICAgICAg
ICAgcmV0dXJuIHRleHRUcmFja0F1dG9tYXRpY01lbnVJdGVtVGV4dCgpOwogCiAgICAgU3RyaW5n
QnVpbGRlciBkaXNwbGF5TmFtZUJ1aWxkZXI7CkBAIC05NzEsOCArOTcxLDggQEAgVmVjdG9yPFJl
ZlB0cjxUZXh0VHJhY2s+PiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJh
Y2tMaXN0Rm9yTWVudSgKIAogICAgIHN0ZDo6c29ydCh0cmFja3NGb3JNZW51LmJlZ2luKCksIHRy
YWNrc0Zvck1lbnUuZW5kKCksIHRleHRUcmFja0NvbXBhcmUpOwogCi0gICAgdHJhY2tzRm9yTWVu
dS5pbnNlcnQoMCwgVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSk7Ci0gICAgdHJhY2tz
Rm9yTWVudS5pbnNlcnQoMSwgVGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSk7
CisgICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMCwgJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJ
dGVtKCkpOworICAgIHRyYWNrc0Zvck1lbnUuaW5zZXJ0KDEsICZUZXh0VHJhY2s6OmNhcHRpb25N
ZW51QXV0b21hdGljSXRlbSgpKTsKIAogICAgIHJldHVybiB0cmFja3NGb3JNZW51OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQppbmRleCA1MDU0MWNlN2E0MTY4ZTA1YTBhZTA0
YWE5YTllN2E0ODVhYTZmNjA1Li5iMTQ5NTE4NDQ3M2RjYWUxYWZjNWNhOTdkNDQ0YWJjNjU5MTdi
OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpAQCAtMjk4LDcgKzI5OCw3
IEBAIHZvaWQgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdExlZ2libGVN
ZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKICAgICBpZiAoaW5kZXggPCBtX2xlZ2libGVUcmFj
a3NGb3JNZW51LnNpemUoKSkKICAgICAgICAgdGV4dFRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9y
TWVudVtzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KV0uZ2V0KCk7CiAgICAgZWxzZQotICAgICAg
ICB0ZXh0VHJhY2sgPSBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOworICAgICAgICB0
ZXh0VHJhY2sgPSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKIAogICAgIG1fbWVk
aWFFbGVtZW50LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0ZXh0VHJhY2spOwogfQpAQCAtNDk2LDM5
ICs0OTYsMzYgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWMKIAogdWludDY0X3QgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25z
dAogewotICAgIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCk7Ci0gICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJh
Y2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7Ci0KICAgICBhdXRvIGhvc3QgPSBtX21lZGlhRWxl
bWVudCA/IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpIDogbnVsbHB0cjsKLQog
ICAgIGlmICghaG9zdCkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CiAKICAgICBBdG9tU3Ry
aW5nIGRpc3BsYXlNb2RlID0gaG9zdC0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7Ci0gICAgVGV4dFRy
YWNrKiBvZmZJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNr
KiBhdXRvbWF0aWNJdGVtID0gaG9zdC0+Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisgICAg
VGV4dFRyYWNrJiBvZmZJdGVtID0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKKyAg
ICBUZXh0VHJhY2smIGF1dG9tYXRpY0l0ZW0gPSBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21h
dGljSXRlbSgpOworCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNlbGVjdGVkSW5kZXg7CisgICAg
T3B0aW9uYWw8dWludDY0X3Q+IG9mZkluZGV4OwogCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAw
OyBpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7CiAgICAg
ICAgIGF1dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAg
IGlmICh0cmFjayA9PSBvZmZJdGVtKQotICAgICAgICAgICAgb2ZmSW5kZXggPSBpbmRleDsKIAot
ICAgICAgICBpZiAodHJhY2sgPT0gYXV0b21hdGljSXRlbSAmJiBkaXNwbGF5TW9kZSA9PSBNZWRp
YUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3Rl
ZEluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVl
OwotICAgICAgICB9CisgICAgICAgIGlmICh0cmFjayA9PSAmb2ZmSXRlbSkKKyAgICAgICAgICAg
IG9mZkluZGV4ID0gaW5kZXg7CiAKLSAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29u
dHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJh
Y2s6Ok1vZGU6OlNob3dpbmcpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsK
LSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIGlmIChk
aXNwbGF5TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0b21hdGljS2V5d29yZCgpKSB7Cisg
ICAgICAgICAgICBpZiAodHJhY2sgPT0gJmF1dG9tYXRpY0l0ZW0pCisgICAgICAgICAgICAgICAg
c2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KHRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKQorICAgICAgICAgICAg
ICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChv
ZmZJdGVtICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFD
b250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpCisgICAgaWYgKCFzZWxlY3RlZEluZGV4
ICYmIGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0Ojpmb3JjZWRPbmx5S2V5d29yZCgp
KQogICAgICAgICBzZWxlY3RlZEluZGV4ID0gb2ZmSW5kZXg7CiAKLSAgICByZXR1cm4gc2VsZWN0
ZWRJbmRleDsKKyAgICByZXR1cm4gc2VsZWN0ZWRJbmRleC52YWx1ZU9yKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgoKSk7CiB9CiAKIGJvb2wgUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmV4dGVybmFsUGxheWJhY2tFbmFibGVkKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392673</attachid>
            <date>2020-03-05 21:37:36 -0800</date>
            <delta_ts>2020-03-06 07:11:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208322-20200305213731.patch</filename>
            <type>text/plain</type>
            <size>101861</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZkMGFjMjAwN2E0NzZlZDU5ZGMyMDUw
OTg2NTM1Y2EwMmY2MjZlOWQuLjJmOTIwNDMwZDc2MDMyMjJjZWNlMzE0NTFmYmFjMWZhOTIzNTY2
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDMtMDUgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgc29tZSBtZWRpYSBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDgzMjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9XZWFrUHRyLmg6Cisg
ICAgICAgIChXVEY6OldlYWtQdHI6Om9wZXJhdG9yISBjb25zdCk6IEFkZGVkLgorCiAyMDIwLTAz
LTA1ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFVQXSBJ
bXBsZW1lbnQgUmVtb3RlQXVkaW9TZXNzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTYwMTBiOWZhMGY2MzY4
MGNjMjNmOWExYjNmNDdiM2IzYWJlNjM5YS4uM2NkYzNhZTA5Njg5YTZiMWU5NGQ3MWU0YzU5MGI1
ZDc2YjBmOTZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAyMC0wMy0wNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBzb21lIG1lZGlh
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
ODMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0g
VGV4dFRyYWNrIG9iamVjdHMgbm93IHRha2UgRG9jdW1lbnQgaW5zdGVhZCBvZiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0LgorICAgICAgICAtIE1hZGUgbW9yZSBUZXh0VHJhY2sgZnVuY3Rpb25zIHBy
aXZhdGUgYW5kIHByb3RlY3RlZC4KKyAgICAgICAgLSBNYWRlIFRleHRUcmFjayBwYXJzaW5nIGZ1
bmN0aW9ucyB1c2UgcmV0dXJuIHZhbHVlcyByYXRoZXIgdGhhbiBvdXQgYXJndW1lbnRzLgorICAg
ICAgICAtIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50ZXJzIGFuZCBSZWYgcmF0aGVy
IHRoYW4gUmVmUHRyIGZvciBub24tbnVsbCB0aGluZ3MuCisgICAgICAgIC0gTWFkZSBNZWRpYUNv
bnRyb2xzSG9zdCB1c2UgYSBXZWFrUHRyIGluc3RlYWQgb2YgYSByYXcgcG9pbnRlci4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphbHdheXNPbktleXdvcmQpOiBNYWRlIHByaXZhdGUgdG8gdGhpcyBmaWxl
IGluc3RlYWQgb2YgZXhwb3NlZCBpbiBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjptYW51YWxL
ZXl3b3JkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6Y3Jl
YXRlKTogVGFrZSBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0bworICAgICAgICB0
aGUgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpN
ZWRpYUNvbnRyb2xzSG9zdCk6IERpdHRvLCBhbmQgbWFrZSBhIHdlYWsgcG9pbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0Ojpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KTog
QWRkZWQgbnVsbCBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0Ojpk
aXNwbGF5TmFtZUZvclRyYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xzSG9zdDo6Y2FwdGlvbk1lbnVPZmZJdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xzSG9zdDo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6Y2FwdGlvbkRpc3BsYXlNb2RlIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6c2V0U2VsZWN0
ZWRUZXh0VHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0
Ojp0ZXh0VHJhY2tDb250YWluZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbHNIb3N0OjphbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6c3VwcG9ydHNGdWxsc2NyZWVuIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6aXNWaWRlb0xh
eWVySW5saW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xz
SG9zdDo6aXNJbk1lZGlhRG9jdW1lbnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbHNIb3N0OjpzZXRQcmVwYXJlZFRvUmV0dXJuVmlkZW9MYXllclRvSW5saW5l
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6dXNlckdlc3R1
cmVSZXF1aXJlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
c0hvc3Q6OnNob3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5IGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6ZXh0ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZSBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OmV4dGVy
bmFsRGV2aWNlVHlwZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sc0hvc3Q6OmNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzZXRDb250cm9sc0RlcGVuZE9u
UGFnZVNjYWxlRmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xz
SG9zdDo6Z2VuZXJhdGVVVUlEKTogTWFkZSBhIHN0YXRpYyBtZW1iZXIuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6c2hhZG93Um9vdENTU1RleHQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpiYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFu
ZFR5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0Ojpmb3Jt
YXR0ZWRTdHJpbmdGb3JEdXJhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OmNvbXBhY3RNb2RlIGNvbnN0KTogVHdlYWtlZCBsb2dpYyBhIGJpdC4KKwor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oOiBNYWRl
IHZhcmlvdXMgbWVtYmVyIGZ1bmN0aW9ucworICAgICAgICBpbnRvIHN0YXRpYyBtZW1iZXIgZnVu
Y3Rpb25zLCB1c2VkIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBmb3IKKyAgICAgICAg
dGhpbmdzIHRoYXQgYXJlIG5ldmVyIG51bGwsIHVzZWQgV2Vha1B0ciBmb3IgbV9tZWRpYUVsZW1l
bnQuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNl
aXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KToKKyAgICAgICAgRG9jdW1lbnQgaW5zdGVhZCBvZiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlk
QWRkVGV4dFRyYWNrKTogRG9jdW1lbnQgaW5zdGVhZCBvZgorICAgICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2Fw
dGlvbkNvbnRhaW5lcik6IFBhc3MgcmVmZXJlbmNlIHRvCisgICAgICAgIE1lZGlhQ29udHJvbHNI
b3N0OjpjcmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxl
Y3RlZFRleHRUcmFjayk6IFVwZGF0ZSBzaW5jZSBzcGVjaWFsIGl0ZW1zCisgICAgICAgIGFyZSBu
b3cgcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBwb2ludGVycy4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkpOiBQYXNzIHJlZmVyZW5jZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IFJlbW92
ZWQgc2V0SXNEZWZhdWx0IGZ1bmN0aW9uCisgICAgICAgIHNpbmNlIHRoZSB0cmFjayBjYW4gc2lt
cGx5IHJlYWQgdGhlIGF0dHJpYnV0ZSBvdXQgb2YgdGhlIGVsZW1lbnQgaW5zdGVhZC4KKworICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6dXBkYXRl
RGlzcGxheSk6CisgICAgICAgIFVwZGF0ZSBzaW5jZSBzcGVjaWFsIGl0ZW1zIGFyZSBub3cgcmVm
ZXJlbmNzZSByYXRoZXIgdGhhbiBwb2ludGVycy4KKworICAgICAgICAqIGh0bWwvdHJhY2svRGF0
YUN1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpEYXRhQ3VlKTogRG9jdW1lbnQg
aW5zdGVhZCBvZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6RGF0
YUN1ZTo6Y3JlYXRlKTogTW92ZWQgdGhlc2UgZnVuY3Rpb25zIG91dCBvZiB0aGUgaGVhZGVyLgor
ICAgICAgICAqIGh0bWwvdHJhY2svRGF0YUN1ZS5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisg
ICAgICAgICogaHRtbC90cmFjay9EYXRhQ3VlLmlkbDogRGl0dG8uCisKKyAgICAgICAgKiBodG1s
L3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
RGF0YVRleHRUcmFjazo6SW5iYW5kRGF0YVRleHRUcmFjayk6IERvY3VtZW50IGluc3RlYWQKKyAg
ICAgICAgb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFu
ZERhdGFUZXh0VHJhY2s6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
RGF0YVRleHRUcmFjazo6YWRkRGF0YUN1ZSk6IERpdHRvLiBBbHNvIHVzZSByZWZlcmVuY2UKKyAg
ICAgICAgaW5zdGVhZCBvZiBwb2ludGVyIHdoZW4gY2FsbGluZyBoYXNDdWUuCisgICAgICAgICog
aHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpJbmJhbmRHZW5lcmljVGV4dFRy
YWNrKTogRG9jdW1lbnQKKyAgICAgICAgaW5zdGVhZCBvZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kR2VuZXJpY1RleHRUcmFjazo6Y3JlYXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjphZGRHZW5lcmlj
Q3VlKTogRGl0dG8uIEFsc28gdXNlCisgICAgICAgIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBvaW50
ZXIgd2hlbiBjYWxsaW5nIGhhc0N1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZEdlbmVyaWNU
ZXh0VHJhY2s6OnBhcnNlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kR2VuZXJp
Y1RleHRUcmFjazo6bmV3Q3Vlc1BhcnNlZCk6IERpdHRvLiBBbHNvIHVzZQorICAgICAgICByZXR1
cm4gdmFsdWUgZnJvbSB0YWtlQ3VlcyBpbnN0ZWFkIG9mIG91dCBhcmd1ZW5tdCBmcm9tIGdldE5l
d0N1ZXMuCisgICAgICAgIEFsc28gdXNlIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBvaW50ZXIgd2hl
biBjYWxsaW5nIGhhc0N1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZEdlbmVyaWNUZXh0VHJh
Y2s6Om5ld1JlZ2lvbnNQYXJzZWQpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFu
ZEdlbmVyaWNUZXh0VHJhY2suaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAqIGh0bWwv
dHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRU
cmFjazo6Y3JlYXRlKTogRG9jdW1lbnQgaW5zdGVhZCBvZgorICAgICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjpJbmJhbmRUZXh0
VHJhY2spOiBEaXR0by4KKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oOiBV
cGRhdGUgZm9yIGFib3ZlLgorCisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRXZWJWVFRUZXh0
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kV2ViVlRUVGV4dFRyYWNrOjpJbmJh
bmRXZWJWVFRUZXh0VHJhY2spOiBEb2N1bWVudAorICAgICAgICBpbnN0ZWFkIG9mIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRXZWJWVFRUZXh0VHJhY2s6
OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kV2ViVlRUVGV4dFRyYWNr
OjpwYXJzZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFdlYlZUVFRleHRUcmFj
azo6bmV3Q3Vlc1BhcnNlZCk6IERpdHRvLiBBbHNvIHVzZQorICAgICAgICByZXR1cm4gdmFsdWUg
ZnJvbSB0YWtlQ3VlcyBpbnN0ZWFkIG9mIG91dCBhcmd1ZW5tdCBmcm9tIGdldE5ld0N1ZXMuCisg
ICAgICAgIEFsc28gdXNlIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBvaW50ZXIgd2hlbiBjYWxsaW5n
IGhhc0N1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFdlYlZUVFRleHRUcmFjazo6bmV3UmVn
aW9uc1BhcnNlZCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kV2ViVlRUVGV4
dFRyYWNrLmg6IFVwZGF0ZSBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRh
YmxlVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlVGV4dFRyYWNrOjpj
cmVhdGUpOiBNb3ZlZCBoZXJlIGZyb20gaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFi
bGVUZXh0VHJhY2s6OmxvYWRUaW1lckZpcmVkKTogRG9jdW1lbnQgaW5zdGVhZCBvZgorICAgICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVUZXh0
VHJhY2s6Om5ld1JlZ2lvbnNBdmFpbGFibGUpOiBVc2UgcmV0dXJuIHZhbHVlCisgICAgICAgIGZy
b20gZ2V0TmV3UmVnaW9ucyBpbnN0ZWFkIG9mIG91dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OkxvYWRhYmxlVGV4dFRyYWNrOjppc0RlZmF1bHQgY29uc3QpOiBOZXcgaW1wbGVtZW50YXRp
b24gdGhhdAorICAgICAgICBkb2VzIG5vdCByZWx5IG9uIGEgZGF0YSBtZW1iZXI7IGNoZWNrcyBh
dHRyaWJ1dGUgb24gdmlkZW8gZWxlbWVudC4KKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRhYmxl
VGV4dFRyYWNrLmg6IFVwZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisKKyAgICAgICAgKiBodG1s
L3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmNhcHRp
b25NZW51T2ZmSXRlbSk6IFJldHVybiBhIHJlZmVyZW5jZSByYXRoZXIKKyAgICAgICAgdGhhbiBh
IHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21h
dGljSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpjcmVhdGUpOiBE
b2N1bWVudCByYXRoZXIgdGhhbiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFRyYWNrOjpkb2N1bWVudCBjb25zdCk6IEFkZGVkLiBGb3IgdXNlIGJ5IGRlcml2
ZWQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6YWRkUmVnaW9uKTogUmVm
IHJhdGhlciB0aGFuIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6cmVtb3Zl
UmVnaW9uKTogUmVmZXJlbmNlIHJhdGhlciB0aGFuIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2s6OmN1ZVdpbGxDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRUcmFjazo6Y3VlRGlkQ2hhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2s6Omhhc0N1ZSk6IERpdHRvLgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaDog
UmVtb3ZlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLWV4aXN0ZW50CisgICAgICAgIGRpc2FibGVkS2V5
d29yZCwgaGlkZGVuS2V5d29yZCwgYW5kIHNob3dpbmdLZXl3b3JkIGZ1bmN0aW9ucy4KKyAgICAg
ICAgTWFkZSBzZXRLaW5kLCBjbGllbnQsIGFuZCBoYXNDdWUgcHJvdGVjdGVkLiBNYWRlIG92ZXJy
aWRlcyBvZgorICAgICAgICBldmVudFRhcmdldEludGVyZmFjZSwgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgYW5kIGxvZ0NsYXNzTmFtZQorICAgICAgICBwcml2YXRlLiBSZW1vdmVkIHNldElzRGVm
YXVsdC4gVXBkYXRlZCBmb3IgY2hhbmdlcyBhYm92ZS4KKworICAgICAgICAqIGh0bWwvdHJhY2sv
VGV4dFRyYWNrLmlkbDogRGlkIHdoYXQgRklYTUUgc3VnZ2VzdGVkLCBtYWtpbmcgdGhlIHJlZ2lv
bgorICAgICAgICBwYXJhbWV0ZXJzIG5vbi1udWxsYWJsZS4gUGFzc2luZyBudWxsIHNpbGVudGx5
IGRpZCBub3RoaW5nIGJlZm9yZS4gVGhlcmUKKyAgICAgICAgaXMgc29tZSBzbWFsbCByaXNrIG9m
IHdlYnNpdGUgaW5jb21wYXRpYmlsaXR5IGlmIHNvbWVvbmUgYWNjaWRlbnRhbGx5CisgICAgICAg
IHJlbGllZCBvbiB0aGlzIFdlYktpdC1zcGVjaWZpYyBiZWhhdmlvci4KKworICAgICAgICAqIGh0
bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZTo6Y3JlYXRlKTogRG9jdW1lbnQgaW5zdGVhZCBvZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Lgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6d2lsbENoYW5nZSk6IFBhc3MgcmVmZXJlbmNl
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkaWRDaGFuZ2UpOiBEaXR0by4KKyAg
ICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oOiBVcGRhdGUgZm9yIGFib3ZlIGNoYW5n
ZXMuCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaWRsOiBEaXR0by4KKworICAg
ICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpUZXh0VHJhY2tDdWVHZW5lcmljKTogVXBkYXRlIHNp
bmNlIHRoZSBiYXNlCisgICAgICAgIGNsYXNzIG5vdyB0YWtlcyBhbiBydmFsdWUgcmVmZXJlbmNl
IHRvIHRoZSBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpp
c09yZGVyZWRCZWZvcmUgY29uc3QpOiBVc2UgYXV0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFja0N1ZUdlbmVyaWM6OmlzUG9zaXRpb25lZEFib3ZlIGNvbnN0KTogRGl0dG8uCisKKyAgICAg
ICAgKiBodG1sL3RyYWNrL1ZUVEN1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6OmNy
ZWF0ZSk6IERvY3VtZW50IGluc3RlYWQgb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAgICAg
ICAgQWxzbyB0YWtlIFN0cmluZyB3aXRoIGFuIHJ2YWx1ZSByZWZlcmVuY2UuCisgICAgICAgIChX
ZWJDb3JlOjpWVFRDdWU6OlZUVEN1ZSk6IERpdHRvLgorICAgICAgICAqIGh0bWwvdHJhY2svVlRU
Q3VlLmg6IFVwZGF0ZSBmb3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1ZU
VEN1ZS5pZGw6IERpdHRvLgorCisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIpOiBEb2N1bWVu
dCBpbnN0ZWFkIG9mCisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuIFJlZmVyZW5jZXMg
aW5zdGVhZCBvZiBwb2ludGVycy4gSW5pdGlhbGl6ZQorICAgICAgICBtX3N0YXRlIGluIGNsYXNz
IGRlZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnRha2VDdWVzKTog
UmVuYW1lZCBmcm9tIGdldE5ld0N1ZXMgYW5kIGNoYW5nZWQKKyAgICAgICAgdG8gdXNlIGEgcmV0
dXJuIHZhbHVlIGluc3RlYWQgb2YgYW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
V2ViVlRUUGFyc2VyOjp0YWtlUmVnaW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
VlRUUGFyc2VyOjp0YWtlU3R5bGVTaGVldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YlZUVFBhcnNlcjo6cGFyc2VDdWVEYXRhKTogUmVtb3ZlIG51bGwgY2hlY2sgb2YgbV9jbGllbnQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OmNvbGxlY3RXZWJWVFRCbG9jayk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpjaGVja0FuZENyZWF0ZVJlZ2lvbik6IFBhc3Mg
ZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OmNoZWNrQW5kU3RvcmVS
ZWdpb24pOiBVc2UKKyAgICAgICAgVmVjdG9yOjpyZW1vdmVGaXJzdE1hdGNoaW5nIGluc3RlYWQg
b2YgVmVjdG9yOjpyZW1vdmVGaXJzdC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6
Y3JlYXRlTmV3Q3VlKTogUmVtb3ZlIG51bGwgY2hlY2sgb2YgbV9jbGllbnQuCisgICAgICAgICog
aHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaDogVXBkYXRlIGZvciBhYm92ZSBjaGFuZ2VzLgorCisg
ICAgICAgICogbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0VHJhY2tMb2FkZXI6OlRleHRUcmFja0xvYWRlcik6IERvY3VtZW50IGluc3RlYWQgb2YKKyAg
ICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4gUmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50
ZXJzLiBJbml0aWFsaXplCisgICAgICAgIGRhdGEgbWVtYmVycyBpbiBpbiBjbGFzcyBkZWZpbml0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrTG9hZGVyOjpwcm9jZXNzTmV3Q3VlRGF0
YSk6IFBhc3MgcmVmZXJlbmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6
Y29yc1BvbGljeVByZXZlbnRlZExvYWQpOiBVc2UgbV9kb2N1bWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRUcmFja0xvYWRlcjo6bG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFRyYWNrTG9hZGVyOjpnZXROZXdDdWVzKTogVXNlIHRha2VDdWVzLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrTG9hZGVyOjpnZXROZXdSZWdpb25zKTogQ2hhbmdlZCB0byByZXR1cm4gYSB2
ZWN0b3IKKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyBhbiBvdXQgYXJndW1lbnQuIFVzZSB0YWtl
UmVnaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3U3R5bGVT
aGVldHMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmg6IFVwZGF0
ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNl
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFja0Rpc3BsYXlOYW1lKTogVXBkYXRlZCBzaW5j
ZSB0aGVzZSBhcmUgcmVmZXJlbmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6Om1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNvcnRlZFRyYWNrTGlzdEZv
ck1lbnUpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYWNrRGlzcGxheU5hbWUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRUcmFj
a0xpc3RGb3JNZW51KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nl
c3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVn
aWJsZU1lZGlhU2VsZWN0ZWRJbmRleCBjb25zdCk6CisgICAgICAgIFVwZGF0ZWQgdG8gdXNlIHJl
ZmVyZW5jZXMgcmF0aGVyIHRoYW4gcG9pbnRlcnMuIFJlZmFjdG9yZWQgdGhlIGxvZ2ljIHRvCisg
ICAgICAgIHVzZSBPcHRpb25hbCBhbmQgbmVzdGVkIGlmIHN0YXRlbWVudHMgdG8gbWFrZSB0aGUg
YWxnb3JpdGhtIGNsZWFyZXIuCisKIDIwMjAtMDItMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGdyYWRpZW50IHBhcnNpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaAppbmRl
eCBkMTE4NTdjNjMwYjFhYzEwMDFmYjdjMmZkMjFiZjY2ZGNjZmQyYzZkLi41NTRhZDEwN2I2NWFm
ZjRhMWVmMGJlOGQ4MzJjNmU1YmUwYjc0NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9X
ZWFrUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvV2Vha1B0ci5oCkBAIC0xMDQsNiArMTA0LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbXBsID8gc3RhdGljX2Nhc3Q8VCo+KG1faW1w
bC0+Z2V0PFQ+KCkpIDogbnVsbHB0cjsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFtX2ltcGwgfHwgISptX2ltcGw7IH0KICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsICYmICptX2ltcGw7IH0KIAogICAgIFdlYWtQ
dHImIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkgeyBtX2ltcGwgPSBudWxscHRyOyByZXR1cm4g
KnRoaXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9s
cy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29u
dHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IGJmYmI3YWE2NTU1OTRhMDFhYTY3YzNj
NDU0NmFmNWFjNTJlOTkwMGMuLmNlYjMwNWQ0ZjM1NTk4ZDQxNDE0ZTQ4OTAyNmM3YzU5NmRiYjcy
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRy
b2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbHNIb3N0LmgiCiAKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVuY2VzLmgi
Ci0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKQEAg
LTUyLDM4ICs1MSwzOSBAQCBjb25zdCBBdG9tU3RyaW5nJiBNZWRpYUNvbnRyb2xzSG9zdDo6YXV0
b21hdGljS2V5d29yZCgpCiAKIGNvbnN0IEF0b21TdHJpbmcmIE1lZGlhQ29udHJvbHNIb3N0Ojpm
b3JjZWRPbmx5S2V5d29yZCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGZvcmNlZE9uKCJmb3JjZWQtb25seSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICByZXR1cm4gZm9yY2VkT247CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IGZvcmNlZE9ubHkoImZvcmNlZC1vbmx5IiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHJldHVybiBmb3JjZWRPbmx5OwogfQogCi1j
b25zdCBBdG9tU3RyaW5nJiBNZWRpYUNvbnRyb2xzSG9zdDo6YWx3YXlzT25LZXl3b3JkKCkKK3N0
YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBhbHdheXNPbktleXdvcmQoKQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBhbHdheXNPbigiYWx3YXlzLW9uIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIHJldHVybiBhbHdheXNPbjsKIH0K
IAotY29uc3QgQXRvbVN0cmluZyYgTWVkaWFDb250cm9sc0hvc3Q6Om1hbnVhbEtleXdvcmQoKQor
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIG1hbnVhbEtleXdvcmQoKQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBhbHdheXNPbigibWFudWFsIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIHJldHVybiBhbHdheXNPbjsKIH0KIAot
Ci1SZWY8TWVkaWFDb250cm9sc0hvc3Q+IE1lZGlhQ29udHJvbHNIb3N0OjpjcmVhdGUoSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorUmVmPE1lZGlhQ29udHJvbHNIb3N0PiBNZWRpYUNv
bnRyb2xzSG9zdDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnRyb2xzSG9zdChtZWRpYUVsZW1lbnQpKTsK
IH0KIAotTWVkaWFDb250cm9sc0hvc3Q6Ok1lZGlhQ29udHJvbHNIb3N0KEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKK01l
ZGlhQ29udHJvbHNIb3N0OjpNZWRpYUNvbnRyb2xzSG9zdChIVE1MTWVkaWFFbGVtZW50JiBtZWRp
YUVsZW1lbnQpCisgICAgOiBtX21lZGlhRWxlbWVudChtYWtlV2Vha1B0cihtZWRpYUVsZW1lbnQp
KQogewotICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOwogfQogCiBNZWRpYUNvbnRyb2xzSG9zdDo6
fk1lZGlhQ29udHJvbHNIb3N0KCkgPSBkZWZhdWx0OwogCiBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
az4+IE1lZGlhQ29udHJvbHNIb3N0Ojpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KFRleHRUcmFja0xp
c3QmIHRyYWNrTGlzdCkKIHsKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1
cm4geyB9OworCiAgICAgUGFnZSogcGFnZSA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBh
Z2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC05Myw2ICs5Myw5
IEBAIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gTWVkaWFDb250cm9sc0hvc3Q6OnNvcnRlZFRy
YWNrTGlzdEZvck1lbnUoVGV4dFRyYWNrTGlzCiAKIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+
IE1lZGlhQ29udHJvbHNIb3N0Ojpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KEF1ZGlvVHJhY2tMaXN0
JiB0cmFja0xpc3QpCiB7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKwogICAgIFBhZ2UqIHBhZ2UgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTAyLDMwICsxMDUs
MzMgQEAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gTWVkaWFDb250cm9sc0hvc3Q6OnNvcnRl
ZFRyYWNrTGlzdEZvck1lbnUoQXVkaW9UcmFja0wKIAogU3RyaW5nIE1lZGlhQ29udHJvbHNIb3N0
OjpkaXNwbGF5TmFtZUZvclRyYWNrKGNvbnN0IE9wdGlvbmFsPFRleHRPckF1ZGlvVHJhY2s+JiB0
cmFjaykKIHsKLSAgICBpZiAoIXRyYWNrKQorICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIXRy
YWNrKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFBhZ2UqIHBhZ2UgPSBt
X21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KFsmcGFnZV0o
YXV0byYgdHJhY2spIHsKKyAgICByZXR1cm4gV1RGOjp2aXNpdChbcGFnZV0gKGF1dG8mIHRyYWNr
KSB7CiAgICAgICAgIHJldHVybiBwYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmRp
c3BsYXlOYW1lRm9yVHJhY2sodHJhY2suZ2V0KCkpOwogICAgIH0sIHRyYWNrLnZhbHVlKCkpOwog
fQogCi1UZXh0VHJhY2sqIE1lZGlhQ29udHJvbHNIb3N0OjpjYXB0aW9uTWVudU9mZkl0ZW0oKQor
VGV4dFRyYWNrJiBNZWRpYUNvbnRyb2xzSG9zdDo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkKIHsKICAg
ICByZXR1cm4gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKIH0KIAotVGV4dFRyYWNr
KiBNZWRpYUNvbnRyb2xzSG9zdDo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkKK1RleHRUcmFj
ayYgTWVkaWFDb250cm9sc0hvc3Q6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpCiB7CiAgICAg
cmV0dXJuIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CiB9CiAKIEF0b21T
dHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmNhcHRpb25EaXNwbGF5TW9kZSgpIGNvbnN0CiB7Cisg
ICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgpOworCiAg
ICAgUGFnZSogcGFnZSA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKQEAgLTE0NywxNCArMTUzLDE1
IEBAIEF0b21TdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmNhcHRpb25EaXNwbGF5TW9kZSgpIGNv
bnN0CiAKIHZvaWQgTWVkaWFDb250cm9sc0hvc3Q6OnNldFNlbGVjdGVkVGV4dFRyYWNrKFRleHRU
cmFjayogdHJhY2spCiB7Ci0gICAgbV9tZWRpYUVsZW1lbnQtPnNldFNlbGVjdGVkVGV4dFRyYWNr
KHRyYWNrKTsKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRTZWxlY3RlZFRleHRUcmFjayh0cmFjayk7CiB9CiAKIEVsZW1lbnQqIE1lZGlhQ29udHJv
bHNIb3N0Ojp0ZXh0VHJhY2tDb250YWluZXIoKQogewotICAgIGlmICghbV90ZXh0VHJhY2tDb250
YWluZXIpIHsKKyAgICBpZiAoIW1fdGV4dFRyYWNrQ29udGFpbmVyICYmIG1fbWVkaWFFbGVtZW50
KSB7CiAgICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpKTsKLSAg
ICAgICAgbV90ZXh0VHJhY2tDb250YWluZXItPnNldE1lZGlhQ29udHJvbGxlcihtX21lZGlhRWxl
bWVudCk7CisgICAgICAgIG1fdGV4dFRyYWNrQ29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIo
bV9tZWRpYUVsZW1lbnQuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gbV90ZXh0VHJhY2tDb250
YWluZXIuZ2V0KCk7CiB9CkBAIC0xODUsNTEgKzE5Miw1NCBAQCB2b2lkIE1lZGlhQ29udHJvbHNI
b3N0Ojp1cGRhdGVDYXB0aW9uRGlzcGxheVNpemVzKEZvcmNlVXBkYXRlIGZvcmNlKQogICAgIAog
Ym9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6YWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjaygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICFtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkucmVxdWlyZXNG
dWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCAm
JiAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLnJlcXVpcmVzRnVsbHNjcmVlbkZvclZp
ZGVvUGxheWJhY2soKTsKIH0KIAogYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPnN1cHBvcnRzRnVs
bHNjcmVlbihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFy
ZCk7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5zdXBwb3J0
c0Z1bGxzY3JlZW4oSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpOwogfQogCiBib29sIE1lZGlhQ29udHJvbHNIb3N0Ojppc1ZpZGVvTGF5ZXJJbmxpbmUo
KSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+aXNWaWRlb0xheWVySW5saW5l
KCk7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5pc1ZpZGVv
TGF5ZXJJbmxpbmUoKTsKIH0KIAogYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6aXNJbk1lZGlhRG9j
dW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5p
c01lZGlhRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCk7CiB9CiAKIHZvaWQgTWVkaWFDb250
cm9sc0hvc3Q6OnNldFByZXBhcmVkVG9SZXR1cm5WaWRlb0xheWVyVG9JbmxpbmUoYm9vbCB2YWx1
ZSkKIHsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0UHJlcGFyZWRUb1JldHVyblZpZGVvTGF5ZXJU
b0lubGluZSh2YWx1ZSk7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICBtX21lZGlh
RWxlbWVudC0+c2V0UHJlcGFyZWRUb1JldHVyblZpZGVvTGF5ZXJUb0lubGluZSh2YWx1ZSk7CiB9
CiAKIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6OnVzZXJHZXN0dXJlUmVxdWlyZWQoKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLnBsYXliYWNrUGVy
bWl0dGVkKCk7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmICFtX21lZGlhRWxlbWVudC0+
bWVkaWFTZXNzaW9uKCkucGxheWJhY2tQZXJtaXR0ZWQoKTsKIH0KIAogYm9vbCBNZWRpYUNvbnRy
b2xzSG9zdDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewotICAgIHJldHVy
biBtX21lZGlhRWxlbWVudC0+c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKTsKKyAgICByZXR1
cm4gbV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPnNob3VsZEZvcmNlQ29udHJvbHNE
aXNwbGF5KCk7CiB9CiAKIFN0cmluZyBNZWRpYUNvbnRyb2xzSG9zdDo6ZXh0ZXJuYWxEZXZpY2VE
aXNwbGF5TmFtZSgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKKwogICAgIGF1dG8gcGxheWVyID0gbV9tZWRpYUVsZW1lbnQtPnBsYXllcigpOwogICAgIGlm
ICghcGxheWVyKSB7CiAgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhQ29udHJvbHNIb3N0OjpleHRl
cm5hbERldmljZURpc3BsYXlOYW1lIC0gcmV0dXJuaW5nIFwiXCIgYmVjYXVzZSBwbGF5ZXIgaXMg
TlVMTCIpOwogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9Ci0gICAgCisKICAg
ICBTdHJpbmcgbmFtZSA9IHBsYXllci0+d2lyZWxlc3NQbGF5YmFja1RhcmdldE5hbWUoKTsKICAg
ICBMT0coTWVkaWEsICJNZWRpYUNvbnRyb2xzSG9zdDo6ZXh0ZXJuYWxEZXZpY2VEaXNwbGF5TmFt
ZSAtIHJldHVybmluZyBcIiVzXCIiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIAogICAgIHJl
dHVybiBuYW1lOwogI2Vsc2UKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTI0MSwxMiAr
MjUxLDE1IEBAIGF1dG8gTWVkaWFDb250cm9sc0hvc3Q6OmV4dGVybmFsRGV2aWNlVHlwZSgpIGNv
bnN0IC0+IERldmljZVR5cGUKICNpZiAhRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkK
ICAgICByZXR1cm4gRGV2aWNlVHlwZTo6Tm9uZTsKICNlbHNlCisgICAgaWYgKCFtX21lZGlhRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIERldmljZVR5cGU6Ok5vbmU7CisKICAgICBhdXRvIHBsYXll
ciA9IG1fbWVkaWFFbGVtZW50LT5wbGF5ZXIoKTsKICAgICBpZiAoIXBsYXllcikgewogICAgICAg
ICBMT0coTWVkaWEsICJNZWRpYUNvbnRyb2xzSG9zdDo6ZXh0ZXJuYWxEZXZpY2VUeXBlIC0gcmV0
dXJuaW5nIFwibm9uZVwiIGJlY2F1c2UgcGxheWVyIGlzIE5VTEwiKTsKICAgICAgICAgcmV0dXJu
IERldmljZVR5cGU6Ok5vbmU7CiAgICAgfQotICAgIAorCiAgICAgc3dpdGNoIChwbGF5ZXItPndp
cmVsZXNzUGxheWJhY2tUYXJnZXRUeXBlKCkpIHsKICAgICBjYXNlIE1lZGlhUGxheWVyOjpXaXJl
bGVzc1BsYXliYWNrVGFyZ2V0VHlwZTo6VGFyZ2V0VHlwZU5vbmU6CiAgICAgICAgIHJldHVybiBE
ZXZpY2VUeXBlOjpOb25lOwpAQCAtMjYzLDQzICsyNzYsNDEgQEAgYXV0byBNZWRpYUNvbnRyb2xz
SG9zdDo6ZXh0ZXJuYWxEZXZpY2VUeXBlKCkgY29uc3QgLT4gRGV2aWNlVHlwZQogCiBib29sIE1l
ZGlhQ29udHJvbHNIb3N0Ojpjb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VT
Y2FsZUZhY3RvcigpOworICAgIHJldHVybiBtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVu
dC0+bWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgTWVk
aWFDb250cm9sc0hvc3Q6OnNldENvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9vbCB2
YWx1ZSkKIHsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0TWVkaWFDb250cm9sc0RlcGVuZE9uUGFn
ZVNjYWxlRmFjdG9yKHZhbHVlKTsKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5zZXRNZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IodmFs
dWUpOwogfQogCi1TdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmdlbmVyYXRlVVVJRCgpIGNvbnN0
CitTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmdlbmVyYXRlVVVJRCgpCiB7CiAgICAgcmV0dXJu
IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKIH0KIAotU3RyaW5nIE1lZGlhQ29udHJvbHNI
b3N0OjpzaGFkb3dSb290Q1NTVGV4dCgpIGNvbnN0CitTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6
OnNoYWRvd1Jvb3RDU1NUZXh0KCkKIHsKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRv
bigpLm1vZGVybk1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CiB9CiAKLVN0cmluZyBNZWRpYUNv
bnRyb2xzSG9zdDo6YmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBlKGNvbnN0IFN0cmluZyYg
aWNvbk5hbWUsIGNvbnN0IFN0cmluZyYgaWNvblR5cGUpIGNvbnN0CitTdHJpbmcgTWVkaWFDb250
cm9sc0hvc3Q6OmJhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZShjb25zdCBTdHJpbmcmIGlj
b25OYW1lLCBjb25zdCBTdHJpbmcmIGljb25UeXBlKQogewogICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlw
ZShpY29uTmFtZSwgaWNvblR5cGUpOwogfQogCi1TdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmZv
cm1hdHRlZFN0cmluZ0ZvckR1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbkluU2Vjb25kcykgY29uc3QK
K1N0cmluZyBNZWRpYUNvbnRyb2xzSG9zdDo6Zm9ybWF0dGVkU3RyaW5nRm9yRHVyYXRpb24oZG91
YmxlIGR1cmF0aW9uSW5TZWNvbmRzKQogewogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkubWVkaWFDb250cm9sc0Zvcm1hdHRlZFN0cmluZ0ZvckR1cmF0aW9uKGR1cmF0aW9uSW5T
ZWNvbmRzKTsKIH0KIAogYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6Y29tcGFjdE1vZGUoKSBjb25z
dAogewotICAgIGlmIChtX3NpbXVsYXRlQ29tcGFjdE1vZGUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCiAjaWYgUExBVEZPUk0oV0FUQ0hPUykKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NpbXVsYXRlQ29tcGFjdE1vZGU7CiAjZW5kaWYK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01l
ZGlhQ29udHJvbHNIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMv
TWVkaWFDb250cm9sc0hvc3QuaAppbmRleCA5ZDI2MGQ4MTQwYmJiNWNjOTZmMWIwYTkyNjcwOGE4
ZjEyNDhmZjQ0Li40Y2FlMDAwMmQ4Y2IxODk0MTg1OTQ4ZTZmNDcxMzEzNzhmM2M4ODBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFD
b250cm9sc0hvc3QuaApAQCAtMjksOCArMjksNiBAQAogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00MywxNCArNDEsMTMgQEAgY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgVGV4dFRyYWNrTGlz
dDsKIAogY2xhc3MgTWVkaWFDb250cm9sc0hvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYUNv
bnRyb2xzSG9zdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKE1lZGlhQ29udHJvbHNI
b3N0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29udHJvbHNIb3N0PiBjcmVhdGUo
SFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBSZWY8TWVkaWFDb250cm9sc0hvc3Q+IGNy
ZWF0ZShIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAgfk1lZGlhQ29udHJvbHNIb3N0KCk7CiAKICAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgYXV0b21hdGljS2V5d29yZCgpOwogICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBmb3JjZWRPbmx5S2V5d29yZCgpOwotICAgIHN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBhbHdheXNPbktleXdvcmQoKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgbWFudWFsS2V5d29yZCgpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBz
b3J0ZWRUcmFja0xpc3RGb3JNZW51KFRleHRUcmFja0xpc3QmKTsKICAgICBWZWN0b3I8UmVmUHRy
PEF1ZGlvVHJhY2s+PiBzb3J0ZWRUcmFja0xpc3RGb3JNZW51KEF1ZGlvVHJhY2tMaXN0Jik7CkBA
IC01OCw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB1c2luZyBUZXh0T3JBdWRpb1RyYWNrID0gV1RG
OjpWYXJpYW50PFJlZlB0cjxUZXh0VHJhY2s+LCBSZWZQdHI8QXVkaW9UcmFjaz4+OwogICAgIFN0
cmluZyBkaXNwbGF5TmFtZUZvclRyYWNrKGNvbnN0IE9wdGlvbmFsPFRleHRPckF1ZGlvVHJhY2s+
Jik7CiAKLSAgICBUZXh0VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRlbSgpOwotICAgIFRleHRUcmFj
ayogY2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisgICAgc3RhdGljIFRleHRUcmFjayYgY2Fw
dGlvbk1lbnVPZmZJdGVtKCk7CisgICAgc3RhdGljIFRleHRUcmFjayYgY2FwdGlvbk1lbnVBdXRv
bWF0aWNJdGVtKCk7CiAgICAgQXRvbVN0cmluZyBjYXB0aW9uRGlzcGxheU1vZGUoKSBjb25zdDsK
ICAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFRyYWNrKFRleHRUcmFjayopOwogICAgIEVsZW1lbnQq
IHRleHRUcmFja0NvbnRhaW5lcigpOwpAQCAtNzMsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRQcmVwYXJlZFRvUmV0dXJuVmlkZW9MYXllclRvSW5saW5lKGJvb2wpOwogCiAgICAgZW51
bSBjbGFzcyBGb3JjZVVwZGF0ZSB7IFllcywgTm8gfTsKLSAgICB2b2lkIHVwZGF0ZUNhcHRpb25E
aXNwbGF5U2l6ZXMoRm9yY2VVcGRhdGUgZm9yY2UgPSBGb3JjZVVwZGF0ZTo6Tm8pOworICAgIHZv
aWQgdXBkYXRlQ2FwdGlvbkRpc3BsYXlTaXplcyhGb3JjZVVwZGF0ZSA9IEZvcmNlVXBkYXRlOjpO
byk7CiAgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOwogICAgIHZvaWQgZXhpdGVkRnVsbHNj
cmVlbigpOwogCkBAIC04OCwxNiArODUsMTYgQEAgcHVibGljOgogICAgIGJvb2wgY29udHJvbHNE
ZXBlbmRPblBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udHJvbHNEZXBl
bmRPblBhZ2VTY2FsZUZhY3Rvcihib29sIHYpOwogCi0gICAgU3RyaW5nIGdlbmVyYXRlVVVJRCgp
IGNvbnN0OworICAgIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVVVUlEKCk7CiAKLSAgICBTdHJpbmcg
c2hhZG93Um9vdENTU1RleHQoKSBjb25zdDsKLSAgICBTdHJpbmcgYmFzZTY0U3RyaW5nRm9ySWNv
bk5hbWVBbmRUeXBlKGNvbnN0IFN0cmluZyYgaWNvbk5hbWUsIGNvbnN0IFN0cmluZyYgaWNvblR5
cGUpIGNvbnN0OwotICAgIFN0cmluZyBmb3JtYXR0ZWRTdHJpbmdGb3JEdXJhdGlvbihkb3VibGUp
IGNvbnN0OworICAgIHN0YXRpYyBTdHJpbmcgc2hhZG93Um9vdENTU1RleHQoKTsKKyAgICBzdGF0
aWMgU3RyaW5nIGJhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5kVHlwZShjb25zdCBTdHJpbmcmIGlj
b25OYW1lLCBjb25zdCBTdHJpbmcmIGljb25UeXBlKTsKKyAgICBzdGF0aWMgU3RyaW5nIGZvcm1h
dHRlZFN0cmluZ0ZvckR1cmF0aW9uKGRvdWJsZSk7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFDb250
cm9sc0hvc3QoSFRNTE1lZGlhRWxlbWVudCopOworICAgIGV4cGxpY2l0IE1lZGlhQ29udHJvbHNI
b3N0KEhUTUxNZWRpYUVsZW1lbnQmKTsKIAotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFF
bGVtZW50OworICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CiAg
ICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IG1fdGV4dFRy
YWNrQ29udGFpbmVyOwogICAgIGJvb2wgbV9zaW11bGF0ZUNvbXBhY3RNb2RlIHsgZmFsc2UgfTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlci5jcHAKaW5kZXggNzNjZDA0MzIyMjEzNjQ3ZTY3ZTkwOTcyNDI3YzBlNWY4MjhhNTk1ZS4u
ZGI3MzEwNDc0NDFiNWNkZjk5YzZjOGExMThlMThlMmMxZDhkOTA4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApAQCAtMTI0
Nyw3ICsxMjQ3LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRS
ZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KGNvbnN0IEluaXQKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgc3RlcHMgNS40LjEtNS40LjguMSBhcyBwZXIgRWRpdG9yJ3MgRHJhZnQg
MDkgSmFudWFyeSAyMDE1LCBhbmQgcmVvcmRlciB0aGlzCiAgICAgICAgICAgICAvLyA1LjQuMSBM
ZXQgbmV3IHRleHQgdHJhY2sgYmUgYSBuZXcgVGV4dFRyYWNrIG9iamVjdCB3aXRoIGl0cyBwcm9w
ZXJ0aWVzIHBvcHVsYXRlZCB3aXRoIHRoZQogICAgICAgICAgICAgLy8gYXBwcm9wcmlhdGUgaW5m
b3JtYXRpb24gZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4KLSAgICAgICAgICAgIGF1
dG8gbmV3VGV4dFRyYWNrID0gSW5iYW5kVGV4dFRyYWNrOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgKnRoaXMsIHRleHRUcmFja1ByaXZhdGUpOworICAgICAgICAgICAgYXV0byBu
ZXdUZXh0VHJhY2sgPSBJbmJhbmRUZXh0VHJhY2s6OmNyZWF0ZShkb2N1bWVudCgpLCAqdGhpcywg
dGV4dFRyYWNrUHJpdmF0ZSk7CiAKICAgICAgICAgICAgIC8vIDUuNC4yIElmIHRoZSBtb2RlIHBy
b3BlcnR5IG9uIG5ldyB0ZXh0IHRyYWNrIGVxdWFscyAic2hvd2luZyIgb3IgImhpZGRlbiIsIHRo
ZW4gc2V0IGFjdGl2ZQogICAgICAgICAgICAgLy8gdHJhY2sgZmxhZyB0byB0cnVlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggODMzMmJjNTc2MDQyYjQ2YTcz
MDU5MWJlNWQ0YzAxYTMyNmRmYTVkMi4uNDQzMTEwMWFkNGFhMjNiNTgwZDQ5MjI2NGFlZWI4MTcy
MjVhOGVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC02
MzQsNiArNjM0LDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQoKQogICAg
IG1fbWVkaWFTZXNzaW9uID0gbnVsbHB0cjsKICAgICBzY2hlZHVsZVBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyVXBkYXRlKCk7CiB9CisKIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBIVE1MTWVkaWFF
bGVtZW50OjpiZXN0TWVkaWFFbGVtZW50Rm9yU2hvd2luZ1BsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
KE1lZGlhRWxlbWVudFNlc3Npb246OlBsYXliYWNrQ29udHJvbHNQdXJwb3NlIHB1cnBvc2UpCiB7
CiAgICAgVmVjdG9yPE1lZGlhRWxlbWVudFNlc3Npb25JbmZvPiBjYW5kaWRhdGVTZXNzaW9uczsK
QEAgLTQwMjIsNyArNDAyMyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJE
aWRBZGRUZXh0VHJhY2soSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2spCiB7CiAgICAgLy8g
NC44LjEwLjEyLjIgU291cmNpbmcgaW4tYmFuZCB0ZXh0IHRyYWNrcwogICAgIC8vIDEuIEFzc29j
aWF0ZSB0aGUgcmVsZXZhbnQgZGF0YSB3aXRoIGEgbmV3IHRleHQgdHJhY2sgYW5kIGl0cyBjb3Jy
ZXNwb25kaW5nIG5ldyBUZXh0VHJhY2sgb2JqZWN0LgotICAgIGF1dG8gdGV4dFRyYWNrID0gSW5i
YW5kVGV4dFRyYWNrOjpjcmVhdGUoKkFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCAqdGhpcywgdHJhY2spOworICAgIGF1dG8gdGV4dFRyYWNrID0gSW5iYW5kVGV4dFRy
YWNrOjpjcmVhdGUoZG9jdW1lbnQoKSwgKnRoaXMsIHRyYWNrKTsKICAgICB0ZXh0VHJhY2stPnNl
dE1lZGlhRWxlbWVudChtYWtlV2Vha1B0cih0aGlzKSk7CiAKICAgICAvLyAyLiBTZXQgdGhlIG5l
dyB0ZXh0IHRyYWNrJ3Mga2luZCwgbGFiZWwsIGFuZCBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgc2Vt
YW50aWNzIG9mIHRoZSByZWxldmFudCBkYXRhLApAQCAtNDE2OSw3ICs0MTcwLDcgQEAgRXhjZXB0
aW9uT3I8VGV4dFRyYWNrJj4gSFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKGNvbnN0IFN0
cmluZyYga2luZCwgY29uc3QKIAogICAgIC8vIDUuIENyZWF0ZSBhIG5ldyB0ZXh0IHRyYWNrIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIG5ldyBvYmplY3QsIGFuZCBzZXQgaXRzIHRleHQgdHJhY2sga2lu
ZCB0byBraW5kLCBpdHMgdGV4dAogICAgIC8vIHRyYWNrIGxhYmVsIHRvIGxhYmVsLCBpdHMgdGV4
dCB0cmFjayBsYW5ndWFnZSB0byBsYW5ndWFnZS4uLgotICAgIGF1dG8gdHJhY2sgPSBUZXh0VHJh
Y2s6OmNyZWF0ZShBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhp
cywga2luZCwgZW1wdHlTdHJpbmcoKSwgbGFiZWwsIGxhbmd1YWdlKTsKKyAgICBhdXRvIHRyYWNr
ID0gVGV4dFRyYWNrOjpjcmVhdGUoJmRvY3VtZW50KCksIHRoaXMsIGtpbmQsIGVtcHR5U3RyaW5n
KCksIGxhYmVsLCBsYW5ndWFnZSk7CiAgICAgYXV0byYgdHJhY2tSZWZlcmVuY2UgPSB0cmFjay5n
ZXQoKTsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICB0cmFja1JlZmVyZW5jZS5zZXRM
b2dnZXIobG9nZ2VyKCksIGxvZ0lkZW50aWZpZXIoKSk7CkBAIC00NDMyLDcgKzQ0MzMsNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250YWluZXIoKQogICAgIGVuc3Vy
ZU1lZGlhQ29udHJvbHNTaGFkb3dSb290KCk7CiAKICAgICBpZiAoIW1fbWVkaWFDb250cm9sc0hv
c3QpCi0gICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3Jl
YXRlKHRoaXMpOworICAgICAgICBtX21lZGlhQ29udHJvbHNIb3N0ID0gTWVkaWFDb250cm9sc0hv
c3Q6OmNyZWF0ZSgqdGhpcyk7CiAKICAgICBzZXR1cEFuZENhbGxKUyhbdGhpc10oSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgU2NyaXB0Q29udHJvbGxlciYsIERPTVdyYXBwZXJXb3JsZCYpIHsKICAgICAgICAg
YXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKQEAgLTQ1MDUsMTAgKzQ1MDYsMTAgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRUcmFjayhUZXh0VHJhY2sqIHRyYWNr
VG9TZWxlY3QpCiAgICAgaWYgKCF0cmFja0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICh0cmFja1RvU2VsZWN0ID09IFRleHRUcmFjazo6Y2Fw
dGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpIHsKKyAgICBpZiAodHJhY2tUb1NlbGVjdCA9PSAmVGV4
dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkgewogICAgICAgICBpZiAoY2FwdGlv
bkRpc3BsYXlNb2RlKCkgIT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQogICAg
ICAgICAgICAgbV90ZXh0VHJhY2tzLT5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7Ci0gICAgfSBlbHNl
IGlmICh0cmFja1RvU2VsZWN0ID09IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpIHsK
KyAgICB9IGVsc2UgaWYgKHRyYWNrVG9TZWxlY3QgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVP
ZmZJdGVtKCkpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IHRyYWNrTGlzdC0+
bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgIHRyYWNrTGlzdC0+aXRlbShp
KS0+c2V0TW9kZShUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkKTsKIApAQCAtNDUzMiw5ICs0NTMz
LDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRUcmFjayhUZXh0VHJh
Y2sqIHRyYWNrVG9TZWxlY3QpCiAKICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBkb2N1
bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKICAgICBDYXB0aW9u
VXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgZGlzcGxheU1vZGU7Ci0gICAgaWYg
KHRyYWNrVG9TZWxlY3QgPT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKKyAgICBp
ZiAodHJhY2tUb1NlbGVjdCA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKICAg
ICAgICAgZGlzcGxheU1vZGUgPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5Owot
ICAgIGVsc2UgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9t
YXRpY0l0ZW0oKSkKKyAgICBlbHNlIGlmICh0cmFja1RvU2VsZWN0ID09ICZUZXh0VHJhY2s6OmNh
cHRpb25NZW51QXV0b21hdGljSXRlbSgpKQogICAgICAgICBkaXNwbGF5TW9kZSA9IENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYzsKICAgICBlbHNlIHsKICAgICAgICAgZGlzcGxheU1v
ZGUgPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBbHdheXNPbjsKQEAgLTYzMzgsNyArNjMzOSw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpCiAjaWYg
RU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBlbnN1cmVNZWRpYUNvbnRyb2xzU2hh
ZG93Um9vdCgpOwogICAgIGlmICghbV9tZWRpYUNvbnRyb2xzSG9zdCkKLSAgICAgICAgbV9tZWRp
YUNvbnRyb2xzSG9zdCA9IE1lZGlhQ29udHJvbHNIb3N0OjpjcmVhdGUodGhpcyk7CisgICAgICAg
IG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKCp0aGlzKTsK
ICAgICBtX21lZGlhQ29udHJvbHNIb3N0LT51cGRhdGVUZXh0VHJhY2tDb250YWluZXIoKTsKICNl
bHNlCiAgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMo
KSkKQEAgLTczNzIsNyArNzM3Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIGlmICghbV9tZWRpYUNvbnRyb2xzSG9zdCkKLSAgICAgICAgICAgIG1f
bWVkaWFDb250cm9sc0hvc3QgPSBNZWRpYUNvbnRyb2xzSG9zdDo6Y3JlYXRlKHRoaXMpOworICAg
ICAgICAgICAgbV9tZWRpYUNvbnRyb2xzSG9zdCA9IE1lZGlhQ29udHJvbHNIb3N0OjpjcmVhdGUo
KnRoaXMpOwogCiAgICAgICAgIGF1dG8gbWVkaWFKU1dyYXBwZXIgPSB0b0pTKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgICAgIGF1dG8gbWVkaWFDb250
cm9sc0hvc3RKU1dyYXBwZXIgPSB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2Jq
ZWN0LCAqbV9tZWRpYUNvbnRyb2xzSG9zdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tF
bGVtZW50LmNwcAppbmRleCA3NGMyYjBhMDdjYmYwMGMyMTE4MmE2ZWU3MmU2YTE4ZWJjMGM1ZmU0
Li5kMzNmOGQ1MTJiODliNTczYmQ5OGZiMjlhYTAzY2Q2MTZiNDdkNzFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTExMSw4ICsxMTEsNiBAQCB2b2lkIEhU
TUxUcmFja0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b21TdHJpbgogICAgICAgICB0cmFjaygpLnNldExhYmVsKHZhbHVlKTsKICAgICBl
bHNlIGlmIChuYW1lID09IHNyY2xhbmdBdHRyKQogICAgICAgICB0cmFjaygpLnNldExhbmd1YWdl
KHZhbHVlKTsKLSAgICBlbHNlIGlmIChuYW1lID09IGRlZmF1bHRBdHRyKQotICAgICAgICB0cmFj
aygpLnNldElzRGVmYXVsdCghdmFsdWUuaXNOdWxsKCkpOwogCiAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBlZWJhODk0YzVlYTUyMTVh
MDNhMTE3Y2RiNjZhZjgxODQ5ZDBkMDlmLi42ZDBmMzc5ZDVmNzExYjI3YTM0MWVkZjA5N2FjNGVl
MDMwY2Y5YTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCkBAIC03ODAsMTIgKzc4MCwxMiBAQCB2b2lkIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgICAg
IGlmICghdGV4dFRyYWNrKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHRl
eHRUcmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpKSB7CisgICAgICAgIGlm
ICh0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpIHsKICAgICAg
ICAgICAgIG9mZk1lbnVJdGVtID0gdHJhY2tJdGVtOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAodGV4dFRyYWNrID09IFRleHRUcmFjazo6Y2FwdGlvbk1l
bnVBdXRvbWF0aWNJdGVtKCkpIHsKKyAgICAgICAgaWYgKHRleHRUcmFjayA9PSAmVGV4dFRyYWNr
OjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkgewogICAgICAgICAgICAgaWYgKGRpc3BsYXlN
b2RlID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYykKICAgICAgICAgICAgICAg
ICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLmFkZChzZWxlY3RlZENsYXNzVmFsdWUpOwogICAgICAg
ICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3Vl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKaW5kZXggM2IwMzJm
MTA3Mzc5NGE5ZmYyZjgzMTllMTY1OTEwZjdjNTFmNjYxMC4uNGJjMDI3NWQyYTU0MjdhZWQzN2Vj
NTFiNTRjMDlmZWE4ZDMzNzcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9EYXRhQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuY3Bw
CkBAIC00MiwzNyArNDIsNTUgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKERhdGFDdWUpOwogCi1EYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlh
VGltZSYgZW5kLCBBcnJheUJ1ZmZlciYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlKQotICAgIDog
VGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQpCitEYXRhQ3VlOjpEYXRhQ3VlKERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBl
bmQsIEFycmF5QnVmZmVyJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBUZXh0VHJh
Y2tDdWUoZG9jdW1lbnQsIHN0YXJ0LCBlbmQpCiAgICAgLCBtX3R5cGUodHlwZSkKIHsKICAgICBz
ZXREYXRhKGRhdGEpOwogfQogCi1EYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5k
LCBjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUZXh0VHJhY2tDdWUo
Y29udGV4dCwgc3RhcnQsIGVuZCkKK0RhdGFDdWU6OkRhdGFDdWUoRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogVGV4dFRyYWNrQ3VlKGRvY3VtZW50LCBz
dGFydCwgZW5kKQogICAgICwgbV9kYXRhKEFycmF5QnVmZmVyOjpjcmVhdGUoZGF0YSwgbGVuZ3Ro
KSkKIHsKIH0KIAotRGF0YUN1ZTo6RGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgUmVmUHRy
PFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWU+JiYgcGxhdGZvcm1WYWx1ZSwgY29uc3QgU3RyaW5n
JiB0eXBlKQotICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQpCitEYXRhQ3Vl
OjpEYXRhQ3VlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29u
c3QgTWVkaWFUaW1lJiBlbmQsIFJlZjxTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlPiYmIHBsYXRm
b3JtVmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKKyAgICA6IFRleHRUcmFja0N1ZShkb2N1bWVu
dCwgc3RhcnQsIGVuZCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9wbGF0Zm9ybVZhbHVl
KFdURk1vdmUocGxhdGZvcm1WYWx1ZSkpCiB7CiB9CiAKLURhdGFDdWU6OkRhdGFDdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3Qg
TWVkaWFUaW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQot
ICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQpCitEYXRhQ3VlOjpEYXRhQ3Vl
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFU
aW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIDog
VGV4dFRyYWNrQ3VlKGRvY3VtZW50LCBzdGFydCwgZW5kKQogICAgICwgbV90eXBlKHR5cGUpCi0g
ICAgLCBtX3ZhbHVlKGNvbnRleHQudm0oKSwgdmFsdWUpCisgICAgLCBtX3ZhbHVlKGRvY3VtZW50
LnZtKCksIHZhbHVlKQogewogfQogCi1EYXRhQ3VlOjp+RGF0YUN1ZSgpCitSZWY8RGF0YUN1ZT4g
RGF0YUN1ZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFy
dCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGRvY3VtZW50LCBzdGFydCwg
ZW5kLCBkYXRhLCBsZW5ndGgpKTsKIH0KIAorUmVmPERhdGFDdWU+IERhdGFDdWU6OmNyZWF0ZShE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBSZWY8U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZT4mJiBwbGF0Zm9ybVZhbHVlLCBj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1ZShk
b2N1bWVudCwgc3RhcnQsIGVuZCwgV1RGTW92ZShwbGF0Zm9ybVZhbHVlKSwgdHlwZSkpOworfQor
CitSZWY8RGF0YUN1ZT4gRGF0YUN1ZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgZG91Ymxl
IHN0YXJ0LCBkb3VibGUgZW5kLCBBcnJheUJ1ZmZlciYgZGF0YSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEYXRhQ3VlKGRvY3VtZW50LCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUo
c3RhcnQpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoZW5kKSwgZGF0YSwgZW1wdHlTdHJp
bmcoKSkpOworfQorCitSZWY8RGF0YUN1ZT4gRGF0YUN1ZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1
bWVudCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBKU0M6OkpTVmFsdWUgdmFsdWUsIGNvbnN0
IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGRvY3Vt
ZW50LCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoc3RhcnQpLCBNZWRpYVRpbWU6OmNyZWF0
ZVdpdGhEb3VibGUoZW5kKSwgdmFsdWUsIHR5cGUpKTsKK30KKworRGF0YUN1ZTo6fkRhdGFDdWUo
KSA9IGRlZmF1bHQ7CisKIFJlZlB0cjxBcnJheUJ1ZmZlcj4gRGF0YUN1ZTo6ZGF0YSgpIGNvbnN0
CiB7CiAgICAgaWYgKG1fcGxhdGZvcm1WYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svRGF0YUN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3Vl
LmgKaW5kZXggNTdlOWFlOWQwNWYwNzE4ZjYwNjA3NGFhM2Q0ZDU2NDAxMjU0N2Q0MC4uMzExZTU1
MDdmN2Y4N2JkMzU3ZTViYWQ2ZWJhYzEyMTMzNjQ0ZmY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9EYXRhQ3VlLmgKQEAgLTQ1LDM0ICs0NSwxMCBAQCBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogY2xhc3MgRGF0YUN1ZSBmaW5hbCA6IHB1YmxpYyBUZXh0VHJhY2tDdWUgewogICAgIFdU
Rl9NQUtFX0lTT19BTExPQ0FURUQoRGF0YUN1ZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxE
YXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVk
aWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEFycmF5QnVmZmVyJiBkYXRhKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1ZShjb250ZXh0LCBzdGFy
dCwgZW5kLCBkYXRhLCBlbXB0eVN0cmluZygpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxE
YXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVk
aWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IHZvaWQqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFD
dWUoY29udGV4dCwgc3RhcnQsIGVuZCwgZGF0YSwgbGVuZ3RoKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEFycmF5QnVmZmVy
JiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEYXRhQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGRhdGEsIHR5cGUpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUmVmPERhdGFDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwg
UmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWU+JiYgcGxhdGZvcm1WYWx1ZSwgY29uc3Qg
U3RyaW5nJiB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1
ZShjb250ZXh0LCBzdGFydCwgZW5kLCBXVEZNb3ZlKHBsYXRmb3JtVmFsdWUpLCB0eXBlKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBBcnJheUJ1ZmZlciYgZGF0
YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFDdWUoY29udGV4dCwg
TWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0YXJ0KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRo
RG91YmxlKGVuZCksIGRhdGEsIGVtcHR5U3RyaW5nKCkpKTsKLSAgICB9Ci0gICAgc3RhdGljIFJl
ZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgZG91Ymxl
IHN0YXJ0LCBkb3VibGUgZW5kLCBKU0M6OkpTVmFsdWUgdmFsdWUsIGNvbnN0IFN0cmluZyYgdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFDdWUoY29udGV4dCwg
TWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0YXJ0KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRo
RG91YmxlKGVuZCksIHZhbHVlLCB0eXBlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8RGF0YUN1
ZT4gY3JlYXRlKERvY3VtZW50JiwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBBcnJheUJ1ZmZl
ciYgZGF0YSk7CisgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoRG9jdW1lbnQmLCBkb3Vi
bGUgc3RhcnQsIGRvdWJsZSBlbmQsIEpTQzo6SlNWYWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKTsK
KyAgICBzdGF0aWMgUmVmPERhdGFDdWU+IGNyZWF0ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGlt
ZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8RGF0YUN1ZT4gY3JlYXRlKERvY3VtZW50JiwgY29u
c3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJlZjxTZXJpYWxpemVk
UGxhdGZvcm1EYXRhQ3VlPiYmLCBjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAgdmlydHVhbCB+
RGF0YUN1ZSgpOwogCkBAIC04OCwxMCArNjQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQogCiBwcml2YXRlOgotICAg
IERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQs
IGNvbnN0IE1lZGlhVGltZSYgZW5kLCBBcnJheUJ1ZmZlciYsIGNvbnN0IFN0cmluZyYpOwotICAg
IERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQs
IGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCB2b2lkKiwgdW5zaWduZWQpOwotICAgIERhdGFD
dWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0
IE1lZGlhVGltZSYgZW5kLCBSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZT4mJiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
TWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSwgY29u
c3QgU3RyaW5nJik7CisgICAgRGF0YUN1ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGltZSYgc3Rh
cnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBBcnJheUJ1ZmZlciYsIGNvbnN0IFN0cmluZyYpOwor
ICAgIERhdGFDdWUoRG9jdW1lbnQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRp
YVRpbWUmIGVuZCwgY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKKyAgICBEYXRhQ3VlKERvY3VtZW50
JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJlZjxTZXJp
YWxpemVkUGxhdGZvcm1EYXRhQ3VlPiYmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBEYXRhQ3VlKERv
Y3VtZW50JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgU3RyaW5nJik7CiAKICAgICBKU0M6OkpTVmFsdWUgdmFsdWVPck51
bGwoKSBjb25zdDsKICAgICBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBE
YXRhOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuaWRs
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmlkbAppbmRleCAzYTk1ODNmZGRi
NjU2NGRkMjk1YzI3Y2YwYjc2NDljMjJlODhlZDM4Li5iOWUzNTdhOWYwOTBkMTAwNTE3OGNhOTdm
NzFkYzg0ODRjNjU5ODBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0Rh
dGFDdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5pZGwKQEAg
LTI4LDcgKzI4LDcgQEAKICAgICBDb25kaXRpb25hbD1WSURFT19UUkFDSywKICAgICBDb25zdHJ1
Y3Rvcih1bnJlc3RyaWN0ZWQgZG91YmxlIHN0YXJ0VGltZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBl
bmRUaW1lLCBBcnJheUJ1ZmZlciBkYXRhKSwKICAgICBDb25zdHJ1Y3Rvcih1bnJlc3RyaWN0ZWQg
ZG91YmxlIHN0YXJ0VGltZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBlbmRUaW1lLCBhbnkgdmFsdWUs
IG9wdGlvbmFsIERPTVN0cmluZyB0eXBlKSwKLSAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQKKyAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50CiBdIGlu
dGVyZmFjZSBEYXRhQ3VlIDogVGV4dFRyYWNrQ3VlIHsKICAgICBhdHRyaWJ1dGUgQXJyYXlCdWZm
ZXIgZGF0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRE
YXRhVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRl
eHRUcmFjay5jcHAKaW5kZXggNGQ2MGQ2YmEwODRlNzZiZDdiZDkxMDg4ZGUzNDY1NzllNzM1ODIz
ZC4uMGRjMGQ5NGQ1MzYwY2Q4YzYyYjViYjViNDMyMzhkYjE2MzdiZDhiOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCkBAIC0zOCwy
MSArMzgsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoSW5iYW5kRGF0YVRleHRUcmFjayk7CiAKLWlubGluZSBJbmJhbmREYXRhVGV4dFRyYWNr
OjpJbmJhbmREYXRhVGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFRl
eHRUcmFja0NsaWVudCYgY2xpZW50LCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlJiB0cmFja1ByaXZh
dGUpCi0gICAgOiBJbmJhbmRUZXh0VHJhY2soY29udGV4dCwgY2xpZW50LCB0cmFja1ByaXZhdGUp
CitpbmxpbmUgSW5iYW5kRGF0YVRleHRUcmFjazo6SW5iYW5kRGF0YVRleHRUcmFjayhEb2N1bWVu
dCYgZG9jdW1lbnQsIFRleHRUcmFja0NsaWVudCYgY2xpZW50LCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlJiB0cmFja1ByaXZhdGUpCisgICAgOiBJbmJhbmRUZXh0VHJhY2soZG9jdW1lbnQsIGNsaWVu
dCwgdHJhY2tQcml2YXRlKQogewogfQogCi1SZWY8SW5iYW5kRGF0YVRleHRUcmFjaz4gSW5iYW5k
RGF0YVRleHRUcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFRl
eHRUcmFja0NsaWVudCYgY2xpZW50LCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlJiB0cmFja1ByaXZh
dGUpCitSZWY8SW5iYW5kRGF0YVRleHRUcmFjaz4gSW5iYW5kRGF0YVRleHRUcmFjazo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRU
cmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bmJhbmREYXRhVGV4dFRyYWNrKGNvbnRleHQsIGNsaWVudCwgdHJhY2tQcml2YXRlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5iYW5kRGF0YVRleHRUcmFjayhkb2N1bWVudCwgY2xpZW50
LCB0cmFja1ByaXZhdGUpKTsKIH0KIAogSW5iYW5kRGF0YVRleHRUcmFjazo6fkluYmFuZERhdGFU
ZXh0VHJhY2soKSA9IGRlZmF1bHQ7CiAKIHZvaWQgSW5iYW5kRGF0YVRleHRUcmFjazo6YWRkRGF0
YUN1ZShjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3Qg
dm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGFkZEN1ZShEYXRhQ3VlOjpjcmVh
dGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgZGF0YSwgbGVuZ3RoKSk7
CisgICAgYWRkQ3VlKERhdGFDdWU6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydCwgZW5kLCBkYXRh
LCBsZW5ndGgpKTsKIH0KIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQpAQCAtNjIsOCArNjIs
OCBAQCB2b2lkIEluYmFuZERhdGFUZXh0VHJhY2s6OmFkZERhdGFDdWUoY29uc3QgTWVkaWFUaW1l
JiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbgogICAgIGlmIChmaW5kSW5jb21wbGV0ZUN1ZShw
bGF0Zm9ybVZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjdWUgPSBEYXRhQ3Vl
OjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgcGxhdGZvcm1W
YWx1ZS5jb3B5UmVmKCksIHR5cGUpOwotICAgIGlmIChoYXNDdWUoY3VlLnB0cigpLCBUZXh0VHJh
Y2tDdWU6Oklnbm9yZUR1cmF0aW9uKSkgeworICAgIGF1dG8gY3VlID0gRGF0YUN1ZTo6Y3JlYXRl
KGRvY3VtZW50KCksIHN0YXJ0LCBlbmQsIHBsYXRmb3JtVmFsdWUuY29weVJlZigpLCB0eXBlKTsK
KyAgICBpZiAoaGFzQ3VlKGN1ZSwgVGV4dFRyYWNrQ3VlOjpJZ25vcmVEdXJhdGlvbikpIHsKICAg
ICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImlnbm9yaW5nIGFscmVhZHkgYWRkZWQgY3Vl
OiAiLCBjdWUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suaAppbmRleCA0ZmMzMTNlYWNjNTE3
NDEyMzA0Njk4ZjQyZTNjYWVlYTlkMTkzOTU4Li4zYzVjMTkzODE2MTZlYThhYzVkNDRmYWJmMTli
NDY4NDIxYjgxNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFu
ZERhdGFUZXh0VHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERh
dGFUZXh0VHJhY2suaApAQCAtMzcsMTEgKzM3LDExIEBAIGNsYXNzIERhdGFDdWU7CiBjbGFzcyBJ
bmJhbmREYXRhVGV4dFRyYWNrIGZpbmFsIDogcHVibGljIEluYmFuZFRleHRUcmFjayB7CiAgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmJhbmREYXRhVGV4dFRyYWNrKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEluYmFuZERhdGFUZXh0VHJhY2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOworICAg
IHN0YXRpYyBSZWY8SW5iYW5kRGF0YVRleHRUcmFjaz4gY3JlYXRlKERvY3VtZW50JiwgVGV4dFRy
YWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwogICAgIHZpcnR1YWwgfkluYmFu
ZERhdGFUZXh0VHJhY2soKTsKIAogcHJpdmF0ZToKLSAgICBJbmJhbmREYXRhVGV4dFRyYWNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlJik7CisgICAgSW5iYW5kRGF0YVRleHRUcmFjayhEb2N1bWVudCYsIFRleHRUcmFja0Ns
aWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsKIAogICAgIHZvaWQgYWRkRGF0YUN1ZShj
b25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3Qgdm9pZCos
IHVuc2lnbmVkKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
SW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKaW5kZXggYzk1NjhhZGRjNmYzNWEwYjFmYzU2NWRh
Zjc4MzFlNDZiMWMzZGQ3MS4uZmY4MmQ4OGNmOWYwOTI0N2E0MmZhZmQ2ZTZhZDkyY2JlMjdjMDc0
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4
dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZEdlbmVyaWNU
ZXh0VHJhY2suY3BwCkBAIC02MywxNCArNjMsMTQgQEAgdm9pZCBHZW5lcmljVGV4dFRyYWNrQ3Vl
TWFwOjpyZW1vdmUoVGV4dFRyYWNrQ3VlJiBwdWJsaWNDdWUpCiAgICAgICAgIG1fZGF0YVRvQ3Vl
TWFwLnJlbW92ZShjdWVJZGVudGlmaWVyKTsKIH0KIAotaW5saW5lIEluYmFuZEdlbmVyaWNUZXh0
VHJhY2s6OkluYmFuZEdlbmVyaWNUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmIHRy
YWNrUHJpdmF0ZSkKLSAgICA6IEluYmFuZFRleHRUcmFjayhjb250ZXh0LCBjbGllbnQsIHRyYWNr
UHJpdmF0ZSkKK2lubGluZSBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpJbmJhbmRHZW5lcmljVGV4
dFRyYWNrKERvY3VtZW50JiBkb2N1bWVudCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFu
ZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKKyAgICA6IEluYmFuZFRleHRUcmFjayhk
b2N1bWVudCwgY2xpZW50LCB0cmFja1ByaXZhdGUpCiB7CiB9CiAKLVJlZjxJbmJhbmRHZW5lcmlj
VGV4dFRyYWNrPiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRUcmFj
a1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKK1JlZjxJbmJhbmRHZW5lcmljVGV4dFRyYWNrPiBJbmJh
bmRHZW5lcmljVGV4dFRyYWNrOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBUZXh0VHJhY2tD
bGllbnQmIGNsaWVudCwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2YXRlKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluYmFuZEdlbmVyaWNUZXh0VHJhY2soY29udGV4dCwg
Y2xpZW50LCB0cmFja1ByaXZhdGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmJhbmRH
ZW5lcmljVGV4dFRyYWNrKGRvY3VtZW50LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSkpOwogfQogCiBJ
bmJhbmRHZW5lcmljVGV4dFRyYWNrOjp+SW5iYW5kR2VuZXJpY1RleHRUcmFjaygpID0gZGVmYXVs
dDsKQEAgLTExOSw5ICsxMTksOSBAQCB2b2lkIEluYmFuZEdlbmVyaWNUZXh0VHJhY2s6OmFkZEdl
bmVyaWNDdWUoSW5iYW5kR2VuZXJpY0N1ZSYgaW5iYW5kQ3VlKQogICAgIGlmIChtX2N1ZU1hcC5m
aW5kKGluYmFuZEN1ZS51bmlxdWVJZCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBj
dWUgPSBUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgaW5iYW5kQ3VlLnN0YXJ0VGltZSgpLCBpbmJhbmRDdWUuZW5kVGltZSgpLCBpbmJhbmRDdWUu
Y29udGVudCgpKTsKKyAgICBhdXRvIGN1ZSA9IFRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZShk
b2N1bWVudCgpLCBpbmJhbmRDdWUuc3RhcnRUaW1lKCksIGluYmFuZEN1ZS5lbmRUaW1lKCksIGlu
YmFuZEN1ZS5jb250ZW50KCkpOwogICAgIHVwZGF0ZUN1ZUZyb21DdWVEYXRhKGN1ZS5nZXQoKSwg
aW5iYW5kQ3VlKTsKLSAgICBpZiAoaGFzQ3VlKGN1ZS5wdHIoKSwgVGV4dFRyYWNrQ3VlOjpJZ25v
cmVEdXJhdGlvbikpIHsKKyAgICBpZiAoaGFzQ3VlKGN1ZSwgVGV4dFRyYWNrQ3VlOjpJZ25vcmVE
dXJhdGlvbikpIHsKICAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImlnbm9yaW5nIGFs
cmVhZHkgYWRkZWQgY3VlOiAiLCBjdWUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTY4LDcgKzE2OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEluYmFuZEdlbmVyaWNUZXh0VHJh
Y2s6OnJlbW92ZUN1ZShUZXh0VHJhY2tDdWUmIGN1ZSkKIFdlYlZUVFBhcnNlciYgSW5iYW5kR2Vu
ZXJpY1RleHRUcmFjazo6cGFyc2VyKCkKIHsKICAgICBpZiAoIW1fd2ViVlRUUGFyc2VyKQotICAg
ICAgICBtX3dlYlZUVFBhcnNlciA9IG1ha2VVbmlxdWU8V2ViVlRUUGFyc2VyPihzdGF0aWNfY2Fz
dDxXZWJWVFRQYXJzZXJDbGllbnQqPih0aGlzKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KyAgICAgICAgbV93ZWJWVFRQYXJzZXIgPSBtYWtlVW5pcXVlPFdlYlZUVFBhcnNlcj4oc3RhdGlj
X2Nhc3Q8V2ViVlRUUGFyc2VyQ2xpZW50Jj4oKnRoaXMpLCBkb2N1bWVudCgpKTsKICAgICByZXR1
cm4gKm1fd2ViVlRUUGFyc2VyOwogfQogCkBAIC0xODQsMzEgKzE4NCwyMiBAQCB2b2lkIEluYmFu
ZEdlbmVyaWNUZXh0VHJhY2s6OnBhcnNlV2ViVlRURmlsZUhlYWRlcihTdHJpbmcmJiBoZWFkZXIp
CiAKIHZvaWQgSW5iYW5kR2VuZXJpY1RleHRUcmFjazo6bmV3Q3Vlc1BhcnNlZCgpCiB7Ci0gICAg
VmVjdG9yPFJlZlB0cjxXZWJWVFRDdWVEYXRhPj4gY3VlczsKLSAgICBwYXJzZXIoKS5nZXROZXdD
dWVzKGN1ZXMpOwotCi0gICAgZm9yIChhdXRvJiBjdWVEYXRhIDogY3VlcykgewotICAgICAgICBh
dXRvIHZ0dEN1ZSA9IFZUVEN1ZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICpj
dWVEYXRhKTsKLQotICAgICAgICBpZiAoaGFzQ3VlKHZ0dEN1ZS5wdHIoKSwgVGV4dFRyYWNrQ3Vl
OjpJZ25vcmVEdXJhdGlvbikpIHsKLSAgICAgICAgICAgIElORk9fTE9HKExPR0lERU5USUZJRVIs
ICJpZ25vcmluZyBhbHJlYWR5IGFkZGVkIGN1ZTogIiwgdnR0Q3VlLmdldCgpKTsKKyAgICBmb3Ig
KGF1dG8mIGN1ZURhdGEgOiBwYXJzZXIoKS50YWtlQ3VlcygpKSB7CisgICAgICAgIGF1dG8gY3Vl
ID0gVlRUQ3VlOjpjcmVhdGUoZG9jdW1lbnQoKSwgY3VlRGF0YSk7CisgICAgICAgIGlmIChoYXND
dWUoY3VlLCBUZXh0VHJhY2tDdWU6Oklnbm9yZUR1cmF0aW9uKSkgeworICAgICAgICAgICAgSU5G
T19MT0coTE9HSURFTlRJRklFUiwgImlnbm9yaW5nIGFscmVhZHkgYWRkZWQgY3VlOiAiLCBjdWUu
Z2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAgICAgICAgSU5GT19M
T0coTE9HSURFTlRJRklFUiwgdnR0Q3VlLmdldCgpKTsKLQotICAgICAgICBhZGRDdWUoV1RGTW92
ZSh2dHRDdWUpKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgY3VlLmdldCgpKTsK
KyAgICAgICAgYWRkQ3VlKFdURk1vdmUoY3VlKSk7CiAgICAgfQogfQogCiB2b2lkIEluYmFuZEdl
bmVyaWNUZXh0VHJhY2s6Om5ld1JlZ2lvbnNQYXJzZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8
VlRUUmVnaW9uPj4gbmV3UmVnaW9uczsKLSAgICBwYXJzZXIoKS5nZXROZXdSZWdpb25zKG5ld1Jl
Z2lvbnMpOwotCi0gICAgZm9yIChhdXRvJiByZWdpb24gOiBuZXdSZWdpb25zKSB7CisgICAgZm9y
IChhdXRvJiByZWdpb24gOiBwYXJzZXIoKS50YWtlUmVnaW9ucygpKSB7CiAgICAgICAgIHJlZ2lv
bi0+c2V0VHJhY2sodGhpcyk7Ci0gICAgICAgIHJlZ2lvbnMoKS0+YWRkKHJlZ2lvbi5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgcmVnaW9ucygpLT5hZGQoV1RGTW92ZShyZWdpb24pKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kR2Vu
ZXJpY1RleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmlj
VGV4dFRyYWNrLmgKaW5kZXggYjFmNDMwYzVhZjQwY2IwNDJjOTgyNDE4YzFkYzIxODY1M2UzNTE4
NC4uZmFjM2RjNjBkZWVjYTNmM2UxNjA0ZDJiYTM0N2EyMzYyMTViOTNkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmgKQEAgLTUz
LDExICs1MywxMSBAQCBwcml2YXRlOgogY2xhc3MgSW5iYW5kR2VuZXJpY1RleHRUcmFjayBmaW5h
bCA6IHB1YmxpYyBJbmJhbmRUZXh0VHJhY2ssIHByaXZhdGUgV2ViVlRUUGFyc2VyQ2xpZW50IHsK
ICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEluYmFuZEdlbmVyaWNUZXh0VHJhY2spOwogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8SW5iYW5kR2VuZXJpY1RleHRUcmFjaz4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlJik7CisgICAgc3RhdGljIFJlZjxJbmJhbmRHZW5lcmljVGV4dFRyYWNrPiBjcmVhdGUoRG9j
dW1lbnQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlJik7CiAgICAg
dmlydHVhbCB+SW5iYW5kR2VuZXJpY1RleHRUcmFjaygpOwogCiBwcml2YXRlOgotICAgIEluYmFu
ZEdlbmVyaWNUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFRleHRUcmFja0NsaWVu
dCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsKKyAgICBJbmJhbmRHZW5lcmljVGV4dFRyYWNr
KERvY3VtZW50JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwog
CiAgICAgdm9pZCBhZGRHZW5lcmljQ3VlKEluYmFuZEdlbmVyaWNDdWUmKSBmaW5hbDsKICAgICB2
b2lkIHVwZGF0ZUdlbmVyaWNDdWUoSW5iYW5kR2VuZXJpY0N1ZSYpIGZpbmFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCmluZGV4IDZlODdlYTE4MWQz
OTc4ZjE4N2VhOTY4MjhjZTllZDg1ZTMyOGU0ZDcuLjg1ZjI4ZDFjZjMwNmFlMDI2YTNmZGRlYzU3
ZDMzNzZjNDg0YjAwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRl
eHRUcmFjay5jcHAKQEAgLTM5LDIyICszOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbmJhbmRUZXh0VHJhY2spOwogCi1SZWY8SW5iYW5k
VGV4dFRyYWNrPiBJbmJhbmRUZXh0VHJhY2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBUZXh0VHJhY2tDbGllbnQmIGNsaWVudCwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSYgdHJhY2tQcml2YXRlKQorUmVmPEluYmFuZFRleHRUcmFjaz4gSW5iYW5kVGV4dFRyYWNrOjpj
cmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBUZXh0VHJhY2tDbGllbnQmIGNsaWVudCwgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2YXRlKQogewogICAgIHN3aXRjaCAodHJhY2tQcml2
YXRlLmN1ZUZvcm1hdCgpKSB7CiAgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpDdWVG
b3JtYXQ6OkRhdGE6Ci0gICAgICAgIHJldHVybiBJbmJhbmREYXRhVGV4dFRyYWNrOjpjcmVhdGUo
Y29udGV4dCwgY2xpZW50LCB0cmFja1ByaXZhdGUpOworICAgICAgICByZXR1cm4gSW5iYW5kRGF0
YVRleHRUcmFjazo6Y3JlYXRlKGRvY3VtZW50LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSk7CiAgICAg
Y2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpDdWVGb3JtYXQ6OkdlbmVyaWM6Ci0gICAgICAg
IHJldHVybiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjpjcmVhdGUoY29udGV4dCwgY2xpZW50LCB0
cmFja1ByaXZhdGUpOworICAgICAgICByZXR1cm4gSW5iYW5kR2VuZXJpY1RleHRUcmFjazo6Y3Jl
YXRlKGRvY3VtZW50LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSk7CiAgICAgY2FzZSBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlOjpDdWVGb3JtYXQ6OldlYlZUVDoKLSAgICAgICAgcmV0dXJuIEluYmFuZFdl
YlZUVFRleHRUcmFjazo6Y3JlYXRlKGNvbnRleHQsIGNsaWVudCwgdHJhY2tQcml2YXRlKTsKKyAg
ICAgICAgcmV0dXJuIEluYmFuZFdlYlZUVFRleHRUcmFjazo6Y3JlYXRlKGRvY3VtZW50LCBjbGll
bnQsIHRyYWNrUHJpdmF0ZSk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBJbmJhbmREYXRhVGV4dFRyYWNrOjpjcmVhdGUoY29udGV4dCwgY2xpZW50LCB0cmFj
a1ByaXZhdGUpOworICAgIHJldHVybiBJbmJhbmREYXRhVGV4dFRyYWNrOjpjcmVhdGUoZG9jdW1l
bnQsIGNsaWVudCwgdHJhY2tQcml2YXRlKTsKIH0KIAotSW5iYW5kVGV4dFRyYWNrOjpJbmJhbmRU
ZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50
JiBjbGllbnQsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKLSAgICA6IFRl
eHRUcmFjaygmY29udGV4dCwgJmNsaWVudCwgZW1wdHlBdG9tKCksIHRyYWNrUHJpdmF0ZS5pZCgp
LCB0cmFja1ByaXZhdGUubGFiZWwoKSwgdHJhY2tQcml2YXRlLmxhbmd1YWdlKCksIEluQmFuZCkK
K0luYmFuZFRleHRUcmFjazo6SW5iYW5kVGV4dFRyYWNrKERvY3VtZW50JiBkb2N1bWVudCwgVGV4
dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0
ZSkKKyAgICA6IFRleHRUcmFjaygmZG9jdW1lbnQsICZjbGllbnQsIGVtcHR5QXRvbSgpLCB0cmFj
a1ByaXZhdGUuaWQoKSwgdHJhY2tQcml2YXRlLmxhYmVsKCksIHRyYWNrUHJpdmF0ZS5sYW5ndWFn
ZSgpLCBJbkJhbmQpCiAgICAgLCBtX3ByaXZhdGUodHJhY2tQcml2YXRlKQogewogICAgIG1fcHJp
dmF0ZS0+c2V0Q2xpZW50KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9JbmJhbmRUZXh0VHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5k
VGV4dFRyYWNrLmgKaW5kZXggMzBmYzI1MjdmMDUyYjQ3ZjgwNDdkMTYyNzkyZmU3ZDdhYmYyOTk1
YS4uZGRjYjhhMDIzOWIwZmMwZTA3Mzc3MjBhOWFmMDRjM2NmMmI4MmNkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oCkBAIC0zNSw3ICszNSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEluYmFuZFRleHRUcmFjayA6IHB1YmxpYyBUZXh0VHJh
Y2ssIHByaXZhdGUgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudCB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbmJhbmRUZXh0VHJhY2spOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
SW5iYW5kVGV4dFRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFRleHRUcmFj
a0NsaWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsKKyAgICBzdGF0aWMgUmVmPEluYmFu
ZFRleHRUcmFjaz4gY3JlYXRlKERvY3VtZW50JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZSYpOwogICAgIHZpcnR1YWwgfkluYmFuZFRleHRUcmFjaygpOwogCiAgICAg
Ym9vbCBpc0Nsb3NlZENhcHRpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC01NSw3ICs1NSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5iYW5kVGV4dFRyYWNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlJik7CisgICAgSW5iYW5kVGV4dFRyYWNrKERvY3VtZW50JiwgVGV4dFRyYWNrQ2xpZW50Jiwg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwogCiAgICAgdm9pZCBzZXRNb2RlSW50ZXJuYWwoTW9k
ZSk7CiAgICAgdm9pZCB1cGRhdGVLaW5kRnJvbVByaXZhdGUoKTsKQEAgLTczLDggKzczLDggQEAg
cHJpdmF0ZToKIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQogICAgIHZvaWQgYWRkRGF0YUN1
ZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmLCBSZWY8U2VyaWFsaXplZFBsYXRm
b3JtRGF0YUN1ZT4mJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQotICAgIHZvaWQgdXBkYXRlRGF0YUN1ZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBN
ZWRpYVRpbWUmLCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJikgb3ZlcnJpZGUgIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KLSAgICB2b2lkIHJlbW92ZURhdGFDdWUoY29uc3QgTWVkaWFUaW1l
JiwgY29uc3QgTWVkaWFUaW1lJiwgU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZSYpIG92ZXJyaWRl
ICB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCB1cGRhdGVEYXRhQ3VlKGNvbnN0
IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYsIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWUm
KSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCByZW1vdmVEYXRh
Q3VlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYsIFNlcmlhbGl6ZWRQbGF0Zm9y
bURhdGFDdWUmKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAjZW5kaWYKIAog
ICAgIHZvaWQgYWRkR2VuZXJpY0N1ZShJbmJhbmRHZW5lcmljQ3VlJikgb3ZlcnJpZGUgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9JbmJhbmRXZWJWVFRUZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmRXZWJWVFRUZXh0VHJhY2suY3BwCmluZGV4IDdlNzIzMzJmMjFjZDk4Y2ViY2M5ZTMzNDRi
NzgwNjA2NzVmODE2NDkuLmUxZjY0ODVhNTI1OWYxN2RlNDY3ZDVmNDc2MTkxZTllYjg3ZmU0OTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kV2ViVlRUVGV4dFRy
YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFdlYlZUVFRleHRU
cmFjay5jcHAKQEAgLTM5LDE0ICszOSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChJbmJhbmRXZWJWVFRUZXh0VHJhY2spOwogCi1pbmxpbmUg
SW5iYW5kV2ViVlRUVGV4dFRyYWNrOjpJbmJhbmRXZWJWVFRUZXh0VHJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50JiBjbGllbnQsIEluYmFuZFRleHRU
cmFja1ByaXZhdGUmIHRyYWNrUHJpdmF0ZSkKLSAgICA6IEluYmFuZFRleHRUcmFjayhjb250ZXh0
LCBjbGllbnQsIHRyYWNrUHJpdmF0ZSkKK2lubGluZSBJbmJhbmRXZWJWVFRUZXh0VHJhY2s6Oklu
YmFuZFdlYlZUVFRleHRUcmFjayhEb2N1bWVudCYgZG9jdW1lbnQsIFRleHRUcmFja0NsaWVudCYg
Y2xpZW50LCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlJiB0cmFja1ByaXZhdGUpCisgICAgOiBJbmJh
bmRUZXh0VHJhY2soZG9jdW1lbnQsIGNsaWVudCwgdHJhY2tQcml2YXRlKQogewogfQogCi1SZWY8
SW5iYW5kVGV4dFRyYWNrPiBJbmJhbmRXZWJWVFRUZXh0VHJhY2s6OmNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBUZXh0VHJhY2tDbGllbnQmIGNsaWVudCwgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2YXRlKQorUmVmPEluYmFuZFRleHRUcmFjaz4gSW5iYW5k
V2ViVlRUVGV4dFRyYWNrOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBUZXh0VHJhY2tDbGll
bnQmIGNsaWVudCwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYgdHJhY2tQcml2YXRlKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEluYmFuZFdlYlZUVFRleHRUcmFjayhjb250ZXh0LCBjbGll
bnQsIHRyYWNrUHJpdmF0ZSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluYmFuZFdlYlZU
VFRleHRUcmFjayhkb2N1bWVudCwgY2xpZW50LCB0cmFja1ByaXZhdGUpKTsKIH0KIAogSW5iYW5k
V2ViVlRUVGV4dFRyYWNrOjp+SW5iYW5kV2ViVlRUVGV4dFRyYWNrKCkgPSBkZWZhdWx0OwpAQCAt
NTQsNyArNTQsNyBAQCBJbmJhbmRXZWJWVFRUZXh0VHJhY2s6On5JbmJhbmRXZWJWVFRUZXh0VHJh
Y2soKSA9IGRlZmF1bHQ7CiBXZWJWVFRQYXJzZXImIEluYmFuZFdlYlZUVFRleHRUcmFjazo6cGFy
c2VyKCkKIHsKICAgICBpZiAoIW1fd2ViVlRUUGFyc2VyKQotICAgICAgICBtX3dlYlZUVFBhcnNl
ciA9IG1ha2VVbmlxdWU8V2ViVlRUUGFyc2VyPihzdGF0aWNfY2FzdDxXZWJWVFRQYXJzZXJDbGll
bnQqPih0aGlzKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgbV93ZWJWVFRQ
YXJzZXIgPSBtYWtlVW5pcXVlPFdlYlZUVFBhcnNlcj4oc3RhdGljX2Nhc3Q8V2ViVlRUUGFyc2Vy
Q2xpZW50Jj4oKnRoaXMpLCBkb2N1bWVudCgpKTsKICAgICByZXR1cm4gKm1fd2ViVlRUUGFyc2Vy
OwogfQogCkBAIC03MCwyOCArNzAsMjIgQEAgdm9pZCBJbmJhbmRXZWJWVFRUZXh0VHJhY2s6OnBh
cnNlV2ViVlRUQ3VlRGF0YShJU09XZWJWVFRDdWUmJiBjdWVEYXRhKQogCiB2b2lkIEluYmFuZFdl
YlZUVFRleHRUcmFjazo6bmV3Q3Vlc1BhcnNlZCgpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJW
VFRDdWVEYXRhPj4gY3VlczsKLSAgICBwYXJzZXIoKS5nZXROZXdDdWVzKGN1ZXMpOwotICAgIGZv
ciAoYXV0byYgY3VlRGF0YSA6IGN1ZXMpIHsKLSAgICAgICAgYXV0byB2dHRDdWUgPSBWVFRDdWU6
OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqY3VlRGF0YSk7Ci0gICAgICAgIGlm
IChoYXNDdWUodnR0Q3VlLnB0cigpLCBUZXh0VHJhY2tDdWU6Oklnbm9yZUR1cmF0aW9uKSkgewot
ICAgICAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgImlnbm9yaW5nIGFscmVhZHkgYWRk
ZWQgY3VlOiAiLCB2dHRDdWUuZ2V0KCkpOworICAgIGZvciAoYXV0byYgY3VlRGF0YSA6IHBhcnNl
cigpLnRha2VDdWVzKCkpIHsKKyAgICAgICAgYXV0byBjdWUgPSBWVFRDdWU6OmNyZWF0ZShkb2N1
bWVudCgpLCBjdWVEYXRhKTsKKyAgICAgICAgaWYgKGhhc0N1ZShjdWUsIFRleHRUcmFja0N1ZTo6
SWdub3JlRHVyYXRpb24pKSB7CisgICAgICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAi
aWdub3JpbmcgYWxyZWFkeSBhZGRlZCBjdWU6ICIsIGN1ZS5nZXQoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCB2dHRD
dWUuZ2V0KCkpOwotCi0gICAgICAgIGFkZEN1ZShXVEZNb3ZlKHZ0dEN1ZSkpOworICAgICAgICBJ
TkZPX0xPRyhMT0dJREVOVElGSUVSLCBjdWUuZ2V0KCkpOworICAgICAgICBhZGRDdWUoV1RGTW92
ZShjdWUpKTsKICAgICB9CiB9CiAgICAgCiB2b2lkIEluYmFuZFdlYlZUVFRleHRUcmFjazo6bmV3
UmVnaW9uc1BhcnNlZCgpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxWVFRSZWdpb24+PiBuZXdSZWdp
b25zOwotICAgIHBhcnNlcigpLmdldE5ld1JlZ2lvbnMobmV3UmVnaW9ucyk7Ci0gICAgZm9yIChh
dXRvJiByZWdpb24gOiBuZXdSZWdpb25zKSB7CisgICAgZm9yIChhdXRvJiByZWdpb24gOiBwYXJz
ZXIoKS50YWtlUmVnaW9ucygpKSB7CiAgICAgICAgIHJlZ2lvbi0+c2V0VHJhY2sodGhpcyk7Ci0g
ICAgICAgIHJlZ2lvbnMoKS0+YWRkKHJlZ2lvbi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
cmVnaW9ucygpLT5hZGQoV1RGTW92ZShyZWdpb24pKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFdlYlZUVFRleHRUcmFjay5oCmluZGV4IGFjMmI4
ZDU4ZTY4MzM2ZDZlMzcyZTY3MzliZjU5NGZmMTc3ZWEzODAuLjE0MTVhMmFhZTJmN2ZlZTQyMTI3
Y2FhYWFiOTAwMzExNzAxNzE3YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9JbmJhbmRXZWJWVFRUZXh0VHJhY2suaApAQCAtMzYsMTEgKzM2LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEluYmFuZFdlYlZUVFRleHRUcmFjayBmaW5hbCA6IHB1YmxpYyBJbmJh
bmRUZXh0VHJhY2ssIHByaXZhdGUgV2ViVlRUUGFyc2VyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKEluYmFuZFdlYlZUVFRleHRUcmFjayk7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxJbmJhbmRUZXh0VHJhY2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVGV4
dFRyYWNrQ2xpZW50JiwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOworICAgIHN0YXRpYyBSZWY8
SW5iYW5kVGV4dFRyYWNrPiBjcmVhdGUoRG9jdW1lbnQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlJik7CiAgICAgdmlydHVhbCB+SW5iYW5kV2ViVlRUVGV4dFRyYWNr
KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5iYW5kV2ViVlRUVGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlJik7Cisg
ICAgSW5iYW5kV2ViVlRUVGV4dFRyYWNrKERvY3VtZW50JiwgVGV4dFRyYWNrQ2xpZW50JiwgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwogCiAgICAgV2ViVlRUUGFyc2VyJiBwYXJzZXIoKTsKICAg
ICB2b2lkIHBhcnNlV2ViVlRUQ3VlRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJs
ZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRy
YWNrLmNwcAppbmRleCBjZWIwMmNmNGJlNDUzYzBkNjQxOTI3OWZkNDdlOWU1NDliNjY2NTg5Li5i
MjUwMDIwMDZmNWRkYzFmOTc0ZWZhZmI1MzBlYTQwODgxMzc0ZTBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiAr
NDYsMTEgQEAgTG9hZGFibGVUZXh0VHJhY2s6OkxvYWRhYmxlVGV4dFRyYWNrKEhUTUxUcmFja0Vs
ZW1lbnQmIHRyYWNrLCBjb25zdCBTdHJpbmcmIGtpbmQKIHsKIH0KIAorUmVmPExvYWRhYmxlVGV4
dFRyYWNrPiBMb2FkYWJsZVRleHRUcmFjazo6Y3JlYXRlKEhUTUxUcmFja0VsZW1lbnQmIHRyYWNr
LCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYg
bGFuZ3VhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTG9hZGFibGVUZXh0VHJhY2so
dHJhY2ssIGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkpOworfQorCiB2b2lkIExvYWRhYmxlVGV4dFRy
YWNrOjpzY2hlZHVsZUxvYWQoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVybCA9PSBtX3Vy
bCkKQEAgLTgzLDcgKzg4LDcgQEAgdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6bG9hZFRpbWVyRmly
ZWQoKQogICAgIC8vIDQuIERvd25sb2FkOiBJZiBVUkwgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcs
IHBlcmZvcm0gYSBwb3RlbnRpYWxseSBDT1JTLWVuYWJsZWQgZmV0Y2ggb2YgVVJMLCB3aXRoIHRo
ZQogICAgIC8vIG1vZGUgYmVpbmcgdGhlIHN0YXRlIG9mIHRoZSBtZWRpYSBlbGVtZW50J3MgY3Jv
c3NvcmlnaW4gY29udGVudCBhdHRyaWJ1dGUsIHRoZSBvcmlnaW4gYmVpbmcgdGhlCiAgICAgLy8g
b3JpZ2luIG9mIHRoZSBtZWRpYSBlbGVtZW50J3MgRG9jdW1lbnQsIGFuZCB0aGUgZGVmYXVsdCBv
cmlnaW4gYmVoYXZpb3VyIHNldCB0byBmYWlsLgotICAgIG1fbG9hZGVyID0gbWFrZVVuaXF1ZTxU
ZXh0VHJhY2tMb2FkZXI+KHN0YXRpY19jYXN0PFRleHRUcmFja0xvYWRlckNsaWVudCY+KCp0aGlz
KSwgc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+KCZtX3RyYWNrRWxlbWVudC0+
ZG9jdW1lbnQoKSkpOworICAgIG1fbG9hZGVyID0gbWFrZVVuaXF1ZTxUZXh0VHJhY2tMb2FkZXI+
KHN0YXRpY19jYXN0PFRleHRUcmFja0xvYWRlckNsaWVudCY+KCp0aGlzKSwgbV90cmFja0VsZW1l
bnQtPmRvY3VtZW50KCkpOwogICAgIGlmICghbV9sb2FkZXItPmxvYWQobV91cmwsICptX3RyYWNr
RWxlbWVudCkpCiAgICAgICAgIG1fdHJhY2tFbGVtZW50LT5kaWRDb21wbGV0ZUxvYWQoSFRNTFRy
YWNrRWxlbWVudDo6RmFpbHVyZSk7CiB9CkBAIC0xMjAsMTMgKzEyNSw5IEBAIHZvaWQgTG9hZGFi
bGVUZXh0VHJhY2s6OmN1ZUxvYWRpbmdDb21wbGV0ZWQoVGV4dFRyYWNrTG9hZGVyJiBsb2FkZXIs
IGJvb2wgbG9hZGluCiB2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpuZXdSZWdpb25zQXZhaWxhYmxl
KFRleHRUcmFja0xvYWRlciYgbG9hZGVyKQogewogICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBt
X2xvYWRlci5nZXQoKSA9PSAmbG9hZGVyKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8VlRUUmVnaW9u
Pj4gbmV3UmVnaW9uczsKLSAgICBtX2xvYWRlci0+Z2V0TmV3UmVnaW9ucyhuZXdSZWdpb25zKTsK
LQotICAgIGZvciAoYXV0byYgbmV3UmVnaW9uIDogbmV3UmVnaW9ucykgeworICAgIGZvciAoYXV0
byYgbmV3UmVnaW9uIDogbV9sb2FkZXItPmdldE5ld1JlZ2lvbnMoKSkgewogICAgICAgICBuZXdS
ZWdpb24tPnNldFRyYWNrKHRoaXMpOwotICAgICAgICByZWdpb25zKCktPmFkZChuZXdSZWdpb24u
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJlZ2lvbnMoKS0+YWRkKFdURk1vdmUobmV3UmVn
aW9uKSk7CiAgICAgfQogfQogCkBAIC0xNjEsNiArMTYyLDExIEBAIHNpemVfdCBMb2FkYWJsZVRl
eHRUcmFjazo6dHJhY2tFbGVtZW50SW5kZXgoKQogICAgIHJldHVybiAwOwogfQogCitib29sIExv
YWRhYmxlVGV4dFRyYWNrOjppc0RlZmF1bHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYWNr
RWxlbWVudCAmJiBtX3RyYWNrRWxlbWVudC0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihkZWZhdWx0QXR0cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNr
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgKaW5kZXgg
ZGM0NzEyNDMwODdkNjc1MmNiZDdjZGE2NTVhNDk2YjU2YTQ1MzlkYy4uM2QyMjNhMDM1OGMwOWVi
Y2UzOTQ0NDI1YThmYWVlMTJmMjI2YWFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svTG9hZGFibGVUZXh0VHJhY2suaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTAgKzM4LDcgQEAgY2xhc3MgSFRNTFRyYWNr
RWxlbWVudDsKIGNsYXNzIExvYWRhYmxlVGV4dFRyYWNrIGZpbmFsIDogcHVibGljIFRleHRUcmFj
aywgcHJpdmF0ZSBUZXh0VHJhY2tMb2FkZXJDbGllbnQgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoTG9hZGFibGVUZXh0VHJhY2spOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TG9hZGFi
bGVUZXh0VHJhY2s+IGNyZWF0ZShIVE1MVHJhY2tFbGVtZW50JiB0cmFjaywgY29uc3QgU3RyaW5n
JiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTG9hZGFibGVUZXh0VHJhY2sodHJhY2ss
IGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPExvYWRhYmxl
VGV4dFRyYWNrPiBjcmVhdGUoSFRNTFRyYWNrRWxlbWVudCYsIGNvbnN0IFN0cmluZyYga2luZCwg
Y29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CiAKICAgICB2b2lk
IHNjaGVkdWxlTG9hZChjb25zdCBVUkwmKTsKIApAQCAtNDksOCArNDYsNiBAQCBwdWJsaWM6CiAg
ICAgSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV90cmFj
a0VsZW1lbnQ7IH0KICAgICB2b2lkIGNsZWFyRWxlbWVudCgpIHsgbV90cmFja0VsZW1lbnQgPSBu
dWxscHRyOyB9CiAKLSAgICB2b2lkIHNldElzRGVmYXVsdChib29sIGlzRGVmYXVsdCkgZmluYWwg
eyBtX2lzRGVmYXVsdCA9IGlzRGVmYXVsdDsgfQotCiBwcml2YXRlOgogICAgIExvYWRhYmxlVGV4
dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmlu
ZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpOwogCkBAIC02MCw3ICs1NSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBuZXdTdHlsZVNoZWV0c0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIm
KSBmaW5hbDsKIAogICAgIEF0b21TdHJpbmcgaWQoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlz
RGVmYXVsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNEZWZhdWx0OyB9CisgICAgYm9vbCBp
c0RlZmF1bHQoKSBjb25zdCBmaW5hbDsKICAgICBFbGVtZW50KiBlbGVtZW50KCkgZmluYWw7CiAK
ICAgICB2b2lkIGxvYWRUaW1lckZpcmVkKCk7CkBAIC03Myw3ICs2OCw2IEBAIHByaXZhdGU6CiAg
ICAgVGltZXIgbV9sb2FkVGltZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRUcmFja0xvYWRl
cj4gbV9sb2FkZXI7CiAgICAgVVJMIG1fdXJsOwotICAgIGJvb2wgbV9pc0RlZmF1bHQgeyBmYWxz
ZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2suY3BwCmluZGV4IDNmZTA1NDAyZTQ1OTY3MzdiYTcwNGM1ZTE4MzgzOGU1NzEw
ZTlmMWUuLmM2NWExMTg3OWU2NTEzMjM5NTEzMTQzNzI4MDdiY2NkNmUxZmNjNjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKQEAgLTg2LDE2ICs4NiwxNiBAQCBzdGF0
aWMgY29uc3QgQXRvbVN0cmluZyYgZm9yY2VkS2V5d29yZCgpCiAgICAgcmV0dXJuIGZvcmNlZDsK
IH0KIAotVGV4dFRyYWNrKiBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpCitUZXh0VHJh
Y2smIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkKIHsKICAgICBzdGF0aWMgVGV4dFRy
YWNrJiBvZmYgPSBUZXh0VHJhY2s6OmNyZWF0ZShudWxscHRyLCBudWxscHRyLCAib2ZmIG1lbnUg
aXRlbSIsIGVtcHR5QXRvbSgpLCBlbXB0eUF0b20oKSwgZW1wdHlBdG9tKCkpLmxlYWtSZWYoKTsK
LSAgICByZXR1cm4gJm9mZjsKKyAgICByZXR1cm4gb2ZmOwogfQogCi1UZXh0VHJhY2sqIFRleHRU
cmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkKK1RleHRUcmFjayYgVGV4dFRyYWNrOjpj
YXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKQogewogICAgIHN0YXRpYyBUZXh0VHJhY2smIGF1dG9t
YXRpYyA9IFRleHRUcmFjazo6Y3JlYXRlKG51bGxwdHIsIG51bGxwdHIsICJhdXRvbWF0aWMgbWVu
dSBpdGVtIiwgZW1wdHlBdG9tKCksIGVtcHR5QXRvbSgpLCBlbXB0eUF0b20oKSkubGVha1JlZigp
OwotICAgIHJldHVybiAmYXV0b21hdGljOworICAgIHJldHVybiBhdXRvbWF0aWM7CiB9CiAKIFRl
eHRUcmFjazo6VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFRleHRU
cmFja0NsaWVudCogY2xpZW50LCBjb25zdCBBdG9tU3RyaW5nJiBraW5kLCBjb25zdCBBdG9tU3Ry
aW5nJiBpZCwgY29uc3QgQXRvbVN0cmluZyYgbGFiZWwsIGNvbnN0IEF0b21TdHJpbmcmIGxhbmd1
YWdlLCBUZXh0VHJhY2tUeXBlIHR5cGUpCkBAIC0xMTYsNiArMTE2LDExIEBAIFRleHRUcmFjazo6
VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFRleHRUcmFja0NsaWVu
dCogY2xpZW50LCBjCiAgICAgICAgIG1fa2luZCA9IEtpbmQ6Ok1ldGFkYXRhOwogfQogCitSZWY8
VGV4dFRyYWNrPiBUZXh0VHJhY2s6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFj
a0NsaWVudCogY2xpZW50LCBjb25zdCBBdG9tU3RyaW5nJiBraW5kLCBjb25zdCBBdG9tU3RyaW5n
JiBpZCwgY29uc3QgQXRvbVN0cmluZyYgbGFiZWwsIGNvbnN0IEF0b21TdHJpbmcmIGxhbmd1YWdl
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRUcmFjayhkb2N1bWVudCwgY2xpZW50
LCBraW5kLCBpZCwgbGFiZWwsIGxhbmd1YWdlLCBBZGRUcmFjaykpOworfQorCiBUZXh0VHJhY2s6
On5UZXh0VHJhY2soKQogewogICAgIGlmIChtX2N1ZXMpIHsKQEAgLTEzMCw2ICsxMzUsMTIgQEAg
VGV4dFRyYWNrOjp+VGV4dFRyYWNrKCkKICAgICB9CiB9CiAKK0RvY3VtZW50JiBUZXh0VHJhY2s6
OmRvY3VtZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOworfQorCiBib29sIFRleHRUcmFjazo6ZW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fbW9kZSAhPSBNb2RlOjpEaXNhYmxlZDsKQEAgLTM4MCwxMSArMzkxLDggQEAgVlRUUmVnaW9u
TGlzdCogVGV4dFRyYWNrOjpyZWdpb25zKCkKICAgICByZXR1cm4gJmVuc3VyZVZUVFJlZ2lvbkxp
c3QoKTsKIH0KIAotdm9pZCBUZXh0VHJhY2s6OmFkZFJlZ2lvbihSZWZQdHI8VlRUUmVnaW9uPiYm
IHJlZ2lvbikKK3ZvaWQgVGV4dFRyYWNrOjphZGRSZWdpb24oUmVmPFZUVFJlZ2lvbj4mJiByZWdp
b24pCiB7Ci0gICAgaWYgKCFyZWdpb24pCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1dG8mIHJl
Z2lvbkxpc3QgPSBlbnN1cmVWVFRSZWdpb25MaXN0KCk7CiAKICAgICAvLyAxLiBJZiB0aGUgZ2l2
ZW4gcmVnaW9uIGlzIGluIGEgdGV4dCB0cmFjayBsaXN0IG9mIHJlZ2lvbnMsIHRoZW4gcmVtb3Zl
CkBAIC0zOTksNTEgKzQwNyw0OCBAQCB2b2lkIFRleHRUcmFjazo6YWRkUmVnaW9uKFJlZlB0cjxW
VFRSZWdpb24+JiYgcmVnaW9uKQogICAgIC8vIGF0dHJpYnV0ZXMgd2l0aCB0aG9zZSBvZiByZWdp
b24uCiAgICAgYXV0byBleGlzdGluZ1JlZ2lvbiA9IG1ha2VSZWZQdHIocmVnaW9uTGlzdC5nZXRS
ZWdpb25CeUlkKHJlZ2lvbi0+aWQoKSkpOwogICAgIGlmIChleGlzdGluZ1JlZ2lvbikgewotICAg
ICAgICBleGlzdGluZ1JlZ2lvbi0+dXBkYXRlUGFyYW1ldGVyc0Zyb21SZWdpb24oKnJlZ2lvbik7
CisgICAgICAgIGV4aXN0aW5nUmVnaW9uLT51cGRhdGVQYXJhbWV0ZXJzRnJvbVJlZ2lvbihyZWdp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlOiBhZGQgcmVn
aW9uIHRvIHRoZSBtZXRob2QncyBUZXh0VHJhY2sgb2JqZWN0J3MgdGV4dCB0cmFjayBsaXN0IG9m
IHJlZ2lvbnMuCiAgICAgcmVnaW9uLT5zZXRUcmFjayh0aGlzKTsKLSAgICByZWdpb25MaXN0LmFk
ZChyZWdpb24ucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmVnaW9uTGlzdC5hZGQoV1RGTW92ZShy
ZWdpb24pKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gVGV4dFRyYWNrOjpyZW1vdmVSZWdpb24o
VlRUUmVnaW9uKiByZWdpb24pCitFeGNlcHRpb25Pcjx2b2lkPiBUZXh0VHJhY2s6OnJlbW92ZVJl
Z2lvbihWVFRSZWdpb24mIHJlZ2lvbikKIHsKLSAgICBpZiAoIXJlZ2lvbikKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQogICAgIC8vIDEuIElmIHRoZSBnaXZlbiByZWdpb24gaXMgbm90IGN1cnJlbnRs
eSBsaXN0ZWQgaW4gdGhlIG1ldGhvZCdzIFRleHRUcmFjawogICAgIC8vIG9iamVjdCdzIHRleHQg
dHJhY2sgbGlzdCBvZiByZWdpb25zLCB0aGVuIHRocm93IGEgTm90Rm91bmRFcnJvciBleGNlcHRp
b24uCi0gICAgaWYgKHJlZ2lvbi0+dHJhY2soKSAhPSB0aGlzKQorICAgIGlmIChyZWdpb24udHJh
Y2soKSAhPSB0aGlzKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9
OwogCiAgICAgQVNTRVJUKG1fcmVnaW9ucyk7Ci0gICAgbV9yZWdpb25zLT5yZW1vdmUoKnJlZ2lv
bik7Ci0gICAgcmVnaW9uLT5zZXRUcmFjayhudWxscHRyKTsKKyAgICBtX3JlZ2lvbnMtPnJlbW92
ZShyZWdpb24pOworICAgIHJlZ2lvbi5zZXRUcmFjayhudWxscHRyKTsKICAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIFRleHRUcmFjazo6Y3VlV2lsbENoYW5nZShUZXh0VHJhY2tDdWUqIGN1ZSkK
K3ZvaWQgVGV4dFRyYWNrOjpjdWVXaWxsQ2hhbmdlKFRleHRUcmFja0N1ZSYgY3VlKQogewogICAg
IGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBjdWUgbWF5IG5l
ZWQgdG8gYmUgcmVwb3NpdGlvbmVkIGluIHRoZSBtZWRpYSBlbGVtZW50J3MgaW50ZXJ2YWwgdHJl
ZSwgbWF5IG5lZWQgdG8KICAgICAvLyBiZSByZS1yZW5kZXJlZCwgZXRjLCBzbyByZW1vdmUgaXQg
YmVmb3JlIHRoZSBtb2RpZmljYXRpb24uLi4KLSAgICBtX2NsaWVudC0+dGV4dFRyYWNrUmVtb3Zl
Q3VlKCp0aGlzLCAqY3VlKTsKKyAgICBtX2NsaWVudC0+dGV4dFRyYWNrUmVtb3ZlQ3VlKCp0aGlz
LCBjdWUpOwogfQogCi12b2lkIFRleHRUcmFjazo6Y3VlRGlkQ2hhbmdlKFRleHRUcmFja0N1ZSog
Y3VlKQordm9pZCBUZXh0VHJhY2s6OmN1ZURpZENoYW5nZShUZXh0VHJhY2tDdWUmIGN1ZSkKIHsK
ICAgICBpZiAoIW1fY2xpZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYWtlIHN1cmUg
dGhlIFRleHRUcmFja0N1ZUxpc3Qgb3JkZXIgaXMgdXAtdG8tZGF0ZS4KLSAgICBlbnN1cmVUZXh0
VHJhY2tDdWVMaXN0KCkudXBkYXRlQ3VlSW5kZXgoKmN1ZSk7CisgICAgZW5zdXJlVGV4dFRyYWNr
Q3VlTGlzdCgpLnVwZGF0ZUN1ZUluZGV4KGN1ZSk7CiAKICAgICAvLyAuLi4gYW5kIGFkZCBpdCBi
YWNrIGFnYWluLgotICAgIG1fY2xpZW50LT50ZXh0VHJhY2tBZGRDdWUoKnRoaXMsICpjdWUpOwor
ICAgIG1fY2xpZW50LT50ZXh0VHJhY2tBZGRDdWUoKnRoaXMsIGN1ZSk7CiB9CiAKIGludCBUZXh0
VHJhY2s6OnRyYWNrSW5kZXgoKQpAQCAtNDg1LDkgKzQ5MCw5IEBAIGludCBUZXh0VHJhY2s6OnRy
YWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MoKQogICAgIHJldHVybiBtX3JlbmRlcmVk
VHJhY2tJbmRleC52YWx1ZSgpOwogfQogCi1ib29sIFRleHRUcmFjazo6aGFzQ3VlKFRleHRUcmFj
a0N1ZSogY3VlLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVsZXMgbWF0Y2gpCitib29sIFRleHRU
cmFjazo6aGFzQ3VlKFRleHRUcmFja0N1ZSYgY3VlLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVs
ZXMgbWF0Y2gpCiB7Ci0gICAgaWYgKGN1ZS0+c3RhcnRNZWRpYVRpbWUoKSA8IE1lZGlhVGltZTo6
emVyb1RpbWUoKSB8fCBjdWUtPmVuZE1lZGlhVGltZSgpIDwgTWVkaWFUaW1lOjp6ZXJvVGltZSgp
KQorICAgIGlmIChjdWUuc3RhcnRNZWRpYVRpbWUoKSA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSB8
fCBjdWUuZW5kTWVkaWFUaW1lKCkgPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBpZiAoIW1fY3VlcyB8fCAhbV9jdWVzLT5sZW5ndGgoKSkK
QEAgLTUwOSw3ICs1MTQsNyBAQCBib29sIFRleHRUcmFjazo6aGFzQ3VlKFRleHRUcmFja0N1ZSog
Y3VlLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVsZXMgbWF0Y2gpCiAKICAgICAgICAgICAgIC8v
IElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY3VlIHdpdGggdGhlIHNhbWUgc3RhcnQgdGltZSwg
YmFjayB1cCB0byBmaXJzdCBvbmUgc28gd2UKICAgICAgICAgICAgIC8vIGNvbnNpZGVyIGFsbCBv
ZiB0aGVtLgotICAgICAgICAgICAgd2hpbGUgKHNlYXJjaFN0YXJ0ID49IDIgJiYgY3VlLT5oYXNF
cXVpdmFsZW50U3RhcnRUaW1lKCptX2N1ZXMtPml0ZW0oc2VhcmNoU3RhcnQgLSAyKSkpCisgICAg
ICAgICAgICB3aGlsZSAoc2VhcmNoU3RhcnQgPj0gMiAmJiBjdWUuaGFzRXF1aXZhbGVudFN0YXJ0
VGltZSgqbV9jdWVzLT5pdGVtKHNlYXJjaFN0YXJ0IC0gMikpKQogICAgICAgICAgICAgICAgIC0t
c2VhcmNoU3RhcnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgZmlyc3RDb21wYXJl
ID0gdHJ1ZTsKQEAgLTUyNCwxNyArNTI5LDE3IEBAIGJvb2wgVGV4dFRyYWNrOjpoYXNDdWUoVGV4
dFRyYWNrQ3VlKiBjdWUsIFRleHRUcmFja0N1ZTo6Q3VlTWF0Y2hSdWxlcyBtYXRjaCkKICAgICAg
ICAgICAgICAgICBpZiAoIWV4aXN0aW5nQ3VlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBpZiAoY3VlLT5zdGFydE1lZGlhVGltZSgpID4gKGV4
aXN0aW5nQ3VlLT5zdGFydE1lZGlhVGltZSgpICsgc3RhcnRUaW1lVmFyaWFuY2UoKSkpCisgICAg
ICAgICAgICAgICAgaWYgKGN1ZS5zdGFydE1lZGlhVGltZSgpID4gKGV4aXN0aW5nQ3VlLT5zdGFy
dE1lZGlhVGltZSgpICsgc3RhcnRUaW1lVmFyaWFuY2UoKSkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0N1ZS0+aXNFcXVh
bCgqY3VlLCBtYXRjaCkpCisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ3VlLT5pc0VxdWFs
KGN1ZSwgbWF0Y2gpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IGluZGV4ID0gKHNlYXJj
aFN0YXJ0ICsgc2VhcmNoRW5kKSAvIDI7CiAgICAgICAgIGV4aXN0aW5nQ3VlID0gbV9jdWVzLT5p
dGVtKGluZGV4KTsKLSAgICAgICAgaWYgKChjdWUtPnN0YXJ0TWVkaWFUaW1lKCkgKyBzdGFydFRp
bWVWYXJpYW5jZSgpKSA8IGV4aXN0aW5nQ3VlLT5zdGFydE1lZGlhVGltZSgpIHx8IChtYXRjaCAh
PSBUZXh0VHJhY2tDdWU6Oklnbm9yZUR1cmF0aW9uICYmIGN1ZS0+aGFzRXF1aXZhbGVudFN0YXJ0
VGltZSgqZXhpc3RpbmdDdWUpICYmIGN1ZS0+ZW5kTWVkaWFUaW1lKCkgPiBleGlzdGluZ0N1ZS0+
ZW5kTWVkaWFUaW1lKCkpKQorICAgICAgICBpZiAoKGN1ZS5zdGFydE1lZGlhVGltZSgpICsgc3Rh
cnRUaW1lVmFyaWFuY2UoKSkgPCBleGlzdGluZ0N1ZS0+c3RhcnRNZWRpYVRpbWUoKSB8fCAobWF0
Y2ggIT0gVGV4dFRyYWNrQ3VlOjpJZ25vcmVEdXJhdGlvbiAmJiBjdWUuaGFzRXF1aXZhbGVudFN0
YXJ0VGltZSgqZXhpc3RpbmdDdWUpICYmIGN1ZS5lbmRNZWRpYVRpbWUoKSA+IGV4aXN0aW5nQ3Vl
LT5lbmRNZWRpYVRpbWUoKSkpCiAgICAgICAgICAgICBzZWFyY2hFbmQgPSBpbmRleDsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc2VhcmNoU3RhcnQgPSBpbmRleCArIDE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suaAppbmRleCAwNzM2NTJmNDQ0NTE1ZThkOGEwY2RlZWIyMWMw
NmM0MzY3NzExMmU3Li40ZmU0NmZlMmI0OGM5OGMyZjEyOGJlYjk3NmQ1ZWJkNzgzNDViYzYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKQEAgLTU0LDI4ICs1NCwxNyBAQCBw
dWJsaWM6CiBjbGFzcyBUZXh0VHJhY2sgOiBwdWJsaWMgVHJhY2tCYXNlLCBwdWJsaWMgRXZlbnRU
YXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsK
ICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFRleHRUcmFjayk7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxUZXh0VHJhY2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCwgY29uc3QgQXRvbVN0cmluZyYga2luZCwgY29uc3Qg
QXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25zdCBBdG9tU3RyaW5n
JiBsYW5ndWFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRUcmFj
ayhjb250ZXh0LCBjbGllbnQsIGtpbmQsIGlkLCBsYWJlbCwgbGFuZ3VhZ2UsIEFkZFRyYWNrKSk7
Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8VGV4dFRyYWNrPiBjcmVhdGUoRG9jdW1lbnQqLCBUZXh0
VHJhY2tDbGllbnQqLCBjb25zdCBBdG9tU3RyaW5nJiBraW5kLCBjb25zdCBBdG9tU3RyaW5nJiBp
ZCwgY29uc3QgQXRvbVN0cmluZyYgbGFiZWwsIGNvbnN0IEF0b21TdHJpbmcmIGxhbmd1YWdlKTsK
ICAgICB2aXJ0dWFsIH5UZXh0VHJhY2soKTsKIAotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2
ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVGV4dFRyYWNrRXZlbnRU
YXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAgIHN0YXRpYyBUZXh0
VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRlbSgpOwotICAgIHN0YXRpYyBUZXh0VHJhY2sqIGNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpOworICAgIHN0YXRpYyBUZXh0VHJhY2smIGNhcHRpb25NZW51
T2ZmSXRlbSgpOworICAgIHN0YXRpYyBUZXh0VHJhY2smIGNhcHRpb25NZW51QXV0b21hdGljSXRl
bSgpOwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHN1YnRpdGxlc0tleXdvcmQoKTsK
ICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkS2luZEtleXdvcmQoY29uc3QgQXRvbVN0cmluZyYpOwog
Ci0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGRpc2FibGVkS2V5d29yZCgpOwotICAgIHN0
YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBoaWRkZW5LZXl3b3JkKCk7Ci0gICAgc3RhdGljIGNvbnN0
IEF0b21TdHJpbmcmIHNob3dpbmdLZXl3b3JkKCk7Ci0KICAgICBlbnVtIGNsYXNzIEtpbmQgeyBT
dWJ0aXRsZXMsIENhcHRpb25zLCBEZXNjcmlwdGlvbnMsIENoYXB0ZXJzLCBNZXRhZGF0YSwgRm9y
Y2VkIH07CiAgICAgS2luZCBraW5kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLaW5kKEtpbmQpOwog
CiAgICAgS2luZCBraW5kRm9yQmluZGluZ3MoKSBjb25zdDsKICAgICB2b2lkIHNldEtpbmRGb3JC
aW5kaW5ncyhLaW5kKTsKQEAgLTk5LDE5ICs4OCwxNiBAQCBwdWJsaWM6CiAgICAgVGV4dFRyYWNr
Q3VlTGlzdCogY3Vlc0ludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9jdWVzLmdldCgpOyB9CiAK
ICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgb3ZlcnJpZGUgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0K
LSAgICBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKICAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBhZGRDdWUoUmVmPFRleHRUcmFja0N1ZT4mJik7CiAgICAgdmly
dHVhbCBFeGNlcHRpb25Pcjx2b2lkPiByZW1vdmVDdWUoVGV4dFRyYWNrQ3VlJik7CiAKLSAgICBi
b29sIGhhc0N1ZShUZXh0VHJhY2tDdWUqLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVsZXMgPSBU
ZXh0VHJhY2tDdWU6Ok1hdGNoQWxsRmllbGRzKTsKLQogICAgIFZUVFJlZ2lvbkxpc3QqIHJlZ2lv
bnMoKTsKLSAgICB2b2lkIGFkZFJlZ2lvbihSZWZQdHI8VlRUUmVnaW9uPiYmKTsKLSAgICBFeGNl
cHRpb25Pcjx2b2lkPiByZW1vdmVSZWdpb24oVlRUUmVnaW9uKik7CisgICAgdm9pZCBhZGRSZWdp
b24oUmVmPFZUVFJlZ2lvbj4mJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVtb3ZlUmVnaW9u
KFZUVFJlZ2lvbiYpOwogCi0gICAgdm9pZCBjdWVXaWxsQ2hhbmdlKFRleHRUcmFja0N1ZSopOwot
ICAgIHZvaWQgY3VlRGlkQ2hhbmdlKFRleHRUcmFja0N1ZSopOworICAgIHZvaWQgY3VlV2lsbENo
YW5nZShUZXh0VHJhY2tDdWUmKTsKKyAgICB2b2lkIGN1ZURpZENoYW5nZShUZXh0VHJhY2tDdWUm
KTsKIAogICAgIGVudW0gVGV4dFRyYWNrVHlwZSB7IFRyYWNrRWxlbWVudCwgQWRkVHJhY2ssIElu
QmFuZCB9OwogICAgIFRleHRUcmFja1R5cGUgdHJhY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
cmFja1R5cGU7IH0KQEAgLTEzMiw3ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNC
ZWVuQ29uZmlndXJlZChib29sIGZsYWcpIHsgbV9oYXNCZWVuQ29uZmlndXJlZCA9IGZsYWc7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc0RlZmF1bHQoYm9vbCkgeyB9CiAKICAgICB2b2lkIHJlbW92
ZUFsbEN1ZXMoKTsKIApAQCAtMTQ0LDI3ICsxMjksMzYgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBNZWRpYVRpbWUgc3RhcnRUaW1lVmFyaWFuY2UoKSBjb25zdCB7IHJldHVybiBNZWRpYVRpbWU6
Onplcm9UaW1lKCk7IH0KIAotICAgIHVzaW5nIFJlZkNvdW50ZWQ8VHJhY2tCYXNlPjo6cmVmOwot
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8VHJhY2tCYXNlPjo6ZGVyZWY7CisgICAgdXNpbmcgUmVmQ291
bnRlZDo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwogCiAgICAgY29uc3QgT3B0
aW9uYWw8VmVjdG9yPFN0cmluZz4+JiBzdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGVTaGVldHM7IH0KIAogcHJvdGVjdGVkOgogICAgIFRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgVGV4dFRyYWNrQ2xpZW50KiwgY29uc3QgQXRvbVN0cmluZyYga2luZCwgY29uc3Qg
QXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25zdCBBdG9tU3RyaW5n
JiBsYW5ndWFnZSwgVGV4dFRyYWNrVHlwZSk7CiAKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAi
VGV4dFRyYWNrIjsgfQotI2VuZGlmCisgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Q7Cisg
ICAgVGV4dFRyYWNrQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAg
Ym9vbCBoYXNDdWUoVGV4dFRyYWNrQ3VlJiwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVzID0g
VGV4dFRyYWNrQ3VlOjpNYXRjaEFsbEZpZWxkcyk7CisgICAgdm9pZCBzZXRLaW5kKEtpbmQpOwog
CiAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IG1fY3VlczsKICAgICBPcHRpb25hbDxWZWN0
b3I8U3RyaW5nPj4gbV9zdHlsZVNoZWV0czsKIAogcHJpdmF0ZToKKyAgICBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFRleHRU
cmFja0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDb250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CisKICAgICBi
b29sIGVuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQo
KSBmaW5hbCB7IHJlZigpOyB9CiAgICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBk
ZXJlZigpOyB9CiAKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBjb25zdCBjaGFyKiBs
b2dDbGFzc05hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiVGV4dFRyYWNrIjsgfQorI2Vu
ZGlmCisKICAgICBWVFRSZWdpb25MaXN0JiBlbnN1cmVWVFRSZWdpb25MaXN0KCk7CiAgICAgUmVm
UHRyPFZUVFJlZ2lvbkxpc3Q+IG1fcmVnaW9uczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2suaWRsCmluZGV4IGNmOTAzYTliMjU3NWE1MzFjNTFhNzA0OGUyYjJlZDUxNDcwYzcx
ZmYuLjg5NmM5NGNmM2FmYzhhYTYzODg4ODg1ZDViOTQ3YjBiMDExMTVmMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5pZGwKQEAgLTQ5LDcgKzQ5LDYgQEAgZW51bSBUZXh0
VHJhY2tLaW5kIHsgInN1YnRpdGxlcyIsICJjYXB0aW9ucyIsICJkZXNjcmlwdGlvbnMiLCAiY2hh
cHRlcnMiLCAibWV0YWQKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uY3VlY2hhbmdlOwog
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFZUVFJlZ2lvbkxpc3QgcmVnaW9uczsKLSAgICAvLyBG
SVhNRTogcmVnaW9uIHBhcmFtZXRlciBzaG91bGQgbm90IGJlIG51bGxhYmxlIGluIGFkZFJlZ2lv
biBhbmQgcmVtb3ZlUmVnaW9uLgotICAgIHZvaWQgYWRkUmVnaW9uKFZUVFJlZ2lvbj8gcmVnaW9u
KTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgcmVtb3ZlUmVnaW9uKFZUVFJlZ2lvbj8g
cmVnaW9uKTsKKyAgICB2b2lkIGFkZFJlZ2lvbihWVFRSZWdpb24gcmVnaW9uKTsKKyAgICBbTWF5
VGhyb3dFeGNlcHRpb25dIHZvaWQgcmVtb3ZlUmVnaW9uKFZUVFJlZ2lvbiByZWdpb24pOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAppbmRleCBmYTM3ZGI4
NDQ3YzJiYmYxNGRiN2QyZDY4YTJmM2IzNzVjNzdlZDVmLi4yNDE4NzdjMzIxZWQxOWQwZWQ4Mjk5
MzQ4ODAzMWY3ZjU2MTY1Y2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuY3BwCkBAIC0xODMsMTAgKzE4Myw4IEBAIHN0YXRpYyB2b2lkIHJlbW92ZVBzZXVkb0F0
dHJpYnV0ZXMoTm9kZSYgbm9kZSkKICAgICAgICAgcmVtb3ZlUHNldWRvQXR0cmlidXRlcygqY2hp
bGQpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8VGV4dFRyYWNrQ3VlPj4gVGV4dFRyYWNrQ3VlOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3Vi
bGUgZW5kLCBEb2N1bWVudEZyYWdtZW50JiBjdWVGcmFnbWVudCkKK0V4Y2VwdGlvbk9yPFJlZjxU
ZXh0VHJhY2tDdWU+PiBUZXh0VHJhY2tDdWU6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGRv
dWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRG9jdW1lbnRGcmFnbWVudCYgY3VlRnJhZ21lbnQpCiB7
Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7Ci0KICAg
ICBpZiAoIWN1ZUZyYWdtZW50LmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWROb2RlVHlwZUVycm9yLCAiRW1wdHkgY3VlIGZyYWdtZW50IiB9OwogCkBAIC0y
MjQsMTAgKzIyMiwxMCBAQCBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZAogewogfQogCi1UZXh0VHJh
Y2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCkKK1RleHRUcmFja0N1ZTo6
VGV4dFRyYWNrQ3VlKERvY3VtZW50JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBj
b25zdCBNZWRpYVRpbWUmIGVuZCkKICAgICA6IG1fc3RhcnRUaW1lKHN0YXJ0KQogICAgICwgbV9l
bmRUaW1lKGVuZCkKLSAgICAsIG1fZG9jdW1lbnQoZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQp
KQorICAgICwgbV9kb2N1bWVudChjb250ZXh0KQogewogfQogCkBAIC0yNDIsNyArMjQwLDcgQEAg
dm9pZCBUZXh0VHJhY2tDdWU6OndpbGxDaGFuZ2UoKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobV90cmFjaykKLSAgICAgICAgbV90cmFjay0+Y3VlV2lsbENoYW5nZSh0aGlzKTsKKyAgICAg
ICAgbV90cmFjay0+Y3VlV2lsbENoYW5nZSgqdGhpcyk7CiB9CiAKIHZvaWQgVGV4dFRyYWNrQ3Vl
OjpkaWRDaGFuZ2UoKQpAQCAtMjU0LDcgKzI1Miw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpkaWRD
aGFuZ2UoKQogICAgIG1fZGlzcGxheVRyZWVOZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICBpZiAo
bV90cmFjaykKLSAgICAgICAgbV90cmFjay0+Y3VlRGlkQ2hhbmdlKHRoaXMpOworICAgICAgICBt
X3RyYWNrLT5jdWVEaWRDaGFuZ2UoKnRoaXMpOwogfQogCiBUZXh0VHJhY2sqIFRleHRUcmFja0N1
ZTo6dHJhY2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgK
aW5kZXggYzZlNzM4YjA1YjZkYmRjMTM4OGQyZmNkOGYwNzJiZDU1ZWI4NGU5Ni4uZTJmNGE1MDM0
MzY2NGE0OGI2NGNkZTM1ZDk2OWRmZmY1MjA5Y2NiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0N1ZS5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgY3VlQmFja2Ryb3BTaGFkb3dQc2V1ZG9JZCgpOwogICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBjdWVCb3hTaGFkb3dQc2V1ZG9JZCgpOwogCi0gICAgc3RhdGlj
IEV4Y2VwdGlvbk9yPFJlZjxUZXh0VHJhY2tDdWU+PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRG9jdW1lbnRGcmFnbWVudCYpOworICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8VGV4dFRyYWNrQ3VlPj4gY3JlYXRlKERvY3VtZW50Jiwg
ZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBEb2N1bWVudEZyYWdtZW50Jik7CiAKICAgICBUZXh0
VHJhY2sqIHRyYWNrKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUcmFjayhUZXh0VHJhY2sqKTsKQEAg
LTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY3VlSW5kZXgoKSBjb25zdDsK
IAogcHJvdGVjdGVkOgotICAgIFRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQpOworICAgIFRleHRU
cmFja0N1ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kKTsKIAogICAgIERvY3VtZW50JiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1
bWVudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5pZGwKaW5k
ZXggZDU0ZDAxNWY1YzBlMWMyYjAzZDZjOTIxODlhOGUzOWYwM2VhODc3OS4uN2UwMjcyMTYxZGQ0
NjBhYjk1NDY0YWVmYzZhZTgxZjZhZjczNDQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlLmlkbApAQCAtMzEsNyArMzEsNyBAQAogICAgIEpTQ3VzdG9tTWFya0Z1
bmN0aW9uLAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogICAgIENvbnN0cnVjdG9yKGRvdWJs
ZSBzdGFydFRpbWUsIGRvdWJsZSBlbmRUaW1lLCBEb2N1bWVudEZyYWdtZW50IGN1ZU5vZGUpLAot
ICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKKyAgICBDb25z
dHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAogICAgIENvbnN0cnVjdG9yRW5hYmxlZEJ5U2V0dGlu
Zz1HZW5lcmljQ3VlQVBJLAogICAgIENvbnN0cnVjdG9yTWF5VGhyb3dFeGNlcHRpb24sCiBdIGlu
dGVyZmFjZSBUZXh0VHJhY2tDdWUgOiBFdmVudFRhcmdldCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAppbmRleCBlZWZlY2FhZjVkOWJi
YWQ3NDExMGNlY2YzMTQ3ZTdkZmFiOWExYzg4Li44ODcxMGEwNzhmNGJkNTE5ZjQwMmE1ZmNlMWIy
MmQwOGQ3Mjc1YTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlR2VuZXJpYy5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCBSZWY8VGV4dFRyYWNrQ3VlR2Vu
ZXJpYz4gVGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbgogfQogCiBUZXh0VHJhY2tDdWVHZW5lcmljOjpUZXh0VHJhY2tDdWVHZW5lcmljKERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBl
bmQsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLSAgICA6IFZUVEN1ZShkb2N1bWVudCwgc3RhcnQs
IGVuZCwgY29udGVudCkKKyAgICA6IFZUVEN1ZShkb2N1bWVudCwgc3RhcnQsIGVuZCwgU3RyaW5n
IHsgY29udGVudCB9KQogewogfQogCkBAIC0yMTksOCArMjE5LDggQEAgYm9vbCBUZXh0VHJhY2tD
dWVHZW5lcmljOjppc09yZGVyZWRCZWZvcmUoY29uc3QgVGV4dFRyYWNrQ3VlKiB0aGF0KSBjb25z
dAogCiAgICAgaWYgKGlzPFRleHRUcmFja0N1ZUdlbmVyaWM+KCp0aGF0KSAmJiBzdGFydFRpbWUo
KSA9PSB0aGF0LT5zdGFydFRpbWUoKSAmJiBlbmRUaW1lKCkgPT0gdGhhdC0+ZW5kVGltZSgpKSB7
CiAgICAgICAgIC8vIEZ1cnRoZXIgb3JkZXIgZ2VuZXJpYyBjdWVzIGJ5IHRoZWlyIGNhbGN1bGF0
ZWQgbGluZSB2YWx1ZS4KLSAgICAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiB0aGlzUG9z
aXRpb24gPSBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7Ci0gICAgICAgIHN0ZDo6cGFpcjxkb3Vi
bGUsIGRvdWJsZT4gdGhhdFBvc2l0aW9uID0gZG93bmNhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYz4o
KnRoYXQpLmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgYXV0byB0aGlzUG9zaXRp
b24gPSBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7CisgICAgICAgIGF1dG8gdGhhdFBvc2l0aW9u
ID0gZG93bmNhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oKnRoYXQpLmdldFBvc2l0aW9uQ29vcmRp
bmF0ZXMoKTsKICAgICAgICAgcmV0dXJuIHRoaXNQb3NpdGlvbi5zZWNvbmQgPiB0aGF0UG9zaXRp
b24uc2Vjb25kIHx8ICh0aGlzUG9zaXRpb24uc2Vjb25kID09IHRoYXRQb3NpdGlvbi5zZWNvbmQg
JiYgdGhpc1Bvc2l0aW9uLmZpcnN0IDwgdGhhdFBvc2l0aW9uLmZpcnN0KTsKICAgICB9CiAKQEAg
LTIzMiw4ICsyMzIsOCBAQCBib29sIFRleHRUcmFja0N1ZUdlbmVyaWM6OmlzUG9zaXRpb25lZEFi
b3ZlKGNvbnN0IFRleHRUcmFja0N1ZSogdGhhdCkgY29uc3QKICAgICBpZiAoaXM8VGV4dFRyYWNr
Q3VlR2VuZXJpYz4oKnRoYXQpKSB7CiAgICAgICAgIGlmIChzdGFydFRpbWUoKSA9PSB0aGF0LT5z
dGFydFRpbWUoKSAmJiBlbmRUaW1lKCkgPT0gdGhhdC0+ZW5kVGltZSgpKSB7CiAgICAgICAgICAg
ICAvLyBGdXJ0aGVyIG9yZGVyIGdlbmVyaWMgY3VlcyBieSB0aGVpciBjYWxjdWxhdGVkIGxpbmUg
dmFsdWUuCi0gICAgICAgICAgICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHRoaXNQb3NpdGlv
biA9IGdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxkb3Vi
bGUsIGRvdWJsZT4gdGhhdFBvc2l0aW9uID0gZG93bmNhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYz4o
KnRoYXQpLmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgICAgIGF1dG8gdGhpc1Bv
c2l0aW9uID0gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpOworICAgICAgICAgICAgYXV0byB0aGF0
UG9zaXRpb24gPSBkb3duY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljPigqdGhhdCkuZ2V0UG9zaXRp
b25Db29yZGluYXRlcygpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXNQb3NpdGlvbi5zZWNvbmQg
PiB0aGF0UG9zaXRpb24uc2Vjb25kIHx8ICh0aGlzUG9zaXRpb24uc2Vjb25kID09IHRoYXRQb3Np
dGlvbi5zZWNvbmQgJiYgdGhpc1Bvc2l0aW9uLmZpcnN0IDwgdGhhdFBvc2l0aW9uLmZpcnN0KTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RhcnRUaW1lKCkgPiB0aGF0LT5zdGFydFRpbWUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAppbmRleCBkNDhmMzI5YThhYjczNjc1
NzI2MmZhZTJlMzViNGIxNDRjNjYzNTkyLi4zYThhNjFhNWVjNWE5NDE0OWFkOTJjOThmOWFhZGEw
ZTNmZjc0NjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCkBAIC0yMzcsMjQg
KzIzNywxOSBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gVlRUQ3VlQm94OjpjcmVhdGVFbGVt
ZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLVJlZjxWVFRDdWU+IFZUVEN1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5n
JiBjb250ZW50KQorUmVmPFZUVEN1ZT4gVlRUQ3VlOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50
LCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIFN0cmluZyYmIGNvbnRlbnQpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVlRUQ3VlKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwgTWVk
aWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0YXJ0KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91
YmxlKGVuZCksIGNvbnRlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWVFRDdWUoZG9j
dW1lbnQsIE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShzdGFydCksIE1lZGlhVGltZTo6Y3Jl
YXRlV2l0aERvdWJsZShlbmQpLCBXVEZNb3ZlKGNvbnRlbnQpKSk7CiB9CiAKLVJlZjxWVFRDdWU+
IFZUVEN1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1l
ZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQpCitSZWY8VlRUQ3VlPiBWVFRDdWU6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IFdlYlZUVEN1ZURhdGEmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlRUQ3Vl
KGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwgc3RhcnQsIGVuZCwgY29udGVudCkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFZUVEN1ZShkb2N1bWVudCwgZGF0YSkpOwogfQogCi1SZWY8
VlRUQ3VlPiBWVFRDdWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBj
b25zdCBXZWJWVFRDdWVEYXRhJiBkYXRhKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZU
VEN1ZShkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIGRhdGEpKTsKLX0KLQotVlRUQ3VlOjpW
VFRDdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBN
ZWRpYVRpbWUmIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorVlRUQ3VlOjpWVFRDdWUoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUm
IGVuZCwgU3RyaW5nJiYgY29udGVudCkKICAgICA6IFRleHRUcmFja0N1ZShkb2N1bWVudCwgc3Rh
cnQsIGVuZCkKLSAgICAsIG1fY29udGVudChjb250ZW50KQorICAgICwgbV9jb250ZW50KFdURk1v
dmUoY29udGVudCkpCiAgICAgLCBtX29yaWdpbmFsU3RhcnRUaW1lKE1lZGlhVGltZTo6emVyb1Rp
bWUoKSkKIHsKICAgICBpbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZUVEN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuaApp
bmRleCBhZWFjOGRmMGZlNGNmZjRhMTlmOWJmN2QxNzA3MDgzMTU1MDk5ZjU5Li4yYmNlMDMyMzJl
OGM0ZDVhZTY4MmM2OTFiMGU2YzhkNDIyYTRkNzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1ZUVEN1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRU
Q3VlLmgKQEAgLTc4LDkgKzc4LDggQEAgcHJpdmF0ZToKIGNsYXNzIFZUVEN1ZSA6IHB1YmxpYyBU
ZXh0VHJhY2tDdWUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoVlRUQ3VlKTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFZUVEN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7Ci0gICAg
c3RhdGljIFJlZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
TWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYgY29u
dGVudCk7Ci0gICAgc3RhdGljIFJlZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgV2ViVlRUQ3VlRGF0YSYpOworICAgIHN0YXRpYyBSZWY8VlRUQ3VlPiBjcmVh
dGUoRG9jdW1lbnQmLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIFN0cmluZyYmIGNvbnRlbnQp
OworICAgIHN0YXRpYyBSZWY8VlRUQ3VlPiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBXZWJWVFRD
dWVEYXRhJik7CiAKICAgICB2aXJ0dWFsIH5WVFRDdWUoKTsKIApAQCAtMTY3LDcgKzE2Niw3IEBA
IHB1YmxpYzoKICAgICBkb3VibGUgY2FsY3VsYXRlQ29tcHV0ZWRUZXh0UG9zaXRpb24oKSBjb25z
dDsKIAogcHJvdGVjdGVkOgotICAgIFZUVEN1ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGltZSYg
c3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAg
IFZUVEN1ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBTdHJpbmcmJiBjb250ZW50KTsKIAogICAgIGJvb2wgY3VlQ29udGVudHNNYXRjaChj
b25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9WVFRDdWUuaWRsCmluZGV4IDlkZWJhOTVlM2JjNWM2NWZhYzljMjk3NTlkMThjZjNlYjE5OWQw
ZGMuLjhlZTM3Zjc4Yzc0MzI2NzAwZWJkZGE0OWNjODFhYmQyMjk3YWUxYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1ZUVEN1ZS5pZGwKQEAgLTI5LDcgKzI5LDcgQEAgdHlwZWRlZiAoZG91Ymxl
IG9yIEF1dG9LZXl3b3JkKSBMaW5lQW5kUG9zaXRpb25TZXR0aW5nOwogWwogICAgIENvbmRpdGlv
bmFsPVZJREVPX1RSQUNLLAogICAgIENvbnN0cnVjdG9yKGRvdWJsZSBzdGFydFRpbWUsIGRvdWJs
ZSBlbmRUaW1lLCBET01TdHJpbmcgdGV4dCksCi0gICAgQ29uc3RydWN0b3JDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LAorICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1lbnQsCiAg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAog
XSBpbnRlcmZhY2UgVlRUQ3VlIDogVGV4dFRyYWNrQ3VlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svV2ViVlRUUGFyc2VyLmNwcAppbmRleCAzMzY3ZTk2ZGJmZTU1YTk3ZGQzYzkxZjYzMWI4
OGYwMjdhYjk3YTZmLi4zY2E0OGRlNjYyMjVmMTJmMDM1OWE4YjI2MWIzMjM2ZGQ2MTc2OGE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBAIC05MCwyNSAr
OTAsMjQgQEAgYm9vbCBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWly
KFZUVFNjYW5uZXImIHZhbHVlU2Nhbm5lciwgY2hhcgogICAgIHJldHVybiB0cnVlOwogfQogCi1X
ZWJWVFRQYXJzZXI6OldlYlZUVFBhcnNlcihXZWJWVFRQYXJzZXJDbGllbnQqIGNsaWVudCwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dChjb250ZXh0KQotICAgICwgbV9zdGF0ZShJbml0aWFsKQorV2ViVlRUUGFyc2VyOjpXZWJW
VFRQYXJzZXIoV2ViVlRUUGFyc2VyQ2xpZW50JiBjbGllbnQsIERvY3VtZW50JiBkb2N1bWVudCkK
KyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgVVRGOEVuY29kaW5nKCkpKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQogewogfQogCi12b2lkIFdlYlZUVFBhcnNlcjo6Z2V0TmV3Q3VlcyhWZWN0
b3I8UmVmUHRyPFdlYlZUVEN1ZURhdGE+PiYgb3V0cHV0Q3VlcykKK1ZlY3RvcjxSZWY8V2ViVlRU
Q3VlRGF0YT4+IFdlYlZUVFBhcnNlcjo6dGFrZUN1ZXMoKQogewotICAgIG91dHB1dEN1ZXMgPSBX
VEZNb3ZlKG1fY3VlbGlzdCk7CisgICAgcmV0dXJuIFdURk1vdmUobV9jdWVsaXN0KTsKIH0KIAot
dm9pZCBXZWJWVFRQYXJzZXI6OmdldE5ld1JlZ2lvbnMoVmVjdG9yPFJlZlB0cjxWVFRSZWdpb24+
PiYgb3V0cHV0UmVnaW9ucykKK1ZlY3RvcjxSZWY8VlRUUmVnaW9uPj4gV2ViVlRUUGFyc2VyOjp0
YWtlUmVnaW9ucygpCiB7Ci0gICAgb3V0cHV0UmVnaW9ucyA9IFdURk1vdmUobV9yZWdpb25MaXN0
KTsKKyAgICByZXR1cm4gV1RGTW92ZShtX3JlZ2lvbkxpc3QpOwogfQogCi1WZWN0b3I8U3RyaW5n
PiBXZWJWVFRQYXJzZXI6OmdldFN0eWxlU2hlZXRzKCkKK1ZlY3RvcjxTdHJpbmc+IFdlYlZUVFBh
cnNlcjo6dGFrZVN0eWxlU2hlZXRzKCkKIHsKICAgICByZXR1cm4gV1RGTW92ZShtX3N0eWxlU2hl
ZXRzKTsKIH0KQEAgLTE0NCw4ICsxNDMsNyBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2VDdWVE
YXRhKGNvbnN0IElTT1dlYlZUVEN1ZSYgZGF0YSkKICAgICAgICAgY3VlLT5zZXRPcmlnaW5hbFN0
YXJ0VGltZShvcmlnaW5hbFN0YXJ0VGltZSk7CiAKICAgICBtX2N1ZWxpc3QuYXBwZW5kKFdURk1v
dmUoY3VlKSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+bmV3Q3Vlc1Bh
cnNlZCgpOworICAgIG1fY2xpZW50Lm5ld0N1ZXNQYXJzZWQoKTsKIH0KIAogdm9pZCBXZWJWVFRQ
YXJzZXI6OmZsdXNoKCkKQEAgLTE2NSw4ICsxNjMsNyBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6cGFy
c2UoKQogICAgICAgICBjYXNlIEluaXRpYWw6CiAgICAgICAgICAgICAvLyBTdGVwcyA0IC0gOSAt
IENoZWNrIGZvciBhIHZhbGlkIFdlYlZUVCBzaWduYXR1cmUuCiAgICAgICAgICAgICBpZiAoIWhh
c1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoKmxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZmlsZUZhaWxlZFRvUGFyc2Uo
KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC5maWxlRmFpbGVkVG9QYXJzZSgpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMjc2LDEyICsyNzMsMTAgQEAg
V2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdlYlZUVEJsb2Nr
KGNvbnN0IFN0cmluZyYgbGluZSkKICAgICAvLyBIYW5kbGUgY3VlIGJsb2NrLgogICAgIFBhcnNl
U3RhdGUgc3RhdGUgPSBjaGVja0FuZFJlY292ZXJDdWUobGluZSk7CiAgICAgaWYgKHN0YXRlICE9
IEhlYWRlcikgewotICAgICAgICBpZiAobV9jbGllbnQpIHsKLSAgICAgICAgICAgIGlmICghbV9y
ZWdpb25MaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+bmV3UmVnaW9u
c1BhcnNlZCgpOwotICAgICAgICAgICAgaWYgKCFtX3N0eWxlU2hlZXRzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBtX2NsaWVudC0+bmV3U3R5bGVTaGVldHNQYXJzZWQoKTsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIW1fcmVnaW9uTGlzdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2Ns
aWVudC5uZXdSZWdpb25zUGFyc2VkKCk7CisgICAgICAgIGlmICghbV9zdHlsZVNoZWV0cy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBtX2NsaWVudC5uZXdTdHlsZVNoZWV0c1BhcnNlZCgpOwogICAg
ICAgICBpZiAoIW1fcHJldmlvdXNMaW5lLmlzRW1wdHkoKSAmJiAhbV9wcmV2aW91c0xpbmUuY29u
dGFpbnMoIi0tPiIpKQogICAgICAgICAgICAgbV9jdXJyZW50SWQgPSBtX3ByZXZpb3VzTGluZTsK
ICAgICAgICAgCkBAIC0zMjcsNyArMzIyLDcgQEAgYm9vbCBXZWJWVFRQYXJzZXI6OmNoZWNrQW5k
Q3JlYXRlUmVnaW9uKGNvbnN0IFN0cmluZyYgbGluZSkKICAgICAvLyB6ZXJvIG9yIG1vcmUgVSsw
MDIwIFNQQUNFIGNoYXJhY3RlcnMgb3IgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OCiAgICAg
Ly8gKHRhYikgY2hhcmFjdGVycyBleHBlY3RlZCBvdGhlciB0aGFuIHRoZXNlIGNoYXJlY3RlcnMg
aXQgaXMgaW52YWxpZC4KICAgICBpZiAobGluZS5zdGFydHNXaXRoKCJSRUdJT04iKSAmJiBsaW5l
LnN1YnN0cmluZyhyZWdpb25JZGVudGlmaWVyTGVuZ3RoKS5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJz
PGlzQVNwYWNlPigpKSB7Ci0gICAgICAgIG1fY3VycmVudFJlZ2lvbiA9IFZUVFJlZ2lvbjo6Y3Jl
YXRlKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICBtX2N1cnJlbnRSZWdpb24g
PSBWVFRSZWdpb246OmNyZWF0ZShtX2RvY3VtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTMzNywxNyArMzMyLDEyIEBAIGJvb2wgV2ViVlRU
UGFyc2VyOjpjaGVja0FuZFN0b3JlUmVnaW9uKGNvbnN0IFN0cmluZyYgbGluZSkKIHsKICAgICBp
ZiAoIWxpbmUuaXNFbXB0eSgpICYmICFsaW5lLmNvbnRhaW5zKCItLT4iKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKCFtX2N1cnJlbnRSZWdpb24tPmlkKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSB0ZXh0IHRyYWNrIGxpc3Qgb2YgcmVnaW9ucyByZWdp
b25zIGNvbnRhaW5zIGEgcmVnaW9uCi0gICAgICAgIC8vIHdpdGggdGhlIHNhbWUgcmVnaW9uIGlk
ZW50aWZpZXIgdmFsdWUgYXMgcmVnaW9uLCByZW1vdmUgdGhhdCByZWdpb24uCi0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgICAgICBpZiAo
cmVnaW9uLT5pZCgpID09IG1fY3VycmVudFJlZ2lvbi0+aWQoKSkgewotICAgICAgICAgICAgICAg
IG1fcmVnaW9uTGlzdC5yZW1vdmVGaXJzdChyZWdpb24pOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fcmVnaW9uTGlzdC5hcHBlbmQo
bV9jdXJyZW50UmVnaW9uKTsKKyAgICAgICAgbV9yZWdpb25MaXN0LnJlbW92ZUZpcnN0TWF0Y2hp
bmcoW3RoaXNdIChhdXRvJiByZWdpb24pIHsKKyAgICAgICAgICAgIHJldHVybiByZWdpb24tPmlk
KCkgPT0gbV9jdXJyZW50UmVnaW9uLT5pZCgpOworICAgICAgICB9KTsKKyAgICAgICAgbV9yZWdp
b25MaXN0LmFwcGVuZChtX2N1cnJlbnRSZWdpb24ucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQog
ICAgIG1fY3VycmVudFJlZ2lvbiA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NTgs
OCArNTQ4LDcgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OmNyZWF0ZU5ld0N1ZSgpCiAgICAgY3VlLT5z
ZXRTZXR0aW5ncyhtX2N1cnJlbnRTZXR0aW5ncyk7CiAKICAgICBtX2N1ZWxpc3QuYXBwZW5kKFdU
Rk1vdmUoY3VlKSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+bmV3Q3Vl
c1BhcnNlZCgpOworICAgIG1fY2xpZW50Lm5ld0N1ZXNQYXJzZWQoKTsKIH0KIAogdm9pZCBXZWJW
VFRQYXJzZXI6OnJlc2V0Q3VlVmFsdWVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svV2ViVlRUUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZU
VFBhcnNlci5oCmluZGV4IDVlYmVhNzUwOWU1MTA1Yzk5NTIxYjAzYWE1ZjNjN2Q3NjdlNGViNDMu
LjliZWU3MzRlMTRjMDUzMWY0MDJjZTYwY2NhNjExMTM2NTBkZjVlMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaApAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgRmluaXNoZWQKICAgICB9OwogCi0gICAgV2ViVlRUUGFyc2VyKFdlYlZUVFBhcnNl
ckNsaWVudCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBXZWJWVFRQYXJzZXIoV2Vi
VlRUUGFyc2VyQ2xpZW50JiwgRG9jdW1lbnQmKTsKIAogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1JlY29nbml6ZWRUYWcoY29uc3QgQXRvbVN0cmluZyYgdGFnTmFtZSkKICAgICB7CkBAIC0xNTAs
MTggKzE1MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxlRmluaXNoZWQoKTsKIAogICAgIC8v
IFRyYW5zZmVycyBvd25lcnNoaXAgb2YgbGFzdCBwYXJzZWQgY3VlcyB0byBjYWxsZXIuCi0gICAg
dm9pZCBnZXROZXdDdWVzKFZlY3RvcjxSZWZQdHI8V2ViVlRUQ3VlRGF0YT4+Jik7Ci0gICAgdm9p
ZCBnZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VlRUUmVnaW9uPj4mKTsKLQotICAgIFZlY3Rv
cjxTdHJpbmc+IGdldFN0eWxlU2hlZXRzKCk7CisgICAgVmVjdG9yPFJlZjxXZWJWVFRDdWVEYXRh
Pj4gdGFrZUN1ZXMoKTsKKyAgICBWZWN0b3I8UmVmPFZUVFJlZ2lvbj4+IHRha2VSZWdpb25zKCk7
CisgICAgVmVjdG9yPFN0cmluZz4gdGFrZVN0eWxlU2hlZXRzKCk7CiAgICAgCiAgICAgLy8gQ3Jl
YXRlIHRoZSBEb2N1bWVudEZyYWdtZW50IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBXZWJWVFQgY3Vl
IHRleHQuCiAgICAgc3RhdGljIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVEb2N1bWVudEZy
YWdtZW50RnJvbUN1ZVRleHQoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKIAotcHJvdGVjdGVk
OgotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LSAgICBQYXJzZVN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZSgpOwog
ICAgIHZvaWQgZmx1c2hQZW5kaW5nQ3VlKCk7CkBAIC0xODUsNiArMTgwLDkgQEAgcHJpdmF0ZToK
IAogICAgIHN0YXRpYyBib29sIGNvbGxlY3RUaW1lU3RhbXAoVlRUU2Nhbm5lciYgaW5wdXQsIE1l
ZGlhVGltZSYgdGltZVN0YW1wKTsKIAorICAgIERvY3VtZW50JiBtX2RvY3VtZW50OworICAgIFBh
cnNlU3RhdGUgbV9zdGF0ZSB7IEluaXRpYWwgfTsKKwogICAgIEJ1ZmZlcmVkTGluZVJlYWRlciBt
X2xpbmVSZWFkZXI7CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsK
ICAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CkBAIC0xOTYsMTAgKzE5NCwxMCBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxWVFRSZWdpb24+IG1fY3VycmVudFJlZ2lvbjsKICAgICBTdHJpbmcgbV9jdXJy
ZW50U291cmNlU3R5bGVTaGVldDsKICAgICAKLSAgICBXZWJWVFRQYXJzZXJDbGllbnQqIG1fY2xp
ZW50OworICAgIFdlYlZUVFBhcnNlckNsaWVudCYgbV9jbGllbnQ7CiAKLSAgICBWZWN0b3I8UmVm
UHRyPFdlYlZUVEN1ZURhdGE+PiBtX2N1ZWxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxWVFRSZWdp
b24+PiBtX3JlZ2lvbkxpc3Q7CisgICAgVmVjdG9yPFJlZjxXZWJWVFRDdWVEYXRhPj4gbV9jdWVs
aXN0OworICAgIFZlY3RvcjxSZWY8VlRUUmVnaW9uPj4gbV9yZWdpb25MaXN0OwogICAgIFZlY3Rv
cjxTdHJpbmc+IG1fc3R5bGVTaGVldHM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0
VHJhY2tMb2FkZXIuY3BwCmluZGV4IDg3NGY5ZTVkMGJhOTdjNjI0YWMwNmFmMDc2YjRmMGVlMTMz
MzY1MTAuLjVhM2VmNjM1ZTNlYWEzYzNiMmRmMjFhMDZhNzNkMTRjN2U2OWIzZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuY3BwCkBAIC00NSwxMyArNDUsMTAgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotVGV4dFRyYWNrTG9hZGVyOjpUZXh0VHJhY2tM
b2FkZXIoVGV4dFRyYWNrTG9hZGVyQ2xpZW50JiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCitUZXh0VHJhY2tMb2FkZXI6OlRleHRUcmFja0xvYWRlcihUZXh0VHJhY2tM
b2FkZXJDbGllbnQmIGNsaWVudCwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jbGllbnQo
Y2xpZW50KQotICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBt
X2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9jdWVMb2FkVGltZXIoKnRoaXMsICZUZXh0VHJh
Y2tMb2FkZXI6OmN1ZUxvYWRUaW1lckZpcmVkKQotICAgICwgbV9zdGF0ZShJZGxlKQotICAgICwg
bV9wYXJzZU9mZnNldCgwKQotICAgICwgbV9uZXdDdWVzQXZhaWxhYmxlKGZhbHNlKQogewogfQog
CkBAIC02Nyw3ICs2NCw3IEBAIHZvaWQgVGV4dFRyYWNrTG9hZGVyOjpjdWVMb2FkVGltZXJGaXJl
ZCgpCiAgICAgICAgIG1fbmV3Q3Vlc0F2YWlsYWJsZSA9IGZhbHNlOwogICAgICAgICBtX2NsaWVu
dC5uZXdDdWVzQXZhaWxhYmxlKCp0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAobV9zdGF0
ZSA+PSBGaW5pc2hlZCkKICAgICAgICAgbV9jbGllbnQuY3VlTG9hZGluZ0NvbXBsZXRlZCgqdGhp
cywgbV9zdGF0ZSA9PSBGYWlsZWQpOwogfQpAQCAtOTIsNyArODksNyBAQCB2b2lkIFRleHRUcmFj
a0xvYWRlcjo6cHJvY2Vzc05ld0N1ZURhdGEoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fY3VlUGFyc2VyKQotICAgICAgICBtX2N1ZVBhcnNl
ciA9IG1ha2VVbmlxdWU8V2ViVlRUUGFyc2VyPihzdGF0aWNfY2FzdDxXZWJWVFRQYXJzZXJDbGll
bnQqPih0aGlzKSwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAgbV9jdWVQYXJz
ZXIgPSBtYWtlVW5pcXVlPFdlYlZUVFBhcnNlcj4oc3RhdGljX2Nhc3Q8V2ViVlRUUGFyc2VyQ2xp
ZW50Jj4oKnRoaXMpLCBtX2RvY3VtZW50KTsKIAogICAgIHdoaWxlIChtX3BhcnNlT2Zmc2V0IDwg
YnVmZmVyLT5zaXplKCkpIHsKICAgICAgICAgYXV0byBkYXRhID0gYnVmZmVyLT5nZXRTb21lRGF0
YShtX3BhcnNlT2Zmc2V0KTsKQEAgLTExNSw4ICsxMTIsNyBAQCB2b2lkIFRleHRUcmFja0xvYWRl
cjo6ZGVwcmVjYXRlZERpZFJlY2VpdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYgcmVz
b3VyYwogdm9pZCBUZXh0VHJhY2tMb2FkZXI6OmNvcnNQb2xpY3lQcmV2ZW50ZWRMb2FkKCkKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgiQ3Jvc3Mtb3JpZ2luIHRleHQgdHJhY2sgbG9hZCBkZW5pZWQgYnkg
Q3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiIpKTsKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
LSAgICBkb2N1bWVudC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHks
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGNvbnNvbGVNZXNzYWdlKTsKKyAgICBtX2RvY3VtZW50LmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVy
cm9yLCBjb25zb2xlTWVzc2FnZSk7CiAgICAgbV9zdGF0ZSA9IEZhaWxlZDsKIH0KIApAQCAtMTQ4
LDIwICsxNDQsMTcgQEAgYm9vbCBUZXh0VHJhY2tMb2FkZXI6OmxvYWQoY29uc3QgVVJMJiB1cmws
IEhUTUxUcmFja0VsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgY2FuY2VsTG9hZCgpOwogCi0gICAg
QVNTRVJUKGlzPERvY3VtZW50PihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsKLSAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7Ci0KICAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgb3B0aW9ucyA9IENhY2hlZFJlc291
cmNlTG9hZGVyOjpkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCk7CiAgICAgb3B0aW9ucy5z
YW1lT3JpZ2luRGF0YVVSTEZsYWcgPSBTYW1lT3JpZ2luRGF0YVVSTEZsYWc6OlNldDsKICAgICBv
cHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb24gPSBlbGVtZW50LmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkgPyBDb250ZW50U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uOjpTa2lw
UG9saWN5Q2hlY2sgOiBDb250ZW50U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uOjpEb1BvbGljeUNo
ZWNrOwogCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChkb2N1bWVudC5jb21w
bGV0ZVVSTCh1cmwpKTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KG1fZG9j
dW1lbnQuY29tcGxldGVVUkwodXJsKSk7CiAKICAgICBpZiAoYXV0byBtZWRpYUVsZW1lbnQgPSBl
bGVtZW50Lm1lZGlhRWxlbWVudCgpKQogICAgICAgICByZXNvdXJjZVJlcXVlc3Quc2V0SW5zcGVj
dG9ySW5pdGlhdG9yTm9kZUlkZW50aWZpZXIoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppZGVu
dGlmaWVyRm9yTm9kZSgqbWVkaWFFbGVtZW50KSk7CiAKLSAgICBhdXRvIGN1ZVJlcXVlc3QgPSBj
cmVhdGVQb3RlbnRpYWxBY2Nlc3NDb250cm9sUmVxdWVzdChXVEZNb3ZlKHJlc291cmNlUmVxdWVz
dCksIFdURk1vdmUob3B0aW9ucyksIGRvY3VtZW50LCBlbGVtZW50Lm1lZGlhRWxlbWVudENyb3Nz
T3JpZ2luQXR0cmlidXRlKCksIFNhbWVPcmlnaW5GbGFnOjpZZXMpOwotICAgIG1fcmVzb3VyY2Ug
PSBkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJlcXVlc3RUZXh0VHJhY2soV1RGTW92
ZShjdWVSZXF1ZXN0KSkudmFsdWVfb3IobnVsbHB0cik7CisgICAgYXV0byBjdWVSZXF1ZXN0ID0g
Y3JlYXRlUG90ZW50aWFsQWNjZXNzQ29udHJvbFJlcXVlc3QoV1RGTW92ZShyZXNvdXJjZVJlcXVl
c3QpLCBXVEZNb3ZlKG9wdGlvbnMpLCBtX2RvY3VtZW50LCBlbGVtZW50Lm1lZGlhRWxlbWVudENy
b3NzT3JpZ2luQXR0cmlidXRlKCksIFNhbWVPcmlnaW5GbGFnOjpZZXMpOworICAgIG1fcmVzb3Vy
Y2UgPSBtX2RvY3VtZW50LmNhY2hlZFJlc291cmNlTG9hZGVyKCkucmVxdWVzdFRleHRUcmFjayhX
VEZNb3ZlKGN1ZVJlcXVlc3QpKS52YWx1ZV9vcihudWxscHRyKTsKICAgICBpZiAoIW1fcmVzb3Vy
Y2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX3Jlc291cmNlLT5hZGRDbGllbnQoKnRo
aXMpOwpAQCAtMjA1LDI5ICsxOTgsMjggQEAgVmVjdG9yPFJlZjxWVFRDdWU+PiBUZXh0VHJhY2tM
b2FkZXI6OmdldE5ld0N1ZXMoKQogICAgIGlmICghbV9jdWVQYXJzZXIpCiAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBWZWN0b3I8UmVmUHRyPFdlYlZUVEN1ZURhdGE+PiBuZXdDdWVzOwotICAg
IG1fY3VlUGFyc2VyLT5nZXROZXdDdWVzKG5ld0N1ZXMpOwotCisgICAgYXV0byBjdWVzID0gbV9j
dWVQYXJzZXItPnRha2VDdWVzKCk7CiAgICAgVmVjdG9yPFJlZjxWVFRDdWU+PiByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV3Q3Vlcy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYgY3VlRGF0YSA6IG5ld0N1ZXMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoVlRUQ3VlOjpjcmVhdGUoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgKmN1ZURhdGEpKTsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjdWVzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBjdWVEYXRhIDogY3VlcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChW
VFRDdWU6OmNyZWF0ZShtX2RvY3VtZW50LCBjdWVEYXRhKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBUZXh0VHJhY2tMb2FkZXI6OmdldE5ld1JlZ2lvbnMoVmVjdG9yPFJlZlB0cjxW
VFRSZWdpb24+PiYgb3V0cHV0UmVnaW9ucykKK1ZlY3RvcjxSZWY8VlRUUmVnaW9uPj4gVGV4dFRy
YWNrTG9hZGVyOjpnZXROZXdSZWdpb25zKCkKIHsKICAgICBBU1NFUlQobV9jdWVQYXJzZXIpOwot
ICAgIGlmIChtX2N1ZVBhcnNlcikKLSAgICAgICAgbV9jdWVQYXJzZXItPmdldE5ld1JlZ2lvbnMo
b3V0cHV0UmVnaW9ucyk7CisgICAgaWYgKCFtX2N1ZVBhcnNlcikKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICByZXR1cm4gbV9jdWVQYXJzZXItPnRha2VSZWdpb25zKCk7CiB9CiAKIFZlY3RvcjxT
dHJpbmc+IFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3U3R5bGVTaGVldHMoKQogewogICAgIEFTU0VS
VChtX2N1ZVBhcnNlcik7Ci0gICAgaWYgKG1fY3VlUGFyc2VyKQotICAgICAgICByZXR1cm4gbV9j
dWVQYXJzZXItPmdldFN0eWxlU2hlZXRzKCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
CisgICAgaWYgKCFtX2N1ZVBhcnNlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4g
bV9jdWVQYXJzZXItPnRha2VTdHlsZVNoZWV0cygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFRyYWNrTG9hZGVyLmgKaW5kZXggYzBlNzgyOTFkYTc4MGI2ZmU1YmRmMTI4MmYwYWU4
ODA2MDEzODE1OS4uNWQ4OTQ5ZTc1NzIzYWI0NzZjNmRhMmY3Nzc4MmQ3YTBlZTIyZTJmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuaApAQCAtMzksNyArMzksNiBAQCBj
bGFzcyBDYWNoZWRUZXh0VHJhY2s7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxUcmFja0Vs
ZW1lbnQ7CiBjbGFzcyBUZXh0VHJhY2tMb2FkZXI7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogY2xhc3MgVlRUQ3VlOwogCiBjbGFzcyBUZXh0VHJhY2tMb2FkZXJDbGllbnQgewpAQCAt
NTIsMzEgKzUxLDMwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbmV3U3R5bGVTaGVldHNB
dmFpbGFibGUoVGV4dFRyYWNrTG9hZGVyJikgPSAwOwogfTsKIAotY2xhc3MgVGV4dFRyYWNrTG9h
ZGVyIDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50LCBwcml2YXRlIFdlYlZUVFBhcnNlckNs
aWVudCB7CitjbGFzcyBUZXh0VHJhY2tMb2FkZXIgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQsIHByaXZhdGUgV2ViVlRUUGFyc2VyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShUZXh0VHJhY2tMb2FkZXIpOyAKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBUZXh0VHJhY2tMb2FkZXIoVGV4dFRyYWNrTG9hZGVyQ2xpZW50JiwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIFRleHRUcmFja0xvYWRlcihUZXh0VHJhY2tMb2Fk
ZXJDbGllbnQmLCBEb2N1bWVudCYpOwogICAgIHZpcnR1YWwgflRleHRUcmFja0xvYWRlcigpOwog
CiAgICAgYm9vbCBsb2FkKGNvbnN0IFVSTCYsIEhUTUxUcmFja0VsZW1lbnQmKTsKICAgICB2b2lk
IGNhbmNlbExvYWQoKTsKIAogICAgIFZlY3RvcjxSZWY8VlRUQ3VlPj4gZ2V0TmV3Q3VlcygpOwot
ICAgIHZvaWQgZ2V0TmV3UmVnaW9ucyhWZWN0b3I8UmVmUHRyPFZUVFJlZ2lvbj4+JiBvdXRwdXRS
ZWdpb25zKTsKKyAgICBWZWN0b3I8UmVmPFZUVFJlZ2lvbj4+IGdldE5ld1JlZ2lvbnMoKTsKICAg
ICBWZWN0b3I8U3RyaW5nPiBnZXROZXdTdHlsZVNoZWV0cygpOwogCiBwcml2YXRlOgotCiAgICAg
Ly8gQ2FjaGVkUmVzb3VyY2VDbGllbnQKLSAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJl
c291cmNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXByZWNhdGVkRGlkUmVjZWl2ZUNhY2hlZFJl
c291cmNlKENhY2hlZFJlc291cmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSYpIGZpbmFsOworICAgIHZvaWQgZGVwcmVjYXRlZERpZFJlY2VpdmVD
YWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpIGZpbmFsOwogCiAgICAgLy8gV2ViVlRUUGFy
c2VyQ2xpZW50Ci0gICAgdm9pZCBuZXdDdWVzUGFyc2VkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBu
ZXdSZWdpb25zUGFyc2VkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCkgZmlu
YWw7CisgICAgdm9pZCBuZXdSZWdpb25zUGFyc2VkKCkgZmluYWw7CiAgICAgdm9pZCBuZXdTdHls
ZVNoZWV0c1BhcnNlZCgpIGZpbmFsOwotICAgIHZvaWQgZmlsZUZhaWxlZFRvUGFyc2UoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbGVGYWlsZWRUb1BhcnNlKCkgZmluYWw7CiAKICAgICB2b2lkIHBy
b2Nlc3NOZXdDdWVEYXRhKENhY2hlZFJlc291cmNlJik7CiAgICAgdm9pZCBjdWVMb2FkVGltZXJG
aXJlZCgpOwpAQCAtODcsMTEgKzg1LDExIEBAIHByaXZhdGU6CiAgICAgVGV4dFRyYWNrTG9hZGVy
Q2xpZW50JiBtX2NsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViVlRUUGFyc2VyPiBtX2N1
ZVBhcnNlcjsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRUZXh0VHJhY2s+IG1fcmVz
b3VyY2U7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0OworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogICAgIFRpbWVyIG1fY3VlTG9hZFRpbWVy
OwotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgdW5zaWduZWQgbV9wYXJzZU9mZnNldDsKLSAgICBi
b29sIG1fbmV3Q3Vlc0F2YWlsYWJsZTsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgSWRsZSB9OworICAg
IHVuc2lnbmVkIG1fcGFyc2VPZmZzZXQgeyAwIH07CisgICAgYm9vbCBtX25ld0N1ZXNBdmFpbGFi
bGUgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAKaW5kZXggZDk2ZjY5NzNhYWVk
Y2I5YmJjOWI4MDBmMDVmMjg0ZjdmYjQ2ODhlMi4uYWI0ODc5NmJjNGVmODYzY2UxZDRhNGEzMmIy
MTVhYTMwNjNlYmUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNl
clByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXMuY3BwCkBAIC0xOTgsOSArMTk4LDkgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlczo6cHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MoKSBjb25zdAogCiBz
dGF0aWMgU3RyaW5nIHRyYWNrRGlzcGxheU5hbWUoVGV4dFRyYWNrKiB0cmFjaykKIHsKLSAgICBp
ZiAodHJhY2sgPT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKKyAgICBpZiAodHJh
Y2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpCiAgICAgICAgIHJldHVybiB0
ZXh0VHJhY2tPZmZNZW51SXRlbVRleHQoKTsKLSAgICBpZiAodHJhY2sgPT0gVGV4dFRyYWNrOjpj
YXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkKKyAgICBpZiAodHJhY2sgPT0gJlRleHRUcmFjazo6
Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpCiAgICAgICAgIHJldHVybiB0ZXh0VHJhY2tBdXRv
bWF0aWNNZW51SXRlbVRleHQoKTsKIAogICAgIGlmICh0cmFjay0+bGFiZWwoKS5pc0VtcHR5KCkg
JiYgdHJhY2stPnZhbGlkQkNQNDdMYW5ndWFnZSgpLmlzRW1wdHkoKSkKQEAgLTIxOCw5ICsyMTgs
OSBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6ZGlzcGxheU5hbWVGb3JUcmFjayhU
ZXh0VHJhY2sqIHRyYWNrKSBjb25zdAogTWVkaWFTZWxlY3Rpb25PcHRpb24gQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlczo6bWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayhUZXh0VHJhY2sqIHRyYWNr
KSBjb25zdAogewogICAgIGF1dG8gdHlwZSA9IE1lZGlhU2VsZWN0aW9uT3B0aW9uOjpUeXBlOjpS
ZWd1bGFyOwotICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgp
KQorICAgIGlmICh0cmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKICAg
ICAgICAgdHlwZSA9IE1lZGlhU2VsZWN0aW9uT3B0aW9uOjpUeXBlOjpMZWdpYmxlT2ZmOwotICAg
IGVsc2UgaWYgKHRyYWNrID09IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkp
CisgICAgZWxzZSBpZiAodHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJ
dGVtKCkpCiAgICAgICAgIHR5cGUgPSBNZWRpYVNlbGVjdGlvbk9wdGlvbjo6VHlwZTo6TGVnaWJs
ZUF1dG87CiAgICAgcmV0dXJuIHsgZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjayksIHR5cGUgfTsK
IH0KQEAgLTI0Miw4ICsyNDIsOCBAQCBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYQogICAgICAgICBy
ZXR1cm4gY29kZVBvaW50Q29tcGFyZSh0cmFja0Rpc3BsYXlOYW1lKGEuZ2V0KCkpLCB0cmFja0Rp
c3BsYXlOYW1lKGIuZ2V0KCkpKSA8IDA7CiAgICAgfSk7CiAKLSAgICB0cmFja3NGb3JNZW51Lmlu
c2VydCgwLCBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpKTsKLSAgICB0cmFja3NGb3JN
ZW51Lmluc2VydCgxLCBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpKTsKKyAg
ICB0cmFja3NGb3JNZW51Lmluc2VydCgwLCAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0o
KSk7CisgICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMSwgJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVB
dXRvbWF0aWNJdGVtKCkpOwogCiAgICAgcmV0dXJuIHRyYWNrc0Zvck1lbnU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3Bw
CmluZGV4IGEzODNhODlmNjk4YjIzODM1NDY1N2QwMzEzZTVlZTA2YzE5ODNmZTMuLjY5MTdlYjgz
ZTA1YmM5YWI0ODFkNjk2MGM4NGJmMDBjNjk3NzkzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC02ODEsOSAr
NjgxLDkgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpkaXNwbGF5TmFt
ZUZvclRyYWNrKEF1ZGlvVHJhY2sqIHRyYWNrKSBjb24KIAogc3RhdGljIFN0cmluZyB0cmFja0Rp
c3BsYXlOYW1lKFRleHRUcmFjayogdHJhY2spCiB7Ci0gICAgaWYgKHRyYWNrID09IFRleHRUcmFj
azo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpCisgICAgaWYgKHRyYWNrID09ICZUZXh0VHJhY2s6OmNh
cHRpb25NZW51T2ZmSXRlbSgpKQogICAgICAgICByZXR1cm4gdGV4dFRyYWNrT2ZmTWVudUl0ZW1U
ZXh0KCk7Ci0gICAgaWYgKHRyYWNrID09IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJ
dGVtKCkpCisgICAgaWYgKHRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGlj
SXRlbSgpKQogICAgICAgICByZXR1cm4gdGV4dFRyYWNrQXV0b21hdGljTWVudUl0ZW1UZXh0KCk7
CiAKICAgICBTdHJpbmdCdWlsZGVyIGRpc3BsYXlOYW1lQnVpbGRlcjsKQEAgLTk3MSw4ICs5NzEs
OCBAQCBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KAogCiAgICAgc3RkOjpzb3J0KHRyYWNrc0Zvck1l
bnUuYmVnaW4oKSwgdHJhY2tzRm9yTWVudS5lbmQoKSwgdGV4dFRyYWNrQ29tcGFyZSk7CiAKLSAg
ICB0cmFja3NGb3JNZW51Lmluc2VydCgwLCBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgp
KTsKLSAgICB0cmFja3NGb3JNZW51Lmluc2VydCgxLCBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0
b21hdGljSXRlbSgpKTsKKyAgICB0cmFja3NGb3JNZW51Lmluc2VydCgwLCAmVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKSk7CisgICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMSwgJlRleHRU
cmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpOwogCiAgICAgcmV0dXJuIHRyYWNrc0Zv
ck1lbnU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5
YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCmluZGV4IDUwNTQxY2U3
YTQxNjhlMDVhMGFlMDRhYTlhOWU3YTQ4NWFhNmY2MDUuLmIxNDk1MTg0NDczZGNhZTFhZmM1Y2E5
N2Q0NDRhYmM2NTkxN2I4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBA
IC0yOTgsNyArMjk4LDcgQEAgdm9pZCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogICAgIGlmIChpbmRleCA8
IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQogICAgICAgICB0ZXh0VHJhY2sgPSBtX2xl
Z2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKICAg
ICBlbHNlCi0gICAgICAgIHRleHRUcmFjayA9IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVt
KCk7CisgICAgICAgIHRleHRUcmFjayA9ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgp
OwogCiAgICAgbV9tZWRpYUVsZW1lbnQtPnNldFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7
CiB9CkBAIC00OTYsMzkgKzQ5NiwzNiBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlYwogCiB1aW50
NjRfdCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0
ZWRJbmRleCgpIGNvbnN0CiB7Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKLSAgICB1aW50NjRfdCBvZmZJbmRleCA9IDA7
Ci0gICAgYm9vbCB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSBmYWxzZTsKLQogICAgIGF1dG8gaG9z
dCA9IG1fbWVkaWFFbGVtZW50ID8gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkg
OiBudWxscHRyOwotCiAgICAgaWYgKCFob3N0KQotICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRl
eDsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsK
IAogICAgIEF0b21TdHJpbmcgZGlzcGxheU1vZGUgPSBob3N0LT5jYXB0aW9uRGlzcGxheU1vZGUo
KTsKLSAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBob3N0LT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsK
LSAgICBUZXh0VHJhY2sqIGF1dG9tYXRpY0l0ZW0gPSBob3N0LT5jYXB0aW9uTWVudUF1dG9tYXRp
Y0l0ZW0oKTsKKyAgICBUZXh0VHJhY2smIG9mZkl0ZW0gPSBUZXh0VHJhY2s6OmNhcHRpb25NZW51
T2ZmSXRlbSgpOworICAgIFRleHRUcmFjayYgYXV0b21hdGljSXRlbSA9IFRleHRUcmFjazo6Y2Fw
dGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gc2VsZWN0
ZWRJbmRleDsKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gb2ZmSW5kZXg7CiAKICAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5zaXplKCk7IGlu
ZGV4KyspIHsKICAgICAgICAgYXV0byYgdHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W2lu
ZGV4XTsKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAgICAgICBvZmZJbmRl
eCA9IGluZGV4OwogCi0gICAgICAgIGlmICh0cmFjayA9PSBhdXRvbWF0aWNJdGVtICYmIGRpc3Bs
YXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkpIHsKLSAgICAg
ICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1T
ZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHRyYWNrID09ICZvZmZJdGVt
KQorICAgICAgICAgICAgb2ZmSW5kZXggPSBpbmRleDsKIAotICAgICAgICBpZiAoZGlzcGxheU1v
ZGUgIT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSAmJiB0cmFjay0+bW9k
ZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykgewotICAgICAgICAgICAgc2VsZWN0ZWRJ
bmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsK
KyAgICAgICAgaWYgKGRpc3BsYXlNb2RlID09IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNL
ZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIGlmICh0cmFjayA9PSAmYXV0b21hdGljSXRlbSkKKyAg
ICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gaW5kZXg7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAodHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcp
CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKG9mZkl0ZW0gJiYgIXRyYWNrTWVudUl0ZW1TZWxlY3RlZCAmJiBkaXNwbGF5
TW9kZSA9PSBNZWRpYUNvbnRyb2xzSG9zdDo6Zm9yY2VkT25seUtleXdvcmQoKSkKKyAgICBpZiAo
IXNlbGVjdGVkSW5kZXggJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNl
ZE9ubHlLZXl3b3JkKCkpCiAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBvZmZJbmRleDsKIAotICAg
IHJldHVybiBzZWxlY3RlZEluZGV4OworICAgIHJldHVybiBzZWxlY3RlZEluZGV4LnZhbHVlT3Io
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKIH0KIAogYm9vbCBQbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6ZXh0ZXJuYWxQbGF5YmFja0VuYWJsZWQoKSBjb25z
dAo=
</data>
<flag name="review"
          id="408070"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>