<?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>212406</bug_id>
          
          <creation_ts>2020-05-27 05:27:05 -0700</creation_ts>
          <short_desc>Use one audio unit for all MediaStreamTracks of a given process</short_desc>
          <delta_ts>2020-06-08 07:02:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656344</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-27 05:27:05 -0700</bug_when>
    <thetext>Use one audio unit for all tracks of a given process</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656347</commentid>
    <comment_count>1</comment_count>
      <attachid>400325</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-27 06:10:48 -0700</bug_when>
    <thetext>Created attachment 400325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656349</commentid>
    <comment_count>2</comment_count>
      <attachid>400327</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-27 06:20:28 -0700</bug_when>
    <thetext>Created attachment 400327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656410</commentid>
    <comment_count>3</comment_count>
      <attachid>400327</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-05-27 10:13:33 -0700</bug_when>
    <thetext>Comment on attachment 400327
Patch

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

&gt; Source/WebCore/platform/audio/mac/AudioSampleBufferList.cpp:-117
&gt; -    if (source.streamDescription() != streamDescription())
&gt; -        return kAudio_ParamError;
&gt; -
&gt; -    if (frameCount &gt; source.sampleCount())
&gt; -        frameCount = source.sampleCount();
&gt; -
&gt; -    if (frameCount &gt; m_sampleCapacity)
&gt; -        return kAudio_ParamError;

Maybe add ASSERTS for these?

&gt; Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp:113
&gt; +    if (m_isStarted)
&gt; +        AudioOutputUnitStop(m_remoteIOUnit);
&gt; +
&gt; +    AudioComponentInstanceDispose(m_remoteIOUnit);
&gt; +    m_remoteIOUnit = nullptr;

Should you set m_isStarted to false?

&gt; Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp:203
&gt; +    // Mix all sources.

Nit: this comment belongs with the next block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656552</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-27 13:32:51 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #3)
&gt; Comment on attachment 400327 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400327&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/mac/AudioSampleBufferList.cpp:-117
&gt; &gt; -    if (source.streamDescription() != streamDescription())
&gt; &gt; -        return kAudio_ParamError;
&gt; &gt; -
&gt; &gt; -    if (frameCount &gt; source.sampleCount())
&gt; &gt; -        frameCount = source.sampleCount();
&gt; &gt; -
&gt; &gt; -    if (frameCount &gt; m_sampleCapacity)
&gt; &gt; -        return kAudio_ParamError;
&gt; 
&gt; Maybe add ASSERTS for these?

Will do.

&gt; &gt; Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp:113
&gt; &gt; +    if (m_isStarted)
&gt; &gt; +        AudioOutputUnitStop(m_remoteIOUnit);
&gt; &gt; +
&gt; &gt; +    AudioComponentInstanceDispose(m_remoteIOUnit);
&gt; &gt; +    m_remoteIOUnit = nullptr;
&gt; 
&gt; Should you set m_isStarted to false?

Right, will fix it.

&gt; &gt; Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp:203
&gt; &gt; +    // Mix all sources.
&gt; 
&gt; Nit: this comment belongs with the next block.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656794</commentid>
    <comment_count>5</comment_count>
      <attachid>400438</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-28 02:17:37 -0700</bug_when>
    <thetext>Created attachment 400438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657220</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-29 05:06:32 -0700</bug_when>
    <thetext>I tested using the core audio shared unit on MacOS in WebProcess and used it to play the track samples and this works. I haven&apos;t tried yet on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657230</commentid>
    <comment_count>7</comment_count>
      <attachid>400575</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-29 05:45:16 -0700</bug_when>
    <thetext>Created attachment 400575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659588</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-06-05 07:56:45 -0700</bug_when>
    <thetext>ping review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659600</commentid>
    <comment_count>9</comment_count>
      <attachid>400575</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-06-05 08:43:31 -0700</bug_when>
    <thetext>Comment on attachment 400575
Patch

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

&gt; Source/WebCore/platform/audio/mac/AudioSampleBufferList.cpp:-108
&gt; +static void mixBuffers(WebAudioBufferList&amp; destinationBuffer, const AudioBufferList&amp; sourceBuffer, AudioStreamDescription::PCMFormat format, size_t frameCount)
&gt;  {
&gt; -    ASSERT(source.streamDescription() == streamDescription());

ASSERT(frameCount &lt;= sourceBuffer.sampleCount()) ?

&gt; Source/WebCore/platform/audio/mac/AudioSampleDataSource.mm:294
&gt; +        if (m_volume &lt; .95)

Not new to this patch but the magic number should be a named constant, especially since it is used in more than one place now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659624</commentid>
    <comment_count>10</comment_count>
      <attachid>400575</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2020-06-05 09:37:15 -0700</bug_when>
    <thetext>Comment on attachment 400575
Patch

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

The AudioMediaStreamTrackRendererUnit class here duplicates code in AudioDestinationCocoa. Could we refactor that class and use it here instead? The AudioDestinationCocoa class handles cases where the output buffer size changes, for example.  It also clamps output to [-1, 1] to avoid clipping.

&gt; Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp:202
&gt; +        m_renderSources = copyToVector(m_sources);

This will malloc on the audio thread, which is a blocking operation, and could cause audible glitches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660168</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-06-08 04:45:30 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/audio/mac/AudioSampleBufferList.cpp:-108
&gt; &gt; +static void mixBuffers(WebAudioBufferList&amp; destinationBuffer, const AudioBufferList&amp; sourceBuffer, AudioStreamDescription::PCMFormat format, size_t frameCount)
&gt; &gt;  {
&gt; &gt; -    ASSERT(source.streamDescription() == streamDescription());
&gt; 
&gt; ASSERT(frameCount &lt;= sourceBuffer.sampleCount()) ?

OK

&gt; &gt; Source/WebCore/platform/audio/mac/AudioSampleDataSource.mm:294
&gt; &gt; +        if (m_volume &lt; .95)
&gt; 
&gt; Not new to this patch but the magic number should be a named constant,
&gt; especially since it is used in more than one place now.

I added a constexpr.

&gt; The AudioMediaStreamTrackRendererUnit class here duplicates code in
&gt; AudioDestinationCocoa. Could we refactor that class and use it here instead?
&gt; The AudioDestinationCocoa class handles cases where the output buffer size
&gt; changes, for example.  It also clamps output to [-1, 1] to avoid clipping.

Yes, I saw the duplication. I&apos;ll refactor code as a follow-up.

&gt; &gt; Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp:202
&gt; &gt; +        m_renderSources = copyToVector(m_sources);
&gt; 
&gt; This will malloc on the audio thread, which is a blocking operation, and
&gt; could cause audible glitches.

True, I will add another Vector as a member variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660170</commentid>
    <comment_count>12</comment_count>
      <attachid>401325</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-06-08 05:02:07 -0700</bug_when>
    <thetext>Created attachment 401325
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660187</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-08 07:01:02 -0700</bug_when>
    <thetext>Committed r262710: &lt;https://trac.webkit.org/changeset/262710&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401325.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660188</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-08 07:02:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/64117578&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400325</attachid>
            <date>2020-05-27 06:10:48 -0700</date>
            <delta_ts>2020-05-27 06:20:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212406-20200527151046.patch</filename>
            <type>text/plain</type>
            <size>39944</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzg0MzUzZmIxODcwYzA5
MGE1MGM5MDlkYjBmOGQ2OWEzZTYzMzhmMC4uMDk4M2I2ZTAxMzBlNGFmYTYxMjUxZTI2MTRiYzQy
NTNjZjU0YjgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIwLTA1LTI3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugb25lIGF1ZGlvIHVu
aXQgZm9yIGFsbCB0cmFja3Mgb2YgYSBnaXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWZvcmUgdGhlIHBhdGNoLCB3ZSB3ZXJlIGNy
ZWF0aW5nIG9uZSBhdWRpbyB1bml0IHBlciB0cmFjayB0byByZW5kZXIuCisgICAgICAgIFRoaXMg
aXMgcG90ZW50aWFsbHkgaW5lZmZpY2llbnQgYXMgdGhpcyByZXF1aXJlcyB0byBJUEMgb24gaU9T
IGVhY2ggYXVkaW8gZGF0YS4KKyAgICAgICAgSW5zdGVhZCwgd2UgY291bGQgaGF2ZSBvbmUgc2lu
Z2xlIHJlbW90ZSB1bml0IHRoYXQgd2lsbCByZWNlaXZlIHRoZSBtaXhlZCBjb250ZW50IG9mIGFs
bCB0cmFja3MuCisgICAgICAgIEZvciB0aGF0IHB1cnBvc2UsIGludHJvZHVjZSBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgYXMgYSBzaW5nbGV0b24uCisKKyAgICAgICAgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSB3aWxsIGp1c3QgcmVnaXN0ZXIvdW5yZWdpc3Rl
ciBzb3VyY2VzIHRvIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC4KKyAgICAgICAg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IHdpbGwgdGhlbiBzdGFydC9zdG9wIGFz
IG5lZWRlZCBhbmQgZG8gdGhlIG1peGluZy4KKworICAgICAgICBUaGlzIHJlcXVpcmVzIGEgY2hh
bmdlIGluIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSB0byBzdXBwb3J0IG1peGluZyBpbiBjYXNlIHRy
YWNrIHZvbHVtZXMgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgSWYgd2UgaGF2ZSB0byBtaXggYW5k
IHdpdGggZGlmZmVyZW50IHZvbHVtZXMsIHdlIGZpcnN0IHB1bGwgdGhlIHNhbXBsZXMgaW4gYSBz
Y3JhdGNoIGJ1ZmZlciwgYXBwbHkgdm9sdW1lIGFuZCB0aGVuIG1peCBpdCB3aXRoIHRoZSBvdGhl
ciB0cmFja3MuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyBkbyB0aGUg
YXVkaW8gcmVuZGVyaW5nIHdpdGggdGhlIENvcmVBdWRpb1NoYXJlZFVuaXQgZGlyZWN0bHkgc28g
YXMgdG8gaW1wcm92ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGVjaG8gY2FuY2VsbGF0aW9uLgorCisg
ICAgICAgIE1hbnVhbGx5IHRlc3RlZCBwbHVzIExheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRp
by5odG1sCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1peEJ1ZmZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbCk6
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6
Y3JlYXRlQXVkaW9Vbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnJlbmRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjppbnB1dFByb2MpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdDo6fkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OnJlbW92ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Zm9ybWF0RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjppbnB1dFByb2MpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaC4KKwogMjAyMC0wNS0yNyAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlQ29jb2E6Ok9uRnJhbWUgc2hvdWxkIHVzZSB2aWRlbyBmcmFtZSB0aW1lc3RhbXAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGI4NWFkNjZlN2U2MmU1N2RjYzRhZTY5ZjI5MDhmZjkx
NmQ2ODI1N2EuLjAxM2Q5OTFhYjVhM2E0NDg4Yjc2OGU0OWZlMzUwNjUzOTUzNjg3NDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlc0NvY29hLnR4dApAQCAtNDk4LDYgKzQ5OCw3IEBAIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tIEBuby11bmlmeQog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW0gQG5v
LXVuaWZ5CiAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmNwcAorcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdC5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
VmlkZW9DYXB0dXJlU291cmNlLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDg2ZDJhZDUwZjE3NDBjOGFjOTY2
ZGM4MjU0YWQxNDg0NmNmNTcxYS4uODgzYjhhNTRiN2EyNjZkZmJhMzA2NWRhYjZhOWIxNTVmMDFj
YTI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNzU4MCw2ICs3NTgwLDggQEAKIAkJNDFDN0UxMDUxRTZBNTQzNjAwMjdCNERF
IC8qIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDN0UxMDYxRTZBNTQzNjAwMjdCNERFIC8qIENh
bnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxQzdFMTA4MUU2QUEzN0MwMDI3QjRERSAvKiBDYW52YXNDYXB0dXJlTWVk
aWFTdHJlYW1UcmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2FudmFzQ2FwdHVyZU1l
ZGlhU3RyZWFtVHJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUNCQ0VG
QjI0N0U4ODZFMDAxQjQ5MzIgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQ0JD
RUZEMjQ3RTg4NkUwMDFCNDkzMiAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQ0Y4QkU0MUQ0
NjIyMjAwMDcwN0RDOSAvKiBGZXRjaEJvZHlDb25zdW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGZXRjaEJvZHlDb25zdW1lci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxQ0Y4QkU1MUQ0NjIyMjAwMDcwN0RDOSAvKiBGZXRjaEJvZHlDb25z
dW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaEJvZHlDb25zdW1l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2
MkYgLyogQ29udGVudFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
dGVudFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTc4LDYgKzE2NTgw
LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTQxNkEwNjkzMjNDQ0FBOTQwMDM0NzEwOSAvKiBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCAqLywKIAkJCQk0MTZBMDY5MjIz
Q0NBQTkzMDAzNDcxMDkgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oICov
LAorCQkJCTQxQ0JDRUZCMjQ3RTg4NkUwMDFCNDkzMiAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQuY3BwICovLAorCQkJCTQxQ0JDRUZEMjQ3RTg4NkUwMDFCNDkzMiAvKiBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCAqLywKIAkJCQkwNzAzNjNEQTE4MUExQ0RD
MDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovLAogCQkJCTA3MDM2M0RCMTgx
QTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICovLAogCQkJCTA3MDM2
M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmNwcAppbmRleCA4ODU3MTQyOTUyNmMyNGQ0ODFlMTQyNDFkMTc4MmY5NWRjOGQ1
OTRlLi43ZTIyMDg1YmZmYzcwMTA4MTczODM0ZGFhOTE5Njg4OTQ3YjM5N2UzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmNwcApAQCAtMTAzLDQ0ICsxMDMsMzAgQEAgdm9pZCBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6OmFwcGx5R2FpbihmbG9hdCBnYWluKQogICAgIGFwcGx5R2FpbihtX2J1ZmZlckxpc3Qu
Z2V0KCksIGdhaW4sIG1faW50ZXJuYWxGb3JtYXQtPmZvcm1hdCgpKTsKIH0KIAotT1NTdGF0dXMg
QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkKK3N0YXRpYyB2b2lkIG1peEJ1ZmZlcnMoV2Vi
QXVkaW9CdWZmZXJMaXN0JiBkZXN0aW5hdGlvbkJ1ZmZlciwgY29uc3QgQXVkaW9CdWZmZXJMaXN0
JiBzb3VyY2VCdWZmZXIsIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCBmb3JtYXQs
IHNpemVfdCBmcmFtZUNvdW50KQogewotICAgIEFTU0VSVChzb3VyY2Uuc3RyZWFtRGVzY3JpcHRp
b24oKSA9PSBzdHJlYW1EZXNjcmlwdGlvbigpKTsKLQotICAgIGlmIChzb3VyY2Uuc3RyZWFtRGVz
Y3JpcHRpb24oKSAhPSBzdHJlYW1EZXNjcmlwdGlvbigpKQotICAgICAgICByZXR1cm4ga0F1ZGlv
X1BhcmFtRXJyb3I7Ci0KLSAgICBpZiAoZnJhbWVDb3VudCA+IHNvdXJjZS5zYW1wbGVDb3VudCgp
KQotICAgICAgICBmcmFtZUNvdW50ID0gc291cmNlLnNhbXBsZUNvdW50KCk7Ci0KLSAgICBpZiAo
ZnJhbWVDb3VudCA+IG1fc2FtcGxlQ2FwYWNpdHkpCi0gICAgICAgIHJldHVybiBrQXVkaW9fUGFy
YW1FcnJvcjsKLQotICAgIG1fc2FtcGxlQ291bnQgPSBmcmFtZUNvdW50OwotCi0gICAgYXV0byYg
c291cmNlQnVmZmVyID0gc291cmNlLmJ1ZmZlckxpc3QoKTsKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbV9idWZmZXJMaXN0LT5idWZmZXJDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dp
dGNoIChtX2ludGVybmFsRm9ybWF0LT5mb3JtYXQoKSkgeworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXJDb3VudCgpOyBpKyspIHsKKyAgICAgICAg
c3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJ
bnQxNjogewotICAgICAgICAgICAgaW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxp
bnQxNl90Kj4obV9idWZmZXJMaXN0LT5idWZmZXIoaSktPm1EYXRhKTsKLSAgICAgICAgICAgIGlu
dDE2X3QqIHNvdXJjZSA9IHN0YXRpY19jYXN0PGludDE2X3QqPihzb3VyY2VCdWZmZXIuYnVmZmVy
KGkpLT5tRGF0YSk7CisgICAgICAgICAgICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0
PGludDE2X3QqPihkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAg
ICAgIGF1dG8qIHNvdXJjZSA9IHN0YXRpY19jYXN0PGludDE2X3QqPihzb3VyY2VCdWZmZXIubUJ1
ZmZlcnNbaV0ubURhdGEpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFt
ZUNvdW50OyBpKyspCiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25baV0gKz0gc291cmNlW2ld
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjpJbnQzMjogewotICAgICAgICAgICAgaW50MzJfdCogZGVzdGluYXRpb24g
PSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4obV9idWZmZXJMaXN0LT5idWZmZXIoaSktPm1EYXRhKTsK
LSAgICAgICAgICAgIHZEU1BfdmFkZGkoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50MzJfdCo+KHNvdXJjZUJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKSwgMSwgZGVzdGluYXRpb24s
IDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYXV0byogZGVzdGluYXRpb24gPSBzdGF0aWNf
Y2FzdDxpbnQzMl90Kj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0YSk7CisgICAg
ICAgICAgICB2RFNQX3ZhZGRpKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGludDMy
X3QqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwg
ZnJhbWVDb3VudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0MzI6IHsKLSAgICAgICAgICAgIGZsb2F0KiBk
ZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obV9idWZmZXJMaXN0LT5idWZmZXIoaSkt
Pm1EYXRhKTsKLSAgICAgICAgICAgIHZEU1BfdmFkZChkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHNvdXJjZUJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKSwgMSwgZGVzdGlu
YXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYXV0byogZGVzdGluYXRpb24gPSBz
dGF0aWNfY2FzdDxmbG9hdCo+KGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGEpOwor
ICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVzdGluYXRpb24sIDEs
IGZyYW1lQ291bnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0OiB7Ci0gICAgICAgICAgICBkb3VibGUq
IGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4obV9idWZmZXJMaXN0LT5idWZmZXIo
aSktPm1EYXRhKTsKLSAgICAgICAgICAgIHZEU1BfdmFkZEQoZGVzdGluYXRpb24sIDEsIHJlaW50
ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oc291cmNlQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGEpLCAxLCBk
ZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CisgICAgICAgICAgICBhdXRvKiBkZXN0aW5hdGlv
biA9IHN0YXRpY19jYXN0PGRvdWJsZSo+KGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURh
dGEpOworICAgICAgICAgICAgdkRTUF92YWRkRChkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRf
Y2FzdDxkb3VibGUqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpLCAxLCBkZXN0aW5h
dGlvbiwgMSwgZnJhbWVDb3VudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6CkBAIC0xNDgsNyArMTM0LDI0
IEBAIE9TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6bWl4RnJvbShjb25zdCBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QmIHNvdXJjZSwgc2l6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNv
bnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkKK3sK
KyAgICBBU1NFUlQoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0gc3RyZWFtRGVzY3JpcHRp
b24oKSk7CisKKyAgICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gc3RyZWFtRGVz
Y3JpcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgaWYg
KGZyYW1lQ291bnQgPiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKKyAgICAgICAgZnJhbWVDb3VudCA9
IHNvdXJjZS5zYW1wbGVDb3VudCgpOworCisgICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBsZUNh
cGFjaXR5KQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CiAKKyAgICBtX3NhbXBs
ZUNvdW50ID0gZnJhbWVDb3VudDsKKworICAgIG1peEJ1ZmZlcnMoYnVmZmVyTGlzdCgpLCBzb3Vy
Y2UuYnVmZmVyTGlzdCgpLCBtX2ludGVybmFsRm9ybWF0LT5mb3JtYXQoKSwgZnJhbWVDb3VudCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE5Miw2ICsxOTUsMTcgQEAgT1NTdGF0dXMgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0Ojpjb3B5VG8oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBm
cmFtZUNvdW4KICAgICByZXR1cm4gMDsKIH0KIAorT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJM
aXN0OjptaXhGcm9tKEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkK
K3sKKyAgICBpZiAoZnJhbWVDb3VudCA+IG1fc2FtcGxlQ291bnQpCisgICAgICAgIHJldHVybiBr
QXVkaW9fUGFyYW1FcnJvcjsKKyAgICBpZiAoc291cmNlLm1OdW1iZXJCdWZmZXJzID4gbV9idWZm
ZXJMaXN0LT5idWZmZXJDb3VudCgpKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7
CisKKyAgICBtaXhCdWZmZXJzKGJ1ZmZlckxpc3QoKSwgc291cmNlLCBtX2ludGVybmFsRm9ybWF0
LT5mb3JtYXQoKSwgZnJhbWVDb3VudCk7CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjpyZXNldCgpCiB7CiAgICAgbV9zYW1wbGVDb3VudCA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmgKaW5kZXggNWNmZGM1YThkMzI5ZWZhOTVhMzgzMDgzZDQ2OGRmN2QzNzEyMjU3
ZC4uZDM3MWE4N2RkMTg3NThkYWI2ZjNhODJmOWNmN2Y1OWVlNDllYmYwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZl
ckxpc3QuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAKICAgICBPU1N0YXR1cyBtaXhGcm9t
KGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCBjb3VudCA9IFNJWkVfTUFYKTsK
IAorICAgIE9TU3RhdHVzIG1peEZyb20oQXVkaW9CdWZmZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0g
U0laRV9NQVgpOwogICAgIE9TU3RhdHVzIGNvcHlUbyhBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3Qg
Y291bnQgPSBTSVpFX01BWCk7CiAKICAgICBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24mIHN0cmVhbURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbEZvcm1hdC0+
c3RyZWFtRGVzY3JpcHRpb24oKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KaW5kZXggMDAwMDFjYjgz
ZDA2NjllNTYzZmY0ZDI1NTM0YTMyYjIxYjU1ZmMxZi4uZDhkNDU0NzM5MDdhMjQ1MzUyNjk5Y2U2
MTlhOTAxODk1YTUwMzViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCkBAIC0yODksMTAgKzI4OSwy
NSBAQCBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbChBdWRp
b0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90JgogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9y
aW5nQnVmZmVyLT5mZXRjaCgmYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBtb2RlID09
IENvcHkgPyBDQVJpbmdCdWZmZXI6OkNvcHkgOiBDQVJpbmdCdWZmZXI6Ok1peCk7CisgICAgaWYg
KG1vZGUgPT0gQ29weSkgeworICAgICAgICBtX3JpbmdCdWZmZXItPmZldGNoKCZidWZmZXIsIHNh
bXBsZUNvdW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZlcjo6Q29weSk7CisgICAgICAgIGlmICht
X3ZvbHVtZSA8IC45NSkKKyAgICAgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlH
YWluKGJ1ZmZlciwgbV92b2x1bWUsIG1fb3V0cHV0RGVzY3JpcHRpb24tPmZvcm1hdCgpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1fdm9sdW1lID49IC45NSkgewor
ICAgICAgICBtX3JpbmdCdWZmZXItPmZldGNoKCZidWZmZXIsIHNhbXBsZUNvdW50LCB0aW1lU3Rh
bXAsIENBUmluZ0J1ZmZlcjo6TWl4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKG1fc2NyYXRjaEJ1ZmZlci0+Y29weUZyb20oKm1fcmluZ0J1ZmZlci5nZXQoKSwgc2Ft
cGxlQ291bnQsIHRpbWVTdGFtcCwgQ0FSaW5nQnVmZmVyOjpDb3B5KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKG1fdm9sdW1lIDwgLjk1KQotICAgICAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6OmFwcGx5R2FpbihidWZmZXIsIG1fdm9sdW1lLCBtX291dHB1dERlc2NyaXB0aW9u
LT5mb3JtYXQoKSk7CisgICAgbV9zY3JhdGNoQnVmZmVyLT5hcHBseUdhaW4obV92b2x1bWUpOwor
ICAgIG1fc2NyYXRjaEJ1ZmZlci0+bWl4RnJvbShidWZmZXIsIHNhbXBsZUNvdW50KTsKKyAgICBp
ZiAobV9zY3JhdGNoQnVmZmVyLT5jb3B5VG8oYnVmZmVyLCBzYW1wbGVDb3VudCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCmluZGV4IGJlZTNlZWQ1NzI0
MTEyMDUxYTA0ZjRlYjQyYTFkODAxYWRjNTVlMzIuLjM5NmYzYTBkN2JiMDdiZmZkZTFlMmE5OGUx
ODk3YmI4MGFmNzAxYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAgLTI4LDE0ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QuaCIKKyNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQuaCIKICNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKLSNpbmNsdWRlICJBdWRp
b1Nlc3Npb24uaCIKICNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0KLSNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4K
LSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0F1ZGlvVG9vbGJveFNQSS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQ3LDI4ICs0MiwxNCBAQCB2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2E6OnN0YXJ0KCkKIHsKICAgICBjbGVhcigpOwogCi0gICAgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uIG91dHB1dERlc2NyaXB0aW9uOwotICAgIGF1dG8gcmVtb3RlSU9Vbml0
ID0gY3JlYXRlQXVkaW9Vbml0KG91dHB1dERlc2NyaXB0aW9uKTsKLSAgICBpZiAoIXJlbW90ZUlP
VW5pdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gZXJyb3IgPSBBdWRpb091dHB1
dFVuaXRTdGFydChyZW1vdGVJT1VuaXQpKSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElG
SUVSLCAiQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkLCBlcnJvciA9ICIsIGVycm9yLCAiICgi
LCAoY29uc3QgY2hhciopJmVycm9yLCAiKSIpOwotICAgICAgICBBdWRpb0NvbXBvbmVudEluc3Rh
bmNlRGlzcG9zZShyZW1vdGVJT1VuaXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
b3V0cHV0RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4o
b3V0cHV0RGVzY3JpcHRpb24pOwotICAgIG1fcmVtb3RlSU9Vbml0ID0gcmVtb3RlSU9Vbml0Owor
ICAgIGlmIChhdXRvKiBmb3JtYXREZXNjcmlwdGlvbiA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6c2luZ2xldG9uKCkuZm9ybWF0RGVzY3JpcHRpb24oKSkKKyAgICAgICAgbV9v
dXRwdXREZXNjcmlwdGlvbiA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPigq
Zm9ybWF0RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyQ29jb2E6OnN0b3AoKQogewotICAgIGlmICghbV9yZW1vdGVJT1VuaXQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9yZW1vdGVJT1VuaXQpOwotICAgIEF1
ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1fcmVtb3RlSU9Vbml0KTsKLSAgICBtX3JlbW90
ZUlPVW5pdCA9IG51bGxwdHI7CisgICAgaWYgKG1fZGF0YVNvdXJjZSkKKyAgICAgICAgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKS5yZW1vdmVTb3VyY2UoKm1f
ZGF0YVNvdXJjZSk7CiB9CiAKIHZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YTo6Y2xlYXIoKQpAQCAtNzYsODQgKzU3LDIxIEBAIHZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYTo6Y2xlYXIoKQogICAgIHN0b3AoKTsKIAogICAgIG1fZGF0YVNvdXJjZSA9
IG51bGxwdHI7Ci0gICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9vdXRw
dXREZXNjcmlwdGlvbiA9IHsgfTsKIH0KIAotQXVkaW9Db21wb25lbnRJbnN0YW5jZSBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjcmVhdGVBdWRpb1VuaXQoQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uJiBvdXRwdXREZXNjcmlwdGlvbikKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKLSAgICBBdWRpb0Nv
bXBvbmVudEluc3RhbmNlIHJlbW90ZUlPVW5pdCB7IG51bGxwdHIgfTsKLQotICAgIEF1ZGlvQ29t
cG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3JpcHRpb24geyBrQXVkaW9Vbml0VHlwZV9PdXRw
dXQsIDAsIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGlvVW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBr
QXVkaW9Vbml0U3ViVHlwZV9SZW1vdGVJTzsKLSNlbHNlCi0gICAgaW9Vbml0RGVzY3JpcHRpb24u
Y29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJUeXBlX0RlZmF1bHRPdXRwdXQ7Ci0jZW5k
aWYKLQotICAgIEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5k
TmV4dChudWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOwotICAgIEFTU0VSVChpb0NvbXBvbmVu
dCk7Ci0gICAgaWYgKCFpb0NvbXBvbmVudCkgewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJ
RklFUiwgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBJTyB1bml0IGNvbXBvbmVudCIpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBPU1N0YXR1cyBlcnIgPSBBdWRpb0NvbXBv
bmVudEluc3RhbmNlTmV3KGlvQ29tcG9uZW50LCAmcmVtb3RlSU9Vbml0KTsKLSAgICBpZiAoZXJy
KSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxlIHRvIG9wZW4gdnBp
byB1bml0LCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNoYXIqKSZlcnIsICIpIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgVUludDMyIHBhcmFtID0gMTsKLSAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShy
ZW1vdGVJT1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5p
dFNjb3BlX091dHB1dCwgMCwgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKLSAgICBpZiAoZXJyKSB7
Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxlIHRvIGVuYWJsZSB2cGlv
IHVuaXQgb3V0cHV0LCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNoYXIqKSZlcnIsICIp
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSNlbmRpZgotCi0gICAgQVVSZW5k
ZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgaW5wdXRQcm9jLCB0aGlzIH07Ci0gICAgZXJy
ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlf
U2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZjYWxsYmFjaywg
c2l6ZW9mKGNhbGxiYWNrKSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBFUlJPUl9MT0coTE9H
SURFTlRJRklFUiwgInVuYWJsZSB0byBzZXQgdnBpbyB1bml0IHNwZWFrZXIgcHJvYywgZXJyb3Ig
PSAiLCBlcnIsICIgKCIsIChjb25zdCBjaGFyKikmZXJyLCAiKSIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihvdXRwdXREZXNjcmlw
dGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpKTsKLSAgICBlcnIgID0gQXVkaW9Vbml0R2V0UHJvcGVy
dHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigp
LCAmc2l6ZSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklF
UiwgInVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAiLCBlcnIsICIg
KCIsIChjb25zdCBjaGFyKikmZXJyLCAiKSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLm1TYW1wbGVS
YXRlID0gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2FtcGxlUmF0ZSgpOwotCi0gICAg
ZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVy
dHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlw
dGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCBzaXplb2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFt
RGVzY3JpcHRpb24oKSkpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJST1JfTE9HKExPR0lE
RU5USUZJRVIsICJ1bmFibGUgdG8gc2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yID0gIiwg
ZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIikiKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgZXJyID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShyZW1vdGVJT1VuaXQp
OwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJBdWRp
b1VuaXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNo
YXIqKSZlcnIsICIpIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJl
dHVybiByZW1vdGVJT1VuaXQ7CisgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnNl
dFZvbHVtZSh2b2x1bWUpOworICAgIGlmIChtX2RhdGFTb3VyY2UpCisgICAgICAgIG1fZGF0YVNv
dXJjZS0+c2V0Vm9sdW1lKHZvbHVtZSk7CiB9CiAKIHZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMoY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBj
b25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNhbXBsZUNvdW50KQogewogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0
aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBl
KTsKLSAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAo
IW1fZGF0YVNvdXJjZSB8fCAhbV9kYXRhU291cmNlLT5pbnB1dERlc2NyaXB0aW9uKCkgfHwgKm1f
ZGF0YVNvdXJjZS0+aW5wdXREZXNjcmlwdGlvbigpICE9IGRlc2NyaXB0aW9uKSB7Ci0gICAgICAg
IGlmIChtX3Nob3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNvdXJjZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQogICAgICAgICBhdXRvIGRhdGFTb3VyY2UgPSBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OmNy
ZWF0ZShkZXNjcmlwdGlvbi5zYW1wbGVSYXRlKCkgKiAyLCAqdGhpcyk7CiAKICAgICAgICAgaWYg
KGRhdGFTb3VyY2UtPnNldElucHV0Rm9ybWF0KHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGRl
c2NyaXB0aW9uKSkpIHsKQEAgLTE2MSw0NSArNzksMjggQEAgdm9pZCBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hOjpwdXNoU2FtcGxlcyhjb25zdCBNZWRpYVRpbWUmIHNhbXBsZVRp
bWUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChkYXRhU291
cmNlLT5zZXRPdXRwdXRGb3JtYXQoKm1fb3V0cHV0RGVzY3JpcHRpb24pKSB7CisgICAgICAgIGlm
ICghbV9vdXRwdXREZXNjcmlwdGlvbiB8fCBkYXRhU291cmNlLT5zZXRPdXRwdXRGb3JtYXQoKm1f
b3V0cHV0RGVzY3JpcHRpb24pKSB7CiAgICAgICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklF
UiwgIlVuYWJsZSB0byBzZXQgdGhlIG91dHB1dCBmb3JtYXQgb2YgZGF0YSBzb3VyY2UiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRhdGFTb3VyY2UtPnNldFBh
dXNlZChmYWxzZSk7Ci0gICAgICAgIGRhdGFTb3VyY2UtPnNldFZvbHVtZSh2b2x1bWUoKSk7Cisg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhp
cyksIG9sZFNvdXJjZSA9IG1fZGF0YVNvdXJjZSwgbmV3U291cmNlID0gZGF0YVNvdXJjZS5jb3B5
UmVmKCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKG9sZFNvdXJjZSkKKyAgICAgICAgICAg
ICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLnJlbW92
ZVNvdXJjZSgqb2xkU291cmNlKTsKIAorICAgICAgICAgICAgbmV3U291cmNlLT5zZXRQYXVzZWQo
ZmFsc2UpOworICAgICAgICAgICAgbmV3U291cmNlLT5zZXRWb2x1bWUodm9sdW1lKCkpOworICAg
ICAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKS5h
ZGRTb3VyY2UoV1RGTW92ZShuZXdTb3VyY2UpKTsKKyAgICAgICAgfSk7CiAgICAgICAgIG1fZGF0
YVNvdXJjZSA9IFdURk1vdmUoZGF0YVNvdXJjZSk7Ci0gICAgICAgIG1fc2hvdWxkVXBkYXRlUmVu
ZGVyZXJEYXRhU291cmNlID0gdHJ1ZTsKICAgICB9CiAKICAgICBtX2RhdGFTb3VyY2UtPnB1c2hT
YW1wbGVzKHNhbXBsZVRpbWUsIGF1ZGlvRGF0YSwgc2FtcGxlQ291bnQpOwogfQogCi1PU1N0YXR1
cyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpyZW5kZXIoVUludDMyIHNhbXBs
ZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywg
Y29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MmIGFjdGlvbkZsYWdzKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
IChtX3Nob3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNvdXJjZSkgewotICAgICAgICBtX3JlbmRlcmVy
RGF0YVNvdXJjZSA9IG1fZGF0YVNvdXJjZTsKLSAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJl
ckRhdGFTb3VyY2UgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVuZGVyZXJEYXRhU291
cmNlKSB7Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0
YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlQ291bnQgKiBtX291dHB1dERlc2NyaXB0aW9uLT5ieXRl
c1BlckZyYW1lKCkpKTsKLSAgICAgICAgYWN0aW9uRmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0
aW9uX091dHB1dElzU2lsZW5jZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9y
ZW5kZXJlckRhdGFTb3VyY2UtPnB1bGxTYW1wbGVzKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihzYW1wbGVDb3VudCksIHRpbWVTdGFtcC5tU2FtcGxlVGltZSwgdGltZVN0YW1wLm1Ib3N0VGlt
ZSwgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpDb3B5KTsKLSAgICByZXR1cm4gMDsKLX0KLQotT1NT
dGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6aW5wdXRQcm9jKHZvaWQq
IHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogYWN0aW9uRmxhZ3MsIGNvbnN0
IEF1ZGlvVGltZVN0YW1wKiB0aW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIHNh
bXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSo+KHVzZXJEYXRhKS0+cmVu
ZGVyKHNhbXBsZUNvdW50LCAqaW9EYXRhLCBpbkJ1c051bWJlciwgKnRpbWVTdGFtcCwgKmFjdGlv
bkZsYWdzKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaAppbmRleCBkYmE3OWU1YjgyY2Fi
ZWVjYzJkM2EyNjJjNmEzYWE1YjU1NTYxZTgyLi4wNzUxMWIxZjUyZDhmYTcwMTZlYTI1ODk1ZDk0
ZGU3ZjZmYjA4MDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKICNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+CiAj
aW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CkBAIC0zOSw3ICs0MCw3IEBAIGNs
YXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKIGNsYXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsK
IGNsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKIAotY2xhc3MgQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJDb2NvYSA6IHB1YmxpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ciB7CitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hIDogcHVibGljIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8QXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlv
bjo6RWFnZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hKCk7CkBAIC01MSwxOSArNTIsMTAgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0KCkgZmluYWw7CiAgICAgdm9pZCBzdG9wKCkgZmluYWw7
CiAgICAgdm9pZCBjbGVhcigpIGZpbmFsOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBmaW5h
bDsKIAotICAgIHN0YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9pZCosIEF1ZGlvVW5pdFJlbmRl
ckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgaW5CdXNOdW1iZXIs
IFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0Kik7Ci0gICAgT1NTdGF0dXMg
cmVuZGVyKFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiwgVUludDMyIGluQnVz
TnVtYmVyLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
Jik7Ci0KLSAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlIGNyZWF0ZUF1ZGlvVW5pdChDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24mKTsKLQotICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgbV9yZW1v
dGVJT1VuaXQgeyBudWxscHRyIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKLQotICAgIC8vIEF1ZGlvIHRocmVhZHMg
bWVtYmVyCiAgICAgUmVmUHRyPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gbV9kYXRhU291cmNlOwot
ICAgIFJlZlB0cjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+IG1fcmVuZGVyZXJEYXRhU291cmNlOwot
ICAgIGJvb2wgbV9zaG91bGRVcGRhdGVSZW5kZXJlckRhdGFTb3VyY2UgeyBmYWxzZSB9OwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zMTllMGI0OGM2ZjhmOWQ1ZjY3YTkwMzFhNzYwODg5ZWQ0NjM3NTA2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAKQEAgLTAsMCArMSwyMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgiCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2Uu
aCIKKyNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKKyNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKKyNpbmNsdWRlIDxwYWwvc3BpL2Nv
Y29hL0F1ZGlvVG9vbGJveFNQSS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKKyNpbmNsdWRl
IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQmIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0PiByZWdpc3RyeTsKKyAgICByZXR1cm4gcmVn
aXN0cnk7Cit9CisKK0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6fkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNlKFJlZjxBdWRpb1NhbXBs
ZURhdGFTb3VyY2U+JiYgc291cmNlKQoreworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNlIik7CisKKyAgICBib29sIHNo
b3VsZFN0YXJ0ID0gZmFsc2U7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fc291cmNlc0xvY2spOworICAgICAgICBBU1NFUlQoIW1fc291cmNlcy5jb250YWlucyhzb3Vy
Y2UuZ2V0KCkpKTsKKyAgICAgICAgc2hvdWxkU3RhcnQgPSBtX3NvdXJjZXMuaXNFbXB0eSgpOwor
ICAgICAgICBtX3NvdXJjZXMuYWRkKFdURk1vdmUoc291cmNlKSk7CisgICAgICAgIG1fc2hvdWxk
VXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7CisgICAgfQorICAgIGlmIChzaG91bGRTdGFydCkK
KyAgICAgICAgc3RhcnQoKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ6OnJlbW92ZVNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sKKyAg
ICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6
OnJlbW92ZVNvdXJjZSIpOworCisgICAgYm9vbCBzaG91bGRTdG9wID0gZmFsc2U7CisgICAgewor
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc291cmNlc0xvY2spOworICAgICAgICBt
X3NvdXJjZXMucmVtb3ZlKHNvdXJjZSk7CisgICAgICAgIHNob3VsZFN0b3AgPSBtX3NvdXJjZXMu
aXNFbXB0eSgpOworICAgICAgICBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSB0cnVlOwor
ICAgIH0KKyAgICBpZiAoc2hvdWxkU3RvcCkKKyAgICAgICAgc3RvcCgpOworfQorCit2b2lkIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQoKQoreworICAgIFJFTEVBU0Vf
TE9HKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQiKTsK
KworICAgIGNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCk7CisgICAgaWYgKCFtX3JlbW90ZUlPVW5p
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gZXJyb3IgPSBBdWRpb091dHB1dFVu
aXRTdGFydChtX3JlbW90ZUlPVW5pdCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2Vi
UlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdGFydCBBdWRpb091dHB1
dFVuaXRTdGFydCBmYWlsZWQsIGVycm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIEF1ZGlvQ29t
cG9uZW50SW5zdGFuY2VEaXNwb3NlKG1fcmVtb3RlSU9Vbml0KTsKKyAgICAgICAgbV9yZW1vdGVJ
T1VuaXQgPSBudWxscHRyOworICAgIH0KKyAgICBtX2lzU3RhcnRlZCA9IHRydWU7CisgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IGlzIHN0
YXJ0ZWQiKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0
b3AoKQoreworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6c3RvcCIpOworCisgICAgaWYgKCFtX3JlbW90ZUlPVW5pdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICBBdWRpb091dHB1dFVuaXRT
dG9wKG1fcmVtb3RlSU9Vbml0KTsKKworICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3Nl
KG1fcmVtb3RlSU9Vbml0KTsKKyAgICBtX3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7Cit9CisKK0NB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0
Ojpmb3JtYXREZXNjcmlwdGlvbigpCit7CisgICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsK
KyAgICByZXR1cm4gbV9vdXRwdXREZXNjcmlwdGlvbi5nZXQoKTsKK30KKwordm9pZCBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCkKK3sK
KyAgICBBU1NFUlQoIW1fcmVtb3RlSU9Vbml0IHx8IG1fb3V0cHV0RGVzY3JpcHRpb24pOworICAg
IGlmIChtX3JlbW90ZUlPVW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uIG91dHB1dERlc2NyaXB0aW9uOworICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFu
Y2UgcmVtb3RlSU9Vbml0IHsgbnVsbHB0ciB9OworCisgICAgQXVkaW9Db21wb25lbnREZXNjcmlw
dGlvbiBpb1VuaXREZXNjcmlwdGlvbiB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwgMCwga0F1ZGlv
VW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgaW9Vbml0RGVzY3JpcHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJU
eXBlX1JlbW90ZUlPOworI2Vsc2UKKyAgICBpb1VuaXREZXNjcmlwdGlvbi5jb21wb25lbnRTdWJU
eXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfRGVmYXVsdE91dHB1dDsKKyNlbmRpZgorCisgICAgQXVk
aW9Db21wb25lbnQgaW9Db21wb25lbnQgPSBBdWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxwdHIs
ICZpb1VuaXREZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKGlvQ29tcG9uZW50KTsKKyAgICBpZiAo
IWlvQ29tcG9uZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBm
aW5kIHJlbW90ZSBJTyB1bml0IGNvbXBvbmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byBlcnJvciA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQs
ICZyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1
ZGlvVW5pdCB1bmFibGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9yID0gJWQiLCBlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFVJ
bnQzMiBwYXJhbSA9IDE7CisgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9V
bml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29wZV9P
dXRwdXQsIDAsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IG91dHB1
dCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgaW5wdXRQcm9jLCBudWxs
cHRyIH07CisgICAgZXJyb3IgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtB
dWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2Jh
bCwgMCwgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtl
ciBwcm9jLCBlcnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgVUludDMyIHNpemUgPSBzaXplb2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRp
b24oKSk7CisgICAgZXJyb3IgID0gQXVkaW9Vbml0R2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBr
QXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAs
ICZvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCAmc2l6ZSk7CisgICAgaWYg
KGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBnZXQgaW5w
dXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBs
ZVJhdGUgPSBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7CisKKyAg
ICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvVW5pdFBy
b3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAmb3V0cHV0RGVz
Y3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSwgc2l6ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0
cmVhbURlc2NyaXB0aW9uKCkpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVh
dGVBdWRpb1VuaXQgdW5hYmxlIHRvIHNldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciA9ICVk
IiwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXJyb3IgPSBBdWRpb1Vu
aXRJbml0aWFsaXplKHJlbW90ZUlPVW5pdCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dDo6Y3JlYXRlQXVkaW9Vbml0IEF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWlsZWQsIGVycm9yID0g
JWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX291dHB1dERlc2Ny
aXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KG91dHB1dERlc2Ny
aXB0aW9uKTsKKyAgICBtX3JlbW90ZUlPVW5pdCA9IHJlbW90ZUlPVW5pdDsKK30KKworT1NTdGF0
dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5kZXIoVUludDMyIHNhbXBs
ZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywg
Y29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MmIGFjdGlvbkZsYWdzKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlm
IChtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSB0
cnlIb2xkTG9jayhtX3NvdXJjZXNMb2NrKTsKKyAgICAgICAgaWYgKCFsb2NrZXIpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKworICAgICAgICBtX3JlbmRlclNvdXJjZXMgPSBjb3B5VG9WZWN0b3Io
bV9zb3VyY2VzKTsKKyAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzID0gZmFsc2U7
CisgICAgfQorICAgIC8vIE1peCBhbGwgc291cmNlcy4KKyAgICBpZiAobV9yZW5kZXJTb3VyY2Vz
LmlzRW1wdHkoKSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoaW9E
YXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50ICogbV9vdXRwdXREZXNjcmlwdGlv
bi0+Ynl0ZXNQZXJGcmFtZSgpKSk7CisgICAgICAgIGFjdGlvbkZsYWdzID0ga0F1ZGlvVW5pdFJl
bmRlckFjdGlvbl9PdXRwdXRJc1NpbGVuY2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBib29sIGlzRmlyc3RTb3VyY2UgPSB0cnVlOworICAgIGZvciAoYXV0byYgc291cmNlIDogbV9y
ZW5kZXJTb3VyY2VzKSB7CisgICAgICAgIHNvdXJjZS0+cHVsbFNhbXBsZXMoaW9EYXRhLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50KSwgdGltZVN0YW1wLm1TYW1wbGVUaW1lLCB0aW1l
U3RhbXAubUhvc3RUaW1lLCBpc0ZpcnN0U291cmNlID8gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpD
b3B5IDogQXVkaW9TYW1wbGVEYXRhU291cmNlOjpNaXgpOworICAgICAgICBpc0ZpcnN0U291cmNl
ID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitPU1N0YXR1cyBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmlucHV0UHJvYyh2b2lkKiwgQXVkaW9Vbml0UmVuZGVy
QWN0aW9uRmxhZ3MqIGFjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogdGltZVN0YW1w
LCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0
KiBpb0RhdGEpCit7CisgICAgcmV0dXJuIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dDo6c2luZ2xldG9uKCkucmVuZGVyKHNhbXBsZUNvdW50LCAqaW9EYXRhLCBpbkJ1c051bWJlciwg
KnRpbWVTdGFtcCwgKmFjdGlvbkZsYWdzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjViNzk3M2M4YWY2MDU2NTcwZDUxYzU5YjM1NTI5MDFjNTZjNDFjOTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvVG9vbGJveC5oPgorI2lu
Y2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9TYW1wbGVEYXRhU291cmNl
OworY2xhc3MgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OworY2xhc3MgQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOworCitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgeworcHVi
bGljOgorICAgIHN0YXRpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQmIHNpbmds
ZXRvbigpOworCisgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KCkgPSBkZWZh
dWx0OworICAgIH5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQoKTsKKworICAgIHN0
YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
KiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBudW1i
ZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0Kik7CisKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAg
dm9pZCBzdG9wKCk7CisKKyAgICB2b2lkIGFkZFNvdXJjZShSZWY8QXVkaW9TYW1wbGVEYXRhU291
cmNlPiYmKTsKKyAgICB2b2lkIHJlbW92ZVNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmKTsK
KworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiogZm9ybWF0RGVzY3JpcHRpb24oKTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCk7CisgICAgT1NTdGF0
dXMgcmVuZGVyKFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiwgVUludDMyIGlu
QnVzTnVtYmVyLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZs
YWdzJik7CisKKyAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlIG1fcmVtb3RlSU9Vbml0IHsgbnVs
bHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1f
b3V0cHV0RGVzY3JpcHRpb247CisgICAgSGFzaFNldDxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNl
Pj4gbV9zb3VyY2VzOworICAgIFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9y
ZW5kZXJTb3VyY2VzOworICAgIGJvb2wgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzIHsgZmFs
c2UgfTsKKyAgICBMb2NrIG1fc291cmNlc0xvY2s7CisgICAgYm9vbCBtX2lzU3RhcnRlZCB7IGZh
bHNlIH07Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJM
RShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWYwNzI2MmM4MGJkMjFmZmRhYmY1NTFlZjZjMDAzNGFl
YjE4NGYyNS4uNzI3NDlhNWNmMjI4OTAyNDVhMWVlNjM5ZDVlYTJhNjYzYjUyZGU4YSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTI3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2Ugb25lIGF1ZGlvIHVuaXQgZm9yIGFsbCB0cmFja3Mgb2YgYSBn
aXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHdlYnJ0Yy9tdWx0aS1hdWRpby1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYnJ0Yy9tdWx0aS1hdWRpby5odG1sOiBBZGRlZC4KKwogMjAyMC0wNS0yNSAgQ2FybG9zIEFs
YmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWZs
ZXhib3hdIFdQVCBUZXN0IGNzcy9jc3MtZmxleGJveC9mbGV4LWxpbmVzL211bHRpLWxpbmUtd3Jh
cC1yZXZlcnNlLWNvbHVtbi1yZXZlcnNlLmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJydGMv
bXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxZmY3ODRlMTIzNWNiNzlkYWZh
OWJkZjZiNTUyMzMwYWRjNjg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJy
dGMvbXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorIAorCitQQVNTIE11
bHRpIGF1ZGlvIHdpdGggZGlmZmVyZW50IHZvbHVtZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby5odG1sIGIvTGF5b3V0VGVzdHMvd2VicnRjL211bHRpLWF1
ZGlvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODcxZWRlNmFhYTIzZmJkNjYwOTE2YjAzYjM5NGRjODA0NGNi
MmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby5o
dG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+
CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPlRlc3Rpbmcg
bXVsdGkgYXVkaW8gd2l0aCBtdWx0aXBsZSB2b2x1bWVzPC90aXRsZT4KKyAgICAgICAgPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgor
ICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHZpZGVvIGlkPSJ2aWRlbzEiIGF1dG9w
bGF5PSIiPjwvdmlkZW8+CisgICAgICAgIDx2aWRlbyBpZD0idmlkZW8yIiBhdXRvcGxheT0iIj48
L3ZpZGVvPgorICAgICAgICA8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI2NDAiIGhlaWdodD0i
NDgwIj48L2NhbnZhcz4KKyAgICAgICAgPHNjcmlwdCBzcmMgPSJyb3V0aW5lcy5qcyI+PC9zY3Jp
cHQ+CisgICAgICAgIDxzY3JpcHQ+Cit2YXIgcGMxLCBwYzI7Citwcm9taXNlX3Rlc3QoYXN5bmMg
KHRlc3QpID0+IHsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0VXNlck1lZGlhUGVybWlzc2lvbih0cnVlKTsKKworICAgIGxldCByZW1vdGVTdHJlYW0x
LCByZW1vdGVTdHJlYW0yOworICAgIGxldCBjb3VudGVyID0gMDsKKyAgICBjb25zdCBsb2NhbFN0
cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86
IHRydWUsIHZpZGVvIDogdHJ1ZSB9KTsKKyAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuZXcgUHJv
bWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgIGNyZWF0ZUNvbm5lY3Rpb25zKChm
aXJzdENvbm5lY3Rpb24pID0+IHsKKyAgICAgICAgICAgIHBjMSA9IGZpcnN0Q29ubmVjdGlvbjsK
KyAgICAgICAgICAgIGZpcnN0Q29ubmVjdGlvbi5hZGRUcmFjayhsb2NhbFN0cmVhbS5nZXRBdWRp
b1RyYWNrcygpWzBdLCBsb2NhbFN0cmVhbSk7CisgICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24u
YWRkVHJhY2sobG9jYWxTdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSwgbG9jYWxTdHJlYW0pOwor
CisgICAgICAgICAgICBjb25zdCBjbG9uZSA9IGxvY2FsU3RyZWFtLmNsb25lKCk7CisgICAgICAg
ICAgICBmaXJzdENvbm5lY3Rpb24uYWRkVHJhY2soY2xvbmUuZ2V0QXVkaW9UcmFja3MoKVswXSwg
Y2xvbmUpOworICAgICAgICAgICAgZmlyc3RDb25uZWN0aW9uLmFkZFRyYWNrKGNsb25lLmdldFZp
ZGVvVHJhY2tzKClbMF0sIGNsb25lKTsKKyAgICAgICAgfSwgKHNlY29uZENvbm5lY3Rpb24pID0+
IHsKKyAgICAgICAgICAgIHBjMiA9IHNlY29uZENvbm5lY3Rpb247CisgICAgICAgICAgICBzZWNv
bmRDb25uZWN0aW9uLm9udHJhY2sgPSAodHJhY2tFdmVudCkgPT4geworICAgICAgICAgICAgICAg
IGlmICghcmVtb3RlU3RyZWFtMSkKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlU3RyZWFtMSA9
IHRyYWNrRXZlbnQuc3RyZWFtc1swXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0cmFja0V2
ZW50LnN0cmVhbXNbMF0gIT09IHJlbW90ZVN0cmVhbTEpCisgICAgICAgICAgICAgICAgICAgIHJl
bW90ZVN0cmVhbTIgPSB0cmFja0V2ZW50LnN0cmVhbXNbMF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoKytjb3VudGVyID49IDQpCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdCgi
VGVzdCB0aW1lZCBvdXQiKSwgNTAwMCk7CisgICAgfSk7CisKKyAgICB2aWRlbzEudm9sdW1lID0g
MC4wMTsKKyAgICB2aWRlbzEuc3JjT2JqZWN0ID0gcmVtb3RlU3RyZWFtMTsKKyAgICB2aWRlbzIu
dm9sdW1lID0gMTsKKyAgICB2aWRlbzIuc3JjT2JqZWN0ID0gcmVtb3RlU3RyZWFtMjsKKyAgICBh
d2FpdCB2aWRlbzEucGxheSgpOworICAgIGF3YWl0IHZpZGVvMi5wbGF5KCk7CisKKyAgICB2aWRl
bzEudm9sdW1lID0gMC4xOworfSwgIk11bHRpIGF1ZGlvIHdpdGggZGlmZmVyZW50IHZvbHVtZXMi
KTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400327</attachid>
            <date>2020-05-27 06:20:28 -0700</date>
            <delta_ts>2020-05-28 02:17:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212406-20200527152026.patch</filename>
            <type>text/plain</type>
            <size>41027</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzg0MzUzZmIxODcwYzA5
MGE1MGM5MDlkYjBmOGQ2OWEzZTYzMzhmMC4uMDk4M2I2ZTAxMzBlNGFmYTYxMjUxZTI2MTRiYzQy
NTNjZjU0YjgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIwLTA1LTI3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugb25lIGF1ZGlvIHVu
aXQgZm9yIGFsbCB0cmFja3Mgb2YgYSBnaXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWZvcmUgdGhlIHBhdGNoLCB3ZSB3ZXJlIGNy
ZWF0aW5nIG9uZSBhdWRpbyB1bml0IHBlciB0cmFjayB0byByZW5kZXIuCisgICAgICAgIFRoaXMg
aXMgcG90ZW50aWFsbHkgaW5lZmZpY2llbnQgYXMgdGhpcyByZXF1aXJlcyB0byBJUEMgb24gaU9T
IGVhY2ggYXVkaW8gZGF0YS4KKyAgICAgICAgSW5zdGVhZCwgd2UgY291bGQgaGF2ZSBvbmUgc2lu
Z2xlIHJlbW90ZSB1bml0IHRoYXQgd2lsbCByZWNlaXZlIHRoZSBtaXhlZCBjb250ZW50IG9mIGFs
bCB0cmFja3MuCisgICAgICAgIEZvciB0aGF0IHB1cnBvc2UsIGludHJvZHVjZSBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgYXMgYSBzaW5nbGV0b24uCisKKyAgICAgICAgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSB3aWxsIGp1c3QgcmVnaXN0ZXIvdW5yZWdpc3Rl
ciBzb3VyY2VzIHRvIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC4KKyAgICAgICAg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IHdpbGwgdGhlbiBzdGFydC9zdG9wIGFz
IG5lZWRlZCBhbmQgZG8gdGhlIG1peGluZy4KKworICAgICAgICBUaGlzIHJlcXVpcmVzIGEgY2hh
bmdlIGluIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSB0byBzdXBwb3J0IG1peGluZyBpbiBjYXNlIHRy
YWNrIHZvbHVtZXMgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgSWYgd2UgaGF2ZSB0byBtaXggYW5k
IHdpdGggZGlmZmVyZW50IHZvbHVtZXMsIHdlIGZpcnN0IHB1bGwgdGhlIHNhbXBsZXMgaW4gYSBz
Y3JhdGNoIGJ1ZmZlciwgYXBwbHkgdm9sdW1lIGFuZCB0aGVuIG1peCBpdCB3aXRoIHRoZSBvdGhl
ciB0cmFja3MuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyBkbyB0aGUg
YXVkaW8gcmVuZGVyaW5nIHdpdGggdGhlIENvcmVBdWRpb1NoYXJlZFVuaXQgZGlyZWN0bHkgc28g
YXMgdG8gaW1wcm92ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGVjaG8gY2FuY2VsbGF0aW9uLgorCisg
ICAgICAgIE1hbnVhbGx5IHRlc3RlZCBwbHVzIExheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRp
by5odG1sCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1peEJ1ZmZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbCk6
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6
Y3JlYXRlQXVkaW9Vbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnJlbmRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjppbnB1dFByb2MpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdDo6fkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OnJlbW92ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Zm9ybWF0RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjppbnB1dFByb2MpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaC4KKwogMjAyMC0wNS0yNyAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlQ29jb2E6Ok9uRnJhbWUgc2hvdWxkIHVzZSB2aWRlbyBmcmFtZSB0aW1lc3RhbXAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGI4NWFkNjZlN2U2MmU1N2RjYzRhZTY5ZjI5MDhmZjkx
NmQ2ODI1N2EuLjAxM2Q5OTFhYjVhM2E0NDg4Yjc2OGU0OWZlMzUwNjUzOTUzNjg3NDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlc0NvY29hLnR4dApAQCAtNDk4LDYgKzQ5OCw3IEBAIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tIEBuby11bmlmeQog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW0gQG5v
LXVuaWZ5CiAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmNwcAorcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdC5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
VmlkZW9DYXB0dXJlU291cmNlLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDg2ZDJhZDUwZjE3NDBjOGFjOTY2
ZGM4MjU0YWQxNDg0NmNmNTcxYS4uMzk4ZDQzOGQ4M2YwNTQ0YzdlYWMxNmQ0ZDU5ZTI3ZjUyN2Zj
YWQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNzU4MCw2ICs3NTgwLDggQEAKIAkJNDFDN0UxMDUxRTZBNTQzNjAwMjdCNERF
IC8qIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDN0UxMDYxRTZBNTQzNjAwMjdCNERFIC8qIENh
bnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxQzdFMTA4MUU2QUEzN0MwMDI3QjRERSAvKiBDYW52YXNDYXB0dXJlTWVk
aWFTdHJlYW1UcmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2FudmFzQ2FwdHVyZU1l
ZGlhU3RyZWFtVHJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUNCQ0VG
QjI0N0U4ODZFMDAxQjQ5MzIgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQ0JD
RUZEMjQ3RTg4NkUwMDFCNDkzMiAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQ0Y4QkU0MUQ0
NjIyMjAwMDcwN0RDOSAvKiBGZXRjaEJvZHlDb25zdW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGZXRjaEJvZHlDb25zdW1lci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxQ0Y4QkU1MUQ0NjIyMjAwMDcwN0RDOSAvKiBGZXRjaEJvZHlDb25z
dW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaEJvZHlDb25zdW1l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2
MkYgLyogQ29udGVudFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
dGVudFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTc4LDYgKzE2NTgw
LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTQxNkEwNjkzMjNDQ0FBOTQwMDM0NzEwOSAvKiBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCAqLywKIAkJCQk0MTZBMDY5MjIz
Q0NBQTkzMDAzNDcxMDkgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oICov
LAorCQkJCTQxQ0JDRUZCMjQ3RTg4NkUwMDFCNDkzMiAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQuY3BwICovLAorCQkJCTQxQ0JDRUZEMjQ3RTg4NkUwMDFCNDkzMiAvKiBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCAqLywKIAkJCQkwNzAzNjNEQTE4MUExQ0RD
MDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovLAogCQkJCTA3MDM2M0RCMTgx
QTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICovLAogCQkJCTA3MDM2
M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oICovLApAQCAtMzI5
ODAsNiArMzI5ODQsNyBAQAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRU
aW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREYxOUUyQUMyNDc3MkJDMTAwN0JEQUNCIC8qIFNo
b3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
MzYyRThDMTIwQ0VGOUNCMDAyNDU4ODYgLyogU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3QzMxQzg4RTI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29s
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0ODk0NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1w
bGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxMUUwNjdFRTFFNjI0NkU1MDAxNjJE
MTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1ODVE
NkUwNDFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMzU0Miw3ICszMzU0Nyw2IEBACiAJCQkJQ0QzMzZGNjQxN0ZBMEE0
RDAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDMzNkY2ODE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVBVkZPYmpDLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRDhCNUE0MzE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDMzFDODhFMjQ3
QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwRTgx
RDExQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFRjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGOUE4MzkxOEEwNDZBQzAwQUVCODhBIC8qIFZp
ZXdwb3J0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3Bw
CmluZGV4IDg4NTcxNDI5NTI2YzI0ZDQ4MWUxNDI0MWQxNzgyZjk1ZGM4ZDU5NGUuLjdlMjIwODVi
ZmZjNzAxMDgxNzM4MzRkYWE5MTk2ODg5NDdiMzk3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3Bw
CkBAIC0xMDMsNDQgKzEwMywzMCBAQCB2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlH
YWluKGZsb2F0IGdhaW4pCiAgICAgYXBwbHlHYWluKG1fYnVmZmVyTGlzdC5nZXQoKSwgZ2Fpbiwg
bV9pbnRlcm5hbEZvcm1hdC0+Zm9ybWF0KCkpOwogfQogCi1PU1N0YXR1cyBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6Om1peEZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0JiBzb3VyY2UsIHNp
emVfdCBmcmFtZUNvdW50KQorc3RhdGljIHZvaWQgbWl4QnVmZmVycyhXZWJBdWRpb0J1ZmZlckxp
c3QmIGRlc3RpbmF0aW9uQnVmZmVyLCBjb25zdCBBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZUJ1ZmZl
ciwgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0IGZvcm1hdCwgc2l6ZV90IGZyYW1l
Q291bnQpCiB7Ci0gICAgQVNTRVJUKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpID09IHN0cmVh
bURlc2NyaXB0aW9uKCkpOwotCi0gICAgaWYgKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpICE9
IHN0cmVhbURlc2NyaXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsK
LQotICAgIGlmIChmcmFtZUNvdW50ID4gc291cmNlLnNhbXBsZUNvdW50KCkpCi0gICAgICAgIGZy
YW1lQ291bnQgPSBzb3VyY2Uuc2FtcGxlQ291bnQoKTsKLQotICAgIGlmIChmcmFtZUNvdW50ID4g
bV9zYW1wbGVDYXBhY2l0eSkKLSAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwotCi0g
ICAgbV9zYW1wbGVDb3VudCA9IGZyYW1lQ291bnQ7Ci0KLSAgICBhdXRvJiBzb3VyY2VCdWZmZXIg
PSBzb3VyY2UuYnVmZmVyTGlzdCgpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX2J1
ZmZlckxpc3QtPmJ1ZmZlckNvdW50KCk7IGkrKykgewotICAgICAgICBzd2l0Y2ggKG1faW50ZXJu
YWxGb3JtYXQtPmZvcm1hdCgpKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGRlc3Rp
bmF0aW9uQnVmZmVyLmJ1ZmZlckNvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkgewogICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkludDE2OiB7Ci0gICAg
ICAgICAgICBpbnQxNl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDE2X3QqPihtX2J1
ZmZlckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOwotICAgICAgICAgICAgaW50MTZfdCogc291cmNl
ID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+KHNvdXJjZUJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKTsK
KyAgICAgICAgICAgIGF1dG8qIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+KGRl
c3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGEpOworICAgICAgICAgICAgYXV0byogc291
cmNlID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0
YSk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7IGkrKykK
ICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSArPSBzb3VyY2VbaV07CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246
OkludDMyOiB7Ci0gICAgICAgICAgICBpbnQzMl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0
PGludDMyX3QqPihtX2J1ZmZlckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOwotICAgICAgICAgICAg
dkRTUF92YWRkaShkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4oc291
cmNlQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3Vu
dCk7CisgICAgICAgICAgICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDMyX3Qq
PihkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAgIHZEU1Bf
dmFkZGkoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHNvdXJjZUJ1
ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6RmxvYXQzMjogewotICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0g
c3RhdGljX2Nhc3Q8ZmxvYXQqPihtX2J1ZmZlckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOwotICAg
ICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4oc291cmNlQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJh
bWVDb3VudCk7CisgICAgICAgICAgICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGZs
b2F0Kj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0YSk7CisgICAgICAgICAgICB2
RFNQX3ZhZGQoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzb3VyY2VC
dWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb246OkZsb2F0NjQ6IHsKLSAgICAgICAgICAgIGRvdWJsZSogZGVzdGluYXRpb24g
PSBzdGF0aWNfY2FzdDxkb3VibGUqPihtX2J1ZmZlckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOwot
ICAgICAgICAgICAgdkRTUF92YWRkRChkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxk
b3VibGUqPihzb3VyY2VCdWZmZXIuYnVmZmVyKGkpLT5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAx
LCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIGF1dG8qIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nh
c3Q8ZG91YmxlKj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0YSk7CisgICAgICAg
ICAgICB2RFNQX3ZhZGREKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGRvdWJsZSo+
KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFt
ZUNvdW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6Tm9uZToKQEAgLTE0OCw3ICsxMzQsMjQgQEAgT1NTdGF0dXMg
QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dCYgc291cmNlLCBzaXoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorfQor
CitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Om1peEZyb20oY29uc3QgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0JiBzb3VyY2UsIHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIEFTU0VSVChz
b3VyY2Uuc3RyZWFtRGVzY3JpcHRpb24oKSA9PSBzdHJlYW1EZXNjcmlwdGlvbigpKTsKKworICAg
IGlmIChzb3VyY2Uuc3RyZWFtRGVzY3JpcHRpb24oKSAhPSBzdHJlYW1EZXNjcmlwdGlvbigpKQor
ICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBpZiAoZnJhbWVDb3VudCA+
IHNvdXJjZS5zYW1wbGVDb3VudCgpKQorICAgICAgICBmcmFtZUNvdW50ID0gc291cmNlLnNhbXBs
ZUNvdW50KCk7CisKKyAgICBpZiAoZnJhbWVDb3VudCA+IG1fc2FtcGxlQ2FwYWNpdHkpCisgICAg
ICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKIAorICAgIG1fc2FtcGxlQ291bnQgPSBmcmFt
ZUNvdW50OworCisgICAgbWl4QnVmZmVycyhidWZmZXJMaXN0KCksIHNvdXJjZS5idWZmZXJMaXN0
KCksIG1faW50ZXJuYWxGb3JtYXQtPmZvcm1hdCgpLCBmcmFtZUNvdW50KTsKICAgICByZXR1cm4g
MDsKIH0KIApAQCAtMTkyLDYgKzE5NSwxNyBAQCBPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6OmNvcHlUbyhBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90IGZyYW1lQ291bgogICAg
IHJldHVybiAwOwogfQogCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Om1peEZyb20o
QXVkaW9CdWZmZXJMaXN0JiBzb3VyY2UsIHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIGlmIChm
cmFtZUNvdW50ID4gbV9zYW1wbGVDb3VudCkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVy
cm9yOworICAgIGlmIChzb3VyY2UubU51bWJlckJ1ZmZlcnMgPiBtX2J1ZmZlckxpc3QtPmJ1ZmZl
ckNvdW50KCkpCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIG1peEJ1
ZmZlcnMoYnVmZmVyTGlzdCgpLCBzb3VyY2UsIG1faW50ZXJuYWxGb3JtYXQtPmZvcm1hdCgpLCBm
cmFtZUNvdW50KTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6OnJlc2V0KCkKIHsKICAgICBtX3NhbXBsZUNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaApp
bmRleCA1Y2ZkYzVhOGQzMjllZmE5NWEzODMwODNkNDY4ZGY3ZDM3MTIyNTdkLi5kMzcxYTg3ZGQx
ODc1OGRhYjZmM2E4MmY5Y2Y3ZjU5ZWU0OWViZjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCkBAIC01
Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIE9TU3RhdHVzIG1peEZyb20oY29uc3QgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgpOwogCisgICAgT1NTdGF0
dXMgbWl4RnJvbShBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3QgY291bnQgPSBTSVpFX01BWCk7CiAg
ICAgT1NTdGF0dXMgY29weVRvKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCBjb3VudCA9IFNJWkVf
TUFYKTsKIAogICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVz
Y3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsRm9ybWF0LT5zdHJlYW1EZXNjcmlw
dGlvbigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVEYXRhU291cmNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
bWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQppbmRleCAwMDAwMWNiODNkMDY2OWU1NjNmZjRk
MjU1MzRhMzJiMjFiNTVmYzFmLi5kOGQ0NTQ3MzkwN2EyNDUzNTI2OTljZTYxOWE5MDE4OTVhNTAz
NWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9T
YW1wbGVEYXRhU291cmNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KQEAgLTI4OSwxMCArMjg5LDI1IEBAIGJvb2wgQXVk
aW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYg
YnVmZmVyLCBzaXplX3QmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3JpbmdCdWZmZXItPmZl
dGNoKCZidWZmZXIsIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIG1vZGUgPT0gQ29weSA/IENBUmlu
Z0J1ZmZlcjo6Q29weSA6IENBUmluZ0J1ZmZlcjo6TWl4KTsKKyAgICBpZiAobW9kZSA9PSBDb3B5
KSB7CisgICAgICAgIG1fcmluZ0J1ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRp
bWVTdGFtcCwgQ0FSaW5nQnVmZmVyOjpDb3B5KTsKKyAgICAgICAgaWYgKG1fdm9sdW1lIDwgLjk1
KQorICAgICAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4oYnVmZmVyLCBt
X3ZvbHVtZSwgbV9vdXRwdXREZXNjcmlwdGlvbi0+Zm9ybWF0KCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV92b2x1bWUgPj0gLjk1KSB7CisgICAgICAgIG1fcmlu
Z0J1ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgQ0FSaW5nQnVm
ZmVyOjpNaXgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9zY3Jh
dGNoQnVmZmVyLT5jb3B5RnJvbSgqbV9yaW5nQnVmZmVyLmdldCgpLCBzYW1wbGVDb3VudCwgdGlt
ZVN0YW1wLCBDQVJpbmdCdWZmZXI6OkNvcHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAobV92b2x1bWUgPCAuOTUpCi0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBw
bHlHYWluKGJ1ZmZlciwgbV92b2x1bWUsIG1fb3V0cHV0RGVzY3JpcHRpb24tPmZvcm1hdCgpKTsK
KyAgICBtX3NjcmF0Y2hCdWZmZXItPmFwcGx5R2FpbihtX3ZvbHVtZSk7CisgICAgbV9zY3JhdGNo
QnVmZmVyLT5taXhGcm9tKGJ1ZmZlciwgc2FtcGxlQ291bnQpOworICAgIGlmIChtX3NjcmF0Y2hC
dWZmZXItPmNvcHlUbyhidWZmZXIsIHNhbXBsZUNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKaW5kZXggYmVlM2VlZDU3MjQxMTIwNTFhMDRmNGVi
NDJhMWQ4MDFhZGM1NWUzMi4uMzk2ZjNhMGQ3YmIwN2JmZmRlMWUyYTk4ZTE4OTdiYjgwYWY3MDFi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hLmNwcApAQCAtMjgsMTQgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
IgorI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIgogI2luY2x1
ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgotI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgog
I2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLQotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgotI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvQXVkaW9Ub29sYm94U1BJLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDcsMjggKzQyLDE0IEBAIHZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YTo6c3RhcnQoKQogewogICAgIGNsZWFyKCk7CiAKLSAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24gb3V0cHV0RGVzY3JpcHRpb247Ci0gICAgYXV0byByZW1vdGVJT1VuaXQgPSBjcmVhdGVBdWRp
b1VuaXQob3V0cHV0RGVzY3JpcHRpb24pOwotICAgIGlmICghcmVtb3RlSU9Vbml0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBlcnJvciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KHJl
bW90ZUlPVW5pdCkpIHsKLSAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJBdWRpb091
dHB1dFVuaXRTdGFydCBmYWlsZWQsIGVycm9yID0gIiwgZXJyb3IsICIgKCIsIChjb25zdCBjaGFy
KikmZXJyb3IsICIpIik7Ci0gICAgICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKHJl
bW90ZUlPVW5pdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9vdXRwdXREZXNjcmlw
dGlvbiA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihvdXRwdXREZXNjcmlw
dGlvbik7Ci0gICAgbV9yZW1vdGVJT1VuaXQgPSByZW1vdGVJT1VuaXQ7CisgICAgaWYgKGF1dG8q
IGZvcm1hdERlc2NyaXB0aW9uID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpz
aW5nbGV0b24oKS5mb3JtYXREZXNjcmlwdGlvbigpKQorICAgICAgICBtX291dHB1dERlc2NyaXB0
aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KCpmb3JtYXREZXNjcmlw
dGlvbik7CiB9CiAKIHZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3Rv
cCgpCiB7Ci0gICAgaWYgKCFtX3JlbW90ZUlPVW5pdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QXVkaW9PdXRwdXRVbml0U3RvcChtX3JlbW90ZUlPVW5pdCk7Ci0gICAgQXVkaW9Db21wb25lbnRJ
bnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1VuaXQpOwotICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVs
bHB0cjsKKyAgICBpZiAobV9kYXRhU291cmNlKQorICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLnJlbW92ZVNvdXJjZSgqbV9kYXRhU291cmNlKTsK
IH0KIAogdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjbGVhcigpCkBA
IC03Niw4NCArNTcsMjEgQEAgdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29h
OjpjbGVhcigpCiAgICAgc3RvcCgpOwogCiAgICAgbV9kYXRhU291cmNlID0gbnVsbHB0cjsKLSAg
ICBtX291dHB1dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBtX291dHB1dERlc2NyaXB0aW9u
ID0geyB9OwogfQogCi1BdWRpb0NvbXBvbmVudEluc3RhbmNlIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2E6OmNyZWF0ZUF1ZGlvVW5pdChDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
IG91dHB1dERlc2NyaXB0aW9uKQordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQogewotICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFu
Y2UgcmVtb3RlSU9Vbml0IHsgbnVsbHB0ciB9OwotCi0gICAgQXVkaW9Db21wb25lbnREZXNjcmlw
dGlvbiBpb1VuaXREZXNjcmlwdGlvbiB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwgMCwga0F1ZGlv
VW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgaW9Vbml0RGVzY3JpcHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJU
eXBlX1JlbW90ZUlPOwotI2Vsc2UKLSAgICBpb1VuaXREZXNjcmlwdGlvbi5jb21wb25lbnRTdWJU
eXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfRGVmYXVsdE91dHB1dDsKLSNlbmRpZgotCi0gICAgQXVk
aW9Db21wb25lbnQgaW9Db21wb25lbnQgPSBBdWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxwdHIs
ICZpb1VuaXREZXNjcmlwdGlvbik7Ci0gICAgQVNTRVJUKGlvQ29tcG9uZW50KTsKLSAgICBpZiAo
IWlvQ29tcG9uZW50KSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxl
IHRvIGZpbmQgcmVtb3RlIElPIHVuaXQgY29tcG9uZW50Iik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIE9TU3RhdHVzIGVyciA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VO
ZXcoaW9Db21wb25lbnQsICZyZW1vdGVJT1VuaXQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAg
RVJST1JfTE9HKExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9y
ID0gIiwgZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIikiKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVSW50MzIg
cGFyYW0gPSAxOwotICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwg
a0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0
LCAwLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJS
T1JfTE9HKExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQs
IGVycm9yID0gIiwgZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIikiKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBVVJlbmRlckNhbGxiYWNrU3Ry
dWN0IGNhbGxiYWNrID0geyBpbnB1dFByb2MsIHRoaXMgfTsKLSAgICBlcnIgPSBBdWRpb1VuaXRT
ZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxs
YmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJh
Y2spKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAi
dW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciA9ICIsIGVyciwgIiAo
IiwgKGNvbnN0IGNoYXIqKSZlcnIsICIpIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLQotICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURl
c2NyaXB0aW9uKCkpOwotICAgIGVyciAgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShyZW1vdGVJT1Vu
aXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1
dCwgMCwgJm91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCksICZzaXplKTsKLSAg
ICBpZiAoZXJyKSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxlIHRv
IGdldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNo
YXIqKSZlcnIsICIpIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIG91
dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUgPSBBdWRpb1Nl
c3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci0KLSAgICBlcnIgPSBBdWRpb1Vu
aXRTZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3Jt
YXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJm91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURl
c2NyaXB0aW9uKCksIHNpemVvZihvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigp
KSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInVu
YWJsZSB0byBzZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAiLCBlcnIsICIgKCIsIChj
b25zdCBjaGFyKikmZXJyLCAiKSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBlcnIgPSBBdWRpb1VuaXRJbml0aWFsaXplKHJlbW90ZUlPVW5pdCk7Ci0gICAgaWYgKGVy
cikgewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgIkF1ZGlvVW5pdEluaXRpYWxp
emUoKSBmYWlsZWQsIGVycm9yID0gIiwgZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIiki
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlbW90ZUlP
VW5pdDsKKyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcjo6c2V0Vm9sdW1lKHZvbHVt
ZSk7CisgICAgaWYgKG1fZGF0YVNvdXJjZSkKKyAgICAgICAgbV9kYXRhU291cmNlLT5zZXRWb2x1
bWUodm9sdW1lKTsKIH0KIAogdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29h
OjpwdXNoU2FtcGxlcyhjb25zdCBNZWRpYVRpbWUmIHNhbXBsZVRpbWUsIGNvbnN0IFBsYXRmb3Jt
QXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBzaXplX3Qgc2FtcGxlQ291bnQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAgICAgQVNTRVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09
IFBsYXRmb3JtRGVzY3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgIGlmICgh
bV9yZW1vdGVJT1VuaXQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICghbV9kYXRhU291cmNl
IHx8ICFtX2RhdGFTb3VyY2UtPmlucHV0RGVzY3JpcHRpb24oKSB8fCAqbV9kYXRhU291cmNlLT5p
bnB1dERlc2NyaXB0aW9uKCkgIT0gZGVzY3JpcHRpb24pIHsKLSAgICAgICAgaWYgKG1fc2hvdWxk
VXBkYXRlUmVuZGVyZXJEYXRhU291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCiAgICAgICAg
IGF1dG8gZGF0YVNvdXJjZSA9IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Y3JlYXRlKGRlc2NyaXB0
aW9uLnNhbXBsZVJhdGUoKSAqIDIsICp0aGlzKTsKIAogICAgICAgICBpZiAoZGF0YVNvdXJjZS0+
c2V0SW5wdXRGb3JtYXQodG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pKSkg
ewpAQCAtMTYxLDQ1ICs3OSwyOCBAQCB2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
Q29jb2E6OnB1c2hTYW1wbGVzKGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGRhdGFTb3VyY2UtPnNldE91dHB1
dEZvcm1hdCgqbV9vdXRwdXREZXNjcmlwdGlvbikpIHsKKyAgICAgICAgaWYgKCFtX291dHB1dERl
c2NyaXB0aW9uIHx8IGRhdGFTb3VyY2UtPnNldE91dHB1dEZvcm1hdCgqbV9vdXRwdXREZXNjcmlw
dGlvbikpIHsKICAgICAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAiVW5hYmxlIHRv
IHNldCB0aGUgb3V0cHV0IGZvcm1hdCBvZiBkYXRhIHNvdXJjZSIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YVNvdXJjZS0+c2V0UGF1c2VkKGZhbHNlKTsK
LSAgICAgICAgZGF0YVNvdXJjZS0+c2V0Vm9sdW1lKHZvbHVtZSgpKTsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgb2xkU291cmNl
ID0gbV9kYXRhU291cmNlLCBuZXdTb3VyY2UgPSBkYXRhU291cmNlLmNvcHlSZWYoKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBpZiAob2xkU291cmNlKQorICAgICAgICAgICAgICAgIEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkucmVtb3ZlU291cmNlKCpvbGRT
b3VyY2UpOwogCisgICAgICAgICAgICBuZXdTb3VyY2UtPnNldFBhdXNlZChmYWxzZSk7CisgICAg
ICAgICAgICBuZXdTb3VyY2UtPnNldFZvbHVtZSh2b2x1bWUoKSk7CisgICAgICAgICAgICBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLmFkZFNvdXJjZShXVEZN
b3ZlKG5ld1NvdXJjZSkpOworICAgICAgICB9KTsKICAgICAgICAgbV9kYXRhU291cmNlID0gV1RG
TW92ZShkYXRhU291cmNlKTsKLSAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJlckRhdGFTb3Vy
Y2UgPSB0cnVlOwogICAgIH0KIAogICAgIG1fZGF0YVNvdXJjZS0+cHVzaFNhbXBsZXMoc2FtcGxl
VGltZSwgYXVkaW9EYXRhLCBzYW1wbGVDb3VudCk7CiB9CiAKLU9TU3RhdHVzIEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnJlbmRlcihVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlv
QnVmZmVyTGlzdCYgaW9EYXRhLCBVSW50MzIgLyppbkJ1c051bWJlciovLCBjb25zdCBBdWRpb1Rp
bWVTdGFtcCYgdGltZVN0YW1wLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgYWN0aW9uRmxh
Z3MpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fc2hvdWxkVXBk
YXRlUmVuZGVyZXJEYXRhU291cmNlKSB7Ci0gICAgICAgIG1fcmVuZGVyZXJEYXRhU291cmNlID0g
bV9kYXRhU291cmNlOwotICAgICAgICBtX3Nob3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNvdXJjZSA9
IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9yZW5kZXJlckRhdGFTb3VyY2UpIHsKLSAgICAg
ICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihzYW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVzUGVyRnJhbWUoKSkp
OwotICAgICAgICBhY3Rpb25GbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNT
aWxlbmNlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtX3JlbmRlcmVyRGF0YVNv
dXJjZS0+cHVsbFNhbXBsZXMoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50
KSwgdGltZVN0YW1wLm1TYW1wbGVUaW1lLCB0aW1lU3RhbXAubUhvc3RUaW1lLCBBdWRpb1NhbXBs
ZURhdGFTb3VyY2U6OkNvcHkpOwotICAgIHJldHVybiAwOwotfQotCi1PU1N0YXR1cyBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjppbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBhY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3Rh
bXAqIHRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgc2FtcGxlQ291bnQsIEF1
ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hKj4odXNlckRhdGEpLT5yZW5kZXIoc2FtcGxlQ291
bnQsICppb0RhdGEsIGluQnVzTnVtYmVyLCAqdGltZVN0YW1wLCAqYWN0aW9uRmxhZ3MpOwotfQot
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFD
SykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29h
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oCmluZGV4IGRiYTc5ZTViODJjYWJlZWNjMmQzYTI2MmM2
YTNhYTViNTU1NjFlODIuLjA3NTExYjFmNTJkOGZhNzAxNmVhMjU4OTVkOTRkZTdmNmZiMDgwNWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2Eu
aApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IAogI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3guaD4KICNpbmNsdWRlIDxDb3Jl
QXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KQEAgLTM5LDcgKzQwLDcgQEAgY2xhc3MgQXVkaW9TYW1w
bGVEYXRhU291cmNlOwogY2xhc3MgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OwogY2xhc3MgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOwogCi1jbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hIDogcHVibGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyIHsKK2NsYXNzIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EgOiBwdWJsaWMgQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckNvY29hLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyQ29jb2EoKTsKQEAgLTUxLDE5ICs1MiwxMCBAQCBwcml2YXRlOgogICAg
IHZvaWQgc3RhcnQoKSBmaW5hbDsKICAgICB2b2lkIHN0b3AoKSBmaW5hbDsKICAgICB2b2lkIGNs
ZWFyKCkgZmluYWw7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOwogCi0gICAgc3Rh
dGljIE9TU3RhdHVzIGlucHV0UHJvYyh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3Mq
LCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIG51bWJl
ck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqKTsKLSAgICBPU1N0YXR1cyByZW5kZXIoVUludDMy
IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCBVSW50MzIgaW5CdXNOdW1iZXIsIGNvbnN0
IEF1ZGlvVGltZVN0YW1wJiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmKTsKLQotICAgIEF1
ZGlvQ29tcG9uZW50SW5zdGFuY2UgY3JlYXRlQXVkaW9Vbml0KENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYpOwotCi0gICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSBtX3JlbW90ZUlPVW5pdCB7IG51
bGxwdHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBt
X291dHB1dERlc2NyaXB0aW9uOwotCi0gICAgLy8gQXVkaW8gdGhyZWFkcyBtZW1iZXIKICAgICBS
ZWZQdHI8QXVkaW9TYW1wbGVEYXRhU291cmNlPiBtX2RhdGFTb3VyY2U7Ci0gICAgUmVmUHRyPEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZT4gbV9yZW5kZXJlckRhdGFTb3VyY2U7Ci0gICAgYm9vbCBtX3No
b3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNvdXJjZSB7IGZhbHNlIH07CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRhN2I5ZjU5OWQwMzQ1YmU0Mzk0ZWY1ODc5ZDJhYjNhZjMxZGEwZDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgorI2luY2x1ZGUg
IkF1ZGlvU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQXVkaW9Ub29s
Ym94U1BJLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKworI2luY2x1ZGUgPHBhbC9jZi9Db3Jl
TWVkaWFTb2Z0TGluay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdCYgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpz
aW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ+IHJlZ2lzdHJ5OworICAgIHJldHVybiByZWdpc3RyeTsKK30KKwor
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojp+QXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0KCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjphZGRTb3VyY2UoUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4m
JiBzb3VyY2UpCit7CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjphZGRTb3VyY2UiKTsKKworICAgIGJvb2wgc2hvdWxkU3RhcnQgPSBm
YWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zb3VyY2VzTG9j
ayk7CisgICAgICAgIEFTU0VSVCghbV9zb3VyY2VzLmNvbnRhaW5zKHNvdXJjZS5nZXQoKSkpOwor
ICAgICAgICBzaG91bGRTdGFydCA9IG1fc291cmNlcy5pc0VtcHR5KCk7CisgICAgICAgIG1fc291
cmNlcy5hZGQoV1RGTW92ZShzb3VyY2UpKTsKKyAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJT
b3VyY2VzID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHNob3VsZFN0YXJ0KQorICAgICAgICBzdGFy
dCgpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3Zl
U291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQoreworICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3ZlU291cmNl
Iik7CisKKyAgICBib29sIHNob3VsZFN0b3AgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9zb3VyY2VzTG9jayk7CisgICAgICAgIG1fc291cmNlcy5yZW1v
dmUoc291cmNlKTsKKyAgICAgICAgc2hvdWxkU3RvcCA9IG1fc291cmNlcy5pc0VtcHR5KCk7Cisg
ICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7CisgICAgfQorICAgIGlm
IChzaG91bGRTdG9wKQorICAgICAgICBzdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjpzdGFydCgpCit7CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAi
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdGFydCIpOworCisgICAgY3JlYXRl
QXVkaW9Vbml0SWZOZWVkZWQoKTsKKyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoYXV0byBlcnJvciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fcmVt
b3RlSU9Vbml0KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZh
aWxlZCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5j
ZURpc3Bvc2UobV9yZW1vdGVJT1VuaXQpOworICAgICAgICBtX3JlbW90ZUlPVW5pdCA9IG51bGxw
dHI7CisgICAgfQorICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0xPRyhXZWJS
VEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgaXMgc3RhcnRlZCIpOworfQor
Cit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RvcCgpCit7CisgICAg
UkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpz
dG9wIik7CisKKyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9yZW1vdGVJ
T1VuaXQpOworCisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1Vu
aXQpOworICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKK30KKworQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmZvcm1hdERlc2Ny
aXB0aW9uKCkKK3sKKyAgICBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOworICAgIHJldHVybiBt
X291dHB1dERlc2NyaXB0aW9uLmdldCgpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKQoreworICAgIEFTU0VSVCgh
bV9yZW1vdGVJT1VuaXQgfHwgbV9vdXRwdXREZXNjcmlwdGlvbik7CisgICAgaWYgKG1fcmVtb3Rl
SU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24g
b3V0cHV0RGVzY3JpcHRpb247CisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSByZW1vdGVJT1Vu
aXQgeyBudWxscHRyIH07CisKKyAgICBBdWRpb0NvbXBvbmVudERlc2NyaXB0aW9uIGlvVW5pdERl
c2NyaXB0aW9uIHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCAwLCBrQXVkaW9Vbml0TWFudWZhY3R1
cmVyX0FwcGxlLCAwLCAwIH07CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpb1VuaXRE
ZXNjcmlwdGlvbi5jb21wb25lbnRTdWJUeXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfUmVtb3RlSU87
CisjZWxzZQorICAgIGlvVW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9V
bml0U3ViVHlwZV9EZWZhdWx0T3V0cHV0OworI2VuZGlmCisKKyAgICBBdWRpb0NvbXBvbmVudCBp
b0NvbXBvbmVudCA9IEF1ZGlvQ29tcG9uZW50RmluZE5leHQobnVsbHB0ciwgJmlvVW5pdERlc2Ny
aXB0aW9uKTsKKyAgICBBU1NFUlQoaW9Db21wb25lbnQpOworICAgIGlmICghaW9Db21wb25lbnQp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGZpbmQgcmVtb3RlIElP
IHVuaXQgY29tcG9uZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGVy
cm9yID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJnJlbW90ZUlPVW5p
dCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJs
ZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgVUludDMyIHBhcmFtID0g
MTsKKyAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlv
T3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAm
cGFyYW0sIHNpemVvZihwYXJhbSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNy
ZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQsIGVycm9yID0g
JWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEFVUmVu
ZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IGlucHV0UHJvYywgbnVsbHB0ciB9OworICAg
IGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJv
cGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZjYWxs
YmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6
Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IHNwZWFrZXIgcHJvYywgZXJy
b3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFVJbnQzMiBz
aXplID0gc2l6ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkpOworICAg
IGVycm9yICA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvVW5pdFBy
b3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAmb3V0cHV0RGVz
Y3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSwgJnNpemUpOworICAgIGlmIChlcnJvcikgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBm
b3JtYXQsIGVycm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLm1TYW1wbGVSYXRlID0gQXVk
aW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2FtcGxlUmF0ZSgpOworCisgICAgZXJyb3IgPSBB
dWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJl
YW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJm91dHB1dERlc2NyaXB0aW9uLnN0
cmVhbURlc2NyaXB0aW9uKCksIHNpemVvZihvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlw
dGlvbigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdl
YlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0
IHVuYWJsZSB0byBzZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVycm9yID0gQXVkaW9Vbml0SW5pdGlhbGl6
ZShyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1
ZGlvVW5pdCBBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciA9ICVkIiwgZXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG1h
a2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihvdXRwdXREZXNjcmlwdGlvbik7Cisg
ICAgbV9yZW1vdGVJT1VuaXQgPSByZW1vdGVJT1VuaXQ7Cit9CisKK09TU3RhdHVzIEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVuZGVyKFVJbnQzMiBzYW1wbGVDb3VudCwgQXVk
aW9CdWZmZXJMaXN0JiBpb0RhdGEsIFVJbnQzMiAvKmluQnVzTnVtYmVyKi8sIGNvbnN0IEF1ZGlv
VGltZVN0YW1wJiB0aW1lU3RhbXAsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBhY3Rpb25G
bGFncykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9zaG91bGRV
cGRhdGVSZW5kZXJTb3VyY2VzKSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2so
bV9zb3VyY2VzTG9jayk7CisgICAgICAgIGlmICghbG9ja2VyKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAgICAgbV9yZW5kZXJTb3VyY2VzID0gY29weVRvVmVjdG9yKG1fc291cmNlcyk7
CisgICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IGZhbHNlOworICAgIH0KKyAg
ICAvLyBNaXggYWxsIHNvdXJjZXMuCisgICAgaWYgKG1fcmVuZGVyU291cmNlcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVzUGVy
RnJhbWUoKSkpOworICAgICAgICBhY3Rpb25GbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25f
T3V0cHV0SXNTaWxlbmNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYm9vbCBpc0Zp
cnN0U291cmNlID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IG1fcmVuZGVyU291cmNl
cykgeworICAgICAgICBzb3VyY2UtPnB1bGxTYW1wbGVzKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihzYW1wbGVDb3VudCksIHRpbWVTdGFtcC5tU2FtcGxlVGltZSwgdGltZVN0YW1wLm1Ib3N0
VGltZSwgaXNGaXJzdFNvdXJjZSA/IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Q29weSA6IEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6TWl4KTsKKyAgICAgICAgaXNGaXJzdFNvdXJjZSA9IGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0OjppbnB1dFByb2Modm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
KiBhY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIHRpbWVTdGFtcCwgVUludDMyIGlu
QnVzTnVtYmVyLCBVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQor
eworICAgIHJldHVybiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRv
bigpLnJlbmRlcihzYW1wbGVDb3VudCwgKmlvRGF0YSwgaW5CdXNOdW1iZXIsICp0aW1lU3RhbXAs
ICphY3Rpb25GbGFncyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Yjc5
NzNjOGFmNjA1NjU3MGQ1MWM1OWIzNTUyOTAxYzU2YzQxYzk0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3guaD4KKyNpbmNsdWRlIDxDb3Jl
QXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKK2NsYXNzIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDsKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKKwor
Y2xhc3MgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0JiBzaW5nbGV0b24oKTsKKwor
ICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpID0gZGVmYXVsdDsKKyAgICB+
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KCk7CisKKyAgICBzdGF0aWMgT1NTdGF0
dXMgaW5wdXRQcm9jKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1
ZGlvVGltZVN0YW1wKiwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMs
IEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgp
OworCisgICAgdm9pZCBhZGRTb3VyY2UoUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4mJik7Cisg
ICAgdm9pZCByZW1vdmVTb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7CisKKyAgICBDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24qIGZvcm1hdERlc2NyaXB0aW9uKCk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOworICAgIE9TU3RhdHVzIHJlbmRlcihV
SW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYsIFVJbnQzMiBpbkJ1c051bWJlciwg
Y29uc3QgQXVkaW9UaW1lU3RhbXAmLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYpOworCisg
ICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSBtX3JlbW90ZUlPVW5pdCB7IG51bGxwdHIgfTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1dERlc2Ny
aXB0aW9uOworICAgIEhhc2hTZXQ8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fc291cmNl
czsKKyAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fcmVuZGVyU291cmNl
czsKKyAgICBib29sIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyB7IGZhbHNlIH07CisgICAg
TG9jayBtX3NvdXJjZXNMb2NrOworICAgIGJvb2wgbV9pc1N0YXJ0ZWQgeyBmYWxzZSB9OworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGFmMDcyNjJjODBiZDIxZmZkYWJmNTUxZWY2YzAwMzRhZWIxODRmMjUuLjE4
NmIxZDE3ZTEzNzMxOGU5NmRiYjUyM2UyNjczYjU0NGQ1YjNhMzQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAyMC0wNS0yNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgVXNlIG9uZSBhdWRpbyB1bml0IGZvciBhbGwgTWVkaWFTdHJlYW1UcmFja3Mgb2YgYSBn
aXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHdlYnJ0Yy9tdWx0aS1hdWRpby1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYnJ0Yy9tdWx0aS1hdWRpby5odG1sOiBBZGRlZC4KKwogMjAyMC0wNS0yNSAgQ2FybG9zIEFs
YmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWZs
ZXhib3hdIFdQVCBUZXN0IGNzcy9jc3MtZmxleGJveC9mbGV4LWxpbmVzL211bHRpLWxpbmUtd3Jh
cC1yZXZlcnNlLWNvbHVtbi1yZXZlcnNlLmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJydGMv
bXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxZmY3ODRlMTIzNWNiNzlkYWZh
OWJkZjZiNTUyMzMwYWRjNjg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJy
dGMvbXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorIAorCitQQVNTIE11
bHRpIGF1ZGlvIHdpdGggZGlmZmVyZW50IHZvbHVtZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby5odG1sIGIvTGF5b3V0VGVzdHMvd2VicnRjL211bHRpLWF1
ZGlvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODcxZWRlNmFhYTIzZmJkNjYwOTE2YjAzYjM5NGRjODA0NGNi
MmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby5o
dG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+
CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPlRlc3Rpbmcg
bXVsdGkgYXVkaW8gd2l0aCBtdWx0aXBsZSB2b2x1bWVzPC90aXRsZT4KKyAgICAgICAgPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgor
ICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHZpZGVvIGlkPSJ2aWRlbzEiIGF1dG9w
bGF5PSIiPjwvdmlkZW8+CisgICAgICAgIDx2aWRlbyBpZD0idmlkZW8yIiBhdXRvcGxheT0iIj48
L3ZpZGVvPgorICAgICAgICA8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI2NDAiIGhlaWdodD0i
NDgwIj48L2NhbnZhcz4KKyAgICAgICAgPHNjcmlwdCBzcmMgPSJyb3V0aW5lcy5qcyI+PC9zY3Jp
cHQ+CisgICAgICAgIDxzY3JpcHQ+Cit2YXIgcGMxLCBwYzI7Citwcm9taXNlX3Rlc3QoYXN5bmMg
KHRlc3QpID0+IHsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0VXNlck1lZGlhUGVybWlzc2lvbih0cnVlKTsKKworICAgIGxldCByZW1vdGVTdHJlYW0x
LCByZW1vdGVTdHJlYW0yOworICAgIGxldCBjb3VudGVyID0gMDsKKyAgICBjb25zdCBsb2NhbFN0
cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86
IHRydWUsIHZpZGVvIDogdHJ1ZSB9KTsKKyAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuZXcgUHJv
bWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgIGNyZWF0ZUNvbm5lY3Rpb25zKChm
aXJzdENvbm5lY3Rpb24pID0+IHsKKyAgICAgICAgICAgIHBjMSA9IGZpcnN0Q29ubmVjdGlvbjsK
KyAgICAgICAgICAgIGZpcnN0Q29ubmVjdGlvbi5hZGRUcmFjayhsb2NhbFN0cmVhbS5nZXRBdWRp
b1RyYWNrcygpWzBdLCBsb2NhbFN0cmVhbSk7CisgICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24u
YWRkVHJhY2sobG9jYWxTdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSwgbG9jYWxTdHJlYW0pOwor
CisgICAgICAgICAgICBjb25zdCBjbG9uZSA9IGxvY2FsU3RyZWFtLmNsb25lKCk7CisgICAgICAg
ICAgICBmaXJzdENvbm5lY3Rpb24uYWRkVHJhY2soY2xvbmUuZ2V0QXVkaW9UcmFja3MoKVswXSwg
Y2xvbmUpOworICAgICAgICAgICAgZmlyc3RDb25uZWN0aW9uLmFkZFRyYWNrKGNsb25lLmdldFZp
ZGVvVHJhY2tzKClbMF0sIGNsb25lKTsKKyAgICAgICAgfSwgKHNlY29uZENvbm5lY3Rpb24pID0+
IHsKKyAgICAgICAgICAgIHBjMiA9IHNlY29uZENvbm5lY3Rpb247CisgICAgICAgICAgICBzZWNv
bmRDb25uZWN0aW9uLm9udHJhY2sgPSAodHJhY2tFdmVudCkgPT4geworICAgICAgICAgICAgICAg
IGlmICghcmVtb3RlU3RyZWFtMSkKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlU3RyZWFtMSA9
IHRyYWNrRXZlbnQuc3RyZWFtc1swXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0cmFja0V2
ZW50LnN0cmVhbXNbMF0gIT09IHJlbW90ZVN0cmVhbTEpCisgICAgICAgICAgICAgICAgICAgIHJl
bW90ZVN0cmVhbTIgPSB0cmFja0V2ZW50LnN0cmVhbXNbMF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoKytjb3VudGVyID49IDQpCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdCgi
VGVzdCB0aW1lZCBvdXQiKSwgNTAwMCk7CisgICAgfSk7CisKKyAgICB2aWRlbzEudm9sdW1lID0g
MC4wMTsKKyAgICB2aWRlbzEuc3JjT2JqZWN0ID0gcmVtb3RlU3RyZWFtMTsKKyAgICB2aWRlbzIu
dm9sdW1lID0gMTsKKyAgICB2aWRlbzIuc3JjT2JqZWN0ID0gcmVtb3RlU3RyZWFtMjsKKyAgICBh
d2FpdCB2aWRlbzEucGxheSgpOworICAgIGF3YWl0IHZpZGVvMi5wbGF5KCk7CisKKyAgICB2aWRl
bzEudm9sdW1lID0gMC4xOworfSwgIk11bHRpIGF1ZGlvIHdpdGggZGlmZmVyZW50IHZvbHVtZXMi
KTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400438</attachid>
            <date>2020-05-28 02:17:37 -0700</date>
            <delta_ts>2020-05-29 05:45:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212406-20200528111735.patch</filename>
            <type>text/plain</type>
            <size>40862</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzg0MzUzZmIxODcwYzA5
MGE1MGM5MDlkYjBmOGQ2OWEzZTYzMzhmMC4uOTQ0MjY1NmRiNTMxN2RjNzAwYjFlYzI4N2RiNjRj
NWE4NGVmMTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDIwLTA1LTI3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugb25lIGF1ZGlvIHVu
aXQgZm9yIGFsbCB0cmFja3Mgb2YgYSBnaXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWZvcmUgdGhlIHBhdGNoLCB3ZSB3ZXJlIGNy
ZWF0aW5nIG9uZSBhdWRpbyB1bml0IHBlciB0cmFjayB0byByZW5kZXIuCisgICAgICAgIFRoaXMg
aXMgcG90ZW50aWFsbHkgaW5lZmZpY2llbnQgYXMgdGhpcyByZXF1aXJlcyB0byBJUEMgb24gaU9T
IGVhY2ggYXVkaW8gZGF0YS4KKyAgICAgICAgSW5zdGVhZCwgd2UgY291bGQgaGF2ZSBvbmUgc2lu
Z2xlIHJlbW90ZSB1bml0IHRoYXQgd2lsbCByZWNlaXZlIHRoZSBtaXhlZCBjb250ZW50IG9mIGFs
bCB0cmFja3MuCisgICAgICAgIEZvciB0aGF0IHB1cnBvc2UsIGludHJvZHVjZSBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgYXMgYSBzaW5nbGV0b24uCisKKyAgICAgICAgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSB3aWxsIGp1c3QgcmVnaXN0ZXIvdW5yZWdpc3Rl
ciBzb3VyY2VzIHRvIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC4KKyAgICAgICAg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IHdpbGwgdGhlbiBzdGFydC9zdG9wIGFz
IG5lZWRlZCBhbmQgZG8gdGhlIG1peGluZy4KKworICAgICAgICBUaGlzIHJlcXVpcmVzIGEgY2hh
bmdlIGluIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSB0byBzdXBwb3J0IG1peGluZyBpbiBjYXNlIHRy
YWNrIHZvbHVtZXMgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgSWYgd2UgaGF2ZSB0byBtaXggYW5k
IHdpdGggZGlmZmVyZW50IHZvbHVtZXMsIHdlIGZpcnN0IHB1bGwgdGhlIHNhbXBsZXMgaW4gYSBz
Y3JhdGNoIGJ1ZmZlciwgYXBwbHkgdm9sdW1lIGFuZCB0aGVuIG1peCBpdCB3aXRoIHRoZSBvdGhl
ciB0cmFja3MuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyBkbyB0aGUg
YXVkaW8gcmVuZGVyaW5nIHdpdGggdGhlIENvcmVBdWRpb1NoYXJlZFVuaXQgZGlyZWN0bHkgc28g
YXMgdG8gaW1wcm92ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGVjaG8gY2FuY2VsbGF0aW9uLgorCisg
ICAgICAgIEludGVycnVwdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBmYWN0IHRoYXQgYWxsIHRyYWNr
cyBzaG91bGQgc3RvcCBwbGF5aW5nLCB0aHVzIHN0b3AgdGhlaXIgcmVuZGVyZXIsIHRodXMgdW5y
ZWdpc3RlciB0aGVtc2VsdmVzIGZyb20gdGhlIHJlbmRlcmVyIHVuaXQuCisgICAgICAgIGl0IG1p
Z2h0IGJlIG1vcmUgZnV0dXJlIHByb29mIHRvIGFkZCB0aGUgdW5pdCBhcyBhbiBpbnRlcnJ1cHRp
b24gb2JzZXJ2ZXIgYXMgYSBmb2xsb3ctdXAuCisKKyAgICAgICAgTWFudWFsbHkgdGVzdGVkIHBs
dXMgTGF5b3V0VGVzdHMvd2VicnRjL211bHRpLWF1ZGlvLmh0bWwKKworICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bWl4QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q6Om1peEZyb20pOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVEYXRhU291cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVE
YXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2E6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyQ29jb2E6OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hOjpwdXNoU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjcmVhdGVBdWRpb1VuaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6
cmVuZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2E6OmlucHV0UHJvYyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaDoKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojp+QXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3ZlU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVk
aW9Vbml0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpmb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJl
bmRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OmlucHV0UHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJD
b2NvYS5oLgorCiAyMDIwLTA1LTI3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6T25GcmFtZSBzaG91
bGQgdXNlIHZpZGVvIGZyYW1lIHRpbWVzdGFtcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXgg
Yjg1YWQ2NmU3ZTYyZTU3ZGNjNGFlNjlmMjkwOGZmOTE2ZDY4MjU3YS4uMDEzZDk5MWFiNWEzYTQ0
ODhiNzY4ZTQ5ZmUzNTA2NTM5NTM2ODc0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00
OTgsNiArNDk4LDcgQEAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZU1hbmFnZXIubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3Mv
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5tbSBAbm8tdW5pZnkKIAogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCitwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcAog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gQG5vLXVu
aWZ5CiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gQG5v
LXVuaWZ5CiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBkODZkMmFkNTBmMTc0MGM4YWM5NjZkYzgyNTRhZDE0ODQ2Y2Y1NzFhLi44ODNi
OGE1NGI3YTI2NmRmYmEzMDY1ZGFiNmE5YjE1NWYwMWNhMjcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03NTgwLDYgKzc1ODAs
OCBAQAogCQk0MUM3RTEwNTFFNkE1NDM2MDAyN0I0REUgLyogQ2FudmFzQ2FwdHVyZU1lZGlhU3Ry
ZWFtVHJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFz
Q2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MUM3RTEwNjFFNkE1NDM2MDAyN0I0REUgLyogQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FudmFzQ2FwdHVyZU1lZGlh
U3RyZWFtVHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDN0UxMDgxRTZB
QTM3QzAwMjdCNERFIC8qIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQ0JDRUZCMjQ3RTg4NkUwMDFCNDkzMiAvKiBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFDQkNFRkQyNDdFODg2RTAwMUI0OTMyIC8qIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDRjhCRTQxRDQ2MjIyMDAwNzA3REM5IC8qIEZldGNoQm9k
eUNvbnN1bWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZldGNo
Qm9keUNvbnN1bWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDRjhCRTUx
RDQ2MjIyMDAwNzA3REM5IC8qIEZldGNoQm9keUNvbnN1bWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZldGNoQm9keUNvbnN1bWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxRDAxNUM4MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50VHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTY1NzgsNiArMTY1ODAsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJNDE2QTA2OTMyM0NDQUE5NDAwMzQ3MTA5IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyQ29jb2EuY3BwICovLAogCQkJCTQxNkEwNjkyMjNDQ0FBOTMwMDM0NzEwOSAvKiBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmggKi8sCisJCQkJNDFDQkNFRkIyNDdFODg2RTAw
MUI0OTMyIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAgKi8sCisJCQkJ
NDFDQkNFRkQyNDdFODg2RTAwMUI0OTMyIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdC5oICovLAogCQkJCTA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmggKi8sCiAJCQkJMDcwMzYzREIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVy
ZURldmljZU1hbmFnZXIubW0gKi8sCiAJCQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFW
VmlkZW9DYXB0dXJlU291cmNlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCmluZGV4IDg4NTcx
NDI5NTI2YzI0ZDQ4MWUxNDI0MWQxNzgyZjk1ZGM4ZDU5NGUuLjc4MjQyNmJhODY5MjljOGZkNjZi
MmI1MzZkNzU3N2JlNWU0MGM4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCkBAIC0xMDMsNDQg
KzEwMyw0MiBAQCB2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGZsb2F0IGdh
aW4pCiAgICAgYXBwbHlHYWluKG1fYnVmZmVyTGlzdC5nZXQoKSwgZ2FpbiwgbV9pbnRlcm5hbEZv
cm1hdC0+Zm9ybWF0KCkpOwogfQogCi1PU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Om1p
eEZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0JiBzb3VyY2UsIHNpemVfdCBmcmFtZUNv
dW50KQorc3RhdGljIHZvaWQgbWl4QnVmZmVycyhXZWJBdWRpb0J1ZmZlckxpc3QmIGRlc3RpbmF0
aW9uQnVmZmVyLCBjb25zdCBBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZUJ1ZmZlciwgQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0IGZvcm1hdCwgc2l6ZV90IGZyYW1lQ291bnQpCiB7Ci0g
ICAgQVNTRVJUKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpID09IHN0cmVhbURlc2NyaXB0aW9u
KCkpOwotCi0gICAgaWYgKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpICE9IHN0cmVhbURlc2Ny
aXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKLQotICAgIGlmIChm
cmFtZUNvdW50ID4gc291cmNlLnNhbXBsZUNvdW50KCkpCi0gICAgICAgIGZyYW1lQ291bnQgPSBz
b3VyY2Uuc2FtcGxlQ291bnQoKTsKLQotICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1wbGVDYXBh
Y2l0eSkKLSAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwotCi0gICAgbV9zYW1wbGVD
b3VudCA9IGZyYW1lQ291bnQ7Ci0KLSAgICBhdXRvJiBzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYnVm
ZmVyTGlzdCgpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX2J1ZmZlckxpc3QtPmJ1
ZmZlckNvdW50KCk7IGkrKykgewotICAgICAgICBzd2l0Y2ggKG1faW50ZXJuYWxGb3JtYXQtPmZv
cm1hdCgpKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQnVmZmVy
LmJ1ZmZlckNvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAg
ICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkludDE2OiB7Ci0gICAgICAgICAgICBpbnQx
Nl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDE2X3QqPihtX2J1ZmZlckxpc3QtPmJ1
ZmZlcihpKS0+bURhdGEpOwotICAgICAgICAgICAgaW50MTZfdCogc291cmNlID0gc3RhdGljX2Nh
c3Q8aW50MTZfdCo+KHNvdXJjZUJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAg
IEFTU0VSVChmcmFtZUNvdW50IDw9IGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFC
eXRlU2l6ZSAvIDIpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVm
ZmVyLm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyAyKTsKKworICAgICAgICAgICAgYXV0byog
ZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oZGVzdGluYXRpb25CdWZmZXIuYnVm
ZmVyKGkpLT5tRGF0YSk7CisgICAgICAgICAgICBhdXRvKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxp
bnQxNl90Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKTsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsgaSsrKQogICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uW2ldICs9IHNvdXJjZVtpXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsKLSAgICAgICAg
ICAgIGludDMyX3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MzJfdCo+KG1fYnVmZmVy
TGlzdC0+YnVmZmVyKGkpLT5tRGF0YSk7Ci0gICAgICAgICAgICB2RFNQX3ZhZGRpKGRlc3RpbmF0
aW9uLCAxLCByZWludGVycHJldF9jYXN0PGludDMyX3QqPihzb3VyY2VCdWZmZXIuYnVmZmVyKGkp
LT5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIEFT
U0VSVChmcmFtZUNvdW50IDw9IGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFCeXRl
U2l6ZSAvIDQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVmZmVy
Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyA0KTsKKworICAgICAgICAgICAgYXV0byogZGVz
dGluYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVy
KGkpLT5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3ZhZGRpKGRlc3RpbmF0aW9uLCAxLCByZWlu
dGVycHJldF9jYXN0PGludDMyX3QqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpLCAx
LCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0MzI6IHsKLSAg
ICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obV9idWZm
ZXJMaXN0LT5idWZmZXIoaSktPm1EYXRhKTsKLSAgICAgICAgICAgIHZEU1BfdmFkZChkZXN0aW5h
dGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHNvdXJjZUJ1ZmZlci5idWZmZXIoaSkt
Pm1EYXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgQVNT
RVJUKGZyYW1lQ291bnQgPD0gZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0YUJ5dGVT
aXplIC8gNCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVDb3VudCA8PSBzb3VyY2VCdWZmZXIu
bUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIDQpOworCisgICAgICAgICAgICBhdXRvKiBkZXN0
aW5hdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Kj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkp
LT5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3ZhZGQoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpLCAxLCBkZXN0
aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0NjQ6IHsKLSAgICAgICAg
ICAgIGRvdWJsZSogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxkb3VibGUqPihtX2J1ZmZlckxp
c3QtPmJ1ZmZlcihpKS0+bURhdGEpOwotICAgICAgICAgICAgdkRTUF92YWRkRChkZXN0aW5hdGlv
biwgMSwgcmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPihzb3VyY2VCdWZmZXIuYnVmZmVyKGkpLT5t
RGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIEFTU0VS
VChmcmFtZUNvdW50IDw9IGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFCeXRlU2l6
ZSAvIDgpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVmZmVyLm1C
dWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyA4KTsKKworICAgICAgICAgICAgYXV0byogZGVzdGlu
YXRpb24gPSBzdGF0aWNfY2FzdDxkb3VibGUqPihkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSkt
Pm1EYXRhKTsKKyAgICAgICAgICAgIHZEU1BfdmFkZEQoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJw
cmV0X2Nhc3Q8ZG91YmxlKj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVz
dGluYXRpb24sIDEsIGZyYW1lQ291bnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpOb25lOgpAQCAtMTQ4LDcgKzE0
NiwyNCBAQCBPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Om1peEZyb20oY29uc3QgQXVk
aW9TYW1wbGVCdWZmZXJMaXN0JiBzb3VyY2UsIHNpegogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9Cit9CisKK09TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6bWl4RnJv
bShjb25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90IGZyYW1lQ291bnQp
Cit7CisgICAgQVNTRVJUKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpID09IHN0cmVhbURlc2Ny
aXB0aW9uKCkpOworCisgICAgaWYgKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpICE9IHN0cmVh
bURlc2NyaXB0aW9uKCkpCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAg
IGlmIChmcmFtZUNvdW50ID4gc291cmNlLnNhbXBsZUNvdW50KCkpCisgICAgICAgIGZyYW1lQ291
bnQgPSBzb3VyY2Uuc2FtcGxlQ291bnQoKTsKKworICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1w
bGVDYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgbV9z
YW1wbGVDb3VudCA9IGZyYW1lQ291bnQ7CiAKKyAgICBtaXhCdWZmZXJzKGJ1ZmZlckxpc3QoKSwg
c291cmNlLmJ1ZmZlckxpc3QoKSwgbV9pbnRlcm5hbEZvcm1hdC0+Zm9ybWF0KCksIGZyYW1lQ291
bnQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTIsNiArMjA3LDE3IEBAIE9TU3RhdHVzIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weVRvKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXpl
X3QgZnJhbWVDb3VuCiAgICAgcmV0dXJuIDA7CiB9CiAKK09TU3RhdHVzIEF1ZGlvU2FtcGxlQnVm
ZmVyTGlzdDo6bWl4RnJvbShjb25zdCBBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90IGZy
YW1lQ291bnQpCit7CisgICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBsZUNvdW50KQorICAgICAg
ICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisgICAgaWYgKHNvdXJjZS5tTnVtYmVyQnVmZmVy
cyA+IG1fYnVmZmVyTGlzdC0+YnVmZmVyQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19Q
YXJhbUVycm9yOworCisgICAgbWl4QnVmZmVycyhidWZmZXJMaXN0KCksIHNvdXJjZSwgbV9pbnRl
cm5hbEZvcm1hdC0+Zm9ybWF0KCksIGZyYW1lQ291bnQpOworICAgIHJldHVybiAwOworfQorCiB2
b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6cmVzZXQoKQogewogICAgIG1fc2FtcGxlQ291bnQg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1
ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCmluZGV4IDVjZmRjNWE4ZDMyOWVmYTk1YTM4MzA4M2Q0Njhk
ZjdkMzcxMjI1N2QuLjgxNTJmODYwMGJkOTQ5MTAwYjYyOTJiOGY2YTQ4NDMwZTFkOGVjMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1
ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9T
YW1wbGVCdWZmZXJMaXN0LmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogCiAgICAgT1NTdGF0
dXMgbWl4RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBzaXplX3QgY291bnQgPSBT
SVpFX01BWCk7CiAKKyAgICBPU1N0YXR1cyBtaXhGcm9tKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYs
IHNpemVfdCBjb3VudCA9IFNJWkVfTUFYKTsKICAgICBPU1N0YXR1cyBjb3B5VG8oQXVkaW9CdWZm
ZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgpOwogCiAgICAgY29uc3QgQXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uJiBzdHJlYW1EZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZXJuYWxGb3JtYXQtPnN0cmVhbURlc2NyaXB0aW9uKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1t
CmluZGV4IDAwMDAxY2I4M2QwNjY5ZTU2M2ZmNGQyNTUzNGEzMmIyMWI1NWZjMWYuLmQ4ZDQ1NDcz
OTA3YTI0NTM1MjY5OWNlNjE5YTkwMTg5NWE1MDM1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQpA
QCAtMjg5LDEwICsyODksMjUgQEAgYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1w
bGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCYKICAgICAgICAgfQog
ICAgIH0KIAotICAgIG1fcmluZ0J1ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRp
bWVTdGFtcCwgbW9kZSA9PSBDb3B5ID8gQ0FSaW5nQnVmZmVyOjpDb3B5IDogQ0FSaW5nQnVmZmVy
OjpNaXgpOworICAgIGlmIChtb2RlID09IENvcHkpIHsKKyAgICAgICAgbV9yaW5nQnVmZmVyLT5m
ZXRjaCgmYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBDQVJpbmdCdWZmZXI6OkNvcHkp
OworICAgICAgICBpZiAobV92b2x1bWUgPCAuOTUpCisgICAgICAgICAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6OmFwcGx5R2FpbihidWZmZXIsIG1fdm9sdW1lLCBtX291dHB1dERlc2NyaXB0aW9u
LT5mb3JtYXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX3Zv
bHVtZSA+PSAuOTUpIHsKKyAgICAgICAgbV9yaW5nQnVmZmVyLT5mZXRjaCgmYnVmZmVyLCBzYW1w
bGVDb3VudCwgdGltZVN0YW1wLCBDQVJpbmdCdWZmZXI6Ok1peCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKCptX3JpbmdC
dWZmZXIuZ2V0KCksIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZlcjo6Q29weSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX3ZvbHVtZSA8IC45NSkKLSAgICAg
ICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4oYnVmZmVyLCBtX3ZvbHVtZSwgbV9v
dXRwdXREZXNjcmlwdGlvbi0+Zm9ybWF0KCkpOworICAgIG1fc2NyYXRjaEJ1ZmZlci0+YXBwbHlH
YWluKG1fdm9sdW1lKTsKKyAgICBtX3NjcmF0Y2hCdWZmZXItPm1peEZyb20oYnVmZmVyLCBzYW1w
bGVDb3VudCk7CisgICAgaWYgKG1fc2NyYXRjaEJ1ZmZlci0+Y29weVRvKGJ1ZmZlciwgc2FtcGxl
Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApp
bmRleCBiZWUzZWVkNTcyNDExMjA1MWEwNGY0ZWI0MmExZDgwMWFkYzU1ZTMyLi4zOTZmM2EwZDdi
YjA3YmZmZGUxZTJhOThlMTg5N2JiODBhZjcwMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJD
b2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCkBAIC0yOCwxNCArMjgsOSBAQAog
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5j
bHVkZSAiQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgiCisjaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0LmgiCiAjaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgi
Ci0jaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi0jaW5jbHVkZSA8cGFsL2NmL0NvcmVN
ZWRpYVNvZnRMaW5rLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRpb1Rvb2xib3hTUEku
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NywyOCArNDIsMTQgQEAgdm9pZCBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdGFydCgpCiB7CiAgICAgY2xlYXIoKTsK
IAotICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBvdXRwdXREZXNjcmlwdGlvbjsKLSAgICBh
dXRvIHJlbW90ZUlPVW5pdCA9IGNyZWF0ZUF1ZGlvVW5pdChvdXRwdXREZXNjcmlwdGlvbik7Ci0g
ICAgaWYgKCFyZW1vdGVJT1VuaXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIGVy
cm9yID0gQXVkaW9PdXRwdXRVbml0U3RhcnQocmVtb3RlSU9Vbml0KSkgewotICAgICAgICBFUlJP
Ul9MT0coTE9HSURFTlRJRklFUiwgIkF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCwgZXJyb3Ig
PSAiLCBlcnJvciwgIiAoIiwgKGNvbnN0IGNoYXIqKSZlcnJvciwgIikiKTsKLSAgICAgICAgQXVk
aW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UocmVtb3RlSU9Vbml0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtX291dHB1dERlc2NyaXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24+KG91dHB1dERlc2NyaXB0aW9uKTsKLSAgICBtX3JlbW90ZUlPVW5pdCA9
IHJlbW90ZUlPVW5pdDsKKyAgICBpZiAoYXV0byogZm9ybWF0RGVzY3JpcHRpb24gPSBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLmZvcm1hdERlc2NyaXB0aW9u
KCkpCisgICAgICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbj4oKmZvcm1hdERlc2NyaXB0aW9uKTsKIH0KIAogdm9pZCBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdG9wKCkKIHsKLSAgICBpZiAoIW1fcmVtb3RlSU9V
bml0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBdWRpb091dHB1dFVuaXRTdG9wKG1fcmVtb3Rl
SU9Vbml0KTsKLSAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX3JlbW90ZUlPVW5p
dCk7Ci0gICAgbV9yZW1vdGVJT1VuaXQgPSBudWxscHRyOworICAgIGlmIChtX2RhdGFTb3VyY2Up
CisgICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCku
cmVtb3ZlU291cmNlKCptX2RhdGFTb3VyY2UpOwogfQogCiB2b2lkIEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyQ29jb2E6OmNsZWFyKCkKQEAgLTc2LDg0ICs1NywyMSBAQCB2b2lkIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OmNsZWFyKCkKICAgICBzdG9wKCk7CiAKICAg
ICBtX2RhdGFTb3VyY2UgPSBudWxscHRyOwotICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBudWxs
cHRyOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSB7IH07CiB9CiAKLUF1ZGlvQ29tcG9uZW50
SW5zdGFuY2UgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6Y3JlYXRlQXVkaW9V
bml0KENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3V0cHV0RGVzY3JpcHRpb24pCit2b2lkIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUp
CiB7Ci0gICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSByZW1vdGVJT1VuaXQgeyBudWxscHRyIH07
Ci0KLSAgICBBdWRpb0NvbXBvbmVudERlc2NyaXB0aW9uIGlvVW5pdERlc2NyaXB0aW9uIHsga0F1
ZGlvVW5pdFR5cGVfT3V0cHV0LCAwLCBrQXVkaW9Vbml0TWFudWZhY3R1cmVyX0FwcGxlLCAwLCAw
IH07Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpb1VuaXREZXNjcmlwdGlvbi5jb21w
b25lbnRTdWJUeXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfUmVtb3RlSU87Ci0jZWxzZQotICAgIGlv
VW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9EZWZh
dWx0T3V0cHV0OwotI2VuZGlmCi0KLSAgICBBdWRpb0NvbXBvbmVudCBpb0NvbXBvbmVudCA9IEF1
ZGlvQ29tcG9uZW50RmluZE5leHQobnVsbHB0ciwgJmlvVW5pdERlc2NyaXB0aW9uKTsKLSAgICBB
U1NFUlQoaW9Db21wb25lbnQpOwotICAgIGlmICghaW9Db21wb25lbnQpIHsKLSAgICAgICAgRVJS
T1JfTE9HKExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gZmluZCByZW1vdGUgSU8gdW5pdCBjb21w
b25lbnQiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgT1NTdGF0dXMg
ZXJyID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJnJlbW90ZUlPVW5p
dCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInVu
YWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3IgPSAiLCBlcnIsICIgKCIsIChjb25zdCBjaGFy
KikmZXJyLCAiKSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIFVJbnQzMiBwYXJhbSA9IDE7Ci0gICAgZXJyID0gQXVkaW9V
bml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5h
YmxlSU8sIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIDAsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7
Ci0gICAgaWYgKGVycikgewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInVuYWJs
ZSB0byBlbmFibGUgdnBpbyB1bml0IG91dHB1dCwgZXJyb3IgPSAiLCBlcnIsICIgKCIsIChjb25z
dCBjaGFyKikmZXJyLCAiKSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IGlucHV0UHJvYywg
dGhpcyB9OwotICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1
ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFs
LCAwLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykpOwotICAgIGlmIChlcnIpIHsKLSAgICAg
ICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVh
a2VyIHByb2MsIGVycm9yID0gIiwgZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIikiKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgVUludDMyIHNpemUgPSBzaXpl
b2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSk7Ci0gICAgZXJyICA9IEF1
ZGlvVW5pdEdldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVh
bUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAmb3V0cHV0RGVzY3JpcHRpb24uc3Ry
ZWFtRGVzY3JpcHRpb24oKSwgJnNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJST1Jf
TE9HKExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVy
cm9yID0gIiwgZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIikiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgb3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3Jp
cHRpb24oKS5tU2FtcGxlUmF0ZSA9IEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBs
ZVJhdGUoKTsKLQotICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwg
a0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAw
LCAmb3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSwgc2l6ZW9mKG91dHB1dERl
c2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkpKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAg
IEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxlIHRvIHNldCBpbnB1dCBzdHJlYW0gZm9y
bWF0LCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNoYXIqKSZlcnIsICIpIik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGVyciA9IEF1ZGlvVW5pdEluaXRpYWxp
emUocmVtb3RlSU9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJ
REVOVElGSUVSLCAiQXVkaW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgPSAiLCBlcnIs
ICIgKCIsIChjb25zdCBjaGFyKikmZXJyLCAiKSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVtb3RlSU9Vbml0OworICAgIEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyOjpzZXRWb2x1bWUodm9sdW1lKTsKKyAgICBpZiAobV9kYXRhU291cmNlKQor
ICAgICAgICBtX2RhdGFTb3VyY2UtPnNldFZvbHVtZSh2b2x1bWUpOwogfQogCiB2b2lkIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnB1c2hTYW1wbGVzKGNvbnN0IE1lZGlhVGlt
ZSYgc2FtcGxlVGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3Qg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBzYW1wbGVDb3VudCkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoZGVzY3JpcHRpb24u
cGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRp
b1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgaWYgKCFtX3JlbW90ZUlPVW5pdCkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKCFtX2RhdGFTb3VyY2UgfHwgIW1fZGF0YVNvdXJjZS0+aW5wdXREZXNj
cmlwdGlvbigpIHx8ICptX2RhdGFTb3VyY2UtPmlucHV0RGVzY3JpcHRpb24oKSAhPSBkZXNjcmlw
dGlvbikgewotICAgICAgICBpZiAobV9zaG91bGRVcGRhdGVSZW5kZXJlckRhdGFTb3VyY2UpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KICAgICAgICAgYXV0byBkYXRhU291cmNlID0gQXVkaW9TYW1w
bGVEYXRhU291cmNlOjpjcmVhdGUoZGVzY3JpcHRpb24uc2FtcGxlUmF0ZSgpICogMiwgKnRoaXMp
OwogCiAgICAgICAgIGlmIChkYXRhU291cmNlLT5zZXRJbnB1dEZvcm1hdCh0b0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikpKSB7CkBAIC0xNjEsNDUgKzc5LDI4IEBAIHZvaWQg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMoY29uc3QgTWVk
aWFUaW1lJiBzYW1wbGVUaW1lCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoZGF0YVNvdXJjZS0+c2V0T3V0cHV0Rm9ybWF0KCptX291dHB1dERlc2NyaXB0aW9u
KSkgeworICAgICAgICBpZiAoIW1fb3V0cHV0RGVzY3JpcHRpb24gfHwgZGF0YVNvdXJjZS0+c2V0
T3V0cHV0Rm9ybWF0KCptX291dHB1dERlc2NyaXB0aW9uKSkgewogICAgICAgICAgICAgRVJST1Jf
TE9HKExPR0lERU5USUZJRVIsICJVbmFibGUgdG8gc2V0IHRoZSBvdXRwdXQgZm9ybWF0IG9mIGRh
dGEgc291cmNlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBk
YXRhU291cmNlLT5zZXRQYXVzZWQoZmFsc2UpOwotICAgICAgICBkYXRhU291cmNlLT5zZXRWb2x1
bWUodm9sdW1lKCkpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpLCBvbGRTb3VyY2UgPSBtX2RhdGFTb3VyY2UsIG5ld1NvdXJjZSA9
IGRhdGFTb3VyY2UuY29weVJlZigpXSgpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChvbGRTb3Vy
Y2UpCisgICAgICAgICAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpz
aW5nbGV0b24oKS5yZW1vdmVTb3VyY2UoKm9sZFNvdXJjZSk7CiAKKyAgICAgICAgICAgIG5ld1Nv
dXJjZS0+c2V0UGF1c2VkKGZhbHNlKTsKKyAgICAgICAgICAgIG5ld1NvdXJjZS0+c2V0Vm9sdW1l
KHZvbHVtZSgpKTsKKyAgICAgICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dDo6c2luZ2xldG9uKCkuYWRkU291cmNlKFdURk1vdmUobmV3U291cmNlKSk7CisgICAgICAgIH0p
OwogICAgICAgICBtX2RhdGFTb3VyY2UgPSBXVEZNb3ZlKGRhdGFTb3VyY2UpOwotICAgICAgICBt
X3Nob3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNvdXJjZSA9IHRydWU7CiAgICAgfQogCiAgICAgbV9k
YXRhU291cmNlLT5wdXNoU2FtcGxlcyhzYW1wbGVUaW1lLCBhdWRpb0RhdGEsIHNhbXBsZUNvdW50
KTsKIH0KIAotT1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6cmVu
ZGVyKFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiBpb0RhdGEsIFVJbnQzMiAv
KmluQnVzTnVtYmVyKi8sIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzJiBhY3Rpb25GbGFncykKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLSAgICBpZiAobV9zaG91bGRVcGRhdGVSZW5kZXJlckRhdGFTb3VyY2UpIHsKLSAg
ICAgICAgbV9yZW5kZXJlckRhdGFTb3VyY2UgPSBtX2RhdGFTb3VyY2U7Ci0gICAgICAgIG1fc2hv
dWxkVXBkYXRlUmVuZGVyZXJEYXRhU291cmNlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFt
X3JlbmRlcmVyRGF0YVNvdXJjZSkgewotICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onpl
cm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50ICogbV9vdXRwdXRE
ZXNjcmlwdGlvbi0+Ynl0ZXNQZXJGcmFtZSgpKSk7Ci0gICAgICAgIGFjdGlvbkZsYWdzID0ga0F1
ZGlvVW5pdFJlbmRlckFjdGlvbl9PdXRwdXRJc1NpbGVuY2U7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIG1fcmVuZGVyZXJEYXRhU291cmNlLT5wdWxsU2FtcGxlcyhpb0RhdGEsIHN0
YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlQ291bnQpLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRp
bWVTdGFtcC5tSG9zdFRpbWUsIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Q29weSk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLU9TU3RhdHVzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6
OmlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGFj
dGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogdGltZVN0YW1wLCBVSW50MzIgaW5CdXNO
dW1iZXIsIFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2Eq
Pih1c2VyRGF0YSktPnJlbmRlcihzYW1wbGVDb3VudCwgKmlvRGF0YSwgaW5CdXNOdW1iZXIsICp0
aW1lU3RhbXAsICphY3Rpb25GbGFncyk7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgKaW5k
ZXggZGJhNzllNWI4MmNhYmVlY2MyZDNhMjYyYzZhM2FhNWI1NTU2MWU4Mi4uMDc1MTFiMWY1MmQ4
ZmE3MDE2ZWEyNTg5NWQ5NGRlN2Y2ZmIwODA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiAjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1
ZGlvVG9vbGJveC5oPgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgpAQCAt
MzksNyArNDAsNyBAQCBjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7CiBjbGFzcyBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q7CiBjbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CiAKLWNsYXNz
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EgOiBwdWJsaWMgQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXIgeworY2xhc3MgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJD
b2NvYSA6IHB1YmxpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlciwgcHVibGljIENhbk1h
a2VXZWFrUHRyPEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EsIFdlYWtQdHJGYWN0
b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgpOwpAQCAt
NTEsMTkgKzUyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydCgpIGZpbmFsOwogICAgIHZv
aWQgc3RvcCgpIGZpbmFsOwogICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICB2b2lkIHNldFZv
bHVtZShmbG9hdCkgZmluYWw7CiAKLSAgICBzdGF0aWMgT1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQq
LCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUlu
dDMyIGluQnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCop
OwotICAgIE9TU3RhdHVzIHJlbmRlcihVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlz
dCYsIFVJbnQzMiBpbkJ1c051bWJlciwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyYpOwotCi0gICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSBjcmVhdGVB
dWRpb1VuaXQoQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7Ci0KLSAgICBBdWRpb0NvbXBvbmVu
dEluc3RhbmNlIG1fcmVtb3RlSU9Vbml0IHsgbnVsbHB0ciB9OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1fb3V0cHV0RGVzY3JpcHRpb247Ci0KLSAgICAv
LyBBdWRpbyB0aHJlYWRzIG1lbWJlcgogICAgIFJlZlB0cjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+
IG1fZGF0YVNvdXJjZTsKLSAgICBSZWZQdHI8QXVkaW9TYW1wbGVEYXRhU291cmNlPiBtX3JlbmRl
cmVyRGF0YVNvdXJjZTsKLSAgICBib29sIG1fc2hvdWxkVXBkYXRlUmVuZGVyZXJEYXRhU291cmNl
IHsgZmFsc2UgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y2Njg5MzczODFlOTMzMzU4N2I0NDVi
MWU1YTk3NDYwY2U1YmJjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3Bw
CkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIgorCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9T
YW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAi
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjaW5j
bHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRpb1Rvb2xib3hTUEkuaD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgorCisjaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0JiBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdD4gcmVnaXN0cnk7
CisgICAgcmV0dXJuIHJlZ2lzdHJ5OworfQorCitBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ6On5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQoKQoreworICAgIHN0b3Ao
KTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJj
ZShSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPiYmIHNvdXJjZSkKK3sKKyAgICBSRUxFQVNFX0xP
RyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZSIp
OworCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc291cmNlc0xvY2sp
OworICAgICAgICBBU1NFUlQoIW1fc291cmNlcy5jb250YWlucyhzb3VyY2UuZ2V0KCkpKTsKKyAg
ICAgICAgbV9zb3VyY2VzLmFkZChXVEZNb3ZlKHNvdXJjZSkpOworICAgICAgICBtX3Nob3VsZFVw
ZGF0ZVJlbmRlclNvdXJjZXMgPSB0cnVlOworICAgIH0KKyAgICBzdGFydCgpOworfQorCit2b2lk
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3ZlU291cmNlKEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZSYgc291cmNlKQoreworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3ZlU291cmNlIik7CisKKyAgICBib29s
IHNob3VsZFN0b3AgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zb3VyY2VzTG9jayk7CisgICAgICAgIG1fc291cmNlcy5yZW1vdmUoc291cmNlKTsKKyAg
ICAgICAgc2hvdWxkU3RvcCA9IG1fc291cmNlcy5pc0VtcHR5KCk7CisgICAgICAgIG1fc2hvdWxk
VXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7CisgICAgfQorICAgIGlmIChzaG91bGRTdG9wKQor
ICAgICAgICBzdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpzdGFydCgpCit7CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjpzdGFydCIpOworICAgIGlmIChtX2lzU3RhcnRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsKKyAgICBpZiAoIW1f
cmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byBlcnJvciA9IEF1
ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fcmVtb3RlSU9Vbml0KSkgeworICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0
IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAg
ICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1VuaXQpOworICAgICAg
ICBtX3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7CisgICAgfQorICAgIG1faXNTdGFydGVkID0gdHJ1
ZTsKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQgaXMgc3RhcnRlZCIpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6c3RvcCgpCit7CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdG9wIik7CisKKyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgQXVk
aW9PdXRwdXRVbml0U3RvcChtX3JlbW90ZUlPVW5pdCk7CisgICAgICAgIG1faXNTdGFydGVkID0g
ZmFsc2U7CisgICAgfQorCisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1v
dGVJT1VuaXQpOworICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKK30KKworQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmZvcm1h
dERlc2NyaXB0aW9uKCkKK3sKKyAgICBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOworICAgIHJl
dHVybiBtX291dHB1dERlc2NyaXB0aW9uLmdldCgpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKQoreworICAgIEFT
U0VSVCghbV9yZW1vdGVJT1VuaXQgfHwgbV9vdXRwdXREZXNjcmlwdGlvbik7CisgICAgaWYgKG1f
cmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24gb3V0cHV0RGVzY3JpcHRpb247CisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSByZW1v
dGVJT1VuaXQgeyBudWxscHRyIH07CisKKyAgICBBdWRpb0NvbXBvbmVudERlc2NyaXB0aW9uIGlv
VW5pdERlc2NyaXB0aW9uIHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCAwLCBrQXVkaW9Vbml0TWFu
dWZhY3R1cmVyX0FwcGxlLCAwLCAwIH07CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBp
b1VuaXREZXNjcmlwdGlvbi5jb21wb25lbnRTdWJUeXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfUmVt
b3RlSU87CisjZWxzZQorICAgIGlvVW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBr
QXVkaW9Vbml0U3ViVHlwZV9EZWZhdWx0T3V0cHV0OworI2VuZGlmCisKKyAgICBBdWRpb0NvbXBv
bmVudCBpb0NvbXBvbmVudCA9IEF1ZGlvQ29tcG9uZW50RmluZE5leHQobnVsbHB0ciwgJmlvVW5p
dERlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQoaW9Db21wb25lbnQpOworICAgIGlmICghaW9Db21w
b25lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGZpbmQgcmVt
b3RlIElPIHVuaXQgY29tcG9uZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIGVycm9yID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJnJlbW90
ZUlPVW5pdCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdl
YlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0
IHVuYWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgVUludDMyIHBh
cmFtID0gMTsKKyAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwg
a0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0
LCAwLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQsIGVy
cm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAg
IEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IGlucHV0UHJvYywgbnVsbHB0ciB9
OworICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9V
bml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAs
ICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IHNwZWFrZXIgcHJv
YywgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFVJ
bnQzMiBzaXplID0gc2l6ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkp
OworICAgIGVycm9yICA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlv
VW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAmb3V0
cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSwgJnNpemUpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gZ2V0IGlucHV0IHN0
cmVhbSBmb3JtYXQsIGVycm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLm1TYW1wbGVSYXRl
ID0gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2FtcGxlUmF0ZSgpOworCisgICAgZXJy
b3IgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0
eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJm91dHB1dERlc2NyaXB0
aW9uLnN0cmVhbURlc2NyaXB0aW9uKCksIHNpemVvZihvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1E
ZXNjcmlwdGlvbigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVk
aW9Vbml0IHVuYWJsZSB0byBzZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAlZCIsIGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVycm9yID0gQXVkaW9Vbml0SW5p
dGlhbGl6ZShyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNy
ZWF0ZUF1ZGlvVW5pdCBBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciA9ICVkIiwg
ZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vdXRwdXREZXNjcmlwdGlv
biA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihvdXRwdXREZXNjcmlwdGlv
bik7CisgICAgbV9yZW1vdGVJT1VuaXQgPSByZW1vdGVJT1VuaXQ7Cit9CisKK09TU3RhdHVzIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVuZGVyKFVJbnQzMiBzYW1wbGVDb3Vu
dCwgQXVkaW9CdWZmZXJMaXN0JiBpb0RhdGEsIFVJbnQzMiAvKmluQnVzTnVtYmVyKi8sIGNvbnN0
IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBh
Y3Rpb25GbGFncykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9z
aG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzKSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9s
ZExvY2sobV9zb3VyY2VzTG9jayk7CisgICAgICAgIGlmICghbG9ja2VyKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgbV9yZW5kZXJTb3VyY2VzID0gY29weVRvVmVjdG9yKG1fc291
cmNlcyk7CisgICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IGZhbHNlOworICAg
IH0KKyAgICAvLyBNaXggYWxsIHNvdXJjZXMuCisgICAgaWYgKG1fcmVuZGVyU291cmNlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5
dGVzUGVyRnJhbWUoKSkpOworICAgICAgICBhY3Rpb25GbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25fT3V0cHV0SXNTaWxlbmNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYm9v
bCBpc0ZpcnN0U291cmNlID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IG1fcmVuZGVy
U291cmNlcykgeworICAgICAgICBzb3VyY2UtPnB1bGxTYW1wbGVzKGlvRGF0YSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihzYW1wbGVDb3VudCksIHRpbWVTdGFtcC5tU2FtcGxlVGltZSwgdGltZVN0YW1w
Lm1Ib3N0VGltZSwgaXNGaXJzdFNvdXJjZSA/IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Q29weSA6
IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6TWl4KTsKKyAgICAgICAgaXNGaXJzdFNvdXJjZSA9IGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjppbnB1dFByb2Modm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlv
bkZsYWdzKiBhY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIHRpbWVTdGFtcCwgVUlu
dDMyIGluQnVzTnVtYmVyLCBVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCogaW9E
YXRhKQoreworICAgIHJldHVybiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNp
bmdsZXRvbigpLnJlbmRlcihzYW1wbGVDb3VudCwgKmlvRGF0YSwgaW5CdXNOdW1iZXIsICp0aW1l
U3RhbXAsICphY3Rpb25GbGFncyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41Yjc5NzNjOGFmNjA1NjU3MGQ1MWM1OWIzNTUyOTAxYzU2YzQxYzk0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3guaD4KKyNpbmNsdWRl
IDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKK2Ns
YXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjsKKworY2xhc3MgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0JiBzaW5nbGV0b24o
KTsKKworICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpID0gZGVmYXVsdDsK
KyAgICB+QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KCk7CisKKyAgICBzdGF0aWMg
T1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNv
bnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZG
cmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQg
c3RvcCgpOworCisgICAgdm9pZCBhZGRTb3VyY2UoUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4m
Jik7CisgICAgdm9pZCByZW1vdmVTb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7CisKKyAg
ICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24qIGZvcm1hdERlc2NyaXB0aW9uKCk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOworICAgIE9TU3RhdHVzIHJl
bmRlcihVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYsIFVJbnQzMiBpbkJ1c051
bWJlciwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYp
OworCisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSBtX3JlbW90ZUlPVW5pdCB7IG51bGxwdHIg
fTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1
dERlc2NyaXB0aW9uOworICAgIEhhc2hTZXQ8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1f
c291cmNlczsKKyAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fcmVuZGVy
U291cmNlczsKKyAgICBib29sIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyB7IGZhbHNlIH07
CisgICAgTG9jayBtX3NvdXJjZXNMb2NrOworICAgIGJvb2wgbV9pc1N0YXJ0ZWQgeyBmYWxzZSB9
OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGFmMDcyNjJjODBiZDIxZmZkYWJmNTUxZWY2YzAwMzRhZWIxODRm
MjUuLjE4NmIxZDE3ZTEzNzMxOGU5NmRiYjUyM2UyNjczYjU0NGQ1YjNhMzQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMC0wNS0yNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgVXNlIG9uZSBhdWRpbyB1bml0IGZvciBhbGwgTWVkaWFTdHJlYW1UcmFja3Mg
b2YgYSBnaXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHdlYnJ0Yy9tdWx0aS1hdWRpby1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYnJ0Yy9tdWx0aS1hdWRpby5odG1sOiBBZGRlZC4KKwogMjAyMC0wNS0yNSAgQ2Fy
bG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
Y3NzLWZsZXhib3hdIFdQVCBUZXN0IGNzcy9jc3MtZmxleGJveC9mbGV4LWxpbmVzL211bHRpLWxp
bmUtd3JhcC1yZXZlcnNlLWNvbHVtbi1yZXZlcnNlLmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJydGMvbXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxZmY3ODRlMTIzNWNi
NzlkYWZhOWJkZjZiNTUyMzMwYWRjNjg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJydGMvbXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorIAorCitQ
QVNTIE11bHRpIGF1ZGlvIHdpdGggZGlmZmVyZW50IHZvbHVtZXMgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby5odG1sIGIvTGF5b3V0VGVzdHMvd2VicnRjL211
bHRpLWF1ZGlvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcxZWRlNmFhYTIzZmJkNjYwOTE2YjAzYjM5NGRj
ODA0NGNiMmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1h
dWRpby5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgICAg
PGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPlRl
c3RpbmcgbXVsdGkgYXVkaW8gd2l0aCBtdWx0aXBsZSB2b2x1bWVzPC90aXRsZT4KKyAgICAgICAg
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgICAg
ICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHZpZGVvIGlkPSJ2aWRlbzEi
IGF1dG9wbGF5PSIiPjwvdmlkZW8+CisgICAgICAgIDx2aWRlbyBpZD0idmlkZW8yIiBhdXRvcGxh
eT0iIj48L3ZpZGVvPgorICAgICAgICA8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI2NDAiIGhl
aWdodD0iNDgwIj48L2NhbnZhcz4KKyAgICAgICAgPHNjcmlwdCBzcmMgPSJyb3V0aW5lcy5qcyI+
PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+Cit2YXIgcGMxLCBwYzI7Citwcm9taXNlX3Rlc3Qo
YXN5bmMgKHRlc3QpID0+IHsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRl
c3RSdW5uZXIuc2V0VXNlck1lZGlhUGVybWlzc2lvbih0cnVlKTsKKworICAgIGxldCByZW1vdGVT
dHJlYW0xLCByZW1vdGVTdHJlYW0yOworICAgIGxldCBjb3VudGVyID0gMDsKKyAgICBjb25zdCBs
b2NhbFN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsg
YXVkaW86IHRydWUsIHZpZGVvIDogdHJ1ZSB9KTsKKyAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBu
ZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgIGNyZWF0ZUNvbm5lY3Rp
b25zKChmaXJzdENvbm5lY3Rpb24pID0+IHsKKyAgICAgICAgICAgIHBjMSA9IGZpcnN0Q29ubmVj
dGlvbjsKKyAgICAgICAgICAgIGZpcnN0Q29ubmVjdGlvbi5hZGRUcmFjayhsb2NhbFN0cmVhbS5n
ZXRBdWRpb1RyYWNrcygpWzBdLCBsb2NhbFN0cmVhbSk7CisgICAgICAgICAgICBmaXJzdENvbm5l
Y3Rpb24uYWRkVHJhY2sobG9jYWxTdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSwgbG9jYWxTdHJl
YW0pOworCisgICAgICAgICAgICBjb25zdCBjbG9uZSA9IGxvY2FsU3RyZWFtLmNsb25lKCk7Cisg
ICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24uYWRkVHJhY2soY2xvbmUuZ2V0QXVkaW9UcmFja3Mo
KVswXSwgY2xvbmUpOworICAgICAgICAgICAgZmlyc3RDb25uZWN0aW9uLmFkZFRyYWNrKGNsb25l
LmdldFZpZGVvVHJhY2tzKClbMF0sIGNsb25lKTsKKyAgICAgICAgfSwgKHNlY29uZENvbm5lY3Rp
b24pID0+IHsKKyAgICAgICAgICAgIHBjMiA9IHNlY29uZENvbm5lY3Rpb247CisgICAgICAgICAg
ICBzZWNvbmRDb25uZWN0aW9uLm9udHJhY2sgPSAodHJhY2tFdmVudCkgPT4geworICAgICAgICAg
ICAgICAgIGlmICghcmVtb3RlU3RyZWFtMSkKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlU3Ry
ZWFtMSA9IHRyYWNrRXZlbnQuc3RyZWFtc1swXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0
cmFja0V2ZW50LnN0cmVhbXNbMF0gIT09IHJlbW90ZVN0cmVhbTEpCisgICAgICAgICAgICAgICAg
ICAgIHJlbW90ZVN0cmVhbTIgPSB0cmFja0V2ZW50LnN0cmVhbXNbMF07CisKKyAgICAgICAgICAg
ICAgICBpZiAoKytjb3VudGVyID49IDQpCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJl
amVjdCgiVGVzdCB0aW1lZCBvdXQiKSwgNTAwMCk7CisgICAgfSk7CisKKyAgICB2aWRlbzEudm9s
dW1lID0gMC4wMTsKKyAgICB2aWRlbzEuc3JjT2JqZWN0ID0gcmVtb3RlU3RyZWFtMTsKKyAgICB2
aWRlbzIudm9sdW1lID0gMTsKKyAgICB2aWRlbzIuc3JjT2JqZWN0ID0gcmVtb3RlU3RyZWFtMjsK
KyAgICBhd2FpdCB2aWRlbzEucGxheSgpOworICAgIGF3YWl0IHZpZGVvMi5wbGF5KCk7CisKKyAg
ICB2aWRlbzEudm9sdW1lID0gMC4xOworfSwgIk11bHRpIGF1ZGlvIHdpdGggZGlmZmVyZW50IHZv
bHVtZXMiKTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400575</attachid>
            <date>2020-05-29 05:45:16 -0700</date>
            <delta_ts>2020-06-08 05:02:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212406-20200529144514.patch</filename>
            <type>text/plain</type>
            <size>40866</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWY0NzM2NmM3MGRmMmFi
ZTEzYmJiMjVhYjI3ZjYzOWNiYWE4YmVkOS4uZjI5ZmMyOTYyYTA3NjVkNTIzYTY2MDJmYWFmZmVl
ZWI5Mzc1OTg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDIwLTA1LTI5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugb25lIGF1ZGlvIHVu
aXQgZm9yIGFsbCB0cmFja3Mgb2YgYSBnaXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWZvcmUgdGhlIHBhdGNoLCB3ZSB3ZXJlIGNy
ZWF0aW5nIG9uZSBhdWRpbyB1bml0IHBlciB0cmFjayB0byByZW5kZXIuCisgICAgICAgIFRoaXMg
aXMgcG90ZW50aWFsbHkgaW5lZmZpY2llbnQgYXMgdGhpcyByZXF1aXJlcyB0byBJUEMgb24gaU9T
IGVhY2ggYXVkaW8gZGF0YS4KKyAgICAgICAgSW5zdGVhZCwgd2UgY291bGQgaGF2ZSBvbmUgc2lu
Z2xlIHJlbW90ZSB1bml0IHRoYXQgd2lsbCByZWNlaXZlIHRoZSBtaXhlZCBjb250ZW50IG9mIGFs
bCB0cmFja3MuCisgICAgICAgIEZvciB0aGF0IHB1cnBvc2UsIGludHJvZHVjZSBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgYXMgYSBzaW5nbGV0b24uCisKKyAgICAgICAgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSB3aWxsIGp1c3QgcmVnaXN0ZXIvdW5yZWdpc3Rl
ciBzb3VyY2VzIHRvIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC4KKyAgICAgICAg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IHdpbGwgdGhlbiBzdGFydC9zdG9wIGFz
IG5lZWRlZCBhbmQgZG8gdGhlIG1peGluZy4KKworICAgICAgICBUaGlzIHJlcXVpcmVzIGEgY2hh
bmdlIGluIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSB0byBzdXBwb3J0IG1peGluZyBpbiBjYXNlIHRy
YWNrIHZvbHVtZXMgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgSWYgd2UgaGF2ZSB0byBtaXggYW5k
IHdpdGggZGlmZmVyZW50IHZvbHVtZXMsIHdlIGZpcnN0IHB1bGwgdGhlIHNhbXBsZXMgaW4gYSBz
Y3JhdGNoIGJ1ZmZlciwgYXBwbHkgdm9sdW1lIGFuZCB0aGVuIG1peCBpdCB3aXRoIHRoZSBvdGhl
ciB0cmFja3MuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyBkbyB0aGUg
YXVkaW8gcmVuZGVyaW5nIHdpdGggdGhlIENvcmVBdWRpb1NoYXJlZFVuaXQgZGlyZWN0bHkgc28g
YXMgdG8gaW1wcm92ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGVjaG8gY2FuY2VsbGF0aW9uLgorCisg
ICAgICAgIEludGVycnVwdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBmYWN0IHRoYXQgYWxsIHRyYWNr
cyBzaG91bGQgc3RvcCBwbGF5aW5nLCB0aHVzIHN0b3AgdGhlaXIgcmVuZGVyZXIsIHRodXMgdW5y
ZWdpc3RlciB0aGVtc2VsdmVzIGZyb20gdGhlIHJlbmRlcmVyIHVuaXQuCisgICAgICAgIGl0IG1p
Z2h0IGJlIG1vcmUgZnV0dXJlIHByb29mIHRvIGFkZCB0aGUgdW5pdCBhcyBhbiBpbnRlcnJ1cHRp
b24gb2JzZXJ2ZXIgYXMgYSBmb2xsb3ctdXAuCisKKyAgICAgICAgTWFudWFsbHkgdGVzdGVkIHBs
dXMgTGF5b3V0VGVzdHMvd2VicnRjL211bHRpLWF1ZGlvLmh0bWwKKworICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bWl4QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q6Om1peEZyb20pOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVEYXRhU291cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVE
YXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2E6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyQ29jb2E6OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hOjpwdXNoU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjcmVhdGVBdWRpb1VuaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6
cmVuZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2E6OmlucHV0UHJvYyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaDoKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojp+QXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3ZlU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVk
aW9Vbml0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpmb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJl
bmRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OmlucHV0UHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJD
b2NvYS5oLgorCiAyMDIwLTA1LTI5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMgc2hvdWxkIGVu
cXVldWUgc2FtcGxlcyBpbiBhIGJhY2tncm91bmQgdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAppbmRleCA2Y2QxNzQyM2ZjMDIxYWJjNjI0ZTc1Y2YyYTNkOGNiMjlkM2ZhZDczLi5lZTAzZTkz
MTNmNGMxZWQ5NDUwNjNjYzNkZTdhMGZlZWNjYWQyYzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKQEAgLTUwMSw2ICs1MDEsNyBAQCBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2lvcy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIEBuby11bmlmeQogCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAK
K3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5t
bSBAbm8tdW5pZnkKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJj
ZS5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGZmNjk4NWIxNmM3ZGQ4NGZhMGU4NDBhMTM2MTZhNzNhMjBmZjBj
YmQuLjQxMGFiZWM4NmZhM2Y5NGNjM2ZmZmQ5Nzc0ZjM4ZWNjNzFhOTRlYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTc1ODMs
NiArNzU4Myw4IEBACiAJCTQxQzdFMTA1MUU2QTU0MzYwMDI3QjRERSAvKiBDYW52YXNDYXB0dXJl
TWVkaWFTdHJlYW1UcmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxQzdFMTA2MUU2QTU0MzYwMDI3QjRERSAvKiBDYW52YXNDYXB0dXJlTWVkaWFT
dHJlYW1UcmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNDYXB0
dXJlTWVkaWFTdHJlYW1UcmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3
RTEwODFFNkFBMzdDMDAyN0I0REUgLyogQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFDQkNFRkIyNDdFODg2RTAwMUI0OTMy
IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUNCQ0VGRDI0N0U4ODZFMDAxQjQ5
MzIgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUNGOEJFNDFENDYyMjIwMDA3MDdEQzkgLyog
RmV0Y2hCb2R5Q29uc3VtZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmV0Y2hCb2R5Q29uc3VtZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MUNGOEJFNTFENDYyMjIwMDA3MDdEQzkgLyogRmV0Y2hCb2R5Q29uc3VtZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0Y2hCb2R5Q29uc3VtZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU4OCw2ICsxNjU5MCw4IEBACiAJCQljaGlsZHJl
biA9ICgKIAkJCQk0MTZBMDY5MzIzQ0NBQTk0MDAzNDcxMDkgLyogQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYS5jcHAgKi8sCiAJCQkJNDE2QTA2OTIyM0NDQUE5MzAwMzQ3MTA5IC8q
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaCAqLywKKwkJCQk0MUNCQ0VGQjI0
N0U4ODZFMDAxQjQ5MzIgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcCAq
LywKKwkJCQk0MUNCQ0VGRDI0N0U4ODZFMDAxQjQ5MzIgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0LmggKi8sCiAJCQkJMDcwMzYzREExODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2Fw
dHVyZURldmljZU1hbmFnZXIuaCAqLywKIAkJCQkwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyog
QVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSAqLywKIAkJCQkwNzAzNjNERTE4MUExQ0RDMDBDMDc0
QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKaW5k
ZXggODg1NzE0Mjk1MjZjMjRkNDgxZTE0MjQxZDE3ODJmOTVkYzhkNTk0ZS4uNzgyNDI2YmE4Njky
OWM4ZmQ2NmIyYjUzNmQ3NTc3YmU1ZTQwYzgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKQEAg
LTEwMyw0NCArMTAzLDQyIEBAIHZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4o
ZmxvYXQgZ2FpbikKICAgICBhcHBseUdhaW4obV9idWZmZXJMaXN0LmdldCgpLCBnYWluLCBtX2lu
dGVybmFsRm9ybWF0LT5mb3JtYXQoKSk7CiB9CiAKLU9TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdDo6bWl4RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90
IGZyYW1lQ291bnQpCitzdGF0aWMgdm9pZCBtaXhCdWZmZXJzKFdlYkF1ZGlvQnVmZmVyTGlzdCYg
ZGVzdGluYXRpb25CdWZmZXIsIGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlQnVmZmVyLCBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0LCBzaXplX3QgZnJhbWVDb3Vu
dCkKIHsKLSAgICBBU1NFUlQoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0gc3RyZWFtRGVz
Y3JpcHRpb24oKSk7Ci0KLSAgICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gc3Ry
ZWFtRGVzY3JpcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwotCi0g
ICAgaWYgKGZyYW1lQ291bnQgPiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKLSAgICAgICAgZnJhbWVD
b3VudCA9IHNvdXJjZS5zYW1wbGVDb3VudCgpOwotCi0gICAgaWYgKGZyYW1lQ291bnQgPiBtX3Nh
bXBsZUNhcGFjaXR5KQotICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7Ci0KLSAgICBt
X3NhbXBsZUNvdW50ID0gZnJhbWVDb3VudDsKLQotICAgIGF1dG8mIHNvdXJjZUJ1ZmZlciA9IHNv
dXJjZS5idWZmZXJMaXN0KCk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fYnVmZmVy
TGlzdC0+YnVmZmVyQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAobV9pbnRlcm5hbEZv
cm1hdC0+Zm9ybWF0KCkpIHsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZGVzdGluYXRp
b25CdWZmZXIuYnVmZmVyQ291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7
CiAgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MTY6IHsKLSAgICAgICAg
ICAgIGludDE2X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+KG1fYnVmZmVy
TGlzdC0+YnVmZmVyKGkpLT5tRGF0YSk7Ci0gICAgICAgICAgICBpbnQxNl90KiBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxpbnQxNl90Kj4oc291cmNlQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGEpOworICAg
ICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkp
LT5tRGF0YUJ5dGVTaXplIC8gMik7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVDb3VudCA8PSBz
b3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIDIpOworCisgICAgICAgICAg
ICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDE2X3QqPihkZXN0aW5hdGlvbkJ1
ZmZlci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAgIGF1dG8qIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGludDE2X3QqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpKyspCiAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25baV0gKz0gc291cmNlW2ldOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJbnQzMjogewot
ICAgICAgICAgICAgaW50MzJfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4o
bV9idWZmZXJMaXN0LT5idWZmZXIoaSktPm1EYXRhKTsKLSAgICAgICAgICAgIHZEU1BfdmFkZGko
ZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHNvdXJjZUJ1ZmZlci5i
dWZmZXIoaSktPm1EYXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAg
ICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5t
RGF0YUJ5dGVTaXplIC8gNCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVDb3VudCA8PSBzb3Vy
Y2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIDQpOworCisgICAgICAgICAgICBh
dXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDMyX3QqPihkZXN0aW5hdGlvbkJ1ZmZl
ci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAgIHZEU1BfdmFkZGkoZGVzdGluYXRpb24s
IDEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5t
RGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQz
MjogewotICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQq
PihtX2J1ZmZlckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOwotICAgICAgICAgICAgdkRTUF92YWRk
KGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc291cmNlQnVmZmVyLmJ1
ZmZlcihpKS0+bURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CisgICAgICAg
ICAgICBBU1NFUlQoZnJhbWVDb3VudCA8PSBkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSktPm1E
YXRhQnl0ZVNpemUgLyA0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZUNvdW50IDw9IHNvdXJj
ZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gNCk7CisKKyAgICAgICAgICAgIGF1
dG8qIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihkZXN0aW5hdGlvbkJ1ZmZlci5i
dWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAgIHZEU1BfdmFkZChkZXN0aW5hdGlvbiwgMSwg
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSks
IDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQ2NDogewot
ICAgICAgICAgICAgZG91YmxlKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGRvdWJsZSo+KG1f
YnVmZmVyTGlzdC0+YnVmZmVyKGkpLT5tRGF0YSk7Ci0gICAgICAgICAgICB2RFNQX3ZhZGREKGRl
c3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KHNvdXJjZUJ1ZmZlci5idWZm
ZXIoaSktPm1EYXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAg
ICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0
YUJ5dGVTaXplIC8gOCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVDb3VudCA8PSBzb3VyY2VC
dWZmZXIubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIDgpOworCisgICAgICAgICAgICBhdXRv
KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGRvdWJsZSo+KGRlc3RpbmF0aW9uQnVmZmVyLmJ1
ZmZlcihpKS0+bURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkRChkZXN0aW5hdGlvbiwgMSwg
cmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEp
LCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6CkBAIC0x
NDgsNyArMTQ2LDI0IEBAIE9TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6bWl4RnJvbShj
b25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIHNvdXJjZSwgc2l6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjptaXhGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJh
bWVDb3VudCkKK3sKKyAgICBBU1NFUlQoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0gc3Ry
ZWFtRGVzY3JpcHRpb24oKSk7CisKKyAgICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkg
IT0gc3RyZWFtRGVzY3JpcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9y
OworCisgICAgaWYgKGZyYW1lQ291bnQgPiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKKyAgICAgICAg
ZnJhbWVDb3VudCA9IHNvdXJjZS5zYW1wbGVDb3VudCgpOworCisgICAgaWYgKGZyYW1lQ291bnQg
PiBtX3NhbXBsZUNhcGFjaXR5KQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisK
KyAgICBtX3NhbXBsZUNvdW50ID0gZnJhbWVDb3VudDsKIAorICAgIG1peEJ1ZmZlcnMoYnVmZmVy
TGlzdCgpLCBzb3VyY2UuYnVmZmVyTGlzdCgpLCBtX2ludGVybmFsRm9ybWF0LT5mb3JtYXQoKSwg
ZnJhbWVDb3VudCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE5Miw2ICsyMDcsMTcgQEAgT1NT
dGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5VG8oQXVkaW9CdWZmZXJMaXN0JiBidWZm
ZXIsIHNpemVfdCBmcmFtZUNvdW4KICAgICByZXR1cm4gMDsKIH0KIAorT1NTdGF0dXMgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlLCBz
aXplX3QgZnJhbWVDb3VudCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCA+IG1fc2FtcGxlQ291bnQp
CisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKyAgICBpZiAoc291cmNlLm1OdW1i
ZXJCdWZmZXJzID4gbV9idWZmZXJMaXN0LT5idWZmZXJDb3VudCgpKQorICAgICAgICByZXR1cm4g
a0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtaXhCdWZmZXJzKGJ1ZmZlckxpc3QoKSwgc291cmNl
LCBtX2ludGVybmFsRm9ybWF0LT5mb3JtYXQoKSwgZnJhbWVDb3VudCk7CisgICAgcmV0dXJuIDA7
Cit9CisKIHZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCgpCiB7CiAgICAgbV9zYW1w
bGVDb3VudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgKaW5kZXggNWNmZGM1YThkMzI5ZWZhOTVhMzgz
MDgzZDQ2OGRmN2QzNzEyMjU3ZC4uODE1MmY4NjAwYmQ5NDkxMDBiNjI5MmI4ZjZhNDg0MzBlMWQ4
ZWMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAKICAg
ICBPU1N0YXR1cyBtaXhGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCBj
b3VudCA9IFNJWkVfTUFYKTsKIAorICAgIE9TU3RhdHVzIG1peEZyb20oY29uc3QgQXVkaW9CdWZm
ZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgpOwogICAgIE9TU3RhdHVzIGNvcHlUbyhB
dWRpb0J1ZmZlckxpc3QmLCBzaXplX3QgY291bnQgPSBTSVpFX01BWCk7CiAKICAgICBjb25zdCBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbURlc2NyaXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnRlcm5hbEZvcm1hdC0+c3RyZWFtRGVzY3JpcHRpb24oKTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJj
ZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFT
b3VyY2UubW0KaW5kZXggMDAwMDFjYjgzZDA2NjllNTYzZmY0ZDI1NTM0YTMyYjIxYjU1ZmMxZi4u
ZDhkNDU0NzM5MDdhMjQ1MzUyNjk5Y2U2MTlhOTAxODk1YTUwMzViZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291
cmNlLm1tCkBAIC0yODksMTAgKzI4OSwyNSBAQCBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
cHVsbFNhbXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90JgogICAg
ICAgICB9CiAgICAgfQogCi0gICAgbV9yaW5nQnVmZmVyLT5mZXRjaCgmYnVmZmVyLCBzYW1wbGVD
b3VudCwgdGltZVN0YW1wLCBtb2RlID09IENvcHkgPyBDQVJpbmdCdWZmZXI6OkNvcHkgOiBDQVJp
bmdCdWZmZXI6Ok1peCk7CisgICAgaWYgKG1vZGUgPT0gQ29weSkgeworICAgICAgICBtX3JpbmdC
dWZmZXItPmZldGNoKCZidWZmZXIsIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZl
cjo6Q29weSk7CisgICAgICAgIGlmIChtX3ZvbHVtZSA8IC45NSkKKyAgICAgICAgICAgIEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGJ1ZmZlciwgbV92b2x1bWUsIG1fb3V0cHV0RGVz
Y3JpcHRpb24tPmZvcm1hdCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKG1fdm9sdW1lID49IC45NSkgeworICAgICAgICBtX3JpbmdCdWZmZXItPmZldGNoKCZidWZm
ZXIsIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZlcjo6TWl4KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1fc2NyYXRjaEJ1ZmZlci0+Y29weUZyb20o
Km1fcmluZ0J1ZmZlci5nZXQoKSwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgQ0FSaW5nQnVmZmVy
OjpDb3B5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fdm9sdW1lIDwgLjk1
KQotICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmFwcGx5R2FpbihidWZmZXIsIG1fdm9s
dW1lLCBtX291dHB1dERlc2NyaXB0aW9uLT5mb3JtYXQoKSk7CisgICAgbV9zY3JhdGNoQnVmZmVy
LT5hcHBseUdhaW4obV92b2x1bWUpOworICAgIG1fc2NyYXRjaEJ1ZmZlci0+bWl4RnJvbShidWZm
ZXIsIHNhbXBsZUNvdW50KTsKKyAgICBpZiAobV9zY3JhdGNoQnVmZmVyLT5jb3B5VG8oYnVmZmVy
LCBzYW1wbGVDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuY3BwCmluZGV4IGJlZTNlZWQ1NzI0MTEyMDUxYTA0ZjRlYjQyYTFkODAxYWRjNTVlMzIuLjM5
NmYzYTBkN2JiMDdiZmZkZTFlMmE5OGUxODk3YmI4MGFmNzAxYjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAgLTI4LDE0ICsy
OCw5IEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9TVFJFQU0p
CiAKLSNpbmNsdWRlICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCIKKyNpbmNsdWRlICJBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCIKICNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFT
b3VyY2UuaCIKLSNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKICNpbmNsdWRlICJDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLSNpbmNsdWRlIDxwYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0F1ZGlvVG9v
bGJveFNQSS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDI4ICs0MiwxNCBAQCB2
b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnN0YXJ0KCkKIHsKICAgICBj
bGVhcigpOwogCi0gICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG91dHB1dERlc2NyaXB0aW9u
OwotICAgIGF1dG8gcmVtb3RlSU9Vbml0ID0gY3JlYXRlQXVkaW9Vbml0KG91dHB1dERlc2NyaXB0
aW9uKTsKLSAgICBpZiAoIXJlbW90ZUlPVW5pdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGF1dG8gZXJyb3IgPSBBdWRpb091dHB1dFVuaXRTdGFydChyZW1vdGVJT1VuaXQpKSB7Ci0gICAg
ICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAiQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVk
LCBlcnJvciA9ICIsIGVycm9yLCAiICgiLCAoY29uc3QgY2hhciopJmVycm9yLCAiKSIpOwotICAg
ICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShyZW1vdGVJT1VuaXQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4ob3V0cHV0RGVzY3JpcHRpb24pOwotICAgIG1fcmVtb3Rl
SU9Vbml0ID0gcmVtb3RlSU9Vbml0OworICAgIGlmIChhdXRvKiBmb3JtYXREZXNjcmlwdGlvbiA9
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkuZm9ybWF0RGVz
Y3JpcHRpb24oKSkKKyAgICAgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG1ha2VVbmlxdWU8Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uPigqZm9ybWF0RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnN0b3AoKQogewotICAgIGlmICghbV9y
ZW1vdGVJT1VuaXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEF1ZGlvT3V0cHV0VW5pdFN0b3Ao
bV9yZW1vdGVJT1VuaXQpOwotICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1fcmVt
b3RlSU9Vbml0KTsKLSAgICBtX3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7CisgICAgaWYgKG1fZGF0
YVNvdXJjZSkKKyAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5n
bGV0b24oKS5yZW1vdmVTb3VyY2UoKm1fZGF0YVNvdXJjZSk7CiB9CiAKIHZvaWQgQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6Y2xlYXIoKQpAQCAtNzYsODQgKzU3LDIxIEBAIHZv
aWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6Y2xlYXIoKQogICAgIHN0b3Ao
KTsKIAogICAgIG1fZGF0YVNvdXJjZSA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXREZXNjcmlwdGlv
biA9IG51bGxwdHI7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IHsgfTsKIH0KIAotQXVkaW9D
b21wb25lbnRJbnN0YW5jZSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjcmVh
dGVBdWRpb1VuaXQoQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdXRwdXREZXNjcmlwdGlvbikK
K3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c2V0Vm9sdW1lKGZsb2F0
IHZvbHVtZSkKIHsKLSAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlIHJlbW90ZUlPVW5pdCB7IG51
bGxwdHIgfTsKLQotICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3JpcHRp
b24geyBrQXVkaW9Vbml0VHlwZV9PdXRwdXQsIDAsIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBw
bGUsIDAsIDAgfTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlvVW5pdERlc2NyaXB0
aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9SZW1vdGVJTzsKLSNlbHNl
Ci0gICAgaW9Vbml0RGVzY3JpcHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJU
eXBlX0RlZmF1bHRPdXRwdXQ7Ci0jZW5kaWYKLQotICAgIEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9u
ZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24p
OwotICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Ci0gICAgaWYgKCFpb0NvbXBvbmVudCkgewotICAg
ICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBJTyB1
bml0IGNvbXBvbmVudCIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBP
U1N0YXR1cyBlcnIgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9uZW50LCAmcmVt
b3RlSU9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElG
SUVSLCAidW5hYmxlIHRvIG9wZW4gdnBpbyB1bml0LCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNv
bnN0IGNoYXIqKSZlcnIsICIpIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgVUludDMyIHBhcmFtID0gMTsKLSAgICBlcnIg
PSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9w
ZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgMCwgJnBhcmFtLCBzaXplb2Yo
cGFyYW0pKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVS
LCAidW5hYmxlIHRvIGVuYWJsZSB2cGlvIHVuaXQgb3V0cHV0LCBlcnJvciA9ICIsIGVyciwgIiAo
IiwgKGNvbnN0IGNoYXIqKSZlcnIsICIpIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSNlbmRpZgotCi0gICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgaW5w
dXRQcm9jLCB0aGlzIH07Ci0gICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9V
bml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29w
ZV9HbG9iYWwsIDAsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7Ci0gICAgaWYgKGVycikg
ewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInVuYWJsZSB0byBzZXQgdnBpbyB1
bml0IHNwZWFrZXIgcHJvYywgZXJyb3IgPSAiLCBlcnIsICIgKCIsIChjb25zdCBjaGFyKikmZXJy
LCAiKSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBVSW50MzIgc2l6
ZSA9IHNpemVvZihvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpKTsKLSAgICBl
cnIgID0gQXVkaW9Vbml0R2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVy
dHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlw
dGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCAmc2l6ZSk7Ci0gICAgaWYgKGVycikgewotICAgICAg
ICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZv
cm1hdCwgZXJyb3IgPSAiLCBlcnIsICIgKCIsIChjb25zdCBjaGFyKikmZXJyLCAiKSIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBvdXRwdXREZXNjcmlwdGlvbi5zdHJl
YW1EZXNjcmlwdGlvbigpLm1TYW1wbGVSYXRlID0gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9u
KCkuc2FtcGxlUmF0ZSgpOwotCi0gICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3Rl
SU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVf
SW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCBzaXplb2Yo
b3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSkpOwotICAgIGlmIChlcnIpIHsK
LSAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gc2V0IGlucHV0IHN0
cmVhbSBmb3JtYXQsIGVycm9yID0gIiwgZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIiki
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgZXJyID0gQXVkaW9Vbml0
SW5pdGlhbGl6ZShyZW1vdGVJT1VuaXQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJST1Jf
TE9HKExPR0lERU5USUZJRVIsICJBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciA9
ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNoYXIqKSZlcnIsICIpIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZW1vdGVJT1VuaXQ7CisgICAgQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXI6OnNldFZvbHVtZSh2b2x1bWUpOworICAgIGlmIChtX2RhdGFT
b3VyY2UpCisgICAgICAgIG1fZGF0YVNvdXJjZS0+c2V0Vm9sdW1lKHZvbHVtZSk7CiB9CiAKIHZv
aWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMoY29uc3Qg
TWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRh
LCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNhbXBs
ZUNvdW50KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChkZXNj
cmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9u
OjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKTsKLSAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpZiAoIW1fZGF0YVNvdXJjZSB8fCAhbV9kYXRhU291cmNlLT5p
bnB1dERlc2NyaXB0aW9uKCkgfHwgKm1fZGF0YVNvdXJjZS0+aW5wdXREZXNjcmlwdGlvbigpICE9
IGRlc2NyaXB0aW9uKSB7Ci0gICAgICAgIGlmIChtX3Nob3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNv
dXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICBhdXRvIGRhdGFTb3VyY2UgPSBB
dWRpb1NhbXBsZURhdGFTb3VyY2U6OmNyZWF0ZShkZXNjcmlwdGlvbi5zYW1wbGVSYXRlKCkgKiAy
LCAqdGhpcyk7CiAKICAgICAgICAgaWYgKGRhdGFTb3VyY2UtPnNldElucHV0Rm9ybWF0KHRvQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSkpIHsKQEAgLTE2MSw0NSArNzksMjgg
QEAgdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpwdXNoU2FtcGxlcyhj
b25zdCBNZWRpYVRpbWUmIHNhbXBsZVRpbWUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChkYXRhU291cmNlLT5zZXRPdXRwdXRGb3JtYXQoKm1fb3V0cHV0RGVz
Y3JpcHRpb24pKSB7CisgICAgICAgIGlmICghbV9vdXRwdXREZXNjcmlwdGlvbiB8fCBkYXRhU291
cmNlLT5zZXRPdXRwdXRGb3JtYXQoKm1fb3V0cHV0RGVzY3JpcHRpb24pKSB7CiAgICAgICAgICAg
ICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgIlVuYWJsZSB0byBzZXQgdGhlIG91dHB1dCBmb3Jt
YXQgb2YgZGF0YSBzb3VyY2UiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGRhdGFTb3VyY2UtPnNldFBhdXNlZChmYWxzZSk7Ci0gICAgICAgIGRhdGFTb3VyY2Ut
PnNldFZvbHVtZSh2b2x1bWUoKSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIG9sZFNvdXJjZSA9IG1fZGF0YVNvdXJjZSwgbmV3
U291cmNlID0gZGF0YVNvdXJjZS5jb3B5UmVmKCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBp
ZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KG9sZFNvdXJjZSkKKyAgICAgICAgICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ6OnNpbmdsZXRvbigpLnJlbW92ZVNvdXJjZSgqb2xkU291cmNlKTsKIAorICAgICAgICAg
ICAgbmV3U291cmNlLT5zZXRQYXVzZWQoZmFsc2UpOworICAgICAgICAgICAgbmV3U291cmNlLT5z
ZXRWb2x1bWUodm9sdW1lKCkpOworICAgICAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0OjpzaW5nbGV0b24oKS5hZGRTb3VyY2UoV1RGTW92ZShuZXdTb3VyY2UpKTsKKyAg
ICAgICAgfSk7CiAgICAgICAgIG1fZGF0YVNvdXJjZSA9IFdURk1vdmUoZGF0YVNvdXJjZSk7Ci0g
ICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyZXJEYXRhU291cmNlID0gdHJ1ZTsKICAgICB9CiAK
ICAgICBtX2RhdGFTb3VyY2UtPnB1c2hTYW1wbGVzKHNhbXBsZVRpbWUsIGF1ZGlvRGF0YSwgc2Ft
cGxlQ291bnQpOwogfQogCi1PU1N0YXR1cyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hOjpyZW5kZXIoVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSwg
VUludDMyIC8qaW5CdXNOdW1iZXIqLywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwg
QXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGFjdGlvbkZsYWdzKQotewotICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX3Nob3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNvdXJj
ZSkgewotICAgICAgICBtX3JlbmRlcmVyRGF0YVNvdXJjZSA9IG1fZGF0YVNvdXJjZTsKLSAgICAg
ICAgbV9zaG91bGRVcGRhdGVSZW5kZXJlckRhdGFTb3VyY2UgPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1fcmVuZGVyZXJEYXRhU291cmNlKSB7Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlQ291bnQgKiBt
X291dHB1dERlc2NyaXB0aW9uLT5ieXRlc1BlckZyYW1lKCkpKTsKLSAgICAgICAgYWN0aW9uRmxh
Z3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgbV9yZW5kZXJlckRhdGFTb3VyY2UtPnB1bGxTYW1wbGVzKGlv
RGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3VudCksIHRpbWVTdGFtcC5tU2FtcGxl
VGltZSwgdGltZVN0YW1wLm1Ib3N0VGltZSwgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpDb3B5KTsK
LSAgICByZXR1cm4gMDsKLX0KLQotT1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJDb2NvYTo6aW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25G
bGFncyogYWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiB0aW1lU3RhbXAsIFVJbnQz
MiBpbkJ1c051bWJlciwgVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0
YSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJDb2NvYSo+KHVzZXJEYXRhKS0+cmVuZGVyKHNhbXBsZUNvdW50LCAqaW9EYXRhLCBpbkJ1c051
bWJlciwgKnRpbWVTdGFtcCwgKmFjdGlvbkZsYWdzKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9T
VFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuaAppbmRleCBkYmE3OWU1YjgyY2FiZWVjYzJkM2EyNjJjNmEzYWE1YjU1NTYxZTgyLi4wNzUx
MWIxZjUyZDhmYTcwMTZlYTI1ODk1ZDk0ZGU3ZjZmYjA4MDVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgKQEAgLTI5LDYgKzI5LDcgQEAK
IAogI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKICNpbmNsdWRlIDxBdWRpb1Rv
b2xib3gvQXVkaW9Ub29sYm94Lmg+CiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVz
Lmg+CkBAIC0zOSw3ICs0MCw3IEBAIGNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKIGNsYXNz
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsKIGNsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsK
IAotY2xhc3MgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSA6IHB1YmxpYyBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlciB7CitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hIDogcHVibGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSwgV2Vh
a1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29h
KCk7CkBAIC01MSwxOSArNTIsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0KCkgZmluYWw7
CiAgICAgdm9pZCBzdG9wKCkgZmluYWw7CiAgICAgdm9pZCBjbGVhcigpIGZpbmFsOworICAgIHZv
aWQgc2V0Vm9sdW1lKGZsb2F0KSBmaW5hbDsKIAotICAgIHN0YXRpYyBPU1N0YXR1cyBpbnB1dFBy
b2Modm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3Rh
bXAqLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZm
ZXJMaXN0Kik7Ci0gICAgT1NTdGF0dXMgcmVuZGVyKFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9C
dWZmZXJMaXN0JiwgVUludDMyIGluQnVzTnVtYmVyLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJik7Ci0KLSAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNl
IGNyZWF0ZUF1ZGlvVW5pdChDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mKTsKLQotICAgIEF1ZGlv
Q29tcG9uZW50SW5zdGFuY2UgbV9yZW1vdGVJT1VuaXQgeyBudWxscHRyIH07CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsK
LQotICAgIC8vIEF1ZGlvIHRocmVhZHMgbWVtYmVyCiAgICAgUmVmUHRyPEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZT4gbV9kYXRhU291cmNlOwotICAgIFJlZlB0cjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+
IG1fcmVuZGVyZXJEYXRhU291cmNlOwotICAgIGJvb2wgbV9zaG91bGRVcGRhdGVSZW5kZXJlckRh
dGFTb3VyY2UgeyBmYWxzZSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODllOGU0ZWQ5N2FkMTZh
MWZlMjZjMDhlZDc1M2NjYTZiODU2N2EzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdC5jcHAKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgiCisKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRl
ICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKKyNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKKyNp
bmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0F1ZGlvVG9vbGJveFNQSS5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisKKyNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQm
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkKK3sKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0PiBy
ZWdpc3RyeTsKKyAgICByZXR1cm4gcmVnaXN0cnk7Cit9CisKK0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6fkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpCit7Cisg
ICAgc3RvcCgpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6
YWRkU291cmNlKFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+JiYgc291cmNlKQoreworICAgIFJF
TEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRk
U291cmNlIik7CisKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zb3Vy
Y2VzTG9jayk7CisgICAgICAgIEFTU0VSVCghbV9zb3VyY2VzLmNvbnRhaW5zKHNvdXJjZS5nZXQo
KSkpOworICAgICAgICBtX3NvdXJjZXMuYWRkKFdURk1vdmUoc291cmNlKSk7CisgICAgICAgIG1f
c2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7CisgICAgfQorICAgIHN0YXJ0KCk7Cit9
CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW1vdmVTb3VyY2Uo
QXVkaW9TYW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCit7CisgICAgUkVMRUFTRV9MT0coV2ViUlRD
LCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW1vdmVTb3VyY2UiKTsKKwor
ICAgIGJvb2wgc2hvdWxkU3RvcCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX3NvdXJjZXNMb2NrKTsKKyAgICAgICAgbV9zb3VyY2VzLnJlbW92ZShzb3Vy
Y2UpOworICAgICAgICBzaG91bGRTdG9wID0gbV9zb3VyY2VzLmlzRW1wdHkoKTsKKyAgICAgICAg
bV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHNob3Vs
ZFN0b3ApCisgICAgICAgIHN0b3AoKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQ6OnN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0Iik7CisKKyAgICBpZiAobV9pc1N0YXJ0
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCk7Cisg
ICAgaWYgKCFtX3JlbW90ZUlPVW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8g
ZXJyb3IgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX3JlbW90ZUlPVW5pdCkpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpzdGFydCBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQsIGVycm9yID0gJWQiLCBlcnJv
cik7CisgICAgICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1fcmVtb3RlSU9Vbml0
KTsKKyAgICAgICAgbV9yZW1vdGVJT1VuaXQgPSBudWxscHRyOworICAgIH0KKyAgICBtX2lzU3Rh
cnRlZCA9IHRydWU7CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0IGlzIHN0YXJ0ZWQiKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ6OnN0b3AoKQoreworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RvcCIpOworCisgICAgaWYgKCFtX3Jl
bW90ZUlPVW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNTdGFydGVkKSB7Cisg
ICAgICAgIEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9yZW1vdGVJT1VuaXQpOworICAgICAgICBtX2lz
U3RhcnRlZCA9IGZhbHNlOworICAgIH0KKworICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNw
b3NlKG1fcmVtb3RlSU9Vbml0KTsKKyAgICBtX3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7Cit9CisK
K0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0Ojpmb3JtYXREZXNjcmlwdGlvbigpCit7CisgICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQo
KTsKKyAgICByZXR1cm4gbV9vdXRwdXREZXNjcmlwdGlvbi5nZXQoKTsKK30KKwordm9pZCBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCkK
K3sKKyAgICBBU1NFUlQoIW1fcmVtb3RlSU9Vbml0IHx8IG1fb3V0cHV0RGVzY3JpcHRpb24pOwor
ICAgIGlmIChtX3JlbW90ZUlPVW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uIG91dHB1dERlc2NyaXB0aW9uOworICAgIEF1ZGlvQ29tcG9uZW50SW5z
dGFuY2UgcmVtb3RlSU9Vbml0IHsgbnVsbHB0ciB9OworCisgICAgQXVkaW9Db21wb25lbnREZXNj
cmlwdGlvbiBpb1VuaXREZXNjcmlwdGlvbiB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwgMCwga0F1
ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgaW9Vbml0RGVzY3JpcHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRT
dWJUeXBlX1JlbW90ZUlPOworI2Vsc2UKKyAgICBpb1VuaXREZXNjcmlwdGlvbi5jb21wb25lbnRT
dWJUeXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfRGVmYXVsdE91dHB1dDsKKyNlbmRpZgorCisgICAg
QXVkaW9Db21wb25lbnQgaW9Db21wb25lbnQgPSBBdWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxw
dHIsICZpb1VuaXREZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKGlvQ29tcG9uZW50KTsKKyAgICBp
ZiAoIWlvQ29tcG9uZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0
byBmaW5kIHJlbW90ZSBJTyB1bml0IGNvbXBvbmVudCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYXV0byBlcnJvciA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25l
bnQsICZyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0
ZUF1ZGlvVW5pdCB1bmFibGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9yID0gJWQiLCBlcnJvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IFVJbnQzMiBwYXJhbSA9IDE7CisgICAgZXJyb3IgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1v
dGVJT1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNj
b3BlX091dHB1dCwgMCwgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKKyAgICBpZiAoZXJyb3IpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGVuYWJsZSB2cGlvIHVuaXQg
b3V0cHV0LCBlcnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBpbnB1dFByb2Ms
IG51bGxwdHIgfTsKKyAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5p
dCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVf
R2xvYmFsLCAwLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykpOworICAgIGlmIChlcnJvcikg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBz
cGVha2VyIHByb2MsIGVycm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNj
cmlwdGlvbigpKTsKKyAgICBlcnJvciAgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShyZW1vdGVJT1Vu
aXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1
dCwgMCwgJm91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCksICZzaXplKTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGdl
dCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgb3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKS5t
U2FtcGxlUmF0ZSA9IEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsK
KworICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9V
bml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRw
dXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCBzaXplb2Yob3V0cHV0RGVzY3JpcHRp
b24uc3RyZWFtRGVzY3JpcHRpb24oKSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6
OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gc2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9y
ID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlcnJvciA9IEF1
ZGlvVW5pdEluaXRpYWxpemUocmVtb3RlSU9Vbml0KTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgQXVkaW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJy
b3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb3V0cHV0
RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4ob3V0cHV0
RGVzY3JpcHRpb24pOworICAgIG1fcmVtb3RlSU9Vbml0ID0gcmVtb3RlSU9Vbml0OworfQorCitP
U1N0YXR1cyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbmRlcihVSW50MzIg
c2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYgaW9EYXRhLCBVSW50MzIgLyppbkJ1c051bWJl
ciovLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGFncyYgYWN0aW9uRmxhZ3MpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcykgeworICAgICAgICBhdXRvIGxvY2tl
ciA9IHRyeUhvbGRMb2NrKG1fc291cmNlc0xvY2spOworICAgICAgICBpZiAoIWxvY2tlcikKKyAg
ICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIG1fcmVuZGVyU291cmNlcyA9IGNvcHlUb1Zl
Y3RvcihtX3NvdXJjZXMpOworICAgICAgICBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9yZW5kZXJTb3VyY2VzLmlzRW1wdHkoKSkgeworICAg
ICAgICBpZiAobV9vdXRwdXREZXNjcmlwdGlvbikKKyAgICAgICAgICAgIEF1ZGlvU2FtcGxlQnVm
ZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlQ291bnQg
KiBtX291dHB1dERlc2NyaXB0aW9uLT5ieXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgYWN0aW9u
RmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gTWl4IGFsbCBzb3VyY2VzLgorICAgIGJvb2wgaXNG
aXJzdFNvdXJjZSA9IHRydWU7CisgICAgZm9yIChhdXRvJiBzb3VyY2UgOiBtX3JlbmRlclNvdXJj
ZXMpIHsKKyAgICAgICAgc291cmNlLT5wdWxsU2FtcGxlcyhpb0RhdGEsIHN0YXRpY19jYXN0PHNp
emVfdD4oc2FtcGxlQ291bnQpLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRpbWVTdGFtcC5tSG9z
dFRpbWUsIGlzRmlyc3RTb3VyY2UgPyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OkNvcHkgOiBBdWRp
b1NhbXBsZURhdGFTb3VyY2U6Ok1peCk7CisgICAgICAgIGlzRmlyc3RTb3VyY2UgPSBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6aW5wdXRQcm9jKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFn
cyogYWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiB0aW1lU3RhbXAsIFVJbnQzMiBp
bkJ1c051bWJlciwgVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkK
K3sKKyAgICByZXR1cm4gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0
b24oKS5yZW5kZXIoc2FtcGxlQ291bnQsICppb0RhdGEsIGluQnVzTnVtYmVyLCAqdGltZVN0YW1w
LCAqYWN0aW9uRmxhZ3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI3
OTczYzhhZjYwNTY1NzBkNTFjNTliMzU1MjkwMWM1NmM0MWM5NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+CisjaW5jbHVkZSA8Q29y
ZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7CitjbGFzcyBB
dWRpb1NhbXBsZUJ1ZmZlckxpc3Q7CitjbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CisK
K2NsYXNzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCB7CitwdWJsaWM6CisgICAg
c3RhdGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCYgc2luZ2xldG9uKCk7CisK
KyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQoKSA9IGRlZmF1bHQ7CisgICAg
fkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpOworCisgICAgc3RhdGljIE9TU3Rh
dHVzIGlucHV0UHJvYyh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBB
dWRpb1RpbWVTdGFtcCosIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIG51bWJlck9mRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqKTsKKworICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3Ao
KTsKKworICAgIHZvaWQgYWRkU291cmNlKFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+JiYpOwor
ICAgIHZvaWQgcmVtb3ZlU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYpOworCisgICAgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKiBmb3JtYXREZXNjcmlwdGlvbigpOworCitwcml2YXRlOgor
ICAgIHZvaWQgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsKKyAgICBPU1N0YXR1cyByZW5kZXIo
VUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCBVSW50MzIgaW5CdXNOdW1iZXIs
IGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmKTsKKwor
ICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgbV9yZW1vdGVJT1VuaXQgeyBudWxscHRyIH07Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNj
cmlwdGlvbjsKKyAgICBIYXNoU2V0PFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX3NvdXJj
ZXM7CisgICAgVmVjdG9yPFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX3JlbmRlclNvdXJj
ZXM7CisgICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgeyBmYWxzZSB9OworICAg
IExvY2sgbV9zb3VyY2VzTG9jazsKKyAgICBib29sIG1faXNTdGFydGVkIHsgZmFsc2UgfTsKK307
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA3ZTJiN2M4OGUxYjYwYzkwMjY0ZDI4ZDhjMjljNjY4ZGY2NzRhNjk4Li40
ODAxNDQ0YmZhMWE1ZDE5MDEyOTlkMzBmOWQwNzQxMmM2ZjlmMDk4IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjAtMDUtMjkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisg
ICAgICAgIFVzZSBvbmUgYXVkaW8gdW5pdCBmb3IgYWxsIE1lZGlhU3RyZWFtVHJhY2tzIG9mIGEg
Z2l2ZW4gcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEyNDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3ZWJydGMvbXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJydGMvbXVsdGktYXVkaW8uaHRtbDogQWRkZWQuCisKIDIwMjAtMDUtMjkgIEphdmllciBG
ZXJuYW5kZXogIDxqZmVybmFuZGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1ncmlkXSBJ
bXBvcnQgdGVzdHMgZm9yIHRoZSBncmlkIGFzIGZsZXhib3ggaXRlbSBjYXNlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJydGMvbXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2VicnRjL211bHRpLWF1ZGlvLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMWZmNzg0ZTEy
MzVjYjc5ZGFmYTliZGY2YjU1MjMzMGFkYzY4NTE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2VicnRjL211bHRpLWF1ZGlvLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKyAK
KworUEFTUyBNdWx0aSBhdWRpbyB3aXRoIGRpZmZlcmVudCB2b2x1bWVzIAorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJydGMvbXVsdGktYXVkaW8uaHRtbCBiL0xheW91dFRlc3RzL3dlYnJ0
Yy9tdWx0aS1hdWRpby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MWVkZTZhYWEyM2ZiZDY2MDkxNmIwM2Iz
OTRkYzgwNDRjYjJhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJydGMvbXVs
dGktYXVkaW8uaHRtbApAQCAtMCwwICsxLDU4IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgor
ICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIDx0aXRs
ZT5UZXN0aW5nIG11bHRpIGF1ZGlvIHdpdGggbXVsdGlwbGUgdm9sdW1lczwvdGl0bGU+CisgICAg
ICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
ICAgICAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDx2aWRlbyBpZD0idmlk
ZW8xIiBhdXRvcGxheT0iIj48L3ZpZGVvPgorICAgICAgICA8dmlkZW8gaWQ9InZpZGVvMiIgYXV0
b3BsYXk9IiI+PC92aWRlbz4KKyAgICAgICAgPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNjQw
IiBoZWlnaHQ9IjQ4MCI+PC9jYW52YXM+CisgICAgICAgIDxzY3JpcHQgc3JjID0icm91dGluZXMu
anMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0PgordmFyIHBjMSwgcGMyOworcHJvbWlzZV90
ZXN0KGFzeW5jICh0ZXN0KSA9PiB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICB0ZXN0UnVubmVyLnNldFVzZXJNZWRpYVBlcm1pc3Npb24odHJ1ZSk7CisKKyAgICBsZXQgcmVt
b3RlU3RyZWFtMSwgcmVtb3RlU3RyZWFtMjsKKyAgICBsZXQgY291bnRlciA9IDA7CisgICAgY29u
c3QgbG9jYWxTdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRp
YSh7IGF1ZGlvOiB0cnVlLCB2aWRlbyA6IHRydWUgfSk7CisgICAgY29uc3Qgc3RyZWFtID0gYXdh
aXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geworICAgICAgICBjcmVhdGVDb25u
ZWN0aW9ucygoZmlyc3RDb25uZWN0aW9uKSA9PiB7CisgICAgICAgICAgICBwYzEgPSBmaXJzdENv
bm5lY3Rpb247CisgICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24uYWRkVHJhY2sobG9jYWxTdHJl
YW0uZ2V0QXVkaW9UcmFja3MoKVswXSwgbG9jYWxTdHJlYW0pOworICAgICAgICAgICAgZmlyc3RD
b25uZWN0aW9uLmFkZFRyYWNrKGxvY2FsU3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF0sIGxvY2Fs
U3RyZWFtKTsKKworICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBsb2NhbFN0cmVhbS5jbG9uZSgp
OworICAgICAgICAgICAgZmlyc3RDb25uZWN0aW9uLmFkZFRyYWNrKGNsb25lLmdldEF1ZGlvVHJh
Y2tzKClbMF0sIGNsb25lKTsKKyAgICAgICAgICAgIGZpcnN0Q29ubmVjdGlvbi5hZGRUcmFjayhj
bG9uZS5nZXRWaWRlb1RyYWNrcygpWzBdLCBjbG9uZSk7CisgICAgICAgIH0sIChzZWNvbmRDb25u
ZWN0aW9uKSA9PiB7CisgICAgICAgICAgICBwYzIgPSBzZWNvbmRDb25uZWN0aW9uOworICAgICAg
ICAgICAgc2Vjb25kQ29ubmVjdGlvbi5vbnRyYWNrID0gKHRyYWNrRXZlbnQpID0+IHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlbW90ZVN0cmVhbTEpCisgICAgICAgICAgICAgICAgICAgIHJlbW90
ZVN0cmVhbTEgPSB0cmFja0V2ZW50LnN0cmVhbXNbMF07CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodHJhY2tFdmVudC5zdHJlYW1zWzBdICE9PSByZW1vdGVTdHJlYW0xKQorICAgICAgICAgICAg
ICAgICAgICByZW1vdGVTdHJlYW0yID0gdHJhY2tFdmVudC5zdHJlYW1zWzBdOworCisgICAgICAg
ICAgICAgICAgaWYgKCsrY291bnRlciA+PSA0KQorICAgICAgICAgICAgICAgICAgICByZXNvbHZl
KCk7CisgICAgICAgICAgICB9OworICAgICAgICB9KTsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9
PiByZWplY3QoIlRlc3QgdGltZWQgb3V0IiksIDUwMDApOworICAgIH0pOworCisgICAgdmlkZW8x
LnZvbHVtZSA9IDAuMDE7CisgICAgdmlkZW8xLnNyY09iamVjdCA9IHJlbW90ZVN0cmVhbTE7Cisg
ICAgdmlkZW8yLnZvbHVtZSA9IDE7CisgICAgdmlkZW8yLnNyY09iamVjdCA9IHJlbW90ZVN0cmVh
bTI7CisgICAgYXdhaXQgdmlkZW8xLnBsYXkoKTsKKyAgICBhd2FpdCB2aWRlbzIucGxheSgpOwor
CisgICAgdmlkZW8xLnZvbHVtZSA9IDAuMTsKK30sICJNdWx0aSBhdWRpbyB3aXRoIGRpZmZlcmVu
dCB2b2x1bWVzIik7CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401325</attachid>
            <date>2020-06-08 05:02:07 -0700</date>
            <delta_ts>2020-06-08 07:01:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-212406-20200608140205.patch</filename>
            <type>text/plain</type>
            <size>41416</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmI1NjBkMzE2OWYxNDll
NDEwOWY3NjU1OGM0ZmMzN2MwYjJlZDEzNC4uNWRhZjViZDk0YWI5MDM5N2JkZDM1MjNhYmQzZWZm
MzkzOGJmYTgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDIwLTA2LTA4ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ugb25lIGF1ZGlvIHVu
aXQgZm9yIGFsbCB0cmFja3Mgb2YgYSBnaXZlbiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0MDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQmVmb3JlIHRoZSBwYXRjaCwgd2Ugd2VyZSBjcmVh
dGluZyBvbmUgYXVkaW8gdW5pdCBwZXIgdHJhY2sgdG8gcmVuZGVyLgorICAgICAgICBUaGlzIGlz
IHBvdGVudGlhbGx5IGluZWZmaWNpZW50IGFzIHRoaXMgcmVxdWlyZXMgdG8gSVBDIG9uIGlPUyBl
YWNoIGF1ZGlvIGRhdGEuCisgICAgICAgIEluc3RlYWQsIHdlIGNvdWxkIGhhdmUgb25lIHNpbmds
ZSByZW1vdGUgdW5pdCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgbWl4ZWQgY29udGVudCBvZiBhbGwg
dHJhY2tzLgorICAgICAgICBGb3IgdGhhdCBwdXJwb3NlLCBpbnRyb2R1Y2UgQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0IGFzIGEgc2luZ2xldG9uLgorCisgICAgICAgIEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2Egd2lsbCBqdXN0IHJlZ2lzdGVyL3VucmVnaXN0ZXIg
c291cmNlcyB0byBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuCisgICAgICAgIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCB3aWxsIHRoZW4gc3RhcnQvc3RvcCBhcyBu
ZWVkZWQgYW5kIGRvIHRoZSBtaXhpbmcuCisKKyAgICAgICAgVGhpcyByZXF1aXJlcyBhIGNoYW5n
ZSBpbiBBdWRpb1NhbXBsZURhdGFTb3VyY2UgdG8gc3VwcG9ydCBtaXhpbmcgaW4gY2FzZSB0cmFj
ayB2b2x1bWVzIGFyZSBkaWZmZXJlbnQuCisgICAgICAgIElmIHdlIGhhdmUgdG8gbWl4IGFuZCB3
aXRoIGRpZmZlcmVudCB2b2x1bWVzLCB3ZSBmaXJzdCBwdWxsIHRoZSBzYW1wbGVzIGluIGEgc2Ny
YXRjaCBidWZmZXIsIGFwcGx5IHZvbHVtZSBhbmQgdGhlbiBtaXggaXQgd2l0aCB0aGUgb3RoZXIg
dHJhY2tzLgorCisgICAgICAgIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28gZG8gdGhlIGF1
ZGlvIHJlbmRlcmluZyB3aXRoIHRoZSBDb3JlQXVkaW9TaGFyZWRVbml0IGRpcmVjdGx5IHNvIGFz
IHRvIGltcHJvdmUgYXMgbXVjaCBhcyBwb3NzaWJsZSBlY2hvIGNhbmNlbGxhdGlvbi4KKworICAg
ICAgICBJbnRlcnJ1cHRpb24gaXMgaGFuZGxlZCBieSB0aGUgZmFjdCB0aGF0IGFsbCB0cmFja3Mg
c2hvdWxkIHN0b3AgcGxheWluZywgdGh1cyBzdG9wIHRoZWlyIHJlbmRlcmVyLCB0aHVzIHVucmVn
aXN0ZXIgdGhlbXNlbHZlcyBmcm9tIHRoZSByZW5kZXJlciB1bml0LgorICAgICAgICBpdCBtaWdo
dCBiZSBtb3JlIGZ1dHVyZSBwcm9vZiB0byBhZGQgdGhlIHVuaXQgYXMgYW4gaW50ZXJydXB0aW9u
IG9ic2VydmVyIGFzIGEgZm9sbG93LXVwLgorCisgICAgICAgIE1hbnVhbGx5IHRlc3RlZCBwbHVz
IExheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRpby5odG1sCisKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1peEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVCdWZmZXJMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0
YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3Rv
cCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29h
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hOjpzZXRWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6Y3JlYXRlQXVkaW9Vbml0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnJl
bmRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hOjppbnB1dFByb2MpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmg6CisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6fkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbW92ZVNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlv
VW5pdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdDo6Zm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0
OjppbnB1dFByb2MpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuaC4KKwogMjAyMC0wNi0wNyAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0NvY29hXSBVc2UgQVZBc3NldFdyaXRlckRlbGVnYXRlIHRvIGltcGxlbWVudCBN
ZWRpYVJlY29yZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCAyZDgwZjQzZTQ3ODliZDdk
YWZlYjMwMDNhN2E1NzkzNzgxYzJkNmEyLi4yYWM3ZGE3NjkzZmI4MTViODYyNzM4MWEwN2FiMmFm
MGI3N2YxMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTUwMyw2ICs1MDMsNyBAQCBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdl
ci5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9DYXB0dXJl
U291cmNlSU9TLm1tIEBuby11bmlmeQogCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKK3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSBAbm8tdW5pZnkKIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdlODE4
NmMwOWEwMzNhMDg4MjhiOTFkOWFlNjI2ZGQ4NzU2OGYyNzguLmM0MDZmMDdiNzkzNTMwZWFmNzEz
NTAyMmZjNWMxOGI0NjBlYThkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTczNDcsNiArNzM0Nyw4IEBACiAJCTQxMDI0RkM4
MjNDRjI1NEYwMEZERjk4RSAvKiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDEwNjI2QTcyMjgwQTIyQTAwNkQxQjU5IC8qIEpTQXVkaW9Ob2RlQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXVkaW9Ob2Rl
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwNzkwOEExRkMzRTRG
MjAwNjFCMjdBIC8qIENsaWVudE9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDbGllbnRPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwODdG
MDEyNDhFNTlDODAwNjgwRTkxIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTA4
N0YwMzI0OEU1OUM5MDA2ODBFOTEgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA5MzgyODIz
NDc3OTlBMDA5NDI4QkEgLyogSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydENvbnRyb2xsZXJDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA5MzgyQzIzNDc4NTBFMDA5NDI4QkEgLyog
SlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Fib3J0U2lnbmFs
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwQjdFNzExMDQ1RkFC
MDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NjA3LDYgKzE2NjA5LDggQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTQxNkEwNjkzMjNDQ0FBOTQwMDM0NzEwOSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hLmNwcCAqLywKIAkJCQk0MTZBMDY5MjIzQ0NBQTkzMDAzNDcxMDkgLyogQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oICovLAorCQkJCTQxMDg3RjAxMjQ4RTU5Qzgw
MDY4MEU5MSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwICovLAorCQkJ
CTQxMDg3RjAzMjQ4RTU5QzkwMDY4MEU5MSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQuaCAqLywKIAkJCQkwNzAzNjNEQTE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2
aWNlTWFuYWdlci5oICovLAogCQkJCTA3MDM2M0RCMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLm1tICovLAogCQkJCTA3MDM2M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBB
VlZpZGVvQ2FwdHVyZVNvdXJjZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcAppbmRleCA4ODU3
MTQyOTUyNmMyNGQ0ODFlMTQyNDFkMTc4MmY5NWRjOGQ1OTRlLi43ODI0MjZiYTg2OTI5YzhmZDY2
YjJiNTM2ZDc1NzdiZTVlNDBjODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcApAQCAtMTAzLDQ0
ICsxMDMsNDIgQEAgdm9pZCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmFwcGx5R2FpbihmbG9hdCBn
YWluKQogICAgIGFwcGx5R2FpbihtX2J1ZmZlckxpc3QuZ2V0KCksIGdhaW4sIG1faW50ZXJuYWxG
b3JtYXQtPmZvcm1hdCgpKTsKIH0KIAotT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpt
aXhGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVD
b3VudCkKK3N0YXRpYyB2b2lkIG1peEJ1ZmZlcnMoV2ViQXVkaW9CdWZmZXJMaXN0JiBkZXN0aW5h
dGlvbkJ1ZmZlciwgY29uc3QgQXVkaW9CdWZmZXJMaXN0JiBzb3VyY2VCdWZmZXIsIEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCBmb3JtYXQsIHNpemVfdCBmcmFtZUNvdW50KQogewot
ICAgIEFTU0VSVChzb3VyY2Uuc3RyZWFtRGVzY3JpcHRpb24oKSA9PSBzdHJlYW1EZXNjcmlwdGlv
bigpKTsKLQotICAgIGlmIChzb3VyY2Uuc3RyZWFtRGVzY3JpcHRpb24oKSAhPSBzdHJlYW1EZXNj
cmlwdGlvbigpKQotICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7Ci0KLSAgICBpZiAo
ZnJhbWVDb3VudCA+IHNvdXJjZS5zYW1wbGVDb3VudCgpKQotICAgICAgICBmcmFtZUNvdW50ID0g
c291cmNlLnNhbXBsZUNvdW50KCk7Ci0KLSAgICBpZiAoZnJhbWVDb3VudCA+IG1fc2FtcGxlQ2Fw
YWNpdHkpCi0gICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKLQotICAgIG1fc2FtcGxl
Q291bnQgPSBmcmFtZUNvdW50OwotCi0gICAgYXV0byYgc291cmNlQnVmZmVyID0gc291cmNlLmJ1
ZmZlckxpc3QoKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5i
dWZmZXJDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChtX2ludGVybmFsRm9ybWF0LT5m
b3JtYXQoKSkgeworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbkJ1ZmZl
ci5idWZmZXJDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAg
ICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJbnQxNjogewotICAgICAgICAgICAgaW50
MTZfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4obV9idWZmZXJMaXN0LT5i
dWZmZXIoaSktPm1EYXRhKTsKLSAgICAgICAgICAgIGludDE2X3QqIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGludDE2X3QqPihzb3VyY2VCdWZmZXIuYnVmZmVyKGkpLT5tRGF0YSk7CisgICAgICAgICAg
ICBBU1NFUlQoZnJhbWVDb3VudCA8PSBkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSktPm1EYXRh
Qnl0ZVNpemUgLyAyKTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZUNvdW50IDw9IHNvdXJjZUJ1
ZmZlci5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gMik7CisKKyAgICAgICAgICAgIGF1dG8q
IGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+KGRlc3RpbmF0aW9uQnVmZmVyLmJ1
ZmZlcihpKS0+bURhdGEpOworICAgICAgICAgICAgYXV0byogc291cmNlID0gc3RhdGljX2Nhc3Q8
aW50MTZfdCo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSk7CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvbltpXSArPSBzb3VyY2VbaV07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkludDMyOiB7Ci0gICAgICAg
ICAgICBpbnQzMl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDMyX3QqPihtX2J1ZmZl
ckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOwotICAgICAgICAgICAgdkRTUF92YWRkaShkZXN0aW5h
dGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4oc291cmNlQnVmZmVyLmJ1ZmZlcihp
KS0+bURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CisgICAgICAgICAgICBB
U1NFUlQoZnJhbWVDb3VudCA8PSBkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSktPm1EYXRhQnl0
ZVNpemUgLyA0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZUNvdW50IDw9IHNvdXJjZUJ1ZmZl
ci5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gNCk7CisKKyAgICAgICAgICAgIGF1dG8qIGRl
c3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MzJfdCo+KGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZl
cihpKS0+bURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkaShkZXN0aW5hdGlvbiwgMSwgcmVp
bnRlcnByZXRfY2FzdDxpbnQzMl90Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwg
MSwgZGVzdGluYXRpb24sIDEsIGZyYW1lQ291bnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDMyOiB7Ci0g
ICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1fYnVm
ZmVyTGlzdC0+YnVmZmVyKGkpLT5tRGF0YSk7Ci0gICAgICAgICAgICB2RFNQX3ZhZGQoZGVzdGlu
YXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzb3VyY2VCdWZmZXIuYnVmZmVyKGkp
LT5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIEFT
U0VSVChmcmFtZUNvdW50IDw9IGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFCeXRl
U2l6ZSAvIDQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVmZmVy
Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyA0KTsKKworICAgICAgICAgICAgYXV0byogZGVz
dGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihp
KS0+bURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9uLCAxLCByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVz
dGluYXRpb24sIDEsIGZyYW1lQ291bnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0OiB7Ci0gICAgICAg
ICAgICBkb3VibGUqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4obV9idWZmZXJM
aXN0LT5idWZmZXIoaSktPm1EYXRhKTsKLSAgICAgICAgICAgIHZEU1BfdmFkZEQoZGVzdGluYXRp
b24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oc291cmNlQnVmZmVyLmJ1ZmZlcihpKS0+
bURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CisgICAgICAgICAgICBBU1NF
UlQoZnJhbWVDb3VudCA8PSBkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSktPm1EYXRhQnl0ZVNp
emUgLyA4KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZUNvdW50IDw9IHNvdXJjZUJ1ZmZlci5t
QnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gOCk7CisKKyAgICAgICAgICAgIGF1dG8qIGRlc3Rp
bmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkp
LT5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3ZhZGREKGRlc3RpbmF0aW9uLCAxLCByZWludGVy
cHJldF9jYXN0PGRvdWJsZSo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSksIDEsIGRl
c3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Tm9uZToKQEAgLTE0OCw3ICsx
NDYsMjQgQEAgT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXoKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQorfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Om1peEZy
b20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0JiBzb3VyY2UsIHNpemVfdCBmcmFtZUNvdW50
KQoreworICAgIEFTU0VSVChzb3VyY2Uuc3RyZWFtRGVzY3JpcHRpb24oKSA9PSBzdHJlYW1EZXNj
cmlwdGlvbigpKTsKKworICAgIGlmIChzb3VyY2Uuc3RyZWFtRGVzY3JpcHRpb24oKSAhPSBzdHJl
YW1EZXNjcmlwdGlvbigpKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAg
ICBpZiAoZnJhbWVDb3VudCA+IHNvdXJjZS5zYW1wbGVDb3VudCgpKQorICAgICAgICBmcmFtZUNv
dW50ID0gc291cmNlLnNhbXBsZUNvdW50KCk7CisKKyAgICBpZiAoZnJhbWVDb3VudCA+IG1fc2Ft
cGxlQ2FwYWNpdHkpCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIG1f
c2FtcGxlQ291bnQgPSBmcmFtZUNvdW50OwogCisgICAgbWl4QnVmZmVycyhidWZmZXJMaXN0KCks
IHNvdXJjZS5idWZmZXJMaXN0KCksIG1faW50ZXJuYWxGb3JtYXQtPmZvcm1hdCgpLCBmcmFtZUNv
dW50KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTkyLDYgKzIwNywxNyBAQCBPU1N0YXR1cyBB
dWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlUbyhBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6
ZV90IGZyYW1lQ291bgogICAgIHJldHVybiAwOwogfQogCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6Om1peEZyb20oY29uc3QgQXVkaW9CdWZmZXJMaXN0JiBzb3VyY2UsIHNpemVfdCBm
cmFtZUNvdW50KQoreworICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1wbGVDb3VudCkKKyAgICAg
ICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworICAgIGlmIChzb3VyY2UubU51bWJlckJ1ZmZl
cnMgPiBtX2J1ZmZlckxpc3QtPmJ1ZmZlckNvdW50KCkpCisgICAgICAgIHJldHVybiBrQXVkaW9f
UGFyYW1FcnJvcjsKKworICAgIG1peEJ1ZmZlcnMoYnVmZmVyTGlzdCgpLCBzb3VyY2UsIG1faW50
ZXJuYWxGb3JtYXQtPmZvcm1hdCgpLCBmcmFtZUNvdW50KTsKKyAgICByZXR1cm4gMDsKK30KKwog
dm9pZCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnJlc2V0KCkKIHsKICAgICBtX3NhbXBsZUNvdW50
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b1NhbXBsZUJ1ZmZlckxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9B
dWRpb1NhbXBsZUJ1ZmZlckxpc3QuaAppbmRleCA1Y2ZkYzVhOGQzMjllZmE5NWEzODMwODNkNDY4
ZGY3ZDM3MTIyNTdkLi44MTUyZjg2MDBiZDk0OTEwMGI2MjkyYjhmNmE0ODQzMGUxZDhlYzM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIE9TU3Rh
dHVzIG1peEZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0g
U0laRV9NQVgpOwogCisgICAgT1NTdGF0dXMgbWl4RnJvbShjb25zdCBBdWRpb0J1ZmZlckxpc3Qm
LCBzaXplX3QgY291bnQgPSBTSVpFX01BWCk7CiAgICAgT1NTdGF0dXMgY29weVRvKEF1ZGlvQnVm
ZmVyTGlzdCYsIHNpemVfdCBjb3VudCA9IFNJWkVfTUFYKTsKIAogICAgIGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBt
X2ludGVybmFsRm9ybWF0LT5zdHJlYW1EZXNjcmlwdGlvbigpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgK
aW5kZXggMGY4OWVmOTE4ZjA0NzIxYTI4ZTI3ZDFjNmE5NDI4OTZmNTE3MzBiMC4uZjI1OWM2YTNl
NjZjOGI1YjVmMDZmY2MxZDQzNzQ2MjNiYzVkOWEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaApAQCAt
ODEsNiArODEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMb2dnZXIoUmVmPGNvbnN0IExvZ2dl
cj4mJiwgY29uc3Qgdm9pZCopOwogI2VuZGlmCiAKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IEVxdWl2YWxlbnRUb01heFZvbHVtZSA9IDAuOTU7CisKIHByaXZhdGU6CiAgICAgQXVkaW9TYW1w
bGVEYXRhU291cmNlKHNpemVfdCwgTG9nZ2VySGVscGVyJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1t
CmluZGV4IDAwMDAxY2I4M2QwNjY5ZTU2M2ZmNGQyNTUzNGEzMmIyMWI1NWZjMWYuLmJjODk1MjE1
YzE2YjAxZTgzOTA3ZGVkYWJkYWIyNTJiZjU0NjM4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQpA
QCAtMjg5LDEwICsyODksMjUgQEAgYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1w
bGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCYKICAgICAgICAgfQog
ICAgIH0KIAotICAgIG1fcmluZ0J1ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRp
bWVTdGFtcCwgbW9kZSA9PSBDb3B5ID8gQ0FSaW5nQnVmZmVyOjpDb3B5IDogQ0FSaW5nQnVmZmVy
OjpNaXgpOworICAgIGlmIChtb2RlID09IENvcHkpIHsKKyAgICAgICAgbV9yaW5nQnVmZmVyLT5m
ZXRjaCgmYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBDQVJpbmdCdWZmZXI6OkNvcHkp
OworICAgICAgICBpZiAobV92b2x1bWUgPCBFcXVpdmFsZW50VG9NYXhWb2x1bWUpCisgICAgICAg
ICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmFwcGx5R2FpbihidWZmZXIsIG1fdm9sdW1lLCBt
X291dHB1dERlc2NyaXB0aW9uLT5mb3JtYXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChtX3ZvbHVtZSA+PSBFcXVpdmFsZW50VG9NYXhWb2x1bWUpIHsKKyAgICAg
ICAgbV9yaW5nQnVmZmVyLT5mZXRjaCgmYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBD
QVJpbmdCdWZmZXI6Ok1peCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKCptX3JpbmdCdWZmZXIuZ2V0KCksIHNhbXBsZUNv
dW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZlcjo6Q29weSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChtX3ZvbHVtZSA8IC45NSkKLSAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJM
aXN0OjphcHBseUdhaW4oYnVmZmVyLCBtX3ZvbHVtZSwgbV9vdXRwdXREZXNjcmlwdGlvbi0+Zm9y
bWF0KCkpOworICAgIG1fc2NyYXRjaEJ1ZmZlci0+YXBwbHlHYWluKG1fdm9sdW1lKTsKKyAgICBt
X3NjcmF0Y2hCdWZmZXItPm1peEZyb20oYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgaWYgKG1f
c2NyYXRjaEJ1ZmZlci0+Y29weVRvKGJ1ZmZlciwgc2FtcGxlQ291bnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRleCA3ZGI0ZDIxZjAyNmY4NTVk
MTUxZjRiZDkzYzA0OTc4MmRkYmZiYTQwLi5hNzdlN2I5YWVkZGVkYzcxYTdkZWU0NzY4NjNiMjcw
NTFiNDU4ZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyQ29jb2EuY3BwCkBAIC0yOCwxNCArMjgsOSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKIAotI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIgorI2luY2x1ZGUgIkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIgogI2luY2x1ZGUgIkF1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5oIgotI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkNBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotI2luY2x1ZGUg
PHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQXVk
aW9Ub29sYm94U1BJLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsMjggKzQyLDE0
IEBAIHZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RhcnQoKQogewog
ICAgIGNsZWFyKCk7CiAKLSAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gb3V0cHV0RGVzY3Jp
cHRpb247Ci0gICAgYXV0byByZW1vdGVJT1VuaXQgPSBjcmVhdGVBdWRpb1VuaXQob3V0cHV0RGVz
Y3JpcHRpb24pOwotICAgIGlmICghcmVtb3RlSU9Vbml0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoYXV0byBlcnJvciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KHJlbW90ZUlPVW5pdCkpIHsK
LSAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJBdWRpb091dHB1dFVuaXRTdGFydCBm
YWlsZWQsIGVycm9yID0gIiwgZXJyb3IsICIgKCIsIChjb25zdCBjaGFyKikmZXJyb3IsICIpIik7
Ci0gICAgICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKHJlbW90ZUlPVW5pdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG1ha2VVbmlx
dWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihvdXRwdXREZXNjcmlwdGlvbik7Ci0gICAgbV9y
ZW1vdGVJT1VuaXQgPSByZW1vdGVJT1VuaXQ7CisgICAgaWYgKGF1dG8qIGZvcm1hdERlc2NyaXB0
aW9uID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKS5mb3Jt
YXREZXNjcmlwdGlvbigpKQorICAgICAgICBtX291dHB1dERlc2NyaXB0aW9uID0gbWFrZVVuaXF1
ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KCpmb3JtYXREZXNjcmlwdGlvbik7CiB9CiAKIHZv
aWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RvcCgpCiB7Ci0gICAgaWYg
KCFtX3JlbW90ZUlPVW5pdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQXVkaW9PdXRwdXRVbml0
U3RvcChtX3JlbW90ZUlPVW5pdCk7Ci0gICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2Uo
bV9yZW1vdGVJT1VuaXQpOwotICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKKyAgICBpZiAo
bV9kYXRhU291cmNlKQorICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6
OnNpbmdsZXRvbigpLnJlbW92ZVNvdXJjZSgqbV9kYXRhU291cmNlKTsKIH0KIAogdm9pZCBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjbGVhcigpCkBAIC03Niw4NCArNTcsMjEg
QEAgdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjbGVhcigpCiAgICAg
c3RvcCgpOwogCiAgICAgbV9kYXRhU291cmNlID0gbnVsbHB0cjsKLSAgICBtX291dHB1dERlc2Ny
aXB0aW9uID0gbnVsbHB0cjsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0geyB9OwogfQogCi1B
dWRpb0NvbXBvbmVudEluc3RhbmNlIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6
OmNyZWF0ZUF1ZGlvVW5pdChDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG91dHB1dERlc2NyaXB0
aW9uKQordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzZXRWb2x1bWUo
ZmxvYXQgdm9sdW1lKQogewotICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgcmVtb3RlSU9Vbml0
IHsgbnVsbHB0ciB9OwotCi0gICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNj
cmlwdGlvbiB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwgMCwga0F1ZGlvVW5pdE1hbnVmYWN0dXJl
cl9BcHBsZSwgMCwgMCB9OwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaW9Vbml0RGVz
Y3JpcHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJUeXBlX1JlbW90ZUlPOwot
I2Vsc2UKLSAgICBpb1VuaXREZXNjcmlwdGlvbi5jb21wb25lbnRTdWJUeXBlID0ga0F1ZGlvVW5p
dFN1YlR5cGVfRGVmYXVsdE91dHB1dDsKLSNlbmRpZgotCi0gICAgQXVkaW9Db21wb25lbnQgaW9D
b21wb25lbnQgPSBBdWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxwdHIsICZpb1VuaXREZXNjcmlw
dGlvbik7Ci0gICAgQVNTRVJUKGlvQ29tcG9uZW50KTsKLSAgICBpZiAoIWlvQ29tcG9uZW50KSB7
Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxlIHRvIGZpbmQgcmVtb3Rl
IElPIHVuaXQgY29tcG9uZW50Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIE9TU3RhdHVzIGVyciA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQs
ICZyZW1vdGVJT1VuaXQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJST1JfTE9HKExPR0lE
RU5USUZJRVIsICJ1bmFibGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9yID0gIiwgZXJyLCAiICgi
LCAoY29uc3QgY2hhciopJmVyciwgIikiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVSW50MzIgcGFyYW0gPSAxOwotICAg
IGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvT3V0cHV0VW5p
dFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAmcGFyYW0sIHNp
emVvZihwYXJhbSkpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJST1JfTE9HKExPR0lERU5U
SUZJRVIsICJ1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQsIGVycm9yID0gIiwgZXJy
LCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIikiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0g
eyBpbnB1dFByb2MsIHRoaXMgfTsKLSAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1v
dGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5p
dFNjb3BlX0dsb2JhbCwgMCwgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKLSAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxlIHRvIHNldCB2
cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNoYXIq
KSZlcnIsICIpIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIFVJbnQz
MiBzaXplID0gc2l6ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkpOwot
ICAgIGVyciAgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQ
cm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJm91dHB1dERl
c2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCksICZzaXplKTsKLSAgICBpZiAoZXJyKSB7Ci0g
ICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAidW5hYmxlIHRvIGdldCBpbnB1dCBzdHJl
YW0gZm9ybWF0LCBlcnJvciA9ICIsIGVyciwgIiAoIiwgKGNvbnN0IGNoYXIqKSZlcnIsICIpIik7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIG91dHB1dERlc2NyaXB0aW9u
LnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUgPSBBdWRpb1Nlc3Npb246OnNoYXJlZFNl
c3Npb24oKS5zYW1wbGVSYXRlKCk7Ci0KLSAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShy
ZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRT
Y29wZV9JbnB1dCwgMCwgJm91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCksIHNp
emVvZihvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpKSk7Ci0gICAgaWYgKGVy
cikgewotICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInVuYWJsZSB0byBzZXQgaW5w
dXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAiLCBlcnIsICIgKCIsIChjb25zdCBjaGFyKikmZXJy
LCAiKSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBlcnIgPSBBdWRp
b1VuaXRJbml0aWFsaXplKHJlbW90ZUlPVW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBF
UlJPUl9MT0coTE9HSURFTlRJRklFUiwgIkF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWlsZWQsIGVy
cm9yID0gIiwgZXJyLCAiICgiLCAoY29uc3QgY2hhciopJmVyciwgIikiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlbW90ZUlPVW5pdDsKKyAgICBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcjo6c2V0Vm9sdW1lKHZvbHVtZSk7CisgICAgaWYgKG1f
ZGF0YVNvdXJjZSkKKyAgICAgICAgbV9kYXRhU291cmNlLT5zZXRWb2x1bWUodm9sdW1lKTsKIH0K
IAogdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpwdXNoU2FtcGxlcyhj
b25zdCBNZWRpYVRpbWUmIHNhbXBsZVRpbWUsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRp
b0RhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3Qg
c2FtcGxlQ291bnQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJU
KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVzY3Jp
cHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgIGlmICghbV9yZW1vdGVJT1VuaXQp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIGlmICghbV9kYXRhU291cmNlIHx8ICFtX2RhdGFTb3Vy
Y2UtPmlucHV0RGVzY3JpcHRpb24oKSB8fCAqbV9kYXRhU291cmNlLT5pbnB1dERlc2NyaXB0aW9u
KCkgIT0gZGVzY3JpcHRpb24pIHsKLSAgICAgICAgaWYgKG1fc2hvdWxkVXBkYXRlUmVuZGVyZXJE
YXRhU291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCiAgICAgICAgIGF1dG8gZGF0YVNvdXJj
ZSA9IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Y3JlYXRlKGRlc2NyaXB0aW9uLnNhbXBsZVJhdGUo
KSAqIDIsICp0aGlzKTsKIAogICAgICAgICBpZiAoZGF0YVNvdXJjZS0+c2V0SW5wdXRGb3JtYXQo
dG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pKSkgewpAQCAtMTYxLDQ1ICs3
OSwyOCBAQCB2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnB1c2hTYW1w
bGVzKGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKGRhdGFTb3VyY2UtPnNldE91dHB1dEZvcm1hdCgqbV9vdXRw
dXREZXNjcmlwdGlvbikpIHsKKyAgICAgICAgaWYgKCFtX291dHB1dERlc2NyaXB0aW9uIHx8IGRh
dGFTb3VyY2UtPnNldE91dHB1dEZvcm1hdCgqbV9vdXRwdXREZXNjcmlwdGlvbikpIHsKICAgICAg
ICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAiVW5hYmxlIHRvIHNldCB0aGUgb3V0cHV0
IGZvcm1hdCBvZiBkYXRhIHNvdXJjZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgZGF0YVNvdXJjZS0+c2V0UGF1c2VkKGZhbHNlKTsKLSAgICAgICAgZGF0YVNv
dXJjZS0+c2V0Vm9sdW1lKHZvbHVtZSgpKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgb2xkU291cmNlID0gbV9kYXRhU291cmNl
LCBuZXdTb3VyY2UgPSBkYXRhU291cmNlLmNvcHlSZWYoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBpZiAob2xkU291cmNlKQorICAgICAgICAgICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6c2luZ2xldG9uKCkucmVtb3ZlU291cmNlKCpvbGRTb3VyY2UpOwogCisgICAg
ICAgICAgICBuZXdTb3VyY2UtPnNldFBhdXNlZChmYWxzZSk7CisgICAgICAgICAgICBuZXdTb3Vy
Y2UtPnNldFZvbHVtZSh2b2x1bWUoKSk7CisgICAgICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLmFkZFNvdXJjZShXVEZNb3ZlKG5ld1NvdXJjZSkp
OworICAgICAgICB9KTsKICAgICAgICAgbV9kYXRhU291cmNlID0gV1RGTW92ZShkYXRhU291cmNl
KTsKLSAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJlckRhdGFTb3VyY2UgPSB0cnVlOwogICAg
IH0KIAogICAgIG1fZGF0YVNvdXJjZS0+cHVzaFNhbXBsZXMoc2FtcGxlVGltZSwgYXVkaW9EYXRh
LCBzYW1wbGVDb3VudCk7CiB9CiAKLU9TU3RhdHVzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyQ29jb2E6OnJlbmRlcihVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYgaW9E
YXRhLCBVSW50MzIgLyppbkJ1c051bWJlciovLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0
YW1wLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgYWN0aW9uRmxhZ3MpCi17Ci0gICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fc2hvdWxkVXBkYXRlUmVuZGVyZXJEYXRh
U291cmNlKSB7Ci0gICAgICAgIG1fcmVuZGVyZXJEYXRhU291cmNlID0gbV9kYXRhU291cmNlOwot
ICAgICAgICBtX3Nob3VsZFVwZGF0ZVJlbmRlcmVyRGF0YVNvdXJjZSA9IGZhbHNlOwotICAgIH0K
LQotICAgIGlmICghbV9yZW5kZXJlckRhdGFTb3VyY2UpIHsKLSAgICAgICAgQXVkaW9TYW1wbGVC
dWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3Vu
dCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVzUGVyRnJhbWUoKSkpOwotICAgICAgICBhY3Rp
b25GbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtX3JlbmRlcmVyRGF0YVNvdXJjZS0+cHVsbFNhbXBs
ZXMoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50KSwgdGltZVN0YW1wLm1T
YW1wbGVUaW1lLCB0aW1lU3RhbXAubUhvc3RUaW1lLCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OkNv
cHkpOwotICAgIHJldHVybiAwOwotfQotCi1PU1N0YXR1cyBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hOjppbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFj
dGlvbkZsYWdzKiBhY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIHRpbWVTdGFtcCwg
VUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCog
aW9EYXRhKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hKj4odXNlckRhdGEpLT5yZW5kZXIoc2FtcGxlQ291bnQsICppb0RhdGEsIGlu
QnVzTnVtYmVyLCAqdGltZVN0YW1wLCAqYWN0aW9uRmxhZ3MpOwotfQotCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaAppbmRleCBlMTY5NWQx
MzgwMWYzYmVhZjRjMzA4YWM3OGViZjAyMDA3ZGJlOTM5Li41MWFjNDMzN2M0ZTAzNThmZGRjYjRl
YTg1NDdmMmFiYjBiYzBmYTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKICNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94
Lmg+CiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CkBAIC0zOSw3ICs0MCw3
IEBAIGNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKIGNsYXNzIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdDsKIGNsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKIAotY2xhc3MgQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSA6IHB1YmxpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlciB7CitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hIDogcHVi
bGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSwgV2Vha1B0ckZhY3RvcnlJbml0aWFs
aXphdGlvbjo6RWFnZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hKCk7CkBAIC01MSwxOSArNTIs
MTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0KCkgZmluYWw7CiAgICAgdm9pZCBzdG9wKCkg
ZmluYWw7CiAgICAgdm9pZCBjbGVhcigpIGZpbmFsOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0
KSBmaW5hbDsKIAotICAgIHN0YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9pZCosIEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgaW5CdXNO
dW1iZXIsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0Kik7Ci0gICAgT1NT
dGF0dXMgcmVuZGVyKFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiwgVUludDMy
IGluQnVzTnVtYmVyLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIEF1ZGlvVW5pdFJlbmRlckFjdGlv
bkZsYWdzJik7Ci0KLSAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlIGNyZWF0ZUF1ZGlvVW5pdChD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mKTsKLQotICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2Ug
bV9yZW1vdGVJT1VuaXQgeyBudWxscHRyIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKLQotICAgIC8vIEF1ZGlvIHRo
cmVhZHMgbWVtYmVyCiAgICAgUmVmUHRyPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gbV9kYXRhU291
cmNlOwotICAgIFJlZlB0cjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+IG1fcmVuZGVyZXJEYXRhU291
cmNlOwotICAgIGJvb2wgbV9zaG91bGRVcGRhdGVSZW5kZXJlckRhdGFTb3VyY2UgeyBmYWxzZSB9
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWM3NGExMjU1YzVlNTRhNTIzNDM2ZmU2OWE4ZTQ0NGMy
ZTcwYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAKQEAgLTAsMCAr
MSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiQXVk
aW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRpb1Rvb2xib3hT
UEkuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCisjaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRp
YVNvZnRMaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0JiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmds
ZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdD4gcmVnaXN0cnk7CisgICAgcmV0dXJuIHJlZ2lzdHJ5OworfQorCitBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6On5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlclVuaXQoKQoreworICAgIHN0b3AoKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZShSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPiYmIHNv
dXJjZSkKK3sKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQ6OmFkZFNvdXJjZSIpOworCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fc291cmNlc0xvY2spOworICAgICAgICBBU1NFUlQoIW1fc291cmNlcy5jb250
YWlucyhzb3VyY2UuZ2V0KCkpKTsKKyAgICAgICAgbV9zb3VyY2VzLmFkZChXVEZNb3ZlKHNvdXJj
ZSkpOworICAgICAgICBtX3NvdXJjZXNDb3B5ID0gY29weVRvVmVjdG9yKG1fc291cmNlcyk7Cisg
ICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7CisgICAgfQorICAgIHN0
YXJ0KCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW1v
dmVTb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCit7CisgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW1vdmVTb3Vy
Y2UiKTsKKworICAgIGJvb2wgc2hvdWxkU3RvcCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3NvdXJjZXNMb2NrKTsKKyAgICAgICAgbV9zb3VyY2VzLnJl
bW92ZShzb3VyY2UpOworICAgICAgICBzaG91bGRTdG9wID0gbV9zb3VyY2VzLmlzRW1wdHkoKTsK
KyAgICAgICAgbV9zb3VyY2VzQ29weSA9IGNvcHlUb1ZlY3RvcihtX3NvdXJjZXMpOworICAgICAg
ICBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSB0cnVlOworICAgIH0KKyAgICBpZiAoc2hv
dWxkU3RvcCkKKyAgICAgICAgc3RvcCgpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6c3RhcnQoKQoreworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQiKTsKKworICAgIGlmIChtX2lzU3Rh
cnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsK
KyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0
byBlcnJvciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fcmVtb3RlSU9Vbml0KSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ6OnN0YXJ0IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCwgZXJyb3IgPSAlZCIsIGVy
cm9yKTsKKyAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1Vu
aXQpOworICAgICAgICBtX3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7CisgICAgfQorICAgIG1faXNT
dGFydGVkID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQgaXMgc3RhcnRlZCIpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdDo6c3RvcCgpCit7CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAi
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdG9wIik7CisKKyAgICBpZiAoIW1f
cmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1N0YXJ0ZWQpIHsK
KyAgICAgICAgQXVkaW9PdXRwdXRVbml0U3RvcChtX3JlbW90ZUlPVW5pdCk7CisgICAgICAgIG1f
aXNTdGFydGVkID0gZmFsc2U7CisgICAgfQorCisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURp
c3Bvc2UobV9yZW1vdGVJT1VuaXQpOworICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKK30K
KworQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ6OmZvcm1hdERlc2NyaXB0aW9uKCkKK3sKKyAgICBjcmVhdGVBdWRpb1VuaXRJZk5lZWRl
ZCgpOworICAgIHJldHVybiBtX291dHB1dERlc2NyaXB0aW9uLmdldCgpOworfQorCit2b2lkIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQo
KQoreworICAgIEFTU0VSVCghbV9yZW1vdGVJT1VuaXQgfHwgbV9vdXRwdXREZXNjcmlwdGlvbik7
CisgICAgaWYgKG1fcmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24gb3V0cHV0RGVzY3JpcHRpb247CisgICAgQXVkaW9Db21wb25lbnRJ
bnN0YW5jZSByZW1vdGVJT1VuaXQgeyBudWxscHRyIH07CisKKyAgICBBdWRpb0NvbXBvbmVudERl
c2NyaXB0aW9uIGlvVW5pdERlc2NyaXB0aW9uIHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCAwLCBr
QXVkaW9Vbml0TWFudWZhY3R1cmVyX0FwcGxlLCAwLCAwIH07CisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBpb1VuaXREZXNjcmlwdGlvbi5jb21wb25lbnRTdWJUeXBlID0ga0F1ZGlvVW5p
dFN1YlR5cGVfUmVtb3RlSU87CisjZWxzZQorICAgIGlvVW5pdERlc2NyaXB0aW9uLmNvbXBvbmVu
dFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9EZWZhdWx0T3V0cHV0OworI2VuZGlmCisKKyAg
ICBBdWRpb0NvbXBvbmVudCBpb0NvbXBvbmVudCA9IEF1ZGlvQ29tcG9uZW50RmluZE5leHQobnVs
bHB0ciwgJmlvVW5pdERlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQoaW9Db21wb25lbnQpOworICAg
IGlmICghaW9Db21wb25lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAi
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxl
IHRvIGZpbmQgcmVtb3RlIElPIHVuaXQgY29tcG9uZW50Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBhdXRvIGVycm9yID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBv
bmVudCwgJnJlbW90ZUlPVW5pdCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3Jl
YXRlQXVkaW9Vbml0IHVuYWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3IgPSAlZCIsIGVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgVUludDMyIHBhcmFtID0gMTsKKyAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJl
bW90ZUlPVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0
U2NvcGVfT3V0cHV0LCAwLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAgIGlmIChlcnJvcikg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5p
dCBvdXRwdXQsIGVycm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IGlucHV0UHJv
YywgbnVsbHB0ciB9OworICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9V
bml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29w
ZV9HbG9iYWwsIDAsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CisgICAgaWYgKGVycm9y
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBzZXQgdnBpbyB1bml0
IHNwZWFrZXIgcHJvYywgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURl
c2NyaXB0aW9uKCkpOworICAgIGVycm9yICA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KHJlbW90ZUlP
VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lu
cHV0LCAwLCAmb3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSwgJnNpemUpOwor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8g
Z2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigp
Lm1TYW1wbGVSYXRlID0gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2FtcGxlUmF0ZSgp
OworCisgICAgZXJyb3IgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRp
b1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJm91
dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCksIHNpemVvZihvdXRwdXREZXNjcmlw
dGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBzZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJy
b3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVycm9yID0g
QXVkaW9Vbml0SW5pdGlhbGl6ZShyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCBBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVkLCBl
cnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vdXRw
dXREZXNjcmlwdGlvbiA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihvdXRw
dXREZXNjcmlwdGlvbik7CisgICAgbV9yZW1vdGVJT1VuaXQgPSByZW1vdGVJT1VuaXQ7Cit9CisK
K09TU3RhdHVzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVuZGVyKFVJbnQz
MiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiBpb0RhdGEsIFVJbnQzMiAvKmluQnVzTnVt
YmVyKi8sIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIEF1ZGlvVW5pdFJlbmRlckFj
dGlvbkZsYWdzJiBhY3Rpb25GbGFncykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAobV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzKSB7CisgICAgICAgIGF1dG8gbG9j
a2VyID0gdHJ5SG9sZExvY2sobV9zb3VyY2VzTG9jayk7CisgICAgICAgIGlmICghbG9ja2VyKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgbV9yZW5kZXJTb3VyY2VzID0gV1RGTW92
ZShtX3NvdXJjZXNDb3B5KTsKKyAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzID0g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fcmVuZGVyU291cmNlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgaWYgKG1fb3V0cHV0RGVzY3JpcHRpb24pCisgICAgICAgICAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50
ICogbV9vdXRwdXREZXNjcmlwdGlvbi0+Ynl0ZXNQZXJGcmFtZSgpKSk7CisgICAgICAgIGFjdGlv
bkZsYWdzID0ga0F1ZGlvVW5pdFJlbmRlckFjdGlvbl9PdXRwdXRJc1NpbGVuY2U7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIC8vIE1peCBhbGwgc291cmNlcy4KKyAgICBib29sIGlz
Rmlyc3RTb3VyY2UgPSB0cnVlOworICAgIGZvciAoYXV0byYgc291cmNlIDogbV9yZW5kZXJTb3Vy
Y2VzKSB7CisgICAgICAgIHNvdXJjZS0+cHVsbFNhbXBsZXMoaW9EYXRhLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KHNhbXBsZUNvdW50KSwgdGltZVN0YW1wLm1TYW1wbGVUaW1lLCB0aW1lU3RhbXAubUhv
c3RUaW1lLCBpc0ZpcnN0U291cmNlID8gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpDb3B5IDogQXVk
aW9TYW1wbGVEYXRhU291cmNlOjpNaXgpOworICAgICAgICBpc0ZpcnN0U291cmNlID0gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitPU1N0YXR1cyBBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OmlucHV0UHJvYyh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MqIGFjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogdGltZVN0YW1wLCBVSW50MzIg
aW5CdXNOdW1iZXIsIFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEp
Cit7CisgICAgcmV0dXJuIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xl
dG9uKCkucmVuZGVyKHNhbXBsZUNvdW50LCAqaW9EYXRhLCBpbkJ1c051bWJlciwgKnRpbWVTdGFt
cCwgKmFjdGlvbkZsYWdzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODc1NjRkOTk4NmNlNGExMTMwYjU5MDU3
OGI3NzlkMmY5MGFkZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+Cisj
aW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U7CitjbGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q7CitjbGFzcyBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb247CisKK2NsYXNzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCB7Citw
dWJsaWM6CisgICAgc3RhdGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCYgc2lu
Z2xldG9uKCk7CisKKyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQoKSA9IGRl
ZmF1bHQ7CisgICAgfkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpOworCisgICAg
c3RhdGljIE9TU3RhdHVzIGlucHV0UHJvYyh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIG51
bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqKTsKKworICAgIHZvaWQgc3RhcnQoKTsKKyAg
ICB2b2lkIHN0b3AoKTsKKworICAgIHZvaWQgYWRkU291cmNlKFJlZjxBdWRpb1NhbXBsZURhdGFT
b3VyY2U+JiYpOworICAgIHZvaWQgcmVtb3ZlU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYp
OworCisgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKiBmb3JtYXREZXNjcmlwdGlvbigpOwor
Citwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsKKyAgICBPU1N0
YXR1cyByZW5kZXIoVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCBVSW50MzIg
aW5CdXNOdW1iZXIsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9u
RmxhZ3MmKTsKKworICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgbV9yZW1vdGVJT1VuaXQgeyBu
dWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4g
bV9vdXRwdXREZXNjcmlwdGlvbjsKKyAgICBIYXNoU2V0PFJlZjxBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U+PiBtX3NvdXJjZXM7CisgICAgVmVjdG9yPFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBt
X3NvdXJjZXNDb3B5OworICAgIFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9y
ZW5kZXJTb3VyY2VzOworICAgIGJvb2wgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzIHsgZmFs
c2UgfTsKKyAgICBMb2NrIG1fc291cmNlc0xvY2s7CisgICAgYm9vbCBtX2lzU3RhcnRlZCB7IGZh
bHNlIH07Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDA5Zjg4MTk2ZjQ4MDM0Y2FmYzEwZjdiOWJmZTIyZTdmNDUwMDA1ZmIuLjczNTVjMDIwMzMyYzJi
YjhkODk1NDJkOTI4OGFlNTJkY2QzMTE5NmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0w
Ni0wOCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIG9u
ZSBhdWRpbyB1bml0IGZvciBhbGwgTWVkaWFTdHJlYW1UcmFja3Mgb2YgYSBnaXZlbiBwcm9jZXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0MDYK
KworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgKiB3ZWJydGMv
bXVsdGktYXVkaW8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJydGMvbXVsdGkt
YXVkaW8uaHRtbDogQWRkZWQuCisKIDIwMjAtMDYtMDcgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVXNlIEFWQXNzZXRXcml0ZXJEZWxlZ2F0ZSB0
byBpbXBsZW1lbnQgTWVkaWFSZWNvcmRlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2VicnRj
L211bHRpLWF1ZGlvLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1hdWRp
by1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDFmZjc4NGUxMjM1Y2I3OWRhZmE5YmRmNmI1NTIz
MzBhZGM2ODUxOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnJ0Yy9tdWx0aS1h
dWRpby1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACisgCisKK1BBU1MgTXVsdGkgYXVkaW8g
d2l0aCBkaWZmZXJlbnQgdm9sdW1lcyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2VicnRj
L211bHRpLWF1ZGlvLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJydGMvbXVsdGktYXVkaW8uaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NzFlZGU2YWFhMjNmYmQ2NjA5MTZiMDNiMzk0ZGM4MDQ0Y2IyYTVkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2VicnRjL211bHRpLWF1ZGlvLmh0bWwKQEAgLTAs
MCArMSw1OCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgICAgICA8dGl0bGU+VGVzdGluZyBtdWx0aSBhdWRp
byB3aXRoIG11bHRpcGxlIHZvbHVtZXM8L3RpdGxlPgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgICAgPC9oZWFk
PgorICAgIDxib2R5PgorICAgICAgICA8dmlkZW8gaWQ9InZpZGVvMSIgYXV0b3BsYXk9IiI+PC92
aWRlbz4KKyAgICAgICAgPHZpZGVvIGlkPSJ2aWRlbzIiIGF1dG9wbGF5PSIiPjwvdmlkZW8+Cisg
ICAgICAgIDxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjY0MCIgaGVpZ2h0PSI0ODAiPjwvY2Fu
dmFzPgorICAgICAgICA8c2NyaXB0IHNyYyA9InJvdXRpbmVzLmpzIj48L3NjcmlwdD4KKyAgICAg
ICAgPHNjcmlwdD4KK3ZhciBwYzEsIHBjMjsKK3Byb21pc2VfdGVzdChhc3luYyAodGVzdCkgPT4g
eworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRVc2Vy
TWVkaWFQZXJtaXNzaW9uKHRydWUpOworCisgICAgbGV0IHJlbW90ZVN0cmVhbTEsIHJlbW90ZVN0
cmVhbTI7CisgICAgbGV0IGNvdW50ZXIgPSAwOworICAgIGNvbnN0IGxvY2FsU3RyZWFtID0gYXdh
aXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSwgdmlk
ZW8gOiB0cnVlIH0pOworICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNv
bHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgY3JlYXRlQ29ubmVjdGlvbnMoKGZpcnN0Q29ubmVj
dGlvbikgPT4geworICAgICAgICAgICAgcGMxID0gZmlyc3RDb25uZWN0aW9uOworICAgICAgICAg
ICAgZmlyc3RDb25uZWN0aW9uLmFkZFRyYWNrKGxvY2FsU3RyZWFtLmdldEF1ZGlvVHJhY2tzKClb
MF0sIGxvY2FsU3RyZWFtKTsKKyAgICAgICAgICAgIGZpcnN0Q29ubmVjdGlvbi5hZGRUcmFjayhs
b2NhbFN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdLCBsb2NhbFN0cmVhbSk7CisKKyAgICAgICAg
ICAgIGNvbnN0IGNsb25lID0gbG9jYWxTdHJlYW0uY2xvbmUoKTsKKyAgICAgICAgICAgIGZpcnN0
Q29ubmVjdGlvbi5hZGRUcmFjayhjbG9uZS5nZXRBdWRpb1RyYWNrcygpWzBdLCBjbG9uZSk7Cisg
ICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24uYWRkVHJhY2soY2xvbmUuZ2V0VmlkZW9UcmFja3Mo
KVswXSwgY2xvbmUpOworICAgICAgICB9LCAoc2Vjb25kQ29ubmVjdGlvbikgPT4geworICAgICAg
ICAgICAgcGMyID0gc2Vjb25kQ29ubmVjdGlvbjsKKyAgICAgICAgICAgIHNlY29uZENvbm5lY3Rp
b24ub250cmFjayA9ICh0cmFja0V2ZW50KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFyZW1v
dGVTdHJlYW0xKQorICAgICAgICAgICAgICAgICAgICByZW1vdGVTdHJlYW0xID0gdHJhY2tFdmVu
dC5zdHJlYW1zWzBdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRyYWNrRXZlbnQuc3RyZWFt
c1swXSAhPT0gcmVtb3RlU3RyZWFtMSkKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlU3RyZWFt
MiA9IHRyYWNrRXZlbnQuc3RyZWFtc1swXTsKKworICAgICAgICAgICAgICAgIGlmICgrK2NvdW50
ZXIgPj0gNCkKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgfTsK
KyAgICAgICAgfSk7CisgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KCJUZXN0IHRpbWVk
IG91dCIpLCA1MDAwKTsKKyAgICB9KTsKKworICAgIHZpZGVvMS52b2x1bWUgPSAwLjAxOworICAg
IHZpZGVvMS5zcmNPYmplY3QgPSByZW1vdGVTdHJlYW0xOworICAgIHZpZGVvMi52b2x1bWUgPSAx
OworICAgIHZpZGVvMi5zcmNPYmplY3QgPSByZW1vdGVTdHJlYW0yOworICAgIGF3YWl0IHZpZGVv
MS5wbGF5KCk7CisgICAgYXdhaXQgdmlkZW8yLnBsYXkoKTsKKworICAgIHZpZGVvMS52b2x1bWUg
PSAwLjE7Cit9LCAiTXVsdGkgYXVkaW8gd2l0aCBkaWZmZXJlbnQgdm9sdW1lcyIpOworICAgICAg
ICA8L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>