<?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>233316</bug_id>
          
          <creation_ts>2021-11-18 06:32:23 -0800</creation_ts>
          <short_desc>Let RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit switch to VPIO unit if VPIO is running</short_desc>
          <delta_ts>2022-02-08 21:39:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=230902</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=218012</see_also>
          <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>ggaren</cc>
    
    <cc>glefebvr</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>lhphong09t2</cc>
    
    <cc>mb</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>1816405</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-11-18 06:32:23 -0800</bug_when>
    <thetext>Let RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit switch to VPIO unit if VPIO is running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816410</commentid>
    <comment_count>1</comment_count>
      <attachid>444668</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-11-18 06:49:24 -0800</bug_when>
    <thetext>Created attachment 444668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816411</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-11-18 06:51:45 -0800</bug_when>
    <thetext>There are some issues with this approach.
In particular, when microphone is muted through WebKit, we keep using PlayAndRecord but switch to RemoteIO for audio rendering. We then end up in ducked audio, because of PlayAndRecord.
We need to investigate this issue further, as it seems setting PlayAndRecord but not starting VPIO should not trigger these audio level jumps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816966</commentid>
    <comment_count>3</comment_count>
      <attachid>444845</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-11-19 12:38:11 -0800</bug_when>
    <thetext>Created attachment 444845
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817248</commentid>
    <comment_count>4</comment_count>
      <attachid>444950</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-11-22 00:43:50 -0800</bug_when>
    <thetext>Created attachment 444950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817765</commentid>
    <comment_count>5</comment_count>
    <who name="Phong Le">lhphong09t2</who>
    <bug_when>2021-11-25 03:01:02 -0800</bug_when>
    <thetext>Not only remote audio stream but also playing a media url by audio, video element during a call</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817801</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-25 06:33:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/85750694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818762</commentid>
    <comment_count>7</comment_count>
      <attachid>444950</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-11-30 08:47:56 -0800</bug_when>
    <thetext>Comment on attachment 444950
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        We use this in WebKit to render the MediaStreamTrackis of the process doing capture through VPIO when running.

s/MediaStreamTrackis/MediaStreamTracks/

&gt; Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.cpp:87
&gt; +    setShouldProduceMicrophoneSamples(true);

Nit: it not only _should_ produce microphone samples, it _is_ producing them, so maybe `setIsProducingMicrophoneSamples` instead?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:499
&gt; +                m_speakerSamplesProducer-&gt;captureUnitIsStopped();

Nit: The producer is called after the unit has stopped, so I think `captureUnitHasStopped` would be clearer.

&gt; Source/WebKit/GPUProcess/GPUProcess.cpp:516
&gt; +void GPUProcess::notifyStartCapturingAudio(GPUConnectionToWebProcess&amp; process)

Nit: this name is slightly awkward, maybe `audioCaptureIsStarting`, or `processIsStartingToCaptureAudio` instead?

&gt; Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:255
&gt; +    if (m_isPlaying)
&gt; +        m_localUnit-&gt;stop();

This made me scratch my head for a minute so it might be worth adding a comment about why we stop the local unit when the capture unit starts.

&gt; Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:261
&gt; +    if (m_isPlaying)
&gt; +        m_localUnit-&gt;start();

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819201</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-12-01 05:34:15 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to Eric Carlson from comment #7)
&gt; Comment on attachment 444950 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=444950&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        We use this in WebKit to render the MediaStreamTrackis of the process doing capture through VPIO when running.
&gt; 
&gt; s/MediaStreamTrackis/MediaStreamTracks/

OK

&gt; &gt; Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.cpp:87
&gt; &gt; +    setShouldProduceMicrophoneSamples(true);
&gt; 
&gt; Nit: it not only _should_ produce microphone samples, it _is_ producing
&gt; them, so maybe `setIsProducingMicrophoneSamples` instead?

Sounds good.

&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:499
&gt; &gt; +                m_speakerSamplesProducer-&gt;captureUnitIsStopped();
&gt; 
&gt; Nit: The producer is called after the unit has stopped, so I think
&gt; `captureUnitHasStopped` would be clearer.

OK

&gt; &gt; Source/WebKit/GPUProcess/GPUProcess.cpp:516
&gt; &gt; +void GPUProcess::notifyStartCapturingAudio(GPUConnectionToWebProcess&amp; process)
&gt; 
&gt; Nit: this name is slightly awkward, maybe `audioCaptureIsStarting`, or
&gt; `processIsStartingToCaptureAudio` instead?

processIsStartingToCaptureAudio sounds much better.

&gt; &gt; Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:255
&gt; &gt; +    if (m_isPlaying)
&gt; &gt; +        m_localUnit-&gt;stop();
&gt; 
&gt; This made me scratch my head for a minute so it might be worth adding a
&gt; comment about why we stop the local unit when the capture unit starts.
&gt; 
&gt; &gt; Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:261
&gt; &gt; +    if (m_isPlaying)
&gt; &gt; +        m_localUnit-&gt;start();
&gt; 
&gt; Ditto

OK, will add a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819205</commentid>
    <comment_count>9</comment_count>
      <attachid>445565</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-12-01 05:45:33 -0800</bug_when>
    <thetext>Created attachment 445565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821496</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-08 03:07:10 -0800</bug_when>
    <thetext>Committed r286650 (244963@main): &lt;https://commits.webkit.org/244963@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445565.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444668</attachid>
            <date>2021-11-18 06:49:24 -0800</date>
            <delta_ts>2021-11-19 12:38:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233316-20211118154922.patch</filename>
            <type>text/plain</type>
            <size>36384</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgxYWE3ZTE4MjAxZjk1
ZjM5MmE3ZWJhNDk2ODY3NDEzMGJjMWVkZC4uZjFjOWQ4ZGJhMzE5ZmQyZTEwNWYzNzFkY2UwY2Nm
NGEzZjRkNmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTExLTE4ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBMZXQgUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0IHN3aXRjaCB0
byBWUElPIHVuaXQgaWYgVlBJTyBpcyBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYW4gZXh0ZXJuYWwgcHJvdmlk
ZXIgb2Ygc3BlYWtlciBkYXRhIHRvIHRoZSBWUElPIHVuaXQuCisgICAgICAgIFdlIHVzZSB0aGlz
IGluIFdlYktpdCB0byByZW5kZXIgdGhlIE1lZGlhU3RyZWFtVHJhY2sgb2YgdGhlIHByb2Nlc3Mg
ZG9pbmcgY2FwdHVyZSB0aHJvdWdoIFZQSU8gd2hlbiBydW5uaW5nLgorICAgICAgICBUaGlzIGFs
bG93cyB0byByZW1vdmUgdGhlIHdvcmthcm91bmQgdG8gc3RpY2sgd2l0aCB0aGUgUGxheUFuZFJl
Y29yZCBBdWRpb1Nlc3Npb24gY2F0ZWdvcnkgaWYgY2FwdHVyZSBzdG9wcyBidXQgYXVkaW8gY29u
dGludWVzLgorCisgICAgICAgIEluIGNhc2UgdGhlIFZQSU8gc3BlYWtlciBmb3JtYXQgaXMgbm90
IG1hdGNoaW5nIHRoZSBwcm9kdWNlciBmb3JtYXQsIHdlIGhhdmUgdG8gcmVjb25maWd1cmUgYW5k
IGFsaWduIHdpdGggdGhlIHByb2R1Y2VyIGZvcm1hdC4KKworICAgICAgICBNYW51YWxseSB0ZXN0
ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFuYWdlckNvY29hLm1tOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNl
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZS5oOgorCiAyMDIxLTExLTE3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBNZWRpYVBsYXllckFWRm91bmRhdGlvbiBzaG91bGQgc3VwcG9ydCBydmZj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IGRmMTQzZWU1MDhkYjVmZTQ4MTZmODc3MWMxMWNkMjc0ODkwNmI0NmYuLjVl
ZDQ5MTQxNjVmZGFjMjdiYjY2ZWQ5MjQ3ZDBhYmUzNWU3ZDI4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMjEtMTEtMTggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgor
CisgICAgICAgIExldCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXI6OlVuaXQgc3dpdGNoIHRvIFZQSU8gdW5pdCBpZiBWUElPIGlzIHJ1bm5pbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzMxNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIGNhc2Ug
dGhlIHByb2Nlc3MgaXMgdGhlIGxhc3Qgb25lIHRvIGRvIGF1ZGlvIGNhcHR1cmUsIHJlZ2lzdGVy
IHRoZSBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFn
ZXI6OlVuaXQgdG8gVlBJTworICAgICAgICBzbyBhcyB0byBzd2l0Y2ggdG8gaXQgaWYgc3RhcnRz
IHJ1bm5pbmcuCisgICAgICAgIE90aGVyd2lzZSwgbWFrZSB1c2Ugb2YgYSByZW1vdGUgSU8gdG8g
YWN0dWFsbHkgcmVuZGVyIGF1ZGlvLgorICAgICAgICBUaGlzIGFsbG93cyB0byByZW1vdmUgdGhl
IHg1IGdhaW4gd29ya2Fyb3VuZC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL0dQVVByb2Nlc3MuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0
Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIu
Y3BwOgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5oOgorCiAyMDIxLTExLTE3ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVBsYXllckFW
Rm91bmRhdGlvbiBzaG91bGQgc3VwcG9ydCBydmZjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWQ2N2Y5MDZlOGVlMDQ3Mjg4NDI0
ZTQwMTUyMWUyNDk3OTMzYTM0Mi4uM2Q5ZmI2YzVhNjM2OWRlYWI5ZGY1NWZlNDcxMGU4MTg0ZWYz
ZDcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTIyNyw2ICsxMjI3LDcgQEAKIAkJNDFGMDYyMTQwRjVGMTkyNjAwQTA3RUFD
IC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmggKi87IH07CiAJCTQxRjFEMjFGMEVGMzVDMkEwMERBODc1MyAv
KiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRG
cmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MUZBQkQyRDFGNERGRTRBMDA2QTZDOTcgLyogRE9NQ2FjaGVFbmdpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRkFCRDJCMUY0REZFNDIw
MDZBNkM5NyAvKiBET01DYWNoZUVuZ2luZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTQxRkNDQzNCMjc0NjY3NTYwMDg5MkFENiAvKiBDb3JlQXVk
aW9DYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRjNCQjU4MzFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQx
RkNENkI5MjNDRTAxNTUwMEM2MjU2NyAvKiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNDU5OEJFMjNDOEFB
QjgwMDJCOUNDOCAvKiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUZDRDZCQjIzQ0UwMjc3MDBDNjI1
NjcgLyogTG9jYWxTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNDU5OEMwMjNDOEFENzgwMDJCOUNDOCAvKiBM
b2NhbFNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQyN0RBNzFEMTM3MzVERkEwMDdDNTdGQiAvKiBKU1Nl
cnZpY2VXb3JrZXJJbnRlcm5hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDI3REE3MUIxMzczNURGQTAwN0M1N0ZCIC8qIEpTU2VydmljZVdvcmtl
ckludGVybmFscy5jcHAgKi87IH07CkBAIC0xODk2MiwxMSArMTg5NjMsMTEgQEAKIAkJMUE1NjlD
QzQwRDdFMkI2MDAwN0MzOTgzIC8qIGJyaWRnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLywK
IAkJCQkxQTU2OUNFMjBEN0UyQjgyMDA3QzM5ODMgLyogb2JqYyAqLywKIAkJCQk1OTlFNzU4RjEx
MDU1QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggKi8sCiAJCQkJMUE3MUQ1NzkwRjMzODE5MDAwRjlD
RTRFIC8qIElkZW50aWZpZXJSZXAuY3BwICovLAogCQkJCTFBNzFENTdBMEYzMzgxOTAwMEY5Q0U0
RSAvKiBJZGVudGlmaWVyUmVwLmggKi8sCi0JCQkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8q
IGpzYyAqLywKIAkJCQkxQTU2OUNFRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5j
cHAgKi8sCiAJCQkJMUE1NjlDRjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuaCAq
LywKIAkJCQkxQTU2OUNGMTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9tZXRob2QuY3BwICov
LApAQCAtMzI4NTUsNiArMzI4NTYsNyBAQAogCQkJCTUxMjBCQkFGMUYxQ0VDRTcwMEVGRUJGMSAv
KiBDb29raWVTdG9yYWdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTNGODAyMDM1MUU5
RTQ3QkYwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzRjgwMjAzNzFFOUU0N0M1MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxRkNDQzNCMjc0NjY3NTYwMDg5MkFENiAvKiBD
b3JlQXVkaW9DYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0FGRjQyMjFFRkIx
NDQ5MDBCNTQ1QjMgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0Q3RDMzNDgxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjJGMTI5RTE4QzE1NzZGMDA1QzU0QUYgLyogQ291bnRlZFVzZXJB
Y3Rpdml0eS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9jb2NvYS9NZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9NZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0KaW5k
ZXggYmI3ODhhZmExZTkxZjlhNGQzYWIzNmUyYTBjMDgxMmM5NGUxODcwZS4uNzBkOTRhZGFlMWI0
MmRlNjI3NGRhNDRlMWIzOWFmYWE5MWQ0NjFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFuYWdlckNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL01lZGlhU2Vzc2lvbk1hbmFnZXJDb2Nv
YS5tbQpAQCAtMTAwLDcgKzEwMCw2IEBAIHZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlckNvY29hOjp1
cGRhdGVTZXNzaW9uU3RhdGUoKQogICAgIGludCB3ZWJBdWRpb0NvdW50ID0gMDsKICAgICBpbnQg
Y2FwdHVyZUNvdW50ID0gY291bnRBY3RpdmVBdWRpb0NhcHR1cmVTb3VyY2VzKCk7CiAgICAgYm9v
bCBoYXNBdWRpYmxlQXVkaW9PclZpZGVvTWVkaWFUeXBlID0gZmFsc2U7Ci0gICAgYm9vbCBpc1Bs
YXlpbmdBdWRpbyA9IGZhbHNlOwogICAgIGZvckVhY2hTZXNzaW9uKFsmXSAoYXV0byYgc2Vzc2lv
bikgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gdHlwZSA9IHNlc3Npb24ubWVkaWFUeXBlKCk7CiAg
ICAgICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTE4LDE3ICsxMTcsMTQgQEAgdm9pZCBNZWRpYVNl
c3Npb25NYW5hZ2VyQ29jb2E6OnVwZGF0ZVNlc3Npb25TdGF0ZSgpCiAgICAgICAgIGNhc2UgUGxh
dGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW86CiAgICAgICAgICAgICBpZiAo
c2Vzc2lvbi5jYW5Qcm9kdWNlQXVkaW8oKSkgewogICAgICAgICAgICAgICAgICsrd2ViQXVkaW9D
b3VudDsKLSAgICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbyB8PSBzZXNzaW9uLmlzUGxheWlu
ZygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoIWhhc0F1ZGlibGVBdWRpb09yVmlkZW9NZWRpYVR5cGUpIHsKICAgICAgICAgICAg
IGJvb2wgaXNQb3RlbnRpYWxseUF1ZGlibGUgPSBzZXNzaW9uLmlzUGxheWluZ1RvV2lyZWxlc3NQ
bGF5YmFja1RhcmdldCgpIHx8ICgodHlwZSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFU
eXBlOjpWaWRlb0F1ZGlvIHx8IHR5cGUgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlw
ZTo6QXVkaW8pICYmIHNlc3Npb24uY2FuUHJvZHVjZUF1ZGlvKCkgJiYgc2Vzc2lvbi5oYXNQbGF5
ZWRTaW5jZUxhc3RJbnRlcnJ1cHRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoaXNQb3RlbnRpYWxs
eUF1ZGlibGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BvdGVudGlhbGx5QXVkaWJsZSkKICAgICAg
ICAgICAgICAgICBoYXNBdWRpYmxlQXVkaW9PclZpZGVvTWVkaWFUeXBlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBpc1BsYXlpbmdBdWRpbyB8PSBzZXNzaW9uLmlzUGxheWluZygpOwotICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSk7CiAKQEAgLTE1Niw3ICsxNTIsNyBAQCB2b2lkIE1l
ZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYTo6dXBkYXRlU2Vzc2lvblN0YXRlKCkKIAogICAgIFJvdXRl
U2hhcmluZ1BvbGljeSBwb2xpY3kgPSBSb3V0ZVNoYXJpbmdQb2xpY3k6OkRlZmF1bHQ7CiAgICAg
YXV0byBjYXRlZ29yeSA9IEF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlOjpOb25lOwotICAgIGlm
IChjYXB0dXJlQ291bnQgfHwgKGlzUGxheWluZ0F1ZGlvICYmIEF1ZGlvU2Vzc2lvbjo6c2hhcmVk
U2Vzc2lvbigpLmNhdGVnb3J5KCkgPT0gQXVkaW9TZXNzaW9uOjpDYXRlZ29yeVR5cGU6OlBsYXlB
bmRSZWNvcmQpKQorICAgIGlmIChjYXB0dXJlQ291bnQpCiAgICAgICAgIGNhdGVnb3J5ID0gQXVk
aW9TZXNzaW9uOjpDYXRlZ29yeVR5cGU6OlBsYXlBbmRSZWNvcmQ7CiAgICAgZWxzZSBpZiAoaGFz
QXVkaWJsZUF1ZGlvT3JWaWRlb01lZGlhVHlwZSkgewogICAgICAgICBjYXRlZ29yeSA9IEF1ZGlv
U2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlOjpNZWRpYVBsYXliYWNrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCmluZGV4IDk2YWE4YzRjMjYxODU1NzkzYzU4NmQ1OGU3NTJjODA1MDg2
ZDUxNmIuLjE3ODFhYjY3N2JiM2QyNWNjNzExMGVlYjJhMGM3MzE5NjNiZjVhOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0
dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRl
IDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAg
LTc3LDYgKzc4LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBCYXNlQXVkaW9TaGFyZWRVbml0JiBz
aW5nbGV0b24oKSAgeyByZXR1cm4gdW5pdCgpOyB9CiAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdCgp
OwogCisgICAgdm9pZCByZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3Bl
YWtlclNhbXBsZXNQcm9kdWNlciYpOworICAgIHZvaWQgdW5yZWdpc3RlclNwZWFrZXJTYW1wbGVz
UHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYpOworCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBzaXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7CiAKQEAgLTEwMyw3ICsx
MDcsNyBAQCBwcml2YXRlOgogICAgIE9TU3RhdHVzIHByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUludDMy
LCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOwogCiAgICAgc3RhdGljIE9TU3RhdHVzIHNwZWFr
ZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRp
b1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKLSAgICBPU1N0
YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBjb25z
dCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAg
ICBPU1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3Mm
LCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3Qm
KTsKIAogICAgIHZvaWQgdW5kdWNrKCk7CiAKQEAgLTExOSw3ICsxMjMsNiBAQCBwcml2YXRlOgog
ICAgIHVpbnQ2NF90IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OwogCiAgICAgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7Ci0gICAgUmVmUHRyPEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdD4gbV9zcGVha2VyU2FtcGxlQnVmZmVyOwogCiAgICAgZG91YmxlIG1fRFRT
Q29udmVyc2lvblJhdGlvIHsgMCB9OwogCkBAIC0xMzMsMTMgKzEzNiwxNSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3Qs
IGRvdWJsZSk7CiAKICAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwotICAgIHVpbnQ2NF90IG1fc3Bl
YWtlclByb2NzQ2FsbGVkIHsgMCB9OwogI2VuZGlmCiAKICAgICB1aW50NjRfdCBtX21pY3JvcGhv
bmVQcm9jc0NhbGxlZCB7IDAgfTsKICAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxl
ZExhc3RUaW1lIHsgMCB9OwogICAgIFRpbWVyIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXI7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIHZlcmlmeUNhcHR1cmVJbnRlcnZhbCA9IDEwX3M7CisK
KyAgICBMb2NrIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2s7CisgICAgQ29yZUF1ZGlvU3Bl
YWtlclNhbXBsZXNQcm9kdWNlciogbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jaykgeyBudWxscHRyIH07CiB9Owog
CiBDb3JlQXVkaW9TaGFyZWRVbml0JiBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bml0KCkKQEAgLTMw
NiwyMyArMzExLDI4IEBAIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCkKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKLSAgICBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24gc3BlYWtlclByb2NGb3JtYXQgPSB7IH07Ci0KKyAgICBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24gc3BlYWtlclByb2NGb3JtYXQ7CiAgICAgVUludDMyIHNpemUg
PSBzaXplb2Yoc3BlYWtlclByb2NGb3JtYXQpOwotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0R2V0
UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRp
b1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKTsK
LSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlu
cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7CisgICAgeworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAgICAgICAgc3BlYWtlclByb2NGb3JtYXQgPSBtX3Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0aW9uKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRHZXRQcm9wZXJ0eSht
X2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3Bl
X0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgJnNpemUpOworICAgICAgICAg
ICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8g
Z2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlID0gc2FtcGxlUmF0
ZSgpOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJh
dGUgPSBzYW1wbGVSYXRlKCk7CiAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eSht
X2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3Bl
X0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgc2l6ZSk7CiAgICAgaWYgKGVy
cikgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRV
bml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0g
Zm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwog
ICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAotICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlciA9
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKHNwZWFrZXJQcm9jRm9ybWF0LCBwcmVmZXJy
ZWRJT0J1ZmZlclNpemUoKSAqIDIpOwogICAgIG1fc3BlYWtlclByb2NGb3JtYXQgPSBzcGVha2Vy
UHJvY0Zvcm1hdDsKIAogICAgIHJldHVybiBlcnI7CkBAIC0zMzYsNDIgKzM0NiwyMSBAQCB2b2lk
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFt
cCYgdGltZVN0YW1wLCB1aW50NgogfQogI2VuZGlmCiAKLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgLypp
b0FjdGlvbkZsYWdzKi8sIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiAv
KmluQnVzTnVtYmVyKi8sIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBp
b0RhdGEpCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpwcm92aWRlU3BlYWtlckRhdGEo
QXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYg
dGltZVN0YW1wLCBVSW50MzIgLyppbkJ1c051bWJlciovLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMs
IEF1ZGlvQnVmZmVyTGlzdCYgaW9EYXRhKQogewotICAgIC8vIENhbGxlZCB3aGVuIHRoZSBhdWRp
byB1bml0IG5lZWRzIGRhdGEgdG8gcGxheSB0aHJvdWdoIHRoZSBzcGVha2Vycy4KLSNpZiAhTE9H
X0RJU0FCTEVECi0gICAgKyttX3NwZWFrZXJQcm9jc0NhbGxlZDsKLSNlbmRpZgotCi0gICAgaWYg
KG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+c2FtcGxlQ2FwYWNpdHkoKSA8IGluTnVtYmVyRnJhbWVz
KSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZVNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1No
YXJlZFVuaXQ6OnByb3ZpZGVTcGVha2VyRGF0YTogc3BlYWtlciBzYW1wbGUgYnVmZmVyIHNpemUg
KCVkKSB0b28gc21hbGwgZm9yIGFtb3VudCBvZiBzYW1wbGUgZGF0YSByZXF1ZXN0ZWQgKCVkKSEi
LCBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5KCksIChpbnQpaW5OdW1iZXJG
cmFtZXMpOwotICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB0aGUgY2FwdHVyZSwgd2Ugc2hv
dWxkIHRodXMgZWl0aGVyIHJlY29uZmlndXJlIHRoZSBhdWRpbyB1bml0IG9yIG5vdGlmeSBhbGwg
Y2xpZW50cyB0aGF0IGNhcHR1cmUgaXMgZmFpbGluZy4KLSAgICAgICAgcmV0dXJuIGtBdWRpb19Q
YXJhbUVycm9yOworICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jay50cnlMb2Nr
KCkpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwgc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihpbk51bWJlckZyYW1lcyAqIG1fc3BlYWtlclByb2NGb3JtYXQuYnl0
ZXNQZXJGcmFtZSgpKSk7CisgICAgICAgIGZsYWdzID0ga0F1ZGlvVW5pdFJlbmRlckFjdGlvbl9P
dXRwdXRJc1NpbGVuY2U7CisgICAgICAgIHJldHVybiBub0VycjsKICAgICB9CiAKLSAgICBpZiAo
bV9hY3RpdmVTb3VyY2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBkb3Vi
bGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlvICogdGltZVN0YW1wLm1I
b3N0VGltZTsKLSAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGltZVN0YW1wLm1TYW1wbGVUaW1l
OwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjaGVja1RpbWVzdGFtcHModGltZVN0YW1wLCBzYW1w
bGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKLSNlbmRpZgotICAgIG1fc3BlYWtlclNhbXBsZUJ1
ZmZlci0+c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSk7Ci0KLSAgICBBdWRp
b0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QgPSBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPmJ1ZmZlckxp
c3QoKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVyTGlzdC5tTnVtYmVyQnVm
ZmVyczsgKytpKQotICAgICAgICBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldID0gaW9EYXRhLT5tQnVm
ZmVyc1tpXTsKLQotICAgIGJvb2wgZmlyc3RTb3VyY2UgPSB0cnVlOwotICAgIGZvciAoYXV0byYg
c291cmNlIDogbV9hY3RpdmVTb3VyY2VzKSB7Ci0gICAgICAgIHNvdXJjZS0+cHVsbFNhbXBsZXMo
YnVmZmVyTGlzdCwgaW5OdW1iZXJGcmFtZXMsIGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUs
IGZpcnN0U291cmNlID8gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpDb3B5IDogQXVkaW9TYW1wbGVE
YXRhU291cmNlOjpNaXgpOwotICAgICAgICBmaXJzdFNvdXJjZSA9IGZhbHNlOworICAgIExvY2tl
ciBsb2NrZXIgeyBBZG9wdExvY2ssIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAg
ICBpZiAoIW1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikgeworICAgICAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluTnVtYmVyRnJh
bWVzICogbV9zcGVha2VyUHJvY0Zvcm1hdC5ieXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgZmxh
Z3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAgICAgICAgcmV0
dXJuIG5vRXJyOwogICAgIH0KLQotICAgIHJldHVybiBub0VycjsKKyAgICByZXR1cm4gbV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyLT5wcm9kdWNlU3BlYWtlclNhbXBsZXMoaW5OdW1iZXJGcmFtZXMs
IGlvRGF0YSwgdGltZVN0YW1wLm1TYW1wbGVUaW1lLCB0aW1lU3RhbXAubUhvc3RUaW1lLCBmbGFn
cyk7CiB9CiAKIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNwZWFrZXJDYWxsYmFjayh2
b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3Ms
IGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBV
SW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQpAQCAtMzc5LDcg
KzM2OCw3IEBAIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNwZWFrZXJDYWxsYmFjayh2
b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0CiAgICAgQVNTRVJUKGlvQWN0aW9uRmxh
Z3MpOwogICAgIEFTU0VSVChpblRpbWVTdGFtcCk7CiAgICAgYXV0byBkYXRhU291cmNlID0gc3Rh
dGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAgICByZXR1cm4gZGF0
YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAs
IGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsKKyAgICByZXR1cm4gZGF0YVNv
dXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAsIGlu
QnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgKmlvRGF0YSk7CiB9CiAKIE9TU3RhdHVzIENvcmVB
dWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFt
cCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVy
TGlzdCogLyppb0RhdGEqLykKQEAgLTQ0MSw3ICs0MzAsNiBAQCB2b2lkIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXQoKQogICAgIH0KIAogICAgIG1fbWljcm9waG9uZVNhbXBs
ZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsK
ICNpZiAhTE9HX0RJU0FCTEVECiAgICAgbV9pb1VuaXROYW1lID0gZW1wdHlTdHJpbmcoKTsKICNl
bmRpZgpAQCAtNDkxLDggKzQ3OSwyMCBAQCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpz
dGFydEludGVybmFsKCkKIAogICAgIHVuZHVjaygpOwogCisgICAgeworICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9z
cGVha2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1
Y2VyLT5jYXB0dXJlVW5pdElzU3RhcnRpbmcoKTsKKyAgICB9CisKICAgICBlcnIgPSBQQUw6OkF1
ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsKICAgICBpZiAoZXJyKSB7CisgICAgICAgIHsK
KyAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2Nr
IH07CisgICAgICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAgICAg
ICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0b3BwZWQoKTsK
KyAgICAgICAgfQorCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRp
b1NoYXJlZFVuaXQ6OnN0YXJ0KCVwKSBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAgICAgICBj
bGVhbnVwQXVkaW9Vbml0KCk7CiAgICAgICAgIEFTU0VSVCghbV9pb1VuaXQpOwpAQCAtNTMxLDYg
KzUzMSwxMSBAQCB2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3BJbnRlcm5hbCgpCiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3Ao
JXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhp
cywgKGludCllcnIsIChjaGFyKikmZXJyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICB7
CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07
CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCisgICAgICAgICAgICBtX3Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SXNTdG9wcGVkKCk7CisgICAgfQogCiAg
ICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CiB9CkBAIC01NzMsNiArNTc4LDMzIEBAIE9TU3Rh
dHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqIGRl
dmljZUlEKQogICAgIHJldHVybiBlcnI7CiB9CiAKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
cmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXImIHByb2R1Y2VyKQoreworICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIq
IG9sZFByb2R1Y2VyOworICAgIGJvb2wgc2hvdWxkUmVjb25maWd1cmUgPSBoYXNBdWRpb1VuaXQo
KSAmJiBwcm9kdWNlci5mb3JtYXQoKSAhPSBtX3NwZWFrZXJQcm9jRm9ybWF0OworICAgIHsKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAg
ICAgICAgb2xkUHJvZHVjZXIgPSBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXI7CisgICAgICAgIGlm
ICghc2hvdWxkUmVjb25maWd1cmUgJiYgaXNQcm9kdWNpbmdEYXRhKCkgJiYgbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyICE9ICZwcm9kdWNlcikKKyAgICAgICAgICAgIHByb2R1Y2VyLmNhcHR1cmVV
bml0SXNTdGFydGluZygpOworICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPSAmcHJv
ZHVjZXI7CisgICAgfQorICAgIGlmIChvbGRQcm9kdWNlciAmJiBvbGRQcm9kdWNlciAhPSAmcHJv
ZHVjZXIpCisgICAgICAgIG9sZFByb2R1Y2VyLT5jYXB0dXJlVW5pdElzU3RvcHBlZCgpOworCisg
ICAgaWYgKHNob3VsZFJlY29uZmlndXJlKQorICAgICAgICByZWNvbmZpZ3VyZSgpOworfQorCit2
b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
KENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQoreworICAgIExvY2tl
ciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgaWYgKG1fc3Bl
YWtlclNhbXBsZXNQcm9kdWNlciAhPSAmcHJvZHVjZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9IG51bGxwdHI7Cit9CisKIHN0YXRpYyBDYXB0dXJl
U291cmNlT3JFcnJvciBpbml0aWFsaXplQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShSZWY8Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZT4mJiBzb3VyY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0
cmFpbnRzKQogewogICAgIGlmIChjb25zdHJhaW50cykgewpAQCAtNjc0LDYgKzcwNiwxNiBAQCB2
b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5OjpkZXZpY2VzQ2hhbmdlZChjb25zdCBW
ZWN0b3I8Q2FwdHVyZURldmljZT4mCiAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5pdCgpLmRl
dmljZXNDaGFuZ2VkKGRldmljZXMpOwogfQogCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VG
YWN0b3J5OjpyZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNh
bXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCit7CisgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5p
dCgpLnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihwcm9kdWNlcik7Cit9CisKK3ZvaWQg
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk6OnVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1By
b2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQoreworICAg
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKS51bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9k
dWNlcihwcm9kdWNlcik7Cit9CisKIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UoU3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZyYmIGxhYmVsLCBTdHJpbmcmJiBo
YXNoU2FsdCwgdWludDMyX3QgY2FwdHVyZURldmljZUlELCBCYXNlQXVkaW9TaGFyZWRVbml0KiBv
dmVycmlkZVVuaXQpCiAgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGU6OkF1ZGlvLCBXVEZNb3ZlKGxhYmVsKSwgV1RGTW92ZShkZXZpY2VJRCksIFdURk1v
dmUoaGFzaFNhbHQpKQogICAgICwgbV9jYXB0dXJlRGV2aWNlSUQoY2FwdHVyZURldmljZUlEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmgKaW5kZXggNWVjM2Q4ZWM5YjdlZTNlYjU1MWQw
YzA5ZWE5MzEwNWE2ZDg3OGIwZi4uMDJjNDM3ZDY5MWY1YjBmOWEzOTk2NGM2OGRiNTI4NWRlMzdl
MDE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0xMDIsOSArMTAyLDIw
IEBAIHByaXZhdGU6CiAgICAgQmFzZUF1ZGlvU2hhcmVkVW5pdCogbV9vdmVycmlkZVVuaXQgeyBu
dWxscHRyIH07CiB9OwogCitjbGFzcyBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Db3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyKCkg
PSBkZWZhdWx0OworICAgIC8vIE1haW4gdGhyZWFkCisgICAgdmlydHVhbCBjb25zdCBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVy
ZVVuaXRJc1N0YXJ0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlVW5pdElzU3Rv
cHBlZCgpID0gMDsKKyAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZC4KKyAgICB2aXJ0dWFsIE9TU3Rh
dHVzIHByb2R1Y2VTcGVha2VyU2FtcGxlcyhzaXplX3Qgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVy
TGlzdCYsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSwgQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uRmxhZ3MmKSA9IDA7Cit9OworCiBjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNl
RmFjdG9yeSA6IHB1YmxpYyBBdWRpb0NhcHR1cmVGYWN0b3J5IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkmIHNpbmdsZXRvbigpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSYgc2luZ2xldG9u
KCk7CiAKICAgICB2b2lkIGJlZ2luSW50ZXJydXB0aW9uKCk7CiAgICAgdm9pZCBlbmRJbnRlcnJ1
cHRpb24oKTsKQEAgLTExMiw2ICsxMjMsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRldmljZXND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYpOwogCisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNh
bXBsZXNQcm9kdWNlciYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5yZWdpc3RlclNwZWFr
ZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYpOworCiBw
cml2YXRlOgogICAgIENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZUF1ZGlvQ2FwdHVyZVNvdXJj
ZShjb25zdCBDYXB0dXJlRGV2aWNlJiwgU3RyaW5nJiYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMq
KSBvdmVycmlkZTsKICAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgYXVkaW9DYXB0dXJlRGV2aWNl
TWFuYWdlcigpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDUyYWU4ODE5MzcxYTNlZGQ2MGNkNzIw
Y2QwODRiYjNjODU3ZmE3Y2QuLmM1NGMxODRhNDBjMzdjZDEzYTZiY2M5MjVkMDc5NjZiODdlZTg2
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE5OCw3ICsxOTgsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9wcm9jZXNzLnNldFRDQ0lkZW50aXR5KCk7CiAgICAgfQogI2VuZGlmCi0KKyNpZiBQTEFURk9S
TShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5n
RGF0YShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpIGZpbmFsCisgICAgeworICAgICAg
ICBpZiAodHlwZSAhPSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbykKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9wcm9jZXNzLnN0YXJ0Q2FwdHVyaW5nQXVkaW8oKTsKKyAg
ICB9CisjZW5kaWYKICNpZiBIQVZFKElPU1VSRkFDRV9TRVRfT1dORVJTSElQX0lERU5USVRZKQog
ICAgIHN0ZDo6b3B0aW9uYWw8dGFza19pZF90b2tlbl90PiB3ZWJQcm9jZXNzSWRlbnRpdHlUb2tl
bigpIGNvbnN0IGZpbmFsCiAgICAgewpAQCAtODg3LDYgKzg5NCwyMCBAQCB2b2lkIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OnVwZGF0ZUNhcHR1cmVPcmlnaW4oY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaQogICAgIG1fY2FwdHVyZU9yaWdpbiA9IG9yaWdpbkRhdGEuc2VjdXJpdHlPcmln
aW4oKTsKIH0KIAorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
dm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdGFydENhcHR1cmluZ0F1ZGlvKCkKK3sK
KyAgICBncHVQcm9jZXNzKCkubm90aWZ5U3RhcnRDYXB0dXJpbmdBdWRpbygqdGhpcyk7Cit9CisK
K3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bm90aWZ5U3RhcnRDYXB0dXJpbmdBdWRp
byhHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBwcm9jZXNzKQoreworICAgIG1faXNMYXN0VG9D
YXB0dXJlQXVkaW8gPSB0aGlzID09ICZwcm9jZXNzOworICAgIGlmIChtX2F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcikKKyAgICAgICAgbV9hdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXItPm5vdGlmeUxhc3RUb0NhcHR1
cmVBdWRpb0NoYW5nZWQoKTsKK30KKyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogYm9v
bCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDYXB0dXJlQXR0cmlidXRpb25TdHJpbmco
KSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggYWU3OTUwNTI1ODYwZGUzY2Y2YTJiMTc4OGZlMzVhNWVh
YmRhNTY3ZC4uYThkMjc4OGNkYTdiYjdhOTY0NTdiZTY3NTMwZjZhMDc1MzFlMzFmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCkBAIC0xMzYsNiArMTM2LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93c0Rpc3BsYXlD
YXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NEaXNwbGF5Q2FwdHVyZTsgfQogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICB2b2lk
IHN0YXJ0Q2FwdHVyaW5nQXVkaW8oKTsKKyAgICB2b2lkIG5vdGlmeVN0YXJ0Q2FwdHVyaW5nQXVk
aW8oR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOworICAgIGJvb2wgaXNMYXN0VG9DYXB0dXJl
QXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2lzTGFzdFRvQ2FwdHVyZUF1ZGlvOyB9CisjZW5kaWYK
KwogI2lmIEVOQUJMRShBUFBfUFJJVkFDWV9SRVBPUlQpCiAgICAgdm9pZCBzZXRUQ0NJZGVudGl0
eSgpOwogI2VuZGlmCkBAIC0yODgsOSArMjk0LDEwIEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0o
Q09DT0EpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgc3RkOjp1bmlxdWVfcHRyPFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk+IG1fdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXRNYW5hZ2VyPiBtX2F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJu
YWxVbml0TWFuYWdlcjsKKyAgICBib29sIG1faXNMYXN0VG9DYXB0dXJlQXVkaW8geyBmYWxzZSB9
OworCiAgICAgUmVmPFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXI+IG1fc2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcjsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1l
ZGlhUmVjb3JkZXJNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyOwogI2VuZGlm
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9j
ZXNzLmNwcAppbmRleCBjMDc2ZGU0ZjhhMGFkMjliYjQyNTczMzE4NTViMGM2OTcwMTVkODQ4Li5h
N2VmZjljNDM2NWRkMDZhZDEwMDJkNDM4M2ZjZjUzM2ZkZmQ3M2JkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVVByb2Nlc3MuY3BwCkBAIC01MTIsNiArNTEyLDE0IEBAIHZvaWQgR1BVUHJv
Y2Vzczo6d2ViUHJvY2Vzc0Nvbm5lY3Rpb25Db3VudEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCh1aW50CiAgICAgY29tcGxldGlvbkhhbmRsZXIoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6b2JqZWN0Q291bnRGb3JUZXN0aW5nKCkpOwogfQogCisjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCit2b2lkIEdQVVByb2Nlc3M6Om5vdGlmeVN0YXJ0Q2Fw
dHVyaW5nQXVkaW8oR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgcHJvY2VzcykKK3sKKyAgICBm
b3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBtX3dlYlByb2Nlc3NDb25uZWN0aW9ucy52YWx1ZXMoKSkK
KyAgICAgICAgY29ubmVjdGlvbi0+bm90aWZ5U3RhcnRDYXB0dXJpbmdBdWRpbyhwcm9jZXNzKTsK
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9j
ZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5oCmluZGV4IGZhMjBi
NTY2YWM3YzI2NTVkZGM5YzJhMGIzMDQxOGY2ZjdmNDEwNTEuLjE5ZjMwMDg5ZWMxMWRiODAzMzhj
MWNmZDJiMGRiNjhlYjFkNmI2OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3Mu
aApAQCAtMTExLDYgKzExMSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdlYlByb2Nlc3NDb25u
ZWN0aW9uQ291bnRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYm
KTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZv
aWQgbm90aWZ5U3RhcnRDYXB0dXJpbmdBdWRpbyhHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJik7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIGxvd01lbW9yeUhhbmRsZXIoQ3JpdGljYWws
IFN5bmNocm9ub3VzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dl
YnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuY3BwCmluZGV4IDdhODdlMWQ0
MzdiNzMzZWQ3N2Q0MzA3MWFkNWJmMGEwMmJlMzc0NWYuLjcxY2FhZjM0ODBlMmQyNTc4NjI5NTcx
MzhjOTE1Njk4ZDYzZjUzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93
ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5jcHAKQEAgLTQzLDE2
ICs0MywxNSBAQAogI2luY2x1ZGUgIlNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0NBUmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViQXVkaW9CdWZmZXJMaXN0Lmg+CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8V2ViQ29yZS9BdWRpb1Nlc3Npb25J
T1MuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0IDogcHVibGlj
IENhbk1ha2VXZWFrUHRyPFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJu
YWxVbml0TWFuYWdlcjo6VW5pdD4geworY2xhc3MgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0CisgICAgOiBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5h
Z2VyOjpVbml0PgorICAgICwgcHVibGljIFdlYkNvcmU6OkNvcmVBdWRpb1NwZWFrZXJTYW1wbGVz
UHJvZHVjZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFVu
aXQoQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRJZGVudGlmaWVyLCBS
ZWY8SVBDOjpDb25uZWN0aW9uPiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNv
cmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk+JiYpOwpAQCAtNjQsMTIgKzYz
LDE3IEBAIHB1YmxpYzoKICAgICBPU1N0YXR1cyByZW5kZXIoc2l6ZV90IHNhbXBsZUNvdW50LCBB
dWRpb0J1ZmZlckxpc3QmLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUsIEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJik7CiAgICAgdm9pZCBub3RpZnlSZXNldCgpOwogCisg
ICAgdm9pZCBzZXRTaG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNlcihib29sKTsK
KwogcHJpdmF0ZToKICAgICB2b2lkIHN0b3JhZ2VDaGFuZ2VkKFNoYXJlZE1lbW9yeSosIGNvbnN0
IFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CiAKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIHZvaWQgY2F0ZWdvcnlEaWRDaGFuZ2UoV2ViQ29yZTo6QXVk
aW9TZXNzaW9uOjpDYXRlZ29yeVR5cGUpOwotI2VuZGlmCisgICAgLy8gQ29yZUF1ZGlvU3BlYWtl
clNhbXBsZXNQcm9kdWNlcgorICAgIGNvbnN0IFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYgZm9ybWF0KCkgZmluYWwgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgIHZvaWQg
Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCkgZmluYWw7CisgICAgdm9pZCBjYXB0dXJlVW5pdElzU3Rv
cHBlZCgpIGZpbmFsOworICAgIC8vIEJhY2tncm91bmQgdGhyZWFkLgorICAgIE9TU3RhdHVzIHBy
b2R1Y2VTcGVha2VyU2FtcGxlcyhzaXplX3Qgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYs
IHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSwgQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MmKSBmaW5hbDsKIAogICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOwpAQCAtODIsMTEgKzg2LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6Q0FSaW5nQnVmZmVyPiBtX3JpbmdCdWZmZXI7CiAjZW5kaWYKICAg
ICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGZsb2F0IG1fdm9sdW1lIHsgMS4wIH07Ci0gICAgV2ViQ29yZTo6QXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6UENNRm9ybWF0IG1fZm9ybWF0IHsgV2ViQ29yZTo6QXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6UENNRm9ybWF0OjpGbG9hdDMyIH07Ci0gICAgV2ViQ29yZTo6QXVkaW9TZXNzaW9uSU9T
OjpDYXRlZ29yeUNoYW5nZWRPYnNlcnZlciBtX2NhdGVnb3J5Q2hhbmdlT2JzZXJ2ZXI7Ci0jZW5k
aWYKKyAgICBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9kZXNjcmlwdGlvbjsK
KyAgICBib29sIG1fY2FwdHVyZVVuaXRJc1N0YXJ0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9z
aG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNlciB7IGZhbHNlIH07CiB9OwogCiBS
ZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlJl
bW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcihHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQpAQCAtMTMx
LDYgKzEzMywxMyBAQCB2b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0TWFuYWdlcjo6c2V0QXVkaW9PdXRwdXREZXZpYwogICAgICAgICB1bml0LT5zZXRB
dWRpb091dHB1dERldmljZShkZXZpY2VJZCk7CiB9CiAKK3ZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpub3RpZnlMYXN0VG9DYXB0dXJl
QXVkaW9DaGFuZ2VkKCkKK3sKKyAgICAvLyBGSVhNRTogV2hlbiBzdXBwb3J0aW5nIG11bHRpcGxl
IHVuaXRzIHRvIGRpZmZlcmVudCBzcGVha2Vycywgd2Ugc2hvdWxkIG9ubHkgc2VsZWN0IHRoZSB1
bml0IG1hdGNoaW5nIHRoZSBWUElPIG91dHB1dCBkZXZpY2UuCisgICAgZm9yIChhdXRvJiB1bml0
IDogbV91bml0cy52YWx1ZXMoKSkKKyAgICAgICAgdW5pdC0+c2V0U2hvdWxkUmVnaXN0ZXJBc1Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXIobV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmlzTGFzdFRv
Q2FwdHVyZUF1ZGlvKCkpOworfQorCiBzdGF0aWMgV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OlJlbmRlckNhbGxiYWNrIHJlbmRlckNhbGxiYWNrKFJl
bW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5p
dCYgdW5pdCkKIHsKICAgICByZXR1cm4gWyZ1bml0XShhdXRvIHNhbXBsZUNvdW50LCBhdXRvJiBs
aXN0LCBhdXRvIHNhbXBsZVRpbWUsIGF1dG8gaG9zdFRpbWUsIGF1dG8mIGZsYWdzKSB7CkBAIC0x
NDksOSArMTU4LDYgQEAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXRNYW5hZ2VyOjpVbml0OjpVbml0KEF1ZGlvTWVkaWFTdHIKICAgICA6IG1faWRlbnRpZmll
cihpZGVudGlmaWVyKQogICAgICwgbV9jb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCiAg
ICAgLCBtX2xvY2FsVW5pdChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklu
dGVybmFsVW5pdDo6Y3JlYXRlTG9jYWxJbnRlcm5hbFVuaXQocmVuZGVyQ2FsbGJhY2soKnRoaXMp
LCByZXNldENhbGxiYWNrKCp0aGlzKSkpCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAs
IG1fY2F0ZWdvcnlDaGFuZ2VPYnNlcnZlcihbdGhpc10oYXV0byYsIGF1dG8gY2F0ZWdvcnkpIHsg
Y2F0ZWdvcnlEaWRDaGFuZ2UoY2F0ZWdvcnkpOyB9KQotI2VuZGlmCiB7CiAgICAgbV9sb2NhbFVu
aXQtPnJldHJpZXZlRm9ybWF0RGVzY3JpcHRpb24oW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlz
IH0sIHRoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBkZXNjcmlwdGlv
bikgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIWRlc2NyaXB0aW9uKSB7CkBA
IC0xNjMsOSArMTY5LDYgQEAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRl
cm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpVbml0KEF1ZGlvTWVkaWFTdHIKICAgICAgICAgbV9mcmFt
ZUNodW5rU2l6ZSA9IHN0ZDo6bWF4KFdlYkNvcmU6OkF1ZGlvVXRpbGl0aWVzOjpyZW5kZXJRdWFu
dHVtU2l6ZSwgdGVuTXNTYW1wbGVTaXplKTsKICAgICAgICAgY2FsbGJhY2soKmRlc2NyaXB0aW9u
LCBtX2ZyYW1lQ2h1bmtTaXplKTsKICAgICB9KTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIFdlYkNvcmU6OkF1ZGlvU2Vzc2lvbklPUzo6YWRkQXVkaW9TZXNzaW9uQ2F0ZWdvcnlDaGFu
Z2VkT2JzZXJ2ZXIobV9jYXRlZ29yeUNoYW5nZU9ic2VydmVyKTsKLSNlbmRpZgogfQogCiBSZW1v
dGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6
On5Vbml0KCkKQEAgLTE3OCwyNSArMTgxLDUwIEBAIHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0Ojpub3RpZnlSZXNldCgpCiAg
ICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6UmVz
ZXRBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCB7IG1faWRlbnRpZmll
ciB9LCAwKTsKIH0KIAordm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklu
dGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnNldFNob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxl
c1Byb2R1Y2VyKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fc2hvdWxkUmVnaXN0ZXJBc1NwZWFr
ZXJTYW1wbGVzUHJvZHVjZXIgPT0gdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hv
dWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPSB2YWx1ZTsKKyAgICBpZiAoIW1f
aXNQbGF5aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaG91bGRSZWdpc3RlckFz
U3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAgICAgV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZUZhY3Rvcnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNl
cigqdGhpcyk7CisgICAgZWxzZQorICAgICAgICBtX2NhcHR1cmVVbml0SXNTdGFydGVkID0gZmFs
c2U7Cit9CisKIHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXRNYW5hZ2VyOjpVbml0OjpzdGFydChjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFu
ZGxlLCBjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCB1aW50NjRfdCBudW1iZXJPZkZyYW1lcywgSVBDOjpTZW1hcGhvcmUmJiBzZW1hcGhvcmUpCiB7
CiAgICAgaWYgKG1faXNQbGF5aW5nKQogICAgICAgICBzdG9wKCk7CiAKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIlJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFu
YWdlcjo6VW5pdDo6c3RhcnQgJXAgJWQgJWRcbiIsIHRoaXMsIG1faXNQbGF5aW5nLCBtX2NhcHR1
cmVVbml0SXNTdGFydGVkKTsKKwogICAgIG1fcmVhZE9mZnNldCA9IDA7CiAgICAgbV9nZW5lcmF0
ZU9mZnNldCA9IDA7CiAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwogICAgIG1fcmluZ0J1ZmZlciA9
IFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6YWRvcHRTdG9yYWdlKG1ha2VVbmlxdWVSZWY8UmVhZE9u
bHlTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZT4oaGFuZGxlKSwgZGVzY3JpcHRpb24sIG51bWJlck9m
RnJhbWVzKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICBtX3JlbmRlclNlbWFwaG9yZSA9IFdURk1v
dmUoc2VtYXBob3JlKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1fZm9ybWF0ID0g
ZGVzY3JpcHRpb24uZm9ybWF0KCk7Ci0jZW5kaWYKKyAgICBtX2Rlc2NyaXB0aW9uID0gZGVzY3Jp
cHRpb247CisKKyAgICBpZiAobV9zaG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNl
cikKKyAgICAgICAgV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk6OnNpbmds
ZXRvbigpLnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcigqdGhpcyk7CisKKyAgICBpZiAo
bV9jYXB0dXJlVW5pdElzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9sb2NhbFVu
aXQtPnN0YXJ0KCk7CiB9CiAKIHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpzdG9wKCkKIHsKICAgICBtX2lzUGxheWluZyA9
IGZhbHNlOworICAgIFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5OjpzaW5n
bGV0b24oKS51bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcigqdGhpcyk7CisgICAgaWYg
KG1fY2FwdHVyZVVuaXRJc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKICAgICBtX2xvY2FsVW5p
dC0+c3RvcCgpOwogfQogCkBAIC0yMDUsNyArMjMzLDcgQEAgdm9pZCBSZW1vdGVBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnNldEF1ZGlvT3V0
cHUKICAgICBtX2xvY2FsVW5pdC0+c2V0QXVkaW9PdXRwdXREZXZpY2UoZGV2aWNlSWQpOwogfQog
Ci1PU1N0YXR1cyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5p
dE1hbmFnZXI6OlVuaXQ6OnJlbmRlcihzaXplX3Qgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlz
dCYgbGlzdCwgdWludDY0X3QsIGRvdWJsZSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmKQor
T1NTdGF0dXMgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRN
YW5hZ2VyOjpVbml0OjpyZW5kZXIoc2l6ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3Qm
IGxpc3QsIHVpbnQ2NF90LCBkb3VibGUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBmbGFn
cykKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAKQEAgLTIxNCwxMSArMjQyLDkg
QEAgT1NTdGF0dXMgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVu
aXRNYW5hZ2VyOjpVbml0OjpyZW5kZXIoc2kKICAgICBpZiAobV9yaW5nQnVmZmVyLT5mZXRjaElm
SGFzRW5vdWdoRGF0YSgmbGlzdCwgc2FtcGxlQ291bnQsIG1fcmVhZE9mZnNldCkpIHsKICAgICAg
ICAgbV9yZWFkT2Zmc2V0ICs9IHNhbXBsZUNvdW50OwogICAgICAgICBzdGF0dXMgPSBub0VycjsK
LQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlmIChtX3ZvbHVtZSAhPSAxKQot
ICAgICAgICAgICAgV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4obGlz
dCwgbV92b2x1bWUsIG1fZm9ybWF0KTsKLSNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFdl
YkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChsaXN0LCBzdGF0aWNfY2FzdDxz
aXplX3Q+KHNhbXBsZUNvdW50ICogbV9kZXNjcmlwdGlvbi5ieXRlc1BlckZyYW1lKCkpKTsKKyAg
ICAgICAgZmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKICAg
ICB9CiAKICAgICBhdXRvIHJlcXVlc3RlZFNhbXBsZXNDb3VudCA9IG1fZ2VuZXJhdGVPZmZzZXQ7
CkBAIC0yMjksMTMgKzI1NSwyNSBAQCBPU1N0YXR1cyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnJlbmRlcihzaQogICAgIHJldHVy
biBzdGF0dXM7CiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBSZW1vdGVBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OmNhdGVn
b3J5RGlkQ2hhbmdlKFdlYkNvcmU6OkF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlIHR5cGUpCit2
b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdl
cjo6VW5pdDo6Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCkKIHsKLSAgICBtX3ZvbHVtZSA9IHR5cGUg
PT0gV2ViQ29yZTo6QXVkaW9TZXNzaW9uOjpDYXRlZ29yeVR5cGU6OlBsYXlBbmRSZWNvcmQgPyA1
IDogMTsKLSAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OmNhdGVnb3J5RGlkQ2hhbmdlICVk
LCBzZXR0aW5nIHZvbHVtZSB0byAlZiIsIChpbnQpdHlwZSwgbV92b2x1bWUpOworICAgIG1fY2Fw
dHVyZVVuaXRJc1N0YXJ0ZWQgPSB0cnVlOworICAgIGlmIChtX2lzUGxheWluZykKKyAgICAgICAg
bV9sb2NhbFVuaXQtPnN0b3AoKTsKK30KKwordm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OmNhcHR1cmVVbml0SXNTdG9wcGVk
KCkKK3sKKyAgICBtX2NhcHR1cmVVbml0SXNTdGFydGVkID0gZmFsc2U7CisgICAgaWYgKG1faXNQ
bGF5aW5nKQorICAgICAgICBtX2xvY2FsVW5pdC0+c3RhcnQoKTsKK30KKworLy8gQmFja2dyb3Vu
ZCB0aHJlYWQuCitPU1N0YXR1cyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklu
dGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnByb2R1Y2VTcGVha2VyU2FtcGxlcyhzaXplX3Qgc2Ft
cGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYgbGlzdCwgdWludDY0X3Qgc2FtcGxlVGltZSwgZG91
YmxlIGhvc3RUaW1lLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgZmxhZ3MpCit7CisgICAg
cmV0dXJuIHJlbmRlcihzYW1wbGVDb3VudCwgbGlzdCwgc2FtcGxlVGltZSwgaG9zdFRpbWUsIGZs
YWdzKTsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRN
YW5hZ2VyLmgKaW5kZXggNTJkYzhlZmRkYTk2ZDMzYjhkZjhlMGE2MTc4ZTlmOTkyNDk5YjdhOS4u
YmI3MmMwN2U2NGE1MDI2OTgxYzNkNDZhNTY2ZGJmZDZkZTg1NDJjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
TWFuYWdlci5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1VuaXRzKCkg
eyByZXR1cm4gIW1fdW5pdHMuaXNFbXB0eSgpOyB9CiAgICAgY2xhc3MgVW5pdDsKIAorICAgIHZv
aWQgbm90aWZ5TGFzdFRvQ2FwdHVyZUF1ZGlvQ2hhbmdlZCgpOworCiBwcml2YXRlOgogICAgIC8v
IE1lc3NhZ2VzCiAgICAgdm9pZCBjcmVhdGVVbml0KEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBX
ZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpPiYmIGNhbGxiYWNrKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKaW5kZXggODFjMGFjY2JlYjZiNzg5NWE3MTJkZDJi
NDQ4Yjg4YmNkZTQzZTA0MC4uY2FiYmQwOTVhZTZlN2M5YmY3ZDk5MzU1Y2Y2MTkwOTczODEzMzg0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKQEAgLTM1MCw2ICszNTAsNyBAQCB2b2lk
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OnN0YXJ0UHJvZHVjaW5nRGF0YShSZWFsdGlt
ZU1lZGlhU291cmNlSWRlbnRpZgogI2lmIEVOQUJMRShBUFBfUFJJVkFDWV9SRVBPUlQpCiAgICAg
bV9jb25uZWN0aW9uUHJveHktPnNldFRDQ0lkZW50aXR5KCk7CiAjZW5kaWYKKyAgICBtX2Nvbm5l
Y3Rpb25Qcm94eS0+c3RhcnRQcm9kdWNpbmdEYXRhKHByb3h5LT5zb3VyY2UoKS50eXBlKCkpOwog
ICAgIHByb3h5LT5zdGFydCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmgKaW5kZXggN2Fm
ZjQyNGQ1NDBkM2IxZmRlY2RhYmM4NjU1YzNjNTZjNTBhMTBlNS4uYTA5NDI5ZGY2NzkxZTkwZjg0
YTkzNDk1ZmIwZWQyODVjY2VkMGQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuaApAQCAtNjUs
NiArNjUsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEFQUF9QUklWQUNZX1JFUE9SVCkKICAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFRDQ0lkZW50aXR5KCkgeyB9CiAjZW5kaWYKKyAgICAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YShXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlKSB7IH0KICAgICB9OwogICAgIGV4cGxpY2l0IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHkoVW5pcXVlUmVmPENvbm5lY3Rpb25Qcm94eT4mJik7CiAgICAgflVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyUHJveHkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444845</attachid>
            <date>2021-11-19 12:38:11 -0800</date>
            <delta_ts>2021-11-22 00:43:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233316-20211119213809.patch</filename>
            <type>text/plain</type>
            <size>40786</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgxYWE3ZTE4MjAxZjk1
ZjM5MmE3ZWJhNDk2ODY3NDEzMGJjMWVkZC4uZDQxNzMxNTRiMjdjY2M1Yzc0NzhhYTFlZThlNTIz
ZjAyNDM3OWQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTExLTE5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBMZXQgUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0IHN3aXRjaCB0
byBWUElPIHVuaXQgaWYgVlBJTyBpcyBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYW4gZXh0ZXJuYWwgcHJvdmlk
ZXIgb2Ygc3BlYWtlciBkYXRhIHRvIHRoZSBhdWRpbyBjYXB0dXJlIHVuaXQuCisgICAgICAgIFdl
IHVzZSB0aGlzIGluIFdlYktpdCB0byByZW5kZXIgdGhlIE1lZGlhU3RyZWFtVHJhY2tpcyBvZiB0
aGUgcHJvY2VzcyBkb2luZyBjYXB0dXJlIHRocm91Z2ggVlBJTyB3aGVuIHJ1bm5pbmcuCisgICAg
ICAgIEluIGNhc2UgdGhlIGF1ZGlvIGNhcHR1cmUgdW5pdCBzcGVha2VyIGZvcm1hdCBpcyBub3Qg
bWF0Y2hpbmcgdGhlIHByb2R1Y2VyIGZvcm1hdCwgd2UgaGF2ZSB0byByZWNvbmZpZ3VyZSBhbmQg
YWxpZ24gd2l0aCB0aGUgcHJvZHVjZXIgZm9ybWF0LgorICAgICAgICBJbiBjYXNlLCBhdWRpbyBp
cyBiZWluZyByZW5kZXJlZCBieSB0aGUgYXVkaW8gY2FwdHVyZSB1bml0IGJ1dCBjYXB0dXJlIGlz
IHN0b3BwZWQsIHdlIGNvbnRpbnVlIHJ1bm5pbmcgdGhlIGF1ZGlvIGNhcHR1cmUgdW5pdC4KKyAg
ICAgICAgVGhpcyBhbGxvd3MgdG8gbXV0ZS91bm11dGUgbWljcm9waG9uZSB3aXRob3V0IGFueSBh
dWRpbyBnbGl0Y2guCisgICAgICAgIFdlIG1ha2Ugc3VyZSB0byBzdG9wIHRoZSBhdWRpbyBjYXB0
dXJlIHVuaXQgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZCBmb3IgcmVuZGVyaW5nIG9yIGNhcHR1
cmUuCisKKyAgICAgICAgSW4gY2FzZSB0aGUgdW5pdCBpcyBzdXNwZW5kZWQgYW5kIHdlIHJlc3Rh
cnQgYW4gYXVkaW8gc291cmNlLCB3ZSB3aWxsIHVuc3VzcGVuZCB0aGUgdW5pdCwgd2hpY2ggd2ls
bCB1bm11dGUgc291cmNlcy4KKyAgICAgICAgV2UgZG8gbm90IHdhbnQgdG8gc3RhcnQgYXVkaW8g
c291cmNlcyB3aXRoaW4gdGhlIHN0YXJ0IG9mIGFuIGF1ZGlvIHNvdXJjZS4KKyAgICAgICAgRm9y
IHRoYXQgcmVhc29uLCB3ZSB1bm11dGUgdGhlIHNvdXJjZXMgYXN5bmNocm9ub3VzbHkuCisKKyAg
ICAgICAgTWFudWFsbHkgdGVzdGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVk
aW9TaGFyZWRVbml0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFz
ZUF1ZGlvU2hhcmVkVW5pdC5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9D
b3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorCiAyMDIxLTExLTE3ICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVBsYXllckFWRm91bmRhdGlv
biBzaG91bGQgc3VwcG9ydCBydmZjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRmMTQzZWU1MDhkYjVmZTQ4MTZmODc3
MWMxMWNkMjc0ODkwNmI0NmYuLjNlYThlYjA4MThkNzJiYTJkMmI2ZDIxNzdjMTcyMTU3ODIwZjVl
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMTEtMTkgIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIExldCBSZW1vdGVBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQgc3dpdGNoIHRvIFZQSU8gdW5p
dCBpZiBWUElPIGlzIHJ1bm5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMzMxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdlIHRyYWNrIHdoaWNoIHByb2Nlc3MgaXMgdGhlIGxhc3QgdG8gc3RhcnQg
YXVkaW8gY2FwdHVyZS4KKyAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSByZWdpc3RlciBpdHMgUmVt
b3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0
IHRvIHRoZSBjYXB0dXJlIHVuaXQuCisgICAgICAgIFRoaXMgYWxsb3dzIFJlbW90ZUF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdCB0byBzd2l0Y2gg
YmV0d2VlbiBSZW1vdGVJTyBpZiBjYXB0dXJlIHVuaXQgZG9lcyBub3QgcnVuCisgICAgICAgIG9y
IHRoZSBjYXB0dXJlIHVuaXQgaWYgcnVubmluZy4KKyAgICAgICAgVGhpcyBhbGxvd3MgdG8gcmVt
b3ZlIHRoZSB4NSBnYWluIHdvcmthcm91bmQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5jcHA6
CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmg6CisgICAgICAgICogR1BVUHJvY2Vz
cy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuaDoKKwogMjAyMS0x
MS0xNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTWVkaWFQ
bGF5ZXJBVkZvdW5kYXRpb24gc2hvdWxkIHN1cHBvcnQgcnZmYwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVkNjdmOTA2ZThlZTA0
NzI4ODQyNGU0MDE1MjFlMjQ5NzkzM2EzNDIuLjNkOWZiNmM1YTYzNjlkZWFiOWRmNTVmZTQ3MTBl
ODE4NGVmM2Q3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEyMjcsNiArMTIyNyw3IEBACiAJCTQxRjA2MjE0MEY1RjE5MjYw
MEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyog
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovOyB9OwogCQk0MUYxRDIxRjBFRjM1QzJBMDBE
QTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDFGQUJEMkQxRjRERkU0QTAwNkE2Qzk3IC8qIERPTUNhY2hlRW5naW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUZBQkQyQjFG
NERGRTQyMDA2QTZDOTcgLyogRE9NQ2FjaGVFbmdpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUZDQ0MzQjI3NDY2NzU2MDA4OTJBRDYgLyog
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MUZDRDZCOTIzQ0UwMTU1MDBDNjI1NjcgLyogU2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTQ1OThC
RTIzQzhBQUI4MDAyQjlDQzggLyogU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGQ0Q2QkIyM0NFMDI3
NzAwQzYyNTY3IC8qIExvY2FsU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTQ1OThDMDIzQzhBRDc4MDAyQjlD
QzggLyogTG9jYWxTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MjdEQTcxRDEzNzM1REZBMDA3QzU3RkIg
LyogSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQyN0RBNzFCMTM3MzVERkEwMDdDNTdGQiAvKiBKU1NlcnZp
Y2VXb3JrZXJJbnRlcm5hbHMuY3BwICovOyB9OwpAQCAtMTg5NjIsMTEgKzE4OTYzLDExIEBACiAJ
CTFBNTY5Q0M0MEQ3RTJCNjAwMDdDMzk4MyAvKiBicmlkZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTU5QjU5NzcxMTEwODY1NTYwMDcxNTlFOCAvKiBq
c2MgKi8sCiAJCQkJMUE1NjlDRTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamMgKi8sCiAJCQkJNTk5
RTc1OEYxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oICovLAogCQkJCTFBNzFENTc5MEYzMzgx
OTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmNwcCAqLywKIAkJCQkxQTcxRDU3QTBGMzM4MTkw
MDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5oICovLAotCQkJCTU5QjU5NzcxMTEwODY1NTYwMDcx
NTlFOCAvKiBqc2MgKi8sCiAJCQkJMUE1NjlDRUYwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVf
YXJyYXkuY3BwICovLAogCQkJCTFBNTY5Q0YwMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2Fy
cmF5LmggKi8sCiAJCQkJMUE1NjlDRjEwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9k
LmNwcCAqLywKQEAgLTMyODU1LDYgKzMyODU2LDcgQEAKIAkJCQk1MTIwQkJBRjFGMUNFQ0U3MDBF
RkVCRjEgLyogQ29va2llU3RvcmFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjgw
MjAzNTFFOUU0N0JGMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJM0Y4MDIwMzcxRTlFNDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUZDQ0MzQjI3NDY2NzU2MDA4OTJB
RDYgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdBRkY0
MjIxRUZCMTQ0OTAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNEN0QzMzQ4MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGlu
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyRjEyOUUxOEMxNTc2RjAwNUM1NEFGIC8qIENvdW50
ZWRVc2VyQWN0aXZpdHkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQu
Y3BwCmluZGV4IDNiNmQ4M2IxMGM5MjRjZWEwOGRmYjExMDk1YWM5NTMzNzM3ZWZjZWQuLjU2MTc5
NTBiZWYxNTZjMGRiODQ1YWE3YTNmMDdiMTU5NzNkNWRlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hh
cmVkVW5pdC5jcHAKQEAgLTg0LDYgKzg0LDggQEAgdm9pZCBCYXNlQXVkaW9TaGFyZWRVbml0Ojpz
dGFydFByb2R1Y2luZ0RhdGEoKQogICAgIGlmIChtX3N1c3BlbmRlZCkKICAgICAgICAgcmVzdW1l
KCk7CiAKKyAgICBzZXRTaG91bGRQcm9kdWNlTWljcm9waG9uZVNhbXBsZXModHJ1ZSk7CisKICAg
ICBpZiAoKyttX3Byb2R1Y2luZ0NvdW50ICE9IDEpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTc3
LDYgKzE3OSwyMSBAQCB2b2lkIEJhc2VBdWRpb1NoYXJlZFVuaXQ6OnN0b3BQcm9kdWNpbmdEYXRh
KCkKICAgICBpZiAobV9wcm9kdWNpbmdDb3VudCAmJiAtLW1fcHJvZHVjaW5nQ291bnQpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGlmIChtX2lzUmVuZGVyaW5nQXVkaW8pIHsKKyAgICAgICAgc2V0
U2hvdWxkUHJvZHVjZU1pY3JvcGhvbmVTYW1wbGVzKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHN0b3BJbnRlcm5hbCgpOworICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKK30K
Kwordm9pZCBCYXNlQXVkaW9TaGFyZWRVbml0OjpzZXRJc1JlbmRlcmluZ0F1ZGlvKGJvb2wgdmFs
dWUpCit7CisgICAgbV9pc1JlbmRlcmluZ0F1ZGlvID0gdmFsdWU7CisgICAgaWYgKG1faXNSZW5k
ZXJpbmdBdWRpbyB8fCBtX3Byb2R1Y2luZ0NvdW50KQorICAgICAgICByZXR1cm47CisKICAgICBz
dG9wSW50ZXJuYWwoKTsKICAgICBjbGVhbnVwQXVkaW9Vbml0KCk7CiB9CkBAIC0yMTAsOCArMjI3
LDEzIEBAIE9TU3RhdHVzIEJhc2VBdWRpb1NoYXJlZFVuaXQ6OnJlc3VtZSgpCiAKICAgICBBU1NF
UlQoIW1fcHJvZHVjaW5nQ291bnQpOwogCi0gICAgZm9yRWFjaENsaWVudChbXShhdXRvJiBjbGll
bnQpIHsKLSAgICAgICAgY2xpZW50LnNldE11dGVkKGZhbHNlKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyB0aGlzIH1dIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhp
cyB8fCB3ZWFrVGhpcy0+bV9zdXNwZW5kZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgd2Vha1RoaXMtPmZvckVhY2hDbGllbnQoW10oYXV0byYgY2xpZW50KSB7CisgICAgICAgICAg
ICBjbGllbnQuc2V0TXV0ZWQoZmFsc2UpOworICAgICAgICB9KTsKICAgICB9KTsKIAogICAgIHJl
dHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmgKaW5kZXggMmEwMTY0OGJlYjQxMGRjMmYx
NGM5NTA3NTAzYWI4ODViYjBkMjcxZi4uZTI3NTM3ZDEyYTBkNmQ5NWQxOGFhM2EzNmYzMDJlYTFh
MGFjMjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5oCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw3ICs0Miw3
IEBAIGNsYXNzIENhcHR1cmVEZXZpY2U7CiBjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOwog
Y2xhc3MgUGxhdGZvcm1BdWRpb0RhdGE7CiAKLWNsYXNzIEJhc2VBdWRpb1NoYXJlZFVuaXQgewor
Y2xhc3MgQmFzZUF1ZGlvU2hhcmVkVW5pdCA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxCYXNlQXVk
aW9TaGFyZWRVbml0PiB7CiBwdWJsaWM6CiAgICAgQmFzZUF1ZGlvU2hhcmVkVW5pdCgpOwogICAg
IHZpcnR1YWwgfkJhc2VBdWRpb1NoYXJlZFVuaXQoKSA9IGRlZmF1bHQ7CkBAIC05OCw2ICs5OSwx
MiBAQCBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50SUQoKSBjb25zdCB7
IHJldHVybiBtX2NhcHR1cmluZ0RldmljZSA/IG1fY2FwdHVyaW5nRGV2aWNlLT5maXJzdCA6IGVt
cHR5U3RyaW5nKCk7IH0KICAgICB1aW50MzJfdCBjYXB0dXJlRGV2aWNlSUQoKSBjb25zdCB7IHJl
dHVybiBtX2NhcHR1cmluZ0RldmljZSA/IG1fY2FwdHVyaW5nRGV2aWNlLT5zZWNvbmQgOiAwOyB9
CiAKKyAgICB2b2lkIHNldElzUmVuZGVyaW5nQXVkaW8oYm9vbCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIHNldFNob3VsZFByb2R1Y2VNaWNyb3Bob25lU2FtcGxlcyhib29sIHZhbHVlKSB7IG1f
c2hvdWxkUHJvZHVjZU1pY3JvcGhvbmVTYW1wbGVzID0gdmFsdWU7IH0KKyAgICBib29sIHNob3Vs
ZFByb2R1Y2VNaWNyb3Bob25lU2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUHJvZHVj
ZU1pY3JvcGhvbmVTYW1wbGVzOyB9CisKIHByaXZhdGU6CiAgICAgT1NTdGF0dXMgc3RhcnRVbml0
KCk7CiAKQEAgLTEwNiw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAgIGludCBtX3NhbXBsZVJhdGU7
CiAgICAgYm9vbCBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX25lZWRzUmVjb25m
aWd1cmF0aW9uIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNSZW5kZXJpbmdBdWRpbyB7IGZhbHNl
IH07CiAKICAgICBpbnQzMl90IG1fcHJvZHVjaW5nQ291bnQgeyAwIH07CiAKQEAgLTExNCw2ICsx
MjIsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSo+IG1f
Y2xpZW50czsKICAgICBWZWN0b3I8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSo+IG1fYXVkaW9UaHJl
YWRDbGllbnRzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9hdWRpb1RocmVhZENsaWVudHNMb2NrKTsK
ICAgICBMb2NrIG1fYXVkaW9UaHJlYWRDbGllbnRzTG9jazsKKworICAgIGJvb2wgbV9zaG91bGRQ
cm9kdWNlTWljcm9waG9uZVNhbXBsZXMgeyB0cnVlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggOTZhYThjNGMy
NjE4NTU3OTNjNTg2ZDU4ZTc1MmM4MDUwODZkNTE2Yi4uZmIwMWQwZWFkMzNjOGY4OTkyNmUwZDY0
YjcxYjk2MjcxZGY5NTdmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcApA
QCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZUF1ZGlvU1BJLmg+CiAj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNzcsNiArNzgsMTAgQEAgcHVibGljOgogICAgIHN0
YXRpYyBCYXNlQXVkaW9TaGFyZWRVbml0JiBzaW5nbGV0b24oKSAgeyByZXR1cm4gdW5pdCgpOyB9
CiAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdCgpOwogCisgICAgdm9pZCByZWdpc3RlclNwZWFrZXJT
YW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYpOworICAgIHZv
aWQgdW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBs
ZXNQcm9kdWNlciYpOworICAgIGJvb2wgaXNSdW5uaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pb1Vu
aXRTdGFydGVkOyB9CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHNpemVfdCBwcmVmZXJyZWRJT0J1
ZmZlclNpemUoKTsKIApAQCAtMTAzLDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgT1NTdGF0dXMg
cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29u
c3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CiAK
ICAgICBzdGF0aWMgT1NTdGF0dXMgc3BlYWtlckNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1
ZGlvQnVmZmVyTGlzdCopOwotICAgIE9TU3RhdHVzIHByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUludDMyLCBVSW50
MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb3ZpZGVTcGVha2VyRGF0YShB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUludDMy
LCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCYpOwogCiAgICAgdm9pZCB1bmR1Y2soKTsKIApAQCAt
MTE5LDcgKzEyNCw2IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9sYXRlc3RNaWNUaW1lU3Rh
bXAgeyAwIH07CiAKICAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9zcGVha2VyUHJvY0Zv
cm1hdDsKLSAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBtX3NwZWFrZXJTYW1wbGVC
dWZmZXI7CiAKICAgICBkb3VibGUgbV9EVFNDb252ZXJzaW9uUmF0aW8geyAwIH07CiAKQEAgLTEz
MywxMyArMTM3LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGVja1RpbWVzdGFtcHMoY29uc3Qg
QXVkaW9UaW1lU3RhbXAmLCB1aW50NjRfdCwgZG91YmxlKTsKIAogICAgIFN0cmluZyBtX2lvVW5p
dE5hbWU7Ci0gICAgdWludDY0X3QgbV9zcGVha2VyUHJvY3NDYWxsZWQgeyAwIH07CiAjZW5kaWYK
IAogICAgIHVpbnQ2NF90IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkIHsgMCB9OwogICAgIHVpbnQ2
NF90IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkTGFzdFRpbWUgeyAwIH07CiAgICAgVGltZXIgbV92
ZXJpZnlDYXB0dXJpbmdUaW1lcjsKICAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgdmVyaWZ5
Q2FwdHVyZUludGVydmFsID0gMTBfczsKKworICAgIExvY2sgbV9zcGVha2VyU2FtcGxlc1Byb2R1
Y2VyTG9jazsKKyAgICBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyKiBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXIgV1RGX0dVQVJERURfQllfTE9DSyhtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXJMb2NrKSB7IG51bGxwdHIgfTsKIH07CiAKIENvcmVBdWRpb1NoYXJlZFVuaXQmIENvcmVBdWRp
b1NoYXJlZFVuaXQ6OnVuaXQoKQpAQCAtMjY4LDYgKzI3NCw5IEBAIHZvaWQgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6dW5kdWNrKCkKIAogT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmln
dXJlTWljcm9waG9uZVByb2MoKQogeworICAgIGlmICghc2hvdWxkUHJvZHVjZU1pY3JvcGhvbmVT
YW1wbGVzKCkpCisgICAgICAgIHJldHVybiBub0VycjsKKwogICAgIEFVUmVuZGVyQ2FsbGJhY2tT
dHJ1Y3QgY2FsbGJhY2sgPSB7IG1pY3JvcGhvbmVDYWxsYmFjaywgdGhpcyB9OwogICAgIGF1dG8g
ZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5p
dFByb3BlcnR5X1NldElucHV0Q2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0
QnVzLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykpOwogICAgIGlmIChlcnIpIHsKQEAgLTMw
NiwyMyArMzE1LDI4IEBAIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCkKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKLSAgICBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24gc3BlYWtlclByb2NGb3JtYXQgPSB7IH07Ci0KKyAgICBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24gc3BlYWtlclByb2NGb3JtYXQ7CiAgICAgVUludDMyIHNpemUg
PSBzaXplb2Yoc3BlYWtlclByb2NGb3JtYXQpOwotICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0R2V0
UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRp
b1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKTsK
LSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlu
cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7CisgICAgeworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAgICAgICAgc3BlYWtlclByb2NGb3JtYXQgPSBtX3Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXItPmZvcm1hdCgpLnN0cmVhbURlc2NyaXB0aW9uKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRHZXRQcm9wZXJ0eSht
X2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3Bl
X0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgJnNpemUpOworICAgICAgICAg
ICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8g
Z2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlID0gc2FtcGxlUmF0
ZSgpOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJh
dGUgPSBzYW1wbGVSYXRlKCk7CiAgICAgZXJyID0gUEFMOjpBdWRpb1VuaXRTZXRQcm9wZXJ0eSht
X2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3Bl
X0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgc2l6ZSk7CiAgICAgaWYgKGVy
cikgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRV
bml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0g
Zm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwog
ICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAotICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlciA9
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKHNwZWFrZXJQcm9jRm9ybWF0LCBwcmVmZXJy
ZWRJT0J1ZmZlclNpemUoKSAqIDIpOwogICAgIG1fc3BlYWtlclByb2NGb3JtYXQgPSBzcGVha2Vy
UHJvY0Zvcm1hdDsKIAogICAgIHJldHVybiBlcnI7CkBAIC0zMzYsNDIgKzM1MCwyMSBAQCB2b2lk
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFt
cCYgdGltZVN0YW1wLCB1aW50NgogfQogI2VuZGlmCiAKLU9TU3RhdHVzIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgLypp
b0FjdGlvbkZsYWdzKi8sIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiAv
KmluQnVzTnVtYmVyKi8sIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBp
b0RhdGEpCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpwcm92aWRlU3BlYWtlckRhdGEo
QXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYg
dGltZVN0YW1wLCBVSW50MzIgLyppbkJ1c051bWJlciovLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMs
IEF1ZGlvQnVmZmVyTGlzdCYgaW9EYXRhKQogewotICAgIC8vIENhbGxlZCB3aGVuIHRoZSBhdWRp
byB1bml0IG5lZWRzIGRhdGEgdG8gcGxheSB0aHJvdWdoIHRoZSBzcGVha2Vycy4KLSNpZiAhTE9H
X0RJU0FCTEVECi0gICAgKyttX3NwZWFrZXJQcm9jc0NhbGxlZDsKLSNlbmRpZgotCi0gICAgaWYg
KG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+c2FtcGxlQ2FwYWNpdHkoKSA8IGluTnVtYmVyRnJhbWVz
KSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZVNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkNvcmVBdWRpb1No
YXJlZFVuaXQ6OnByb3ZpZGVTcGVha2VyRGF0YTogc3BlYWtlciBzYW1wbGUgYnVmZmVyIHNpemUg
KCVkKSB0b28gc21hbGwgZm9yIGFtb3VudCBvZiBzYW1wbGUgZGF0YSByZXF1ZXN0ZWQgKCVkKSEi
LCBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5KCksIChpbnQpaW5OdW1iZXJG
cmFtZXMpOwotICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB0aGUgY2FwdHVyZSwgd2Ugc2hv
dWxkIHRodXMgZWl0aGVyIHJlY29uZmlndXJlIHRoZSBhdWRpbyB1bml0IG9yIG5vdGlmeSBhbGwg
Y2xpZW50cyB0aGF0IGNhcHR1cmUgaXMgZmFpbGluZy4KLSAgICAgICAgcmV0dXJuIGtBdWRpb19Q
YXJhbUVycm9yOworICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jay50cnlMb2Nr
KCkpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwgc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihpbk51bWJlckZyYW1lcyAqIG1fc3BlYWtlclByb2NGb3JtYXQuYnl0
ZXNQZXJGcmFtZSgpKSk7CisgICAgICAgIGZsYWdzID0ga0F1ZGlvVW5pdFJlbmRlckFjdGlvbl9P
dXRwdXRJc1NpbGVuY2U7CisgICAgICAgIHJldHVybiBub0VycjsKICAgICB9CiAKLSAgICBpZiAo
bV9hY3RpdmVTb3VyY2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBkb3Vi
bGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlvICogdGltZVN0YW1wLm1I
b3N0VGltZTsKLSAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGltZVN0YW1wLm1TYW1wbGVUaW1l
OwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjaGVja1RpbWVzdGFtcHModGltZVN0YW1wLCBzYW1w
bGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKLSNlbmRpZgotICAgIG1fc3BlYWtlclNhbXBsZUJ1
ZmZlci0+c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSk7Ci0KLSAgICBBdWRp
b0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QgPSBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPmJ1ZmZlckxp
c3QoKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVyTGlzdC5tTnVtYmVyQnVm
ZmVyczsgKytpKQotICAgICAgICBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldID0gaW9EYXRhLT5tQnVm
ZmVyc1tpXTsKLQotICAgIGJvb2wgZmlyc3RTb3VyY2UgPSB0cnVlOwotICAgIGZvciAoYXV0byYg
c291cmNlIDogbV9hY3RpdmVTb3VyY2VzKSB7Ci0gICAgICAgIHNvdXJjZS0+cHVsbFNhbXBsZXMo
YnVmZmVyTGlzdCwgaW5OdW1iZXJGcmFtZXMsIGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUs
IGZpcnN0U291cmNlID8gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpDb3B5IDogQXVkaW9TYW1wbGVE
YXRhU291cmNlOjpNaXgpOwotICAgICAgICBmaXJzdFNvdXJjZSA9IGZhbHNlOworICAgIExvY2tl
ciBsb2NrZXIgeyBBZG9wdExvY2ssIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAg
ICBpZiAoIW1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikgeworICAgICAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluTnVtYmVyRnJh
bWVzICogbV9zcGVha2VyUHJvY0Zvcm1hdC5ieXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgZmxh
Z3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAgICAgICAgcmV0
dXJuIG5vRXJyOwogICAgIH0KLQotICAgIHJldHVybiBub0VycjsKKyAgICByZXR1cm4gbV9zcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyLT5wcm9kdWNlU3BlYWtlclNhbXBsZXMoaW5OdW1iZXJGcmFtZXMs
IGlvRGF0YSwgdGltZVN0YW1wLm1TYW1wbGVUaW1lLCB0aW1lU3RhbXAubUhvc3RUaW1lLCBmbGFn
cyk7CiB9CiAKIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNwZWFrZXJDYWxsYmFjayh2
b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3Ms
IGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBV
SW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQpAQCAtMzc5LDcg
KzM3Miw3IEBAIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNwZWFrZXJDYWxsYmFjayh2
b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0CiAgICAgQVNTRVJUKGlvQWN0aW9uRmxh
Z3MpOwogICAgIEFTU0VSVChpblRpbWVTdGFtcCk7CiAgICAgYXV0byBkYXRhU291cmNlID0gc3Rh
dGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKLSAgICByZXR1cm4gZGF0
YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAs
IGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsKKyAgICByZXR1cm4gZGF0YVNv
dXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAsIGlu
QnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgKmlvRGF0YSk7CiB9CiAKIE9TU3RhdHVzIENvcmVB
dWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFt
cCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVy
TGlzdCogLyppb0RhdGEqLykKQEAgLTQ0MSw3ICs0MzQsNiBAQCB2b2lkIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXQoKQogICAgIH0KIAogICAgIG1fbWljcm9waG9uZVNhbXBs
ZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsK
ICNpZiAhTE9HX0RJU0FCTEVECiAgICAgbV9pb1VuaXROYW1lID0gZW1wdHlTdHJpbmcoKTsKICNl
bmRpZgpAQCAtNDc4LDYgKzQ3MCw4IEBAIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnJl
Y29uZmlndXJlQXVkaW9Vbml0KCkKIAogT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3Rh
cnRJbnRlcm5hbCgpCiB7CisgICAgc2V0U2hvdWxkUHJvZHVjZU1pY3JvcGhvbmVTYW1wbGVzKHRy
dWUpOworCiAgICAgT1NTdGF0dXMgZXJyOwogICAgIGlmICghbV9pb1VuaXQpIHsKICAgICAgICAg
ZXJyID0gc2V0dXBBdWRpb1VuaXQoKTsKQEAgLTQ5MSw4ICs0ODUsMjAgQEAgT1NTdGF0dXMgQ29y
ZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgpCiAKICAgICB1bmR1Y2soKTsKIAorICAg
IHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sg
fTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAgICAgICAgIG1f
c3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCk7CisgICAgfQor
CiAgICAgZXJyID0gUEFMOjpBdWRpb091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7CiAgICAgaWYg
KGVycikgeworICAgICAgICB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQ
cm9kdWNlcikKKyAgICAgICAgICAgICAgICBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPmNhcHR1
cmVVbml0SXNTdG9wcGVkKCk7CisgICAgICAgIH0KKwogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydCglcCkgQXVkaW9PdXRwdXRVbml0
U3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFy
KikmZXJyKTsKICAgICAgICAgY2xlYW51cEF1ZGlvVW5pdCgpOwogICAgICAgICBBU1NFUlQoIW1f
aW9Vbml0KTsKQEAgLTUzMSw2ICs1MzcsMTEgQEAgdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojpz
dG9wSW50ZXJuYWwoKQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRVbml0OjpzdG9wKCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICBpZiAobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
KQorICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdElzU3Rv
cHBlZCgpOworICAgIH0KIAogICAgIG1faW9Vbml0U3RhcnRlZCA9IGZhbHNlOwogfQpAQCAtNTcz
LDYgKzU4NCwzNSBAQCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpkZWZhdWx0T3V0cHV0
RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKICAgICByZXR1cm4gZXJyOwogfQogCit2b2lkIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVk
aW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJiBwcm9kdWNlcikKK3sKKyAgICBzZXRJc1JlbmRlcmlu
Z0F1ZGlvKHRydWUpOworCisgICAgQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciogb2xk
UHJvZHVjZXI7CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxl
c1Byb2R1Y2VyTG9jayB9OworICAgICAgICBvbGRQcm9kdWNlciA9IG1fc3BlYWtlclNhbXBsZXNQ
cm9kdWNlcjsKKyAgICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyID0gJnByb2R1Y2VyOwor
ICAgIH0KKyAgICBpZiAob2xkUHJvZHVjZXIgJiYgb2xkUHJvZHVjZXIgIT0gJnByb2R1Y2VyKQor
ICAgICAgICBvbGRQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0b3BwZWQoKTsKKworICAgIGlmICho
YXNBdWRpb1VuaXQoKSAmJiBwcm9kdWNlci5mb3JtYXQoKSAhPSBtX3NwZWFrZXJQcm9jRm9ybWF0
KQorICAgICAgICByZWNvbmZpZ3VyZSgpOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6
OnVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVz
UHJvZHVjZXImIHByb2R1Y2VyKQoreworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1f
c3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlciAhPSAmcHJvZHVjZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
c3BlYWtlclNhbXBsZXNQcm9kdWNlciA9IG51bGxwdHI7CisgICAgfQorCisgICAgc2V0SXNSZW5k
ZXJpbmdBdWRpbyhmYWxzZSk7Cit9CisKIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJvciBpbml0
aWFsaXplQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShSZWY8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4m
JiBzb3VyY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewogICAgIGlm
IChjb25zdHJhaW50cykgewpAQCAtNjc0LDYgKzcxNCwyMSBAQCB2b2lkIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2VGYWN0b3J5OjpkZXZpY2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8Q2FwdHVyZURldmlj
ZT4mCiAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5pdCgpLmRldmljZXNDaGFuZ2VkKGRldmlj
ZXMpOwogfQogCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5OjpyZWdpc3RlclNw
ZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciYgcHJv
ZHVjZXIpCit7CisgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5pdCgpLnJlZ2lzdGVyU3BlYWtl
clNhbXBsZXNQcm9kdWNlcihwcm9kdWNlcik7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZUZhY3Rvcnk6OnVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1Nw
ZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQoreworICAgIENvcmVBdWRpb1NoYXJlZFVu
aXQ6OnVuaXQoKS51bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihwcm9kdWNlcik7Cit9
CisKK2Jvb2wgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk6OmlzQXVkaW9DYXB0dXJlVW5p
dFJ1bm5pbmcoKQoreworICAgIHJldHVybiBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bml0KCkuaXNS
dW5uaW5nKCk7Cit9CisKIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OkNvcmVBdWRpb0NhcHR1cmVT
b3VyY2UoU3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZyYmIGxhYmVsLCBTdHJpbmcmJiBoYXNoU2Fs
dCwgdWludDMyX3QgY2FwdHVyZURldmljZUlELCBCYXNlQXVkaW9TaGFyZWRVbml0KiBvdmVycmlk
ZVVuaXQpCiAgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGU6OkF1ZGlvLCBXVEZNb3ZlKGxhYmVsKSwgV1RGTW92ZShkZXZpY2VJRCksIFdURk1vdmUoaGFz
aFNhbHQpKQogICAgICwgbV9jYXB0dXJlRGV2aWNlSUQoY2FwdHVyZURldmljZUlEKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9D
b3JlQXVkaW9DYXB0dXJlU291cmNlLmgKaW5kZXggNWVjM2Q4ZWM5YjdlZTNlYjU1MWQwYzA5ZWE5
MzEwNWE2ZDg3OGIwZi4uMmU5ZmRjMzVkZTFiMWNjYTQyYTI2YjI0YTMxOWY1YTQzYjQxZWExNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0xMDIsOSArMTAyLDIwIEBAIHBy
aXZhdGU6CiAgICAgQmFzZUF1ZGlvU2hhcmVkVW5pdCogbV9vdmVycmlkZVVuaXQgeyBudWxscHRy
IH07CiB9OwogCitjbGFzcyBDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5Db3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyKCkgPSBkZWZh
dWx0OworICAgIC8vIE1haW4gdGhyZWFkCisgICAgdmlydHVhbCBjb25zdCBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mIGZvcm1hdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZVVuaXRJ
c1N0YXJ0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlVW5pdElzU3RvcHBlZCgp
ID0gMDsKKyAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZC4KKyAgICB2aXJ0dWFsIE9TU3RhdHVzIHBy
b2R1Y2VTcGVha2VyU2FtcGxlcyhzaXplX3Qgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYs
IHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSwgQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MmKSA9IDA7Cit9OworCiBjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9y
eSA6IHB1YmxpYyBBdWRpb0NhcHR1cmVGYWN0b3J5IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkmIHNpbmdsZXRvbigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSYgc2luZ2xldG9uKCk7CiAK
ICAgICB2b2lkIGJlZ2luSW50ZXJydXB0aW9uKCk7CiAgICAgdm9pZCBlbmRJbnRlcnJ1cHRpb24o
KTsKQEAgLTExMiw2ICsxMjMsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZXZpY2VzQ2hhbmdl
ZChjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVz
UHJvZHVjZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJTcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGlzQXVkaW9DYXB0dXJlVW5pdFJ1bm5pbmcoKTsKKwogcHJpdmF0ZToK
ICAgICBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3Qg
Q2FwdHVyZURldmljZSYsIFN0cmluZyYmLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKikgb3ZlcnJp
ZGU7CiAgICAgQ2FwdHVyZURldmljZU1hbmFnZXImIGF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIo
KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA1MmFlODgxOTM3MWEzZWRkNjBjZDcyMGNkMDg0YmIz
Yzg1N2ZhN2NkLi5jNTRjMTg0YTQwYzM3Y2QxM2E2YmNjOTI1ZDA3OTY2Yjg3ZWU4NjU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCkBAIC0xOTgsNyArMTk4LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIG1fcHJvY2Vz
cy5zZXRUQ0NJZGVudGl0eSgpOwogICAgIH0KICNlbmRpZgotCisjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKHR5
cGUgIT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fcHJvY2Vzcy5zdGFydENhcHR1cmluZ0F1ZGlvKCk7CisgICAgfQorI2Vu
ZGlmCiAjaWYgSEFWRShJT1NVUkZBQ0VfU0VUX09XTkVSU0hJUF9JREVOVElUWSkKICAgICBzdGQ6
Om9wdGlvbmFsPHRhc2tfaWRfdG9rZW5fdD4gd2ViUHJvY2Vzc0lkZW50aXR5VG9rZW4oKSBjb25z
dCBmaW5hbAogICAgIHsKQEAgLTg4Nyw2ICs4OTQsMjAgQEAgdm9pZCBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjp1cGRhdGVDYXB0dXJlT3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2kKICAgICBtX2NhcHR1cmVPcmlnaW4gPSBvcmlnaW5EYXRhLnNlY3VyaXR5T3JpZ2luKCk7CiB9
CiAKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKK3ZvaWQgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RhcnRDYXB0dXJpbmdBdWRpbygpCit7CisgICAgZ3B1
UHJvY2VzcygpLm5vdGlmeVN0YXJ0Q2FwdHVyaW5nQXVkaW8oKnRoaXMpOworfQorCit2b2lkIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om5vdGlmeVN0YXJ0Q2FwdHVyaW5nQXVkaW8oR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYgcHJvY2VzcykKK3sKKyAgICBtX2lzTGFzdFRvQ2FwdHVyZUF1
ZGlvID0gdGhpcyA9PSAmcHJvY2VzczsKKyAgICBpZiAobV9hdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIpCisgICAgICAgIG1fYXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLT5ub3RpZnlMYXN0VG9DYXB0dXJlQXVkaW9D
aGFuZ2VkKCk7Cit9CisjZW5kaWYKKwogI2lmICFQTEFURk9STShDT0NPQSkKIGJvb2wgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0Q2FwdHVyZUF0dHJpYnV0aW9uU3RyaW5nKCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5oCmluZGV4IGFlNzk1MDUyNTg2MGRlM2NmNmEyYjE3ODhmZTM1YTVlYWJkYTU2N2Qu
LmE4ZDI3ODhjZGE3YmI3YTk2NDU3YmU2NzUzMGY2YTA3NTMxZTMxZmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAt
MTM2LDYgKzEzNiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd3NEaXNwbGF5Q2FwdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzRGlzcGxheUNhcHR1cmU7IH0KICNlbmRpZgogCisjaWYg
UExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgdm9pZCBzdGFydENh
cHR1cmluZ0F1ZGlvKCk7CisgICAgdm9pZCBub3RpZnlTdGFydENhcHR1cmluZ0F1ZGlvKEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmKTsKKyAgICBib29sIGlzTGFzdFRvQ2FwdHVyZUF1ZGlvKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0xhc3RUb0NhcHR1cmVBdWRpbzsgfQorI2VuZGlmCisKICNpZiBF
TkFCTEUoQVBQX1BSSVZBQ1lfUkVQT1JUKQogICAgIHZvaWQgc2V0VENDSWRlbnRpdHkoKTsKICNl
bmRpZgpAQCAtMjg4LDkgKzI5NCwxMCBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKSAm
JiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5PiBtX3VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0TWFuYWdlcj4gbV9hdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1h
bmFnZXI7CisgICAgYm9vbCBtX2lzTGFzdFRvQ2FwdHVyZUF1ZGlvIHsgZmFsc2UgfTsKKwogICAg
IFJlZjxSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyPiBtX3NhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllck1hbmFnZXI7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVJlY29y
ZGVyTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlcjsKICNlbmRpZgogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5jcHAK
aW5kZXggYzA3NmRlNGY4YTBhZDI5YmI0MjU3MzMxODU1YjBjNjk3MDE1ZDg0OC4uYTdlZmY5YzQz
NjVkZDA2YWQxMDAyZDQzODNmY2Y1MzNmZGZkNzNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVQcm9jZXNzLmNwcApAQCAtNTEyLDYgKzUxMiwxNCBAQCB2b2lkIEdQVVByb2Nlc3M6Ondl
YlByb2Nlc3NDb25uZWN0aW9uQ291bnRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
dWludAogICAgIGNvbXBsZXRpb25IYW5kbGVyKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om9i
amVjdENvdW50Rm9yVGVzdGluZygpKTsKIH0KIAorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFC
TEUoTUVESUFfU1RSRUFNKQordm9pZCBHUFVQcm9jZXNzOjpub3RpZnlTdGFydENhcHR1cmluZ0F1
ZGlvKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIHByb2Nlc3MpCit7CisgICAgZm9yIChhdXRv
JiBjb25uZWN0aW9uIDogbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMudmFsdWVzKCkpCisgICAgICAg
IGNvbm5lY3Rpb24tPm5vdGlmeVN0YXJ0Q2FwdHVyaW5nQXVkaW8ocHJvY2Vzcyk7Cit9CisjZW5k
aWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaAppbmRleCBmYTIwYjU2NmFjN2My
NjU1ZGRjOWMyYTBiMzA0MThmNmY3ZjQxMDUxLi4xOWYzMDA4OWVjMTFkYjgwMzM4YzFjZmQyYjBk
YjY4ZWIxZDZiNjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJv
Y2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgKQEAgLTEx
MSw2ICsxMTEsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCB3ZWJQcm9jZXNzQ29ubmVjdGlvbkNv
dW50Rm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJik7CiAKKyNp
ZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICB2b2lkIG5vdGlm
eVN0YXJ0Q2FwdHVyaW5nQXVkaW8oR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOworI2VuZGlm
CisKIHByaXZhdGU6CiAgICAgdm9pZCBsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsLCBTeW5jaHJv
bm91cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVt
b3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLmNwcAppbmRleCA3YTg3ZTFkNDM3YjczM2Vk
NzdkNDMwNzFhZDViZjBhMDJiZTM3NDVmLi4zMzhmOGIzMGNjNzFiYTI5NThkMjMxZGUzYjJiODk1
M2QxN2ZlNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1Jl
bW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuY3BwCkBAIC00MywxOSArNDMsMTgg
QEAKICNpbmNsdWRlICJTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DQVJpbmdC
dWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1dlYkF1ZGlvQnVmZmVyTGlzdC5oPgogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9TZXNzaW9uSU9TLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFJlbW90ZUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdCA6IHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1h
bmFnZXI6OlVuaXQ+IHsKK2NsYXNzIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
SW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdAorICAgIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJl
bW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5p
dD4KKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBVbml0KEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0SWRlbnRpZmllciwgUmVmPElQQzo6
Q29ubmVjdGlvbj4mJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpPiYmKTsKKyAgICBVbml0KEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0SWRlbnRpZmllciwgUmVmPElQQzo6Q29ubmVj
dGlvbj4mJiwgYm9vbCBzaG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNlciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24mLCBzaXplX3QpPiYmKTsKICAgICB+VW5pdCgpOwogCiAgICAgdm9pZCBzdGFydChjb25zdCBT
aGFyZWRNZW1vcnk6OkhhbmRsZSYsIGNvbnN0IFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYsIHVpbnQ2NF90IG51bWJlck9mRnJhbWVzLCBJUEM6OlNlbWFwaG9yZSYmKTsKQEAgLTY0
LDEyICs2MywxNyBAQCBwdWJsaWM6CiAgICAgT1NTdGF0dXMgcmVuZGVyKHNpemVfdCBzYW1wbGVD
b3VudCwgQXVkaW9CdWZmZXJMaXN0JiwgdWludDY0X3Qgc2FtcGxlVGltZSwgZG91YmxlIGhvc3RU
aW1lLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYpOwogICAgIHZvaWQgbm90aWZ5UmVzZXQo
KTsKIAorICAgIHZvaWQgc2V0U2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIo
Ym9vbCk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBzdG9yYWdlQ2hhbmdlZChTaGFyZWRNZW1vcnkq
LCBjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpOwogCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIGNhdGVnb3J5RGlkQ2hhbmdlKFdlYkNv
cmU6OkF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlKTsKLSNlbmRpZgorICAgIC8vIENvcmVBdWRp
b1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIKKyAgICBjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mIGZvcm1hdCgpIGZpbmFsIHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KKyAg
ICB2b2lkIGNhcHR1cmVVbml0SXNTdGFydGluZygpIGZpbmFsOworICAgIHZvaWQgY2FwdHVyZVVu
aXRJc1N0b3BwZWQoKSBmaW5hbDsKKyAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZC4KKyAgICBPU1N0
YXR1cyBwcm9kdWNlU3BlYWtlclNhbXBsZXMoc2l6ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZl
ckxpc3QmLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUsIEF1ZGlvVW5pdFJl
bmRlckFjdGlvbkZsYWdzJikgZmluYWw7CiAKICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckludGVybmFsVW5pdElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIFJlZjxJUEM6OkNv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKQEAgLTgyLDExICs4Niw4IEBAIHByaXZhdGU6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkNBUmluZ0J1ZmZlcj4gbV9yaW5nQnVmZmVyOwogI2Vu
ZGlmCiAgICAgYm9vbCBtX2lzUGxheWluZyB7IGZhbHNlIH07Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBmbG9hdCBtX3ZvbHVtZSB7IDEuMCB9OwotICAgIFdlYkNvcmU6OkF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCBtX2Zvcm1hdCB7IFdlYkNvcmU6OkF1ZGlvU3RyZWFt
RGVzY3JpcHRpb246OlBDTUZvcm1hdDo6RmxvYXQzMiB9OwotICAgIFdlYkNvcmU6OkF1ZGlvU2Vz
c2lvbklPUzo6Q2F0ZWdvcnlDaGFuZ2VkT2JzZXJ2ZXIgbV9jYXRlZ29yeUNoYW5nZU9ic2VydmVy
OwotI2VuZGlmCisgICAgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fZGVzY3Jp
cHRpb247CisgICAgYm9vbCBtX3Nob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
IHsgZmFsc2UgfTsKIH07CiAKIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0TWFuYWdlcjo6UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRl
cm5hbFVuaXRNYW5hZ2VyKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MpCkBAIC0xMDEsNyArMTAyLDcgQEAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjp+UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVQK
IHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5h
Z2VyOjpjcmVhdGVVbml0KEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
SWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNv
cmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk+JiYgY2FsbGJhY2spCiB7CiAg
ICAgQVNTRVJUKCFtX3VuaXRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBtX3VuaXRzLmFk
ZChpZGVudGlmaWVyLCBtYWtlVW5pcXVlUmVmPFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdD4oaWRlbnRpZmllciwgbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwgV1RGTW92ZShjYWxsYmFjaykpKTsKKyAgICBt
X3VuaXRzLmFkZChpZGVudGlmaWVyLCBtYWtlVW5pcXVlUmVmPFJlbW90ZUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdD4oaWRlbnRpZmllciwgbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwgbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmlzTGFzdFRvQ2FwdHVyZUF1ZGlvKCksIFdURk1vdmUoY2FsbGJhY2spKSk7CiB9
CiAKIHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRN
YW5hZ2VyOjpkZWxldGVVbml0KEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0SWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTMxLDYgKzEzMiwxMyBAQCB2b2lkIFJlbW90
ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6c2V0QXVk
aW9PdXRwdXREZXZpYwogICAgICAgICB1bml0LT5zZXRBdWRpb091dHB1dERldmljZShkZXZpY2VJ
ZCk7CiB9CiAKK3ZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXRNYW5hZ2VyOjpub3RpZnlMYXN0VG9DYXB0dXJlQXVkaW9DaGFuZ2VkKCkKK3sKKyAgICAv
LyBGSVhNRTogV2hlbiBzdXBwb3J0aW5nIG11bHRpcGxlIHVuaXRzIHRvIGRpZmZlcmVudCBzcGVh
a2Vycywgd2Ugc2hvdWxkIG9ubHkgc2VsZWN0IHRoZSB1bml0IG1hdGNoaW5nIHRoZSBWUElPIG91
dHB1dCBkZXZpY2UuCisgICAgZm9yIChhdXRvJiB1bml0IDogbV91bml0cy52YWx1ZXMoKSkKKyAg
ICAgICAgdW5pdC0+c2V0U2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIobV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmlzTGFzdFRvQ2FwdHVyZUF1ZGlvKCkpOworfQorCiBz
dGF0aWMgV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6
OlJlbmRlckNhbGxiYWNrIHJlbmRlckNhbGxiYWNrKFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdCYgdW5pdCkKIHsKICAgICByZXR1cm4g
WyZ1bml0XShhdXRvIHNhbXBsZUNvdW50LCBhdXRvJiBsaXN0LCBhdXRvIHNhbXBsZVRpbWUsIGF1
dG8gaG9zdFRpbWUsIGF1dG8mIGZsYWdzKSB7CkBAIC0xNDUsMTMgKzE1MywxMSBAQCBzdGF0aWMg
V2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OlJlc2V0
Q2FsbGJhY2sgcmVzZXRDYQogICAgIH07CiB9CiAKLVJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6VW5pdChBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckludGVybmFsVW5pdElkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmPElQQzo6
Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk+JiYgY2FsbGJhY2spCitS
ZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVu
aXQ6OlVuaXQoQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRJZGVudGlm
aWVyIGlkZW50aWZpZXIsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbiwgYm9vbCBz
aG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNlciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpPiYm
IGNhbGxiYWNrKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX2Nvbm5l
Y3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKICAgICAsIG1fbG9jYWxVbml0KFdlYkNvcmU6OkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVMb2NhbEludGVy
bmFsVW5pdChyZW5kZXJDYWxsYmFjaygqdGhpcyksIHJlc2V0Q2FsbGJhY2soKnRoaXMpKSkKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICwgbV9jYXRlZ29yeUNoYW5nZU9ic2VydmVyKFt0
aGlzXShhdXRvJiwgYXV0byBjYXRlZ29yeSkgeyBjYXRlZ29yeURpZENoYW5nZShjYXRlZ29yeSk7
IH0pCi0jZW5kaWYKKyAgICAsIG1fc2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXIoc2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCiB7CiAgICAgbV9sb2Nh
bFVuaXQtPnJldHJpZXZlRm9ybWF0RGVzY3JpcHRpb24oW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0
aGlzIH0sIHRoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBkZXNjcmlw
dGlvbikgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIWRlc2NyaXB0aW9uKSB7
CkBAIC0xNjMsOSArMTY5LDYgQEAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpVbml0KEF1ZGlvTWVkaWFTdHIKICAgICAgICAgbV9m
cmFtZUNodW5rU2l6ZSA9IHN0ZDo6bWF4KFdlYkNvcmU6OkF1ZGlvVXRpbGl0aWVzOjpyZW5kZXJR
dWFudHVtU2l6ZSwgdGVuTXNTYW1wbGVTaXplKTsKICAgICAgICAgY2FsbGJhY2soKmRlc2NyaXB0
aW9uLCBtX2ZyYW1lQ2h1bmtTaXplKTsKICAgICB9KTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIFdlYkNvcmU6OkF1ZGlvU2Vzc2lvbklPUzo6YWRkQXVkaW9TZXNzaW9uQ2F0ZWdvcnlD
aGFuZ2VkT2JzZXJ2ZXIobV9jYXRlZ29yeUNoYW5nZU9ic2VydmVyKTsKLSNlbmRpZgogfQogCiBS
ZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVu
aXQ6On5Vbml0KCkKQEAgLTE3OCw2ICsxODEsMTkgQEAgdm9pZCBSZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6Om5vdGlmeVJlc2V0KCkK
ICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpS
ZXNldEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0IHsgbV9pZGVudGlm
aWVyIH0sIDApOwogfQogCit2b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
SW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6c2V0U2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1w
bGVzUHJvZHVjZXIoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAobV9zaG91bGRSZWdpc3RlckFzU3Bl
YWtlclNhbXBsZXNQcm9kdWNlciA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
aG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNlciA9IHZhbHVlOworICAgIGlmICgh
bV9pc1BsYXlpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3VsZFJlZ2lzdGVy
QXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQorICAgICAgICBXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlRmFjdG9yeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1
Y2VyKCp0aGlzKTsKK30KKwogdm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnN0YXJ0KGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFu
ZGxlJiBoYW5kbGUsIGNvbnN0IFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIHVpbnQ2NF90IG51bWJlck9mRnJhbWVzLCBJUEM6OlNlbWFwaG9yZSYmIHNlbWFw
aG9yZSkKIHsKICAgICBpZiAobV9pc1BsYXlpbmcpCkBAIC0xODgsMTUgKzIwNCwyMSBAQCB2b2lk
IFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6
VW5pdDo6c3RhcnQoY29uc3QgUwogICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKICAgICBtX3JpbmdC
dWZmZXIgPSBXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmFkb3B0U3RvcmFnZShtYWtlVW5pcXVlUmVm
PFJlYWRPbmx5U2hhcmVkUmluZ0J1ZmZlclN0b3JhZ2U+KGhhbmRsZSksIGRlc2NyaXB0aW9uLCBu
dW1iZXJPZkZyYW1lcykubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgbV9yZW5kZXJTZW1hcGhvcmUg
PSBXVEZNb3ZlKHNlbWFwaG9yZSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX2Zv
cm1hdCA9IGRlc2NyaXB0aW9uLmZvcm1hdCgpOwotI2VuZGlmCisgICAgbV9kZXNjcmlwdGlvbiA9
IGRlc2NyaXB0aW9uOworCisgICAgaWYgKG1fc2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVz
UHJvZHVjZXIpIHsKKyAgICAgICAgV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rv
cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcigqdGhpcyk7Cisg
ICAgICAgIGlmIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeTo6c2luZ2xl
dG9uKCkuaXNBdWRpb0NhcHR1cmVVbml0UnVubmluZygpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIG1fbG9jYWxVbml0LT5zdGFydCgpOwogfQogCiB2b2lkIFJlbW90ZUF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6c3RvcCgp
CiB7CiAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICBXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlRmFjdG9yeTo6c2luZ2xldG9uKCkudW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJv
ZHVjZXIoKnRoaXMpOwogICAgIG1fbG9jYWxVbml0LT5zdG9wKCk7CiB9CiAKQEAgLTIwNSw3ICsy
MjcsNyBAQCB2b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0TWFuYWdlcjo6VW5pdDo6c2V0QXVkaW9PdXRwdQogICAgIG1fbG9jYWxVbml0LT5zZXRBdWRp
b091dHB1dERldmljZShkZXZpY2VJZCk7CiB9CiAKLU9TU3RhdHVzIFJlbW90ZUF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6cmVuZGVyKHNpemVf
dCBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiBsaXN0LCB1aW50NjRfdCwgZG91YmxlLCBB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYpCitPU1N0YXR1cyBSZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnJlbmRlcihzaXplX3Qg
c2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYgbGlzdCwgdWludDY0X3QsIGRvdWJsZSwgQXVk
aW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGZsYWdzKQogewogICAgIEFTU0VSVCghaXNNYWluUnVu
TG9vcCgpKTsKIApAQCAtMjE0LDExICsyMzYsOSBAQCBPU1N0YXR1cyBSZW1vdGVBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnJlbmRlcihzaQog
ICAgIGlmIChtX3JpbmdCdWZmZXItPmZldGNoSWZIYXNFbm91Z2hEYXRhKCZsaXN0LCBzYW1wbGVD
b3VudCwgbV9yZWFkT2Zmc2V0KSkgewogICAgICAgICBtX3JlYWRPZmZzZXQgKz0gc2FtcGxlQ291
bnQ7CiAgICAgICAgIHN0YXR1cyA9IG5vRXJyOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAgICAgaWYgKG1fdm9sdW1lICE9IDEpCi0gICAgICAgICAgICBXZWJDb3JlOjpBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q6OmFwcGx5R2FpbihsaXN0LCBtX3ZvbHVtZSwgbV9mb3JtYXQpOwotI2Vu
ZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0
Ojp6ZXJvQUJMKGxpc3QsIHN0YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlQ291bnQgKiBtX2Rlc2Ny
aXB0aW9uLmJ5dGVzUGVyRnJhbWUoKSkpOworICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOwogICAgIH0KIAogICAgIGF1dG8gcmVxdWVzdGVkU2Ft
cGxlc0NvdW50ID0gbV9nZW5lcmF0ZU9mZnNldDsKQEAgLTIyOSwxMyArMjQ5LDIzIEBAIE9TU3Rh
dHVzIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdl
cjo6VW5pdDo6cmVuZGVyKHNpCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi12b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6Y2F0ZWdvcnlEaWRDaGFuZ2UoV2ViQ29yZTo6QXVkaW9T
ZXNzaW9uOjpDYXRlZ29yeVR5cGUgdHlwZSkKK3ZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpjYXB0dXJlVW5pdElzU3RhcnRp
bmcoKQoreworICAgIGlmIChtX2lzUGxheWluZykKKyAgICAgICAgbV9sb2NhbFVuaXQtPnN0b3Ao
KTsKK30KKwordm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXI6OlVuaXQ6OmNhcHR1cmVVbml0SXNTdG9wcGVkKCkKK3sKKyAgICBpZiAobV9p
c1BsYXlpbmcpCisgICAgICAgIG1fbG9jYWxVbml0LT5zdGFydCgpOworfQorCisvLyBCYWNrZ3Jv
dW5kIHRocmVhZC4KK09TU3RhdHVzIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
SW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6cHJvZHVjZVNwZWFrZXJTYW1wbGVzKHNpemVfdCBz
YW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiBsaXN0LCB1aW50NjRfdCBzYW1wbGVUaW1lLCBk
b3VibGUgaG9zdFRpbWUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBmbGFncykKIHsKLSAg
ICBtX3ZvbHVtZSA9IHR5cGUgPT0gV2ViQ29yZTo6QXVkaW9TZXNzaW9uOjpDYXRlZ29yeVR5cGU6
OlBsYXlBbmRSZWNvcmQgPyA1IDogMTsKLSAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZW1vdGVB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OmNh
dGVnb3J5RGlkQ2hhbmdlICVkLCBzZXR0aW5nIHZvbHVtZSB0byAlZiIsIChpbnQpdHlwZSwgbV92
b2x1bWUpOworICAgIHJldHVybiByZW5kZXIoc2FtcGxlQ291bnQsIGxpc3QsIHNhbXBsZVRpbWUs
IGhvc3RUaW1lLCBmbGFncyk7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
SW50ZXJuYWxVbml0TWFuYWdlci5oCmluZGV4IDUyZGM4ZWZkZGE5NmQzM2I4ZGY4ZTBhNjE3OGU5
Zjk5MjQ5OWI3YTkuLmJiNzJjMDdlNjRhNTAyNjk4MWMzZDQ2YTU2NmRiZmQ2ZGU4NTQyY2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdE1hbmFnZXIuaApAQCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNVbml0cygpIHsgcmV0dXJuICFtX3VuaXRzLmlzRW1wdHkoKTsgfQogICAgIGNsYXNzIFVu
aXQ7CiAKKyAgICB2b2lkIG5vdGlmeUxhc3RUb0NhcHR1cmVBdWRpb0NoYW5nZWQoKTsKKwogcHJp
dmF0ZToKICAgICAvLyBNZXNzYWdlcwogICAgIHZvaWQgY3JlYXRlVW5pdChBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdElkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KT4m
JiBjYWxsYmFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9V
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDgxYzBhY2NiZWI2
Yjc4OTVhNzEyZGQyYjQ0OGI4OGJjZGU0M2UwNDAuLmNhYmJkMDk1YWU2ZTdjOWJmN2Q5OTM1NWNm
NjE5MDk3MzgxMzM4NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCkBAIC0zNTAsNiAr
MzUwLDcgQEAgdm9pZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpzdGFydFByb2R1Y2lu
Z0RhdGEoUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWYKICNpZiBFTkFCTEUoQVBQX1BSSVZBQ1lf
UkVQT1JUKQogICAgIG1fY29ubmVjdGlvblByb3h5LT5zZXRUQ0NJZGVudGl0eSgpOwogI2VuZGlm
CisgICAgbV9jb25uZWN0aW9uUHJveHktPnN0YXJ0UHJvZHVjaW5nRGF0YShwcm94eS0+c291cmNl
KCkudHlwZSgpKTsKICAgICBwcm94eS0+c3RhcnQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94
eS5oCmluZGV4IDdhZmY0MjRkNTQwZDNiMWZkZWNkYWJjODY1NWMzYzU2YzUwYTEwZTUuLmEwOTQy
OWRmNjc5MWU5MGY4NGE5MzQ5NWZiMGVkMjg1Y2NlZDBkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclBy
b3h5LmgKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShBUFBfUFJJVkFDWV9S
RVBPUlQpCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUQ0NJZGVudGl0eSgpIHsgfQogI2VuZGlm
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoV2ViQ29yZTo6UmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSkgeyB9CiAgICAgfTsKICAgICBleHBsaWNpdCBVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlclByb3h5KFVuaXF1ZVJlZjxDb25uZWN0aW9uUHJveHk+JiYpOwogICAgIH5V
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444950</attachid>
            <date>2021-11-22 00:43:50 -0800</date>
            <delta_ts>2021-12-01 05:45:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233316-20211122094346.patch</filename>
            <type>text/plain</type>
            <size>40265</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ0YWUwOGI5ZjZjNGJm
MDUxZDc3YWFkOGNjNWEzNDA4NzZjODZmNy4uNTViNGYwNDI1MjMwZjc3YWQ4MjdkMTI1NmQzMmQ1
YjQ3NGFiMTUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTExLTIyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBMZXQgUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0IHN3aXRjaCB0
byBWUElPIHVuaXQgaWYgVlBJTyBpcyBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYW4gZXh0ZXJuYWwgcHJvdmlk
ZXIgb2Ygc3BlYWtlciBkYXRhIHRvIHRoZSBhdWRpbyBjYXB0dXJlIHVuaXQuCisgICAgICAgIFdl
IHVzZSB0aGlzIGluIFdlYktpdCB0byByZW5kZXIgdGhlIE1lZGlhU3RyZWFtVHJhY2tpcyBvZiB0
aGUgcHJvY2VzcyBkb2luZyBjYXB0dXJlIHRocm91Z2ggVlBJTyB3aGVuIHJ1bm5pbmcuCisgICAg
ICAgIEluIGNhc2UgdGhlIGF1ZGlvIGNhcHR1cmUgdW5pdCBzcGVha2VyIGZvcm1hdCBpcyBub3Qg
bWF0Y2hpbmcgdGhlIHByb2R1Y2VyIGZvcm1hdCwgd2UgaGF2ZSB0byByZWNvbmZpZ3VyZSBhbmQg
YWxpZ24gd2l0aCB0aGUgcHJvZHVjZXIgZm9ybWF0LgorICAgICAgICBJbiBjYXNlLCBhdWRpbyBp
cyBiZWluZyByZW5kZXJlZCBieSB0aGUgYXVkaW8gY2FwdHVyZSB1bml0IGJ1dCBjYXB0dXJlIGlz
IHN0b3BwZWQsIHdlIGNvbnRpbnVlIHJ1bm5pbmcgdGhlIGF1ZGlvIGNhcHR1cmUgdW5pdC4KKyAg
ICAgICAgVGhpcyBhbGxvd3MgdG8gbXV0ZS91bm11dGUgbWljcm9waG9uZSB3aXRob3V0IGFueSBh
dWRpbyBnbGl0Y2guCisgICAgICAgIFdlIG1ha2Ugc3VyZSB0byBzdG9wIHRoZSBhdWRpbyBjYXB0
dXJlIHVuaXQgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZCBmb3IgcmVuZGVyaW5nIG9yIGNhcHR1
cmUuCisKKyAgICAgICAgSW4gY2FzZSB0aGUgdW5pdCBpcyBzdXNwZW5kZWQgYW5kIHdlIHJlc3Rh
cnQgYW4gYXVkaW8gc291cmNlLCB3ZSB3aWxsIHVuc3VzcGVuZCB0aGUgdW5pdCwgd2hpY2ggd2ls
bCB1bm11dGUgc291cmNlcy4KKyAgICAgICAgV2UgZG8gbm90IHdhbnQgdG8gc3RhcnQgYXVkaW8g
c291cmNlcyB3aXRoaW4gdGhlIHN0YXJ0IG9mIGFuIGF1ZGlvIHNvdXJjZS4KKyAgICAgICAgRm9y
IHRoYXQgcmVhc29uLCB3ZSB1bm11dGUgdGhlIHNvdXJjZXMgYXN5bmNocm9ub3VzbHkuCisKKyAg
ICAgICAgTWFudWFsbHkgdGVzdGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVk
aW9TaGFyZWRVbml0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFz
ZUF1ZGlvU2hhcmVkVW5pdC5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9D
b3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorCiAyMDIxLTExLTIxICBBbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gRW5hYmxl
IGJpZGkgY29udGVudCBmb3Igbm9uLWlubGluZS1ib3ggY2FzZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggODA2YTc0
MjlmNWE1ZWVhM2UzZTRhMjQ0MjJmZjEwZjBhYzUwMGE2Zi4uOWIyMWY4ZjFmNmVkMDE1YmUwYWJm
NTMxOWMyMmQ1YjMzZmQwZmFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMS0xMS0y
MiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgTGV0IFJlbW90
ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdCBz
d2l0Y2ggdG8gVlBJTyB1bml0IGlmIFZQSU8gaXMgcnVubmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMzE2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgdHJhY2sgd2hpY2ggcHJvY2VzcyBpcyB0
aGUgbGFzdCB0byBzdGFydCBhdWRpbyBjYXB0dXJlLgorICAgICAgICBJbiB0aGF0IGNhc2UsIHdl
IHJlZ2lzdGVyIGl0cyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXI6OlVuaXQgdG8gdGhlIGNhcHR1cmUgdW5pdC4KKyAgICAgICAgVGhpcyBhbGxv
d3MgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2Vy
OjpVbml0IHRvIHN3aXRjaCBiZXR3ZWVuIFJlbW90ZUlPIGlmIGNhcHR1cmUgdW5pdCBkb2VzIG5v
dCBydW4KKyAgICAgICAgb3IgdGhlIGNhcHR1cmUgdW5pdCBpZiBydW5uaW5nLgorICAgICAgICBU
aGlzIGFsbG93cyB0byByZW1vdmUgdGhlIHg1IGdhaW4gd29ya2Fyb3VuZC4KKworICAgICAgICAq
IEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgICogR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogR1BVUHJvY2Vz
cy9HUFVQcm9jZXNzLmNwcDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVVByb2Nlc3MuaDoKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckludGVybmFsVW5pdE1hbmFnZXIuY3BwOgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRj
L1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eS5oOgorCiAyMDIxLTExLTIwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gU2VuZCBXZWJHUFUgbWVzc2FnZXMgaW4gdGhlIHdl
YiBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggODc1NTc0NDA4ODQ2OTRmN2U3ZTMxMzI0MDdjM2ZjOTM4ZGRmZGVhYy4u
YjVlMjA0ZjMzZDNmMWY2NzBlNDM3YjBiOWVmMzVhNDRjMGZlOTE5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTIyNiw2ICsx
MjI2LDcgQEAKIAkJNDFGMDYyMTQwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgg
Ki87IH07CiAJCTQxRjFEMjFGMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjFE
MjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUZBQkQyRDFGNERGRTRB
MDA2QTZDOTcgLyogRE9NQ2FjaGVFbmdpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxRkFCRDJCMUY0REZFNDIwMDZBNkM5NyAvKiBET01DYWNoZUVu
Z2luZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTQxRkNDQzNCMjc0NjY3NTYwMDg5MkFENiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjNCQjU4MzFFNzA5
RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRkNENkI5MjNDRTAxNTUwMEM2MjU2
NyAvKiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNDU5OEJFMjNDOEFBQjgwMDJCOUNDOCAvKiBTYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0MUZDRDZCQjIzQ0UwMjc3MDBDNjI1NjcgLyogTG9jYWxTYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNDU5OEMwMjNDOEFENzgwMDJCOUNDOCAvKiBMb2NhbFNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQyN0RBNzFEMTM3MzVERkEwMDdDNTdGQiAvKiBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDI3REE3
MUIxMzczNURGQTAwN0M1N0ZCIC8qIEpTU2VydmljZVdvcmtlckludGVybmFscy5jcHAgKi87IH07
CkBAIC0zMjg1OCw2ICszMjg1OSw3IEBACiAJCQkJNTEyMEJCQUYxRjFDRUNFNzAwRUZFQkYxIC8q
IENvb2tpZVN0b3JhZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0Y4MDIwMzUxRTlF
NDdCRjAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFGQ0NDM0IyNzQ2Njc1NjAwODkyQUQ2IC8qIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3QUZGNDIyMUVGQjE0
NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRDdEMzM0ODFDN0ExNkJGMDAwNDEyOTMgLyogQ29yZVZpZGVvU29mdExpbmsuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MkYxMjlFMThDMTU3NkYwMDVDNTRBRiAvKiBDb3VudGVkVXNlckFj
dGl2aXR5LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcAppbmRl
eCAzYjZkODNiMTBjOTI0Y2VhMDhkZmIxMTA5NWFjOTUzMzczN2VmY2VkLi41NjE3OTUwYmVmMTU2
YzBkYjg0NWFhN2EzZjA3YjE1OTczZDVkZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQu
Y3BwCkBAIC04NCw2ICs4NCw4IEBAIHZvaWQgQmFzZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRQcm9k
dWNpbmdEYXRhKCkKICAgICBpZiAobV9zdXNwZW5kZWQpCiAgICAgICAgIHJlc3VtZSgpOwogCisg
ICAgc2V0U2hvdWxkUHJvZHVjZU1pY3JvcGhvbmVTYW1wbGVzKHRydWUpOworCiAgICAgaWYgKCsr
bV9wcm9kdWNpbmdDb3VudCAhPSAxKQogICAgICAgICByZXR1cm47CiAKQEAgLTE3Nyw2ICsxNzks
MjEgQEAgdm9pZCBCYXNlQXVkaW9TaGFyZWRVbml0OjpzdG9wUHJvZHVjaW5nRGF0YSgpCiAgICAg
aWYgKG1fcHJvZHVjaW5nQ291bnQgJiYgLS1tX3Byb2R1Y2luZ0NvdW50KQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAobV9pc1JlbmRlcmluZ0F1ZGlvKSB7CisgICAgICAgIHNldFNob3VsZFBy
b2R1Y2VNaWNyb3Bob25lU2FtcGxlcyhmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzdG9wSW50ZXJuYWwoKTsKKyAgICBjbGVhbnVwQXVkaW9Vbml0KCk7Cit9CisKK3ZvaWQg
QmFzZUF1ZGlvU2hhcmVkVW5pdDo6c2V0SXNSZW5kZXJpbmdBdWRpbyhib29sIHZhbHVlKQorewor
ICAgIG1faXNSZW5kZXJpbmdBdWRpbyA9IHZhbHVlOworICAgIGlmIChtX2lzUmVuZGVyaW5nQXVk
aW8gfHwgbV9wcm9kdWNpbmdDb3VudCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgc3RvcEludGVy
bmFsKCk7CiAgICAgY2xlYW51cEF1ZGlvVW5pdCgpOwogfQpAQCAtMjEwLDggKzIyNywxMyBAQCBP
U1N0YXR1cyBCYXNlQXVkaW9TaGFyZWRVbml0OjpyZXN1bWUoKQogCiAgICAgQVNTRVJUKCFtX3By
b2R1Y2luZ0NvdW50KTsKIAotICAgIGZvckVhY2hDbGllbnQoW10oYXV0byYgY2xpZW50KSB7Ci0g
ICAgICAgIGNsaWVudC5zZXRNdXRlZChmYWxzZSk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1RoaXMgPSBXZWFrUHRyIHsgdGhpcyB9XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgd2Vh
a1RoaXMtPm1fc3VzcGVuZGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHdlYWtU
aGlzLT5mb3JFYWNoQ2xpZW50KFtdKGF1dG8mIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50
LnNldE11dGVkKGZhbHNlKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiAKICAgICByZXR1cm4gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNl
QXVkaW9TaGFyZWRVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5oCmluZGV4IDJhMDE2NDhiZWI0MTBkYzJmMTRjOTUwNzUw
M2FiODg1YmIwZDI3MWYuLmUyNzUzN2QxMmEwZDZkOTVkMThhYTNhMzZmMzAyZWExYTBhYzI0Nzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNl
QXVkaW9TaGFyZWRVbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTWVk
aWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArNDIsNyBAQCBjbGFz
cyBDYXB0dXJlRGV2aWNlOwogY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTsKIGNsYXNzIFBs
YXRmb3JtQXVkaW9EYXRhOwogCi1jbGFzcyBCYXNlQXVkaW9TaGFyZWRVbml0IHsKK2NsYXNzIEJh
c2VBdWRpb1NoYXJlZFVuaXQgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8QmFzZUF1ZGlvU2hhcmVk
VW5pdD4gewogcHVibGljOgogICAgIEJhc2VBdWRpb1NoYXJlZFVuaXQoKTsKICAgICB2aXJ0dWFs
IH5CYXNlQXVkaW9TaGFyZWRVbml0KCkgPSBkZWZhdWx0OwpAQCAtOTgsNiArOTksMTIgQEAgcHJv
dGVjdGVkOgogICAgIGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudElEKCkgY29uc3QgeyByZXR1cm4g
bV9jYXB0dXJpbmdEZXZpY2UgPyBtX2NhcHR1cmluZ0RldmljZS0+Zmlyc3QgOiBlbXB0eVN0cmlu
ZygpOyB9CiAgICAgdWludDMyX3QgY2FwdHVyZURldmljZUlEKCkgY29uc3QgeyByZXR1cm4gbV9j
YXB0dXJpbmdEZXZpY2UgPyBtX2NhcHR1cmluZ0RldmljZS0+c2Vjb25kIDogMDsgfQogCisgICAg
dm9pZCBzZXRJc1JlbmRlcmluZ0F1ZGlvKGJvb2wpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBz
ZXRTaG91bGRQcm9kdWNlTWljcm9waG9uZVNhbXBsZXMoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZFBy
b2R1Y2VNaWNyb3Bob25lU2FtcGxlcyA9IHZhbHVlOyB9CisgICAgYm9vbCBzaG91bGRQcm9kdWNl
TWljcm9waG9uZVNhbXBsZXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFByb2R1Y2VNaWNyb3Bo
b25lU2FtcGxlczsgfQorCiBwcml2YXRlOgogICAgIE9TU3RhdHVzIHN0YXJ0VW5pdCgpOwogCkBA
IC0xMDYsNiArMTEzLDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zYW1wbGVSYXRlOwogICAgIGJv
b2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9uZWVkc1JlY29uZmlndXJhdGlv
biB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUmVuZGVyaW5nQXVkaW8geyBmYWxzZSB9OwogCiAg
ICAgaW50MzJfdCBtX3Byb2R1Y2luZ0NvdW50IHsgMCB9OwogCkBAIC0xMTQsNiArMTIyLDggQEAg
cHJpdmF0ZToKICAgICBIYXNoU2V0PENvcmVBdWRpb0NhcHR1cmVTb3VyY2UqPiBtX2NsaWVudHM7
CiAgICAgVmVjdG9yPENvcmVBdWRpb0NhcHR1cmVTb3VyY2UqPiBtX2F1ZGlvVGhyZWFkQ2xpZW50
cyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fYXVkaW9UaHJlYWRDbGllbnRzTG9jayk7CiAgICAgTG9j
ayBtX2F1ZGlvVGhyZWFkQ2xpZW50c0xvY2s7CisKKyAgICBib29sIG1fc2hvdWxkUHJvZHVjZU1p
Y3JvcGhvbmVTYW1wbGVzIHsgdHJ1ZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDk2YWE4YzRjMjYxODU1Nzkz
YzU4NmQ1OGU3NTJjODA1MDg2ZDUxNmIuLmZiMDFkMGVhZDMzYzhmODk5MjZlMGQ2NGI3MWI5NjI3
MWRmOTU3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgogI2luY2x1ZGUg
PHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAKQEAgLTc3LDYgKzc4LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQmFz
ZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xldG9uKCkgIHsgcmV0dXJuIHVuaXQoKTsgfQogICAgIENv
cmVBdWRpb1NoYXJlZFVuaXQoKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1By
b2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKKyAgICB2b2lkIHVucmVn
aXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXImKTsKKyAgICBib29sIGlzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRl
ZDsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyBzaXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXpl
KCk7CiAKQEAgLTEwMyw3ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIE9TU3RhdHVzIHByb2Nlc3NN
aWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlv
VGltZVN0YW1wJiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOwogCiAgICAgc3Rh
dGljIE9TU3RhdHVzIHNwZWFrZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9u
RmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZl
ckxpc3QqKTsKLSAgICBPU1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVy
QWN0aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRp
b0J1ZmZlckxpc3QqKTsKKyAgICBPU1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0
UmVuZGVyQWN0aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMy
LCBBdWRpb0J1ZmZlckxpc3QmKTsKIAogICAgIHZvaWQgdW5kdWNrKCk7CiAKQEAgLTExOSw3ICsx
MjQsNiBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9
OwogCiAgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7Ci0g
ICAgUmVmUHRyPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9zcGVha2VyU2FtcGxlQnVmZmVyOwog
CiAgICAgZG91YmxlIG1fRFRTQ29udmVyc2lvblJhdGlvIHsgMCB9OwogCkBAIC0xMzMsMTMgKzEz
NywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGlt
ZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7CiAKICAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwot
ICAgIHVpbnQ2NF90IG1fc3BlYWtlclByb2NzQ2FsbGVkIHsgMCB9OwogI2VuZGlmCiAKICAgICB1
aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKICAgICB1aW50NjRfdCBtX21p
Y3JvcGhvbmVQcm9jc0NhbGxlZExhc3RUaW1lIHsgMCB9OwogICAgIFRpbWVyIG1fdmVyaWZ5Q2Fw
dHVyaW5nVGltZXI7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIHZlcmlmeUNhcHR1cmVJ
bnRlcnZhbCA9IDEwX3M7CisKKyAgICBMb2NrIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2s7
CisgICAgQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciogbV9zcGVha2VyU2FtcGxlc1By
b2R1Y2VyIFdURl9HVUFSREVEX0JZX0xPQ0sobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jaykg
eyBudWxscHRyIH07CiB9OwogCiBDb3JlQXVkaW9TaGFyZWRVbml0JiBDb3JlQXVkaW9TaGFyZWRV
bml0Ojp1bml0KCkKQEAgLTI2OCw2ICsyNzQsOSBAQCB2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6
OnVuZHVjaygpCiAKIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3Jv
cGhvbmVQcm9jKCkKIHsKKyAgICBpZiAoIXNob3VsZFByb2R1Y2VNaWNyb3Bob25lU2FtcGxlcygp
KQorICAgICAgICByZXR1cm4gbm9FcnI7CisKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNh
bGxiYWNrID0geyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRoaXMgfTsKICAgICBhdXRvIGVyciA9IFBB
TDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0
eV9TZXRJbnB1dENhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNh
bGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKICAgICBpZiAoZXJyKSB7CkBAIC0zMDYsMjMgKzMx
NSwyOCBAQCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJv
YygpCiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0ID0geyB9OwotCisgICAgQXVkaW9TdHJlYW1CYXNp
Y0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0OwogICAgIFVJbnQzMiBzaXplID0gc2l6ZW9m
KHNwZWFrZXJQcm9jRm9ybWF0KTsKLSAgICBlcnIgPSBQQUw6OkF1ZGlvVW5pdEdldFByb3BlcnR5
KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2Nv
cGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0LCAmc2l6ZSk7Ci0gICAgaWYg
KGVycikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFy
ZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJl
YW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIp
OwotICAgICAgICByZXR1cm4gZXJyOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1f
c3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlcikKKyAgICAgICAgICAgIHNwZWFrZXJQcm9jRm9ybWF0ID0gbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyLT5mb3JtYXQoKS5zdHJlYW1EZXNjcmlwdGlvbigpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQs
IGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwg
b3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKTsKKyAgICAgICAgICAgIGlmIChl
cnIpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVk
aW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIGdldCBpbnB1
dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzcGVha2VyUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGUoKTsKKyAg
ICAgICAgfQogICAgIH0KIAotICAgIHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlID0gc2Ft
cGxlUmF0ZSgpOwogICAgIGVyciA9IFBBTDo6QXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQs
IGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwg
b3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsIHNpemUpOwogICAgIGlmIChlcnIpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29u
ZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKICAgICAgICAg
cmV0dXJuIGVycjsKICAgICB9CiAKLSAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXIgPSBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShzcGVha2VyUHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZm
ZXJTaXplKCkgKiAyKTsKICAgICBtX3NwZWFrZXJQcm9jRm9ybWF0ID0gc3BlYWtlclByb2NGb3Jt
YXQ7CiAKICAgICByZXR1cm4gZXJyOwpAQCAtMzM2LDQyICszNTAsMjEgQEAgdm9pZCBDb3JlQXVk
aW9TaGFyZWRVbml0OjpjaGVja1RpbWVzdGFtcHMoY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVT
dGFtcCwgdWludDYKIH0KICNlbmRpZgogCi1PU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpw
cm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIC8qaW9BY3Rpb25G
bGFncyovLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCBVSW50MzIgLyppbkJ1c051
bWJlciovLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQor
T1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzJiBmbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFt
cCwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1
ZmZlckxpc3QmIGlvRGF0YSkKIHsKLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gdW5pdCBu
ZWVkcyBkYXRhIHRvIHBsYXkgdGhyb3VnaCB0aGUgc3BlYWtlcnMuCi0jaWYgIUxPR19ESVNBQkxF
RAotICAgICsrbV9zcGVha2VyUHJvY3NDYWxsZWQ7Ci0jZW5kaWYKLQotICAgIGlmIChtX3NwZWFr
ZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5KCkgPCBpbk51bWJlckZyYW1lcykgewotICAg
ICAgICBpZiAobV9hY3RpdmVTb3VyY2VzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJDb3JlQXVkaW9TaGFyZWRVbml0
Ojpwcm92aWRlU3BlYWtlckRhdGE6IHNwZWFrZXIgc2FtcGxlIGJ1ZmZlciBzaXplICglZCkgdG9v
IHNtYWxsIGZvciBhbW91bnQgb2Ygc2FtcGxlIGRhdGEgcmVxdWVzdGVkICglZCkhIiwgbV9zcGVh
a2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBhY2l0eSgpLCAoaW50KWluTnVtYmVyRnJhbWVzKTsK
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgZmFpbHMgdGhlIGNhcHR1cmUsIHdlIHNob3VsZCB0aHVz
IGVpdGhlciByZWNvbmZpZ3VyZSB0aGUgYXVkaW8gdW5pdCBvciBub3RpZnkgYWxsIGNsaWVudHMg
dGhhdCBjYXB0dXJlIGlzIGZhaWxpbmcuCi0gICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJv
cjsKKyAgICBpZiAoIW1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sudHJ5TG9jaygpKSB7Cisg
ICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19jYXN0
PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVyRnJh
bWUoKSkpOworICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNT
aWxlbmNlOworICAgICAgICByZXR1cm4gbm9FcnI7CiAgICAgfQogCi0gICAgaWYgKG1fYWN0aXZl
U291cmNlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZG91YmxlIGFkanVz
dGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNpb25SYXRpbyAqIHRpbWVTdGFtcC5tSG9zdFRpbWU7
Ci0gICAgdWludDY0X3Qgc2FtcGxlVGltZSA9IHRpbWVTdGFtcC5tU2FtcGxlVGltZTsKLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgY2hlY2tUaW1lc3RhbXBzKHRpbWVTdGFtcCwgc2FtcGxlVGltZSwg
YWRqdXN0ZWRIb3N0VGltZSk7Ci0jZW5kaWYKLSAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNl
dFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOwotCi0gICAgQXVkaW9CdWZmZXJM
aXN0JiBidWZmZXJMaXN0ID0gbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7Ci0g
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJ1ZmZlckxpc3QubU51bWJlckJ1ZmZlcnM7ICsr
aSkKLSAgICAgICAgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXSA9IGlvRGF0YS0+bUJ1ZmZlcnNbaV07
Ci0KLSAgICBib29sIGZpcnN0U291cmNlID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIHNvdXJjZSA6
IG1fYWN0aXZlU291cmNlcykgewotICAgICAgICBzb3VyY2UtPnB1bGxTYW1wbGVzKGJ1ZmZlckxp
c3QsIGluTnVtYmVyRnJhbWVzLCBhZGp1c3RlZEhvc3RUaW1lLCBzYW1wbGVUaW1lLCBmaXJzdFNv
dXJjZSA/IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Q29weSA6IEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZTo6TWl4KTsKLSAgICAgICAgZmlyc3RTb3VyY2UgPSBmYWxzZTsKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgQWRvcHRMb2NrLCBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgaWYgKCFt
X3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
Ojp6ZXJvQUJMKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihpbk51bWJlckZyYW1lcyAqIG1f
c3BlYWtlclByb2NGb3JtYXQuYnl0ZXNQZXJGcmFtZSgpKSk7CisgICAgICAgIGZsYWdzID0ga0F1
ZGlvVW5pdFJlbmRlckFjdGlvbl9PdXRwdXRJc1NpbGVuY2U7CisgICAgICAgIHJldHVybiBub0Vy
cjsKICAgICB9Ci0KLSAgICByZXR1cm4gbm9FcnI7CisgICAgcmV0dXJuIG1fc3BlYWtlclNhbXBs
ZXNQcm9kdWNlci0+cHJvZHVjZVNwZWFrZXJTYW1wbGVzKGluTnVtYmVyRnJhbWVzLCBpb0RhdGEs
IHRpbWVTdGFtcC5tU2FtcGxlVGltZSwgdGltZVN0YW1wLm1Ib3N0VGltZSwgZmxhZ3MpOwogfQog
CiBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5S
ZWZDb24sIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBB
dWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGlu
TnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKQEAgLTM3OSw3ICszNzIsNyBA
QCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5S
ZWZDb24sIEF1ZGlvVW5pdFJlbmRlckFjdAogICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsKICAg
ICBBU1NFUlQoaW5UaW1lU3RhbXApOwogICAgIGF1dG8gZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0
PENvcmVBdWRpb1NoYXJlZFVuaXQqPihpblJlZkNvbik7Ci0gICAgcmV0dXJuIGRhdGFTb3VyY2Ut
PnByb3ZpZGVTcGVha2VyRGF0YSgqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBpbkJ1c051
bWJlciwgaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7CisgICAgcmV0dXJuIGRhdGFTb3VyY2UtPnBy
b3ZpZGVTcGVha2VyRGF0YSgqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBpbkJ1c051bWJl
ciwgaW5OdW1iZXJGcmFtZXMsICppb0RhdGEpOwogfQogCiBPU1N0YXR1cyBDb3JlQXVkaW9TaGFy
ZWRVbml0Ojpwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MmIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQz
MiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIC8q
aW9EYXRhKi8pCkBAIC00NDEsNyArNDM0LDYgQEAgdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojpj
bGVhbnVwQXVkaW9Vbml0KCkKICAgICB9CiAKICAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXIg
PSBudWxscHRyOwotICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CiAjaWYgIUxP
R19ESVNBQkxFRAogICAgIG1faW9Vbml0TmFtZSA9IGVtcHR5U3RyaW5nKCk7CiAjZW5kaWYKQEAg
LTQ3OCw2ICs0NzAsOCBAQCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpyZWNvbmZpZ3Vy
ZUF1ZGlvVW5pdCgpCiAKIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0SW50ZXJu
YWwoKQogeworICAgIHNldFNob3VsZFByb2R1Y2VNaWNyb3Bob25lU2FtcGxlcyh0cnVlKTsKKwog
ICAgIE9TU3RhdHVzIGVycjsKICAgICBpZiAoIW1faW9Vbml0KSB7CiAgICAgICAgIGVyciA9IHNl
dHVwQXVkaW9Vbml0KCk7CkBAIC00OTEsOCArNDg1LDIwIEBAIE9TU3RhdHVzIENvcmVBdWRpb1No
YXJlZFVuaXQ6OnN0YXJ0SW50ZXJuYWwoKQogCiAgICAgdW5kdWNrKCk7CiAKKyAgICB7CisgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAg
ICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCisgICAgICAgICAgICBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SXNTdGFydGluZygpOworICAgIH0KKwogICAgIGVy
ciA9IFBBTDo6QXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOwogICAgIGlmIChlcnIpIHsK
KyAgICAgICAgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQ
cm9kdWNlckxvY2sgfTsKKyAgICAgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIp
CisgICAgICAgICAgICAgICAgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyLT5jYXB0dXJlVW5pdElz
U3RvcHBlZCgpOworICAgICAgICB9CisKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRD
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZh
aWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7
CiAgICAgICAgIGNsZWFudXBBdWRpb1VuaXQoKTsKICAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7
CkBAIC01MzEsNiArNTM3LDExIEBAIHZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcEludGVy
bmFsKCkKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAo
JS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlckxvY2sgfTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAg
ICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJc1N0b3BwZWQoKTsK
KyAgICB9CiAKICAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKIH0KQEAgLTU3Myw2ICs1ODQs
MzUgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdE91dHB1dERldmljZSh1
aW50MzJfdCogZGV2aWNlSUQpCiAgICAgcmV0dXJuIGVycjsKIH0KIAordm9pZCBDb3JlQXVkaW9T
aGFyZWRVbml0OjpyZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3BlYWtl
clNhbXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCit7CisgICAgc2V0SXNSZW5kZXJpbmdBdWRpbyh0
cnVlKTsKKworICAgIENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIqIG9sZFByb2R1Y2Vy
OworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNl
ckxvY2sgfTsKKyAgICAgICAgb2xkUHJvZHVjZXIgPSBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXI7
CisgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9ICZwcm9kdWNlcjsKKyAgICB9Cisg
ICAgaWYgKG9sZFByb2R1Y2VyICYmIG9sZFByb2R1Y2VyICE9ICZwcm9kdWNlcikKKyAgICAgICAg
b2xkUHJvZHVjZXItPmNhcHR1cmVVbml0SXNTdG9wcGVkKCk7CisKKyAgICBpZiAoaGFzQXVkaW9V
bml0KCkgJiYgcHJvZHVjZXIuZm9ybWF0KCkgIT0gbV9zcGVha2VyUHJvY0Zvcm1hdCkKKyAgICAg
ICAgcmVjb25maWd1cmUoKTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bnJlZ2lz
dGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
JiBwcm9kdWNlcikKK3sKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVj
ZXIgIT0gJnByb2R1Y2VyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXIgPSBudWxscHRyOworICAgIH0KKworICAgIHNldElzUmVuZGVyaW5nQXVk
aW8oZmFsc2UpOworfQorCiBzdGF0aWMgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgaW5pdGlhbGl6ZUNv
cmVBdWRpb0NhcHR1cmVTb3VyY2UoUmVmPENvcmVBdWRpb0NhcHR1cmVTb3VyY2U+JiYgc291cmNl
LCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKICAgICBpZiAoY29uc3Ry
YWludHMpIHsKQEAgLTY3NCw2ICs3MTQsMjEgQEAgdm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNl
RmFjdG9yeTo6ZGV2aWNlc0NoYW5nZWQoY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+JgogICAg
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKS5kZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTsKIH0K
IAordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeTo6cmVnaXN0ZXJTcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQor
eworICAgIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKS5yZWdpc3RlclNwZWFrZXJTYW1wbGVz
UHJvZHVjZXIocHJvZHVjZXIpOworfQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0
b3J5Ojp1bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyJiBwcm9kdWNlcikKK3sKKyAgICBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bml0
KCkudW5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIocHJvZHVjZXIpOworfQorCitib29s
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5Ojppc0F1ZGlvQ2FwdHVyZVVuaXRSdW5uaW5n
KCkKK3sKKyAgICByZXR1cm4gQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5pdCgpLmlzUnVubmluZygp
OworfQorCiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlKFN0
cmluZyYmIGRldmljZUlELCBTdHJpbmcmJiBsYWJlbCwgU3RyaW5nJiYgaGFzaFNhbHQsIHVpbnQz
Ml90IGNhcHR1cmVEZXZpY2VJRCwgQmFzZUF1ZGlvU2hhcmVkVW5pdCogb3ZlcnJpZGVVbml0KQog
ICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRp
bywgV1RGTW92ZShsYWJlbCksIFdURk1vdmUoZGV2aWNlSUQpLCBXVEZNb3ZlKGhhc2hTYWx0KSkK
ICAgICAsIG1fY2FwdHVyZURldmljZUlEKGNhcHR1cmVEZXZpY2VJRCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZS5oCmluZGV4IDVlYzNkOGVjOWI3ZWUzZWI1NTFkMGMwOWVhOTMxMDVhNmQ4
NzhiMGYuLjJlOWZkYzM1ZGUxYjFjY2E0MmEyNmIyNGEzMTlmNWE0M2I0MWVhMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0
dXJlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaApAQCAtMTAyLDkgKzEwMiwyMCBAQCBwcml2YXRlOgog
ICAgIEJhc2VBdWRpb1NoYXJlZFVuaXQqIG1fb3ZlcnJpZGVVbml0IHsgbnVsbHB0ciB9OwogfTsK
IAorY2xhc3MgQ29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+Q29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlcigpID0gZGVmYXVsdDsKKyAg
ICAvLyBNYWluIHRocmVhZAorICAgIHZpcnR1YWwgY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uJiBmb3JtYXQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVVbml0SXNTdGFydGlu
ZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZVVuaXRJc1N0b3BwZWQoKSA9IDA7Cisg
ICAgLy8gQmFja2dyb3VuZCB0aHJlYWQuCisgICAgdmlydHVhbCBPU1N0YXR1cyBwcm9kdWNlU3Bl
YWtlclNhbXBsZXMoc2l6ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCB1aW50NjRf
dCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
JikgPSAwOworfTsKKwogY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkgOiBwdWJs
aWMgQXVkaW9DYXB0dXJlRmFjdG9yeSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIENvcmVBdWRpb0Nh
cHR1cmVTb3VyY2VGYWN0b3J5JiBzaW5nbGV0b24oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkmIHNpbmdsZXRvbigpOwogCiAgICAgdm9p
ZCBiZWdpbkludGVycnVwdGlvbigpOwogICAgIHZvaWQgZW5kSW50ZXJydXB0aW9uKCk7CkBAIC0x
MTIsNiArMTIzLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGV2aWNlc0NoYW5nZWQoY29uc3Qg
VmVjdG9yPENhcHR1cmVEZXZpY2U+Jik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lz
dGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9k
dWNlcihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0F1ZGlvQ2FwdHVyZVVuaXRSdW5uaW5nKCk7CisKIHByaXZhdGU6CiAgICAgQ2Fw
dHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IENhcHR1cmVE
ZXZpY2UmLCBTdHJpbmcmJiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopIG92ZXJyaWRlOwogICAg
IENhcHR1cmVEZXZpY2VNYW5hZ2VyJiBhdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggNTJhZTg4MTkzNzFhM2VkZDYwY2Q3MjBjZDA4NGJiM2M4NTdmYTdj
ZC4uYzU0YzE4NGE0MGMzN2NkMTNhNmJjYzkyNWQwNzk2NmI4N2VlODY1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMTk4LDcgKzE5OCwxNCBAQCBwcml2YXRlOgogICAgICAgICBtX3Byb2Nlc3Muc2V0VEND
SWRlbnRpdHkoKTsKICAgICB9CiAjZW5kaWYKLQorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGUgdHlwZSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmICh0eXBlICE9IFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBtX3Byb2Nlc3Muc3RhcnRDYXB0dXJpbmdBdWRpbygpOworICAgIH0KKyNlbmRpZgogI2lm
IEhBVkUoSU9TVVJGQUNFX1NFVF9PV05FUlNISVBfSURFTlRJVFkpCiAgICAgc3RkOjpvcHRpb25h
bDx0YXNrX2lkX3Rva2VuX3Q+IHdlYlByb2Nlc3NJZGVudGl0eVRva2VuKCkgY29uc3QgZmluYWwK
ICAgICB7CkBAIC04ODcsNiArODk0LDIwIEBAIHZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6dXBkYXRlQ2FwdHVyZU9yaWdpbihjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpCiAgICAg
bV9jYXB0dXJlT3JpZ2luID0gb3JpZ2luRGF0YS5zZWN1cml0eU9yaWdpbigpOwogfQogCisjaWYg
UExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCit2b2lkIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnN0YXJ0Q2FwdHVyaW5nQXVkaW8oKQoreworICAgIGdwdVByb2Nlc3Mo
KS5ub3RpZnlTdGFydENhcHR1cmluZ0F1ZGlvKCp0aGlzKTsKK30KKwordm9pZCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpub3RpZnlTdGFydENhcHR1cmluZ0F1ZGlvKEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIHByb2Nlc3MpCit7CisgICAgbV9pc0xhc3RUb0NhcHR1cmVBdWRpbyA9IHRo
aXMgPT0gJnByb2Nlc3M7CisgICAgaWYgKG1fYXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXRNYW5hZ2VyKQorICAgICAgICBtX2F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0TWFuYWdlci0+bm90aWZ5TGFzdFRvQ2FwdHVyZUF1ZGlvQ2hhbmdlZCgp
OworfQorI2VuZGlmCisKICNpZiAhUExBVEZPUk0oQ09DT0EpCiBib29sIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnNldENhcHR1cmVBdHRyaWJ1dGlvblN0cmluZygpIGNvbnN0CiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aAppbmRleCBhZTc5NTA1MjU4NjBkZTNjZjZhMmIxNzg4ZmUzNWE1ZWFiZGE1NjdkLi5hOGQyNzg4
Y2RhN2JiN2E5NjQ1N2JlNjc1MzBmNmEwNzUzMWUzMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTEzNiw2ICsx
MzYsMTIgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dzRGlzcGxheUNhcHR1cmUoKSBjb25zdCB7
IHJldHVybiBtX2FsbG93c0Rpc3BsYXlDYXB0dXJlOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KENPQ09BKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgc3RhcnRDYXB0dXJpbmdB
dWRpbygpOworICAgIHZvaWQgbm90aWZ5U3RhcnRDYXB0dXJpbmdBdWRpbyhHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzJik7CisgICAgYm9vbCBpc0xhc3RUb0NhcHR1cmVBdWRpbygpIGNvbnN0IHsg
cmV0dXJuIG1faXNMYXN0VG9DYXB0dXJlQXVkaW87IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFQ
UF9QUklWQUNZX1JFUE9SVCkKICAgICB2b2lkIHNldFRDQ0lkZW50aXR5KCk7CiAjZW5kaWYKQEAg
LTI4OCw5ICsyOTQsMTAgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXJQcm94eT4gbV91c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFn
ZXI+IG1fYXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOwor
ICAgIGJvb2wgbV9pc0xhc3RUb0NhcHR1cmVBdWRpbyB7IGZhbHNlIH07CisKICAgICBSZWY8UmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcj4gbV9zYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXJNYW5hZ2VyOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFn
ZXI+IG1fcmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuY3BwCmluZGV4IGMw
NzZkZTRmOGEwYWQyOWJiNDI1NzMzMTg1NWIwYzY5NzAxNWQ4NDguLmE3ZWZmOWM0MzY1ZGQwNmFk
MTAwMmQ0MzgzZmNmNTMzZmRmZDczYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJv
Y2Vzcy5jcHAKQEAgLTUxMiw2ICs1MTIsMTQgQEAgdm9pZCBHUFVQcm9jZXNzOjp3ZWJQcm9jZXNz
Q29ubmVjdGlvbkNvdW50Rm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQKICAg
ICBjb21wbGV0aW9uSGFuZGxlcihHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpvYmplY3RDb3Vu
dEZvclRlc3RpbmcoKSk7CiB9CiAKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKK3ZvaWQgR1BVUHJvY2Vzczo6bm90aWZ5U3RhcnRDYXB0dXJpbmdBdWRpbyhHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiBwcm9jZXNzKQoreworICAgIGZvciAoYXV0byYgY29ubmVj
dGlvbiA6IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnZhbHVlcygpKQorICAgICAgICBjb25uZWN0
aW9uLT5ub3RpZnlTdGFydENhcHR1cmluZ0F1ZGlvKHByb2Nlc3MpOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgKaW5kZXggMjk0OWZmOGU4NTcxMjVjY2M3NDhi
NWRhZWQwY2FmZGEwOWFhZTRmOC4uYjA2M2ZkMGNiYTM2ZDQ1NmM1NWU5ZTMwYTg4MmY5MDJhNGEx
MWQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5oCkBAIC0xMTYsNiArMTE2
LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2ViUHJvY2Vzc0Nvbm5lY3Rpb25Db3VudEZvclRl
c3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYpOwogCisjaWYgUExBVEZP
Uk0oQ09DT0EpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgdm9pZCBub3RpZnlTdGFydENh
cHR1cmluZ0F1ZGlvKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmKTsKKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIHZvaWQgbG93TWVtb3J5SGFuZGxlcihDcml0aWNhbCwgU3luY2hyb25vdXMpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0TWFuYWdlci5jcHAKaW5kZXggN2E4N2UxZDQzN2I3MzNlZDc3ZDQzMDcx
YWQ1YmYwYTAyYmUzNzQ1Zi4uMzM4ZjhiMzBjYzcxYmEyOTU4ZDIzMWRlM2IyYjg5NTNkMTdmZTVm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLmNwcApAQCAtNDMsMTkgKzQzLDE4IEBACiAjaW5j
bHVkZSAiU2hhcmVkUmluZ0J1ZmZlclN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ0FSaW5nQnVmZmVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9XZWJBdWRpb0J1ZmZlckxpc3QuaD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvU2Vzc2lvbklPUy5oPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpV
bml0PiB7CitjbGFzcyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXI6OlVuaXQKKyAgICA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW1vdGVBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ+CisgICAg
LCBwdWJsaWMgV2ViQ29yZTo6Q29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9kdWNlciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVW5pdChBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdElkZW50aWZpZXIsIFJlZjxJUEM6OkNvbm5lY3Rp
b24+JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uJiwgc2l6ZV90KT4mJik7CisgICAgVW5pdChBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdElkZW50aWZpZXIsIFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYs
IGJvb2wgc2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6
ZV90KT4mJik7CiAgICAgflVuaXQoKTsKIAogICAgIHZvaWQgc3RhcnQoY29uc3QgU2hhcmVkTWVt
b3J5OjpIYW5kbGUmLCBjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCB1
aW50NjRfdCBudW1iZXJPZkZyYW1lcywgSVBDOjpTZW1hcGhvcmUmJik7CkBAIC02NCwxMiArNjMs
MTcgQEAgcHVibGljOgogICAgIE9TU3RhdHVzIHJlbmRlcihzaXplX3Qgc2FtcGxlQ291bnQsIEF1
ZGlvQnVmZmVyTGlzdCYsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSwgQXVk
aW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmKTsKICAgICB2b2lkIG5vdGlmeVJlc2V0KCk7CiAKKyAg
ICB2b2lkIHNldFNob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKGJvb2wpOwor
CiBwcml2YXRlOgogICAgIHZvaWQgc3RvcmFnZUNoYW5nZWQoU2hhcmVkTWVtb3J5KiwgY29uc3Qg
V2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KTsKIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBjYXRlZ29yeURpZENoYW5nZShXZWJDb3JlOjpBdWRp
b1Nlc3Npb246OkNhdGVnb3J5VHlwZSk7Ci0jZW5kaWYKKyAgICAvLyBDb3JlQXVkaW9TcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyCisgICAgY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uJiBmb3JtYXQoKSBmaW5hbCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CisgICAgdm9pZCBj
YXB0dXJlVW5pdElzU3RhcnRpbmcoKSBmaW5hbDsKKyAgICB2b2lkIGNhcHR1cmVVbml0SXNTdG9w
cGVkKCkgZmluYWw7CisgICAgLy8gQmFja2dyb3VuZCB0aHJlYWQuCisgICAgT1NTdGF0dXMgcHJv
ZHVjZVNwZWFrZXJTYW1wbGVzKHNpemVfdCBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0Jiwg
dWludDY0X3Qgc2FtcGxlVGltZSwgZG91YmxlIGhvc3RUaW1lLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGFncyYpIGZpbmFsOwogCiAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRl
cm5hbFVuaXRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBSZWY8SVBDOjpDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247CkBAIC04MiwxMSArODYsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpDQVJpbmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsKICNlbmRpZgogICAg
IGJvb2wgbV9pc1BsYXlpbmcgeyBmYWxzZSB9OwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgZmxvYXQgbV92b2x1bWUgeyAxLjAgfTsKLSAgICBXZWJDb3JlOjpBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOjpQQ01Gb3JtYXQgbV9mb3JtYXQgeyBXZWJDb3JlOjpBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOjpQQ01Gb3JtYXQ6OkZsb2F0MzIgfTsKLSAgICBXZWJDb3JlOjpBdWRpb1Nlc3Npb25JT1M6
OkNhdGVnb3J5Q2hhbmdlZE9ic2VydmVyIG1fY2F0ZWdvcnlDaGFuZ2VPYnNlcnZlcjsKLSNlbmRp
ZgorICAgIFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX2Rlc2NyaXB0aW9uOwor
ICAgIGJvb2wgbV9zaG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNlciB7IGZhbHNl
IH07CiB9OwogCiBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5p
dE1hbmFnZXI6OlJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
TWFuYWdlcihHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKQpAQCAtMTAxLDcgKzEwMiw3IEBAIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0TWFuYWdlcjo6flJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UCiB2b2lkIFJl
bW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6Y3Jl
YXRlVW5pdChBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdElkZW50aWZp
ZXIgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpPiYmIGNhbGxiYWNrKQogewogICAgIEFTU0VS
VCghbV91bml0cy5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAgbV91bml0cy5hZGQoaWRlbnRp
ZmllciwgbWFrZVVuaXF1ZVJlZjxSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklu
dGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ+KGlkZW50aWZpZXIsIG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jb25uZWN0aW9uKCksIFdURk1vdmUoY2FsbGJhY2spKSk7CisgICAgbV91bml0cy5h
ZGQoaWRlbnRpZmllciwgbWFrZVVuaXF1ZVJlZjxSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ+KGlkZW50aWZpZXIsIG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jb25uZWN0aW9uKCksIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5pc0xhc3RUb0NhcHR1cmVBdWRpbygpLCBXVEZNb3ZlKGNhbGxiYWNrKSkpOwogfQogCiB2b2lk
IFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6
ZGVsZXRlVW5pdChBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdElkZW50
aWZpZXIgaWRlbnRpZmllcikKQEAgLTEzMSw2ICsxMzIsMTMgQEAgdm9pZCBSZW1vdGVBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OnNldEF1ZGlvT3V0cHV0
RGV2aWMKICAgICAgICAgdW5pdC0+c2V0QXVkaW9PdXRwdXREZXZpY2UoZGV2aWNlSWQpOwogfQog
Cit2b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFu
YWdlcjo6bm90aWZ5TGFzdFRvQ2FwdHVyZUF1ZGlvQ2hhbmdlZCgpCit7CisgICAgLy8gRklYTUU6
IFdoZW4gc3VwcG9ydGluZyBtdWx0aXBsZSB1bml0cyB0byBkaWZmZXJlbnQgc3BlYWtlcnMsIHdl
IHNob3VsZCBvbmx5IHNlbGVjdCB0aGUgdW5pdCBtYXRjaGluZyB0aGUgVlBJTyBvdXRwdXQgZGV2
aWNlLgorICAgIGZvciAoYXV0byYgdW5pdCA6IG1fdW5pdHMudmFsdWVzKCkpCisgICAgICAgIHVu
aXQtPnNldFNob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5pc0xhc3RUb0NhcHR1cmVBdWRpbygpKTsKK30KKwogc3RhdGljIFdl
YkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpSZW5kZXJD
YWxsYmFjayByZW5kZXJDYWxsYmFjayhSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQmIHVuaXQpCiB7CiAgICAgcmV0dXJuIFsmdW5pdF0o
YXV0byBzYW1wbGVDb3VudCwgYXV0byYgbGlzdCwgYXV0byBzYW1wbGVUaW1lLCBhdXRvIGhvc3RU
aW1lLCBhdXRvJiBmbGFncykgewpAQCAtMTQ1LDEzICsxNTMsMTEgQEAgc3RhdGljIFdlYkNvcmU6
OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpSZXNldENhbGxiYWNr
IHJlc2V0Q2EKICAgICB9OwogfQogCi1SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OlVuaXQoQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJJbnRlcm5hbFVuaXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZjxJUEM6OkNvbm5lY3Rp
b24+JiYgY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpPiYmIGNhbGxiYWNrKQorUmVtb3RlQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpVbml0
KEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0SWRlbnRpZmllciBpZGVu
dGlmaWVyLCBSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24sIGJvb2wgc2hvdWxkUmVn
aXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KT4mJiBjYWxsYmFj
aykKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9jb25uZWN0aW9uKFdU
Rk1vdmUoY29ubmVjdGlvbikpCiAgICAgLCBtX2xvY2FsVW5pdChXZWJDb3JlOjpBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlTG9jYWxJbnRlcm5hbFVuaXQo
cmVuZGVyQ2FsbGJhY2soKnRoaXMpLCByZXNldENhbGxiYWNrKCp0aGlzKSkpCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fY2F0ZWdvcnlDaGFuZ2VPYnNlcnZlcihbdGhpc10oYXV0
byYsIGF1dG8gY2F0ZWdvcnkpIHsgY2F0ZWdvcnlEaWRDaGFuZ2UoY2F0ZWdvcnkpOyB9KQotI2Vu
ZGlmCisgICAgLCBtX3Nob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKHNob3Vs
ZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKQogewogICAgIG1fbG9jYWxVbml0LT5y
ZXRyaWV2ZUZvcm1hdERlc2NyaXB0aW9uKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0
aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZGVzY3JpcHRpb24pIG11
dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICFkZXNjcmlwdGlvbikgewpAQCAtMTYz
LDkgKzE2OSw2IEBAIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0TWFuYWdlcjo6VW5pdDo6VW5pdChBdWRpb01lZGlhU3RyCiAgICAgICAgIG1fZnJhbWVDaHVu
a1NpemUgPSBzdGQ6Om1heChXZWJDb3JlOjpBdWRpb1V0aWxpdGllczo6cmVuZGVyUXVhbnR1bVNp
emUsIHRlbk1zU2FtcGxlU2l6ZSk7CiAgICAgICAgIGNhbGxiYWNrKCpkZXNjcmlwdGlvbiwgbV9m
cmFtZUNodW5rU2l6ZSk7CiAgICAgfSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBX
ZWJDb3JlOjpBdWRpb1Nlc3Npb25JT1M6OmFkZEF1ZGlvU2Vzc2lvbkNhdGVnb3J5Q2hhbmdlZE9i
c2VydmVyKG1fY2F0ZWdvcnlDaGFuZ2VPYnNlcnZlcik7Ci0jZW5kaWYKIH0KIAogUmVtb3RlQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0Ojp+VW5p
dCgpCkBAIC0xNzgsNiArMTgxLDE5IEBAIHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0Ojpub3RpZnlSZXNldCgpCiAgICAgbV9j
b25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6UmVzZXRBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCB7IG1faWRlbnRpZmllciB9LCAw
KTsKIH0KIAordm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXI6OlVuaXQ6OnNldFNob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1
Y2VyKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fc2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1w
bGVzUHJvZHVjZXIgPT0gdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkUmVn
aXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIgPSB2YWx1ZTsKKyAgICBpZiAoIW1faXNQbGF5
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaG91bGRSZWdpc3RlckFzU3BlYWtl
clNhbXBsZXNQcm9kdWNlcikKKyAgICAgICAgV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUZhY3Rvcnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcigqdGhp
cyk7Cit9CisKIHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXRNYW5hZ2VyOjpVbml0OjpzdGFydChjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFu
ZGxlLCBjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCB1aW50NjRfdCBudW1iZXJPZkZyYW1lcywgSVBDOjpTZW1hcGhvcmUmJiBzZW1hcGhvcmUpCiB7
CiAgICAgaWYgKG1faXNQbGF5aW5nKQpAQCAtMTg4LDE1ICsyMDQsMjEgQEAgdm9pZCBSZW1vdGVB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnN0
YXJ0KGNvbnN0IFMKICAgICBtX2lzUGxheWluZyA9IHRydWU7CiAgICAgbV9yaW5nQnVmZmVyID0g
V2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjphZG9wdFN0b3JhZ2UobWFrZVVuaXF1ZVJlZjxSZWFkT25s
eVNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlPihoYW5kbGUpLCBkZXNjcmlwdGlvbiwgbnVtYmVyT2ZG
cmFtZXMpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIG1fcmVuZGVyU2VtYXBob3JlID0gV1RGTW92
ZShzZW1hcGhvcmUpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgbV9mb3JtYXQgPSBk
ZXNjcmlwdGlvbi5mb3JtYXQoKTsKLSNlbmRpZgorICAgIG1fZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbjsKKworICAgIGlmIChtX3Nob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
KSB7CisgICAgICAgIFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5OjpzaW5n
bGV0b24oKS5yZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoKnRoaXMpOworICAgICAgICBp
ZiAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk6OnNpbmdsZXRvbigpLmlz
QXVkaW9DYXB0dXJlVW5pdFJ1bm5pbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBtX2xvY2FsVW5pdC0+c3RhcnQoKTsKIH0KIAogdm9pZCBSZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnN0b3AoKQogewogICAg
IG1faXNQbGF5aW5nID0gZmFsc2U7CisgICAgV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUZhY3Rvcnk6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKCp0
aGlzKTsKICAgICBtX2xvY2FsVW5pdC0+c3RvcCgpOwogfQogCkBAIC0yMDUsNyArMjI3LDcgQEAg
dm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFn
ZXI6OlVuaXQ6OnNldEF1ZGlvT3V0cHUKICAgICBtX2xvY2FsVW5pdC0+c2V0QXVkaW9PdXRwdXRE
ZXZpY2UoZGV2aWNlSWQpOwogfQogCi1PU1N0YXR1cyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OnJlbmRlcihzaXplX3Qgc2FtcGxl
Q291bnQsIEF1ZGlvQnVmZmVyTGlzdCYgbGlzdCwgdWludDY0X3QsIGRvdWJsZSwgQXVkaW9Vbml0
UmVuZGVyQWN0aW9uRmxhZ3MmKQorT1NTdGF0dXMgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpyZW5kZXIoc2l6ZV90IHNhbXBsZUNv
dW50LCBBdWRpb0J1ZmZlckxpc3QmIGxpc3QsIHVpbnQ2NF90LCBkb3VibGUsIEF1ZGlvVW5pdFJl
bmRlckFjdGlvbkZsYWdzJiBmbGFncykKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7
CiAKQEAgLTIxNCwxMSArMjM2LDkgQEAgT1NTdGF0dXMgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpyZW5kZXIoc2kKICAgICBpZiAo
bV9yaW5nQnVmZmVyLT5mZXRjaElmSGFzRW5vdWdoRGF0YSgmbGlzdCwgc2FtcGxlQ291bnQsIG1f
cmVhZE9mZnNldCkpIHsKICAgICAgICAgbV9yZWFkT2Zmc2V0ICs9IHNhbXBsZUNvdW50OwogICAg
ICAgICBzdGF0dXMgPSBub0VycjsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
IGlmIChtX3ZvbHVtZSAhPSAxKQotICAgICAgICAgICAgV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZm
ZXJMaXN0OjphcHBseUdhaW4obGlzdCwgbV92b2x1bWUsIG1fZm9ybWF0KTsKLSNlbmRpZgorICAg
IH0gZWxzZSB7CisgICAgICAgIFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FC
TChsaXN0LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50ICogbV9kZXNjcmlwdGlvbi5i
eXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgZmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9u
X091dHB1dElzU2lsZW5jZTsKICAgICB9CiAKICAgICBhdXRvIHJlcXVlc3RlZFNhbXBsZXNDb3Vu
dCA9IG1fZ2VuZXJhdGVPZmZzZXQ7CkBAIC0yMjksMTMgKzI0OSwyMyBAQCBPU1N0YXR1cyBSZW1v
dGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6
OnJlbmRlcihzaQogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotdm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5p
dE1hbmFnZXI6OlVuaXQ6OmNhdGVnb3J5RGlkQ2hhbmdlKFdlYkNvcmU6OkF1ZGlvU2Vzc2lvbjo6
Q2F0ZWdvcnlUeXBlIHR5cGUpCit2b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6Y2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCkKK3sK
KyAgICBpZiAobV9pc1BsYXlpbmcpCisgICAgICAgIG1fbG9jYWxVbml0LT5zdG9wKCk7Cit9CisK
K3ZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5h
Z2VyOjpVbml0OjpjYXB0dXJlVW5pdElzU3RvcHBlZCgpCit7CisgICAgaWYgKG1faXNQbGF5aW5n
KQorICAgICAgICBtX2xvY2FsVW5pdC0+c3RhcnQoKTsKK30KKworLy8gQmFja2dyb3VuZCB0aHJl
YWQuCitPU1N0YXR1cyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXI6OlVuaXQ6OnByb2R1Y2VTcGVha2VyU2FtcGxlcyhzaXplX3Qgc2FtcGxlQ291
bnQsIEF1ZGlvQnVmZmVyTGlzdCYgbGlzdCwgdWludDY0X3Qgc2FtcGxlVGltZSwgZG91YmxlIGhv
c3RUaW1lLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgZmxhZ3MpCiB7Ci0gICAgbV92b2x1
bWUgPSB0eXBlID09IFdlYkNvcmU6OkF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlOjpQbGF5QW5k
UmVjb3JkID8gNSA6IDE7Ci0gICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVtb3RlQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpjYXRlZ29yeURp
ZENoYW5nZSAlZCwgc2V0dGluZyB2b2x1bWUgdG8gJWYiLCAoaW50KXR5cGUsIG1fdm9sdW1lKTsK
KyAgICByZXR1cm4gcmVuZGVyKHNhbXBsZUNvdW50LCBsaXN0LCBzYW1wbGVUaW1lLCBob3N0VGlt
ZSwgZmxhZ3MpOwogfQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXIuaAppbmRleCA1MmRjOGVmZGRhOTZkMzNiOGRmOGUwYTYxNzhlOWY5OTI0OTli
N2E5Li5iYjcyYzA3ZTY0YTUwMjY5ODFjM2Q0NmE1NjZkYmZkNmRlODU0MmNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXRNYW5hZ2VyLmgKQEAgLTYwLDYgKzYwLDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzVW5p
dHMoKSB7IHJldHVybiAhbV91bml0cy5pc0VtcHR5KCk7IH0KICAgICBjbGFzcyBVbml0OwogCisg
ICAgdm9pZCBub3RpZnlMYXN0VG9DYXB0dXJlQXVkaW9DaGFuZ2VkKCk7CisKIHByaXZhdGU6CiAg
ICAgLy8gTWVzc2FnZXMKICAgICB2b2lkIGNyZWF0ZVVuaXQoQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJJbnRlcm5hbFVuaXRJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk+JiYgY2FsbGJh
Y2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9V
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAppbmRleCA4MWMwYWNjYmViNmI3ODk1YTcx
MmRkMmI0NDhiODhiY2RlNDNlMDQwLi5jYWJiZDA5NWFlNmU3YzliZjdkOTkzNTVjZjYxOTA5NzM4
MTMzODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcApAQCAtMzUwLDYgKzM1MCw3IEBA
IHZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6c3RhcnRQcm9kdWNpbmdEYXRhKFJl
YWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmCiAjaWYgRU5BQkxFKEFQUF9QUklWQUNZX1JFUE9SVCkK
ICAgICBtX2Nvbm5lY3Rpb25Qcm94eS0+c2V0VENDSWRlbnRpdHkoKTsKICNlbmRpZgorICAgIG1f
Y29ubmVjdGlvblByb3h5LT5zdGFydFByb2R1Y2luZ0RhdGEocHJveHktPnNvdXJjZSgpLnR5cGUo
KSk7CiAgICAgcHJveHktPnN0YXJ0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuaAppbmRl
eCA3YWZmNDI0ZDU0MGQzYjFmZGVjZGFiYzg2NTVjM2M1NmM1MGExMGU1Li5hMDk0MjlkZjY3OTFl
OTBmODRhOTM0OTVmYjBlZDI4NWNjZWQwZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5oCkBA
IC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQVBQX1BSSVZBQ1lfUkVQT1JUKQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VENDSWRlbnRpdHkoKSB7IH0KICNlbmRpZgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUpIHsgfQogICAgIH07CiAgICAgZXhwbGljaXQgVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eShVbmlxdWVSZWY8Q29ubmVjdGlvblByb3h5PiYmKTsKICAgICB+VXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445565</attachid>
            <date>2021-12-01 05:45:33 -0800</date>
            <delta_ts>2021-12-08 03:07:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233316-20211201144531.patch</filename>
            <type>text/plain</type>
            <size>40506</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MzU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTExNTZiY2QxNzkyZjA1
YjBlYjI1YWQ5MWM0ZWRhNGZiZGRhNjI2YS4uMDU5YzIzMjk4MWQ2ZDJlMGExOTdiODQ0ZTYwYmE4
NzYzMzUwZTc3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTEyLTAxICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBMZXQgUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0IHN3aXRjaCB0
byBWUElPIHVuaXQgaWYgVlBJTyBpcyBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IENhcmxzb24uCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGFuIGV4dGVybmFsIHByb3ZpZGVy
IG9mIHNwZWFrZXIgZGF0YSB0byB0aGUgYXVkaW8gY2FwdHVyZSB1bml0LgorICAgICAgICBXZSB1
c2UgdGhpcyBpbiBXZWJLaXQgdG8gcmVuZGVyIHRoZSBNZWRpYVN0cmVhbVRyYWNrcyBvZiB0aGUg
cHJvY2VzcyBkb2luZyBjYXB0dXJlIHRocm91Z2ggVlBJTyB3aGVuIHJ1bm5pbmcuCisgICAgICAg
IEluIGNhc2UgdGhlIGF1ZGlvIGNhcHR1cmUgdW5pdCBzcGVha2VyIGZvcm1hdCBpcyBub3QgbWF0
Y2hpbmcgdGhlIHByb2R1Y2VyIGZvcm1hdCwgd2UgaGF2ZSB0byByZWNvbmZpZ3VyZSBhbmQgYWxp
Z24gd2l0aCB0aGUgcHJvZHVjZXIgZm9ybWF0LgorICAgICAgICBJbiBjYXNlLCBhdWRpbyBpcyBi
ZWluZyByZW5kZXJlZCBieSB0aGUgYXVkaW8gY2FwdHVyZSB1bml0IGJ1dCBjYXB0dXJlIGlzIHN0
b3BwZWQsIHdlIGNvbnRpbnVlIHJ1bm5pbmcgdGhlIGF1ZGlvIGNhcHR1cmUgdW5pdC4KKyAgICAg
ICAgVGhpcyBhbGxvd3MgdG8gbXV0ZS91bm11dGUgbWljcm9waG9uZSB3aXRob3V0IGFueSBhdWRp
byBnbGl0Y2guCisgICAgICAgIFdlIG1ha2Ugc3VyZSB0byBzdG9wIHRoZSBhdWRpbyBjYXB0dXJl
IHVuaXQgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZCBmb3IgcmVuZGVyaW5nIG9yIGNhcHR1cmUu
CisKKyAgICAgICAgSW4gY2FzZSB0aGUgdW5pdCBpcyBzdXNwZW5kZWQgYW5kIHdlIHJlc3RhcnQg
YW4gYXVkaW8gc291cmNlLCB3ZSB3aWxsIHVuc3VzcGVuZCB0aGUgdW5pdCwgd2hpY2ggd2lsbCB1
bm11dGUgc291cmNlcy4KKyAgICAgICAgV2UgZG8gbm90IHdhbnQgdG8gc3RhcnQgYXVkaW8gc291
cmNlcyB3aXRoaW4gdGhlIHN0YXJ0IG9mIGFuIGF1ZGlvIHNvdXJjZS4KKyAgICAgICAgRm9yIHRo
YXQgcmVhc29uLCB3ZSB1bm11dGUgdGhlIHNvdXJjZXMgYXN5bmNocm9ub3VzbHkuCisKKyAgICAg
ICAgTWFudWFsbHkgdGVzdGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9T
aGFyZWRVbml0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1
ZGlvU2hhcmVkVW5pdC5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3Jl
QXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorCiAyMDIxLTEyLTAxICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBQZXJzaXN0IE5hdmlnYXRpb25QcmVsb2Fk
U3RhdGUgaW4gc2VydmljZSB3b3JrZXIgcmVnaXN0cmF0aW9uIGRhdGFiYXNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDY0NmQxOTNkOWJiYWJjZjYwMzk3OTdhOTkwMTgzZGZkODBjNGIyZWYuLmY0OWRjNDEzZjFjNTJi
MGQ4ZjMyNGI5NzQ0MzMyN2U0NzcwZGFiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIw
MjEtMTItMDEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIExl
dCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6
OlVuaXQgc3dpdGNoIHRvIFZQSU8gdW5pdCBpZiBWUElPIGlzIHJ1bm5pbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzMxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBXZSB0cmFjayB3aGljaCBwcm9jZXNz
IGlzIHRoZSBsYXN0IHRvIHN0YXJ0IGF1ZGlvIGNhcHR1cmUuCisgICAgICAgIEluIHRoYXQgY2Fz
ZSwgd2UgcmVnaXN0ZXIgaXRzIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0TWFuYWdlcjo6VW5pdCB0byB0aGUgY2FwdHVyZSB1bml0LgorICAgICAgICBUaGlz
IGFsbG93cyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1h
bmFnZXI6OlVuaXQgdG8gc3dpdGNoIGJldHdlZW4gUmVtb3RlSU8gaWYgY2FwdHVyZSB1bml0IGRv
ZXMgbm90IHJ1bgorICAgICAgICBvciB0aGUgY2FwdHVyZSB1bml0IGlmIHJ1bm5pbmcuCisgICAg
ICAgIFRoaXMgYWxsb3dzIHRvIHJlbW92ZSB0aGUgeDUgZ2FpbiB3b3JrYXJvdW5kLgorCisgICAg
ICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL0dQVVByb2Nlc3MuY3BwOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5o
OgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5jcHA6CisgICAgICAgICogR1BVUHJvY2Vzcy93
ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5h
Z2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFu
YWdlclByb3h5Lmg6CisKIDIwMjEtMTItMDEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlNzdjNGU0ZGE5MjA1NWRjODNkM2JiOTA3MmM5YjJjY2Q0NjZhMGFhLi45MGNiOTQ3YzVk
NDIxZmFkN2RmMDBmZWI5MjUwZTE2MDE3ZjM4YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjI2LDYgKzEyMjYsNyBAQAog
CQk0MUYwNjIxNDBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMTIw
RjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCAqLzsgfTsKIAkJ
NDFGMUQyMUYwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMUQyMUQwRUYzNUMy
QTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRkFCRDJEMUY0REZFNEEwMDZBNkM5NyAv
KiBET01DYWNoZUVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFGQUJEMkIxRjRERkU0MjAwNkE2Qzk3IC8qIERPTUNhY2hlRW5naW5lLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDFGQ0NDM0Iy
NzQ2Njc1NjAwODkyQUQ2IC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGM0JCNTgzMUU3MDlFRTQwMEM3MDFG
MiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGQ0Q2QjkyM0NFMDE1NTAwQzYyNTY3IC8qIFNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDE0NTk4QkUyM0M4QUFCODAwMkI5Q0M4IC8qIFNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxRkNENkJCMjNDRTAyNzcwMEM2MjU2NyAvKiBMb2NhbFNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE0
NTk4QzAyM0M4QUQ3ODAwMkI5Q0M4IC8qIExvY2FsU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDI3REE3
MUQxMzczNURGQTAwN0M1N0ZCIC8qIEpTU2VydmljZVdvcmtlckludGVybmFscy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MjdEQTcxQjEzNzM1REZB
MDA3QzU3RkIgLyogSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxzLmNwcCAqLzsgfTsKQEAgLTMzNTMx
LDYgKzMzNTMyLDcgQEAKIAkJCQk1MTIwQkJBRjFGMUNFQ0U3MDBFRkVCRjEgLyogQ29va2llU3Rv
cmFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjgwMjAzNTFFOUU0N0JGMDBERUM2
MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0Y4MDIw
MzcxRTlFNDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0MUZDQ0MzQjI3NDY2NzU2MDA4OTJBRDYgLyogQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdBRkY0MjIxRUZCMTQ0OTAwQjU0NUIz
IC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEN0Qz
MzQ4MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYyRjEyOUUxOEMxNTc2RjAwNUM1NEFGIC8qIENvdW50ZWRVc2VyQWN0aXZpdHkuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3BwCmluZGV4IDNiNmQ4M2Ix
MGM5MjRjZWEwOGRmYjExMDk1YWM5NTMzNzM3ZWZjZWQuLmZjMTdkNjE5ZjU5OWExYmUxODI1YWM0
NDE5ODkzMzA3NTYwMzJlMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5pdC5jcHAKQEAgLTg0
LDYgKzg0LDggQEAgdm9pZCBCYXNlQXVkaW9TaGFyZWRVbml0OjpzdGFydFByb2R1Y2luZ0RhdGEo
KQogICAgIGlmIChtX3N1c3BlbmRlZCkKICAgICAgICAgcmVzdW1lKCk7CiAKKyAgICBzZXRJc1By
b2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKHRydWUpOworCiAgICAgaWYgKCsrbV9wcm9kdWNpbmdD
b3VudCAhPSAxKQogICAgICAgICByZXR1cm47CiAKQEAgLTE3Nyw2ICsxNzksMjEgQEAgdm9pZCBC
YXNlQXVkaW9TaGFyZWRVbml0OjpzdG9wUHJvZHVjaW5nRGF0YSgpCiAgICAgaWYgKG1fcHJvZHVj
aW5nQ291bnQgJiYgLS1tX3Byb2R1Y2luZ0NvdW50KQogICAgICAgICByZXR1cm47CiAKKyAgICBp
ZiAobV9pc1JlbmRlcmluZ0F1ZGlvKSB7CisgICAgICAgIHNldElzUHJvZHVjaW5nTWljcm9waG9u
ZVNhbXBsZXMoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RvcEludGVy
bmFsKCk7CisgICAgY2xlYW51cEF1ZGlvVW5pdCgpOworfQorCit2b2lkIEJhc2VBdWRpb1NoYXJl
ZFVuaXQ6OnNldElzUmVuZGVyaW5nQXVkaW8oYm9vbCB2YWx1ZSkKK3sKKyAgICBtX2lzUmVuZGVy
aW5nQXVkaW8gPSB2YWx1ZTsKKyAgICBpZiAobV9pc1JlbmRlcmluZ0F1ZGlvIHx8IG1fcHJvZHVj
aW5nQ291bnQpCisgICAgICAgIHJldHVybjsKKwogICAgIHN0b3BJbnRlcm5hbCgpOwogICAgIGNs
ZWFudXBBdWRpb1VuaXQoKTsKIH0KQEAgLTIxMCw4ICsyMjcsMTMgQEAgT1NTdGF0dXMgQmFzZUF1
ZGlvU2hhcmVkVW5pdDo6cmVzdW1lKCkKIAogICAgIEFTU0VSVCghbV9wcm9kdWNpbmdDb3VudCk7
CiAKLSAgICBmb3JFYWNoQ2xpZW50KFtdKGF1dG8mIGNsaWVudCkgewotICAgICAgICBjbGllbnQu
c2V0TXV0ZWQoZmFsc2UpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gV2Vha1B0
ciB7IHRoaXMgfV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8IHdlYWtUaGlzLT5tX3N1c3Bl
bmRlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB3ZWFrVGhpcy0+Zm9yRWFjaENs
aWVudChbXShhdXRvJiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5zZXRNdXRlZChmYWxz
ZSk7CisgICAgICAgIH0pOwogICAgIH0pOwogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5p
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1No
YXJlZFVuaXQuaAppbmRleCAyYTAxNjQ4YmViNDEwZGMyZjE0Yzk1MDc1MDNhYjg4NWJiMGQyNzFm
Li4yNWIyYmZkNTM4NDU2ODM0YjIyZWIxNjc0NDVlZGUwYzdhNmIzOTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlvU2hhcmVkVW5p
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9CYXNlQXVk
aW9TaGFyZWRVbml0LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgY2xhc3MgQ2FwdHVyZURldmlj
ZTsKIGNsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U7CiBjbGFzcyBQbGF0Zm9ybUF1ZGlvRGF0
YTsKIAotY2xhc3MgQmFzZUF1ZGlvU2hhcmVkVW5pdCB7CitjbGFzcyBCYXNlQXVkaW9TaGFyZWRV
bml0IDogcHVibGljIENhbk1ha2VXZWFrUHRyPEJhc2VBdWRpb1NoYXJlZFVuaXQ+IHsKIHB1Ymxp
YzoKICAgICBCYXNlQXVkaW9TaGFyZWRVbml0KCk7CiAgICAgdmlydHVhbCB+QmFzZUF1ZGlvU2hh
cmVkVW5pdCgpID0gZGVmYXVsdDsKQEAgLTk4LDYgKzk5LDEyIEBAIHByb3RlY3RlZDoKICAgICBj
b25zdCBTdHJpbmcmIHBlcnNpc3RlbnRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyaW5nRGV2
aWNlID8gbV9jYXB0dXJpbmdEZXZpY2UtPmZpcnN0IDogZW1wdHlTdHJpbmcoKTsgfQogICAgIHVp
bnQzMl90IGNhcHR1cmVEZXZpY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyaW5nRGV2aWNl
ID8gbV9jYXB0dXJpbmdEZXZpY2UtPnNlY29uZCA6IDA7IH0KIAorICAgIHZvaWQgc2V0SXNSZW5k
ZXJpbmdBdWRpbyhib29sKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0SXNQcm9kdWNpbmdN
aWNyb3Bob25lU2FtcGxlcyhib29sIHZhbHVlKSB7IG1faXNQcm9kdWNpbmdNaWNyb3Bob25lU2Ft
cGxlcyA9IHZhbHVlOyB9CisgICAgYm9vbCBpc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzOyB9CisKIHByaXZh
dGU6CiAgICAgT1NTdGF0dXMgc3RhcnRVbml0KCk7CiAKQEAgLTEwNiw2ICsxMTMsNyBAQCBwcml2
YXRlOgogICAgIGludCBtX3NhbXBsZVJhdGU7CiAgICAgYm9vbCBtX3N1c3BlbmRlZCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX25lZWRzUmVjb25maWd1cmF0aW9uIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNSZW5kZXJpbmdBdWRpbyB7IGZhbHNlIH07CiAKICAgICBpbnQzMl90IG1fcHJvZHVjaW5n
Q291bnQgeyAwIH07CiAKQEAgLTExNCw2ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSo+IG1fY2xpZW50czsKICAgICBWZWN0b3I8Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZSo+IG1fYXVkaW9UaHJlYWRDbGllbnRzIFdURl9HVUFSREVEX0JZX0xPQ0so
bV9hdWRpb1RocmVhZENsaWVudHNMb2NrKTsKICAgICBMb2NrIG1fYXVkaW9UaHJlYWRDbGllbnRz
TG9jazsKKworICAgIGJvb2wgbV9pc1Byb2R1Y2luZ01pY3JvcGhvbmVTYW1wbGVzIHsgdHJ1ZSB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVT
b3VyY2UuY3BwCmluZGV4IDk2YWE4YzRjMjYxODU1NzkzYzU4NmQ1OGU3NTJjODA1MDg2ZDUxNmIu
LmQ1MzU2YTJiNGNkYzg2YmZkYjMwNjVmZmNiNWZkZGExZGZjMzFkNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxwYWwv
c3BpL2NmL0NvcmVBdWRpb1NQSS5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTc3LDYg
Kzc4LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQmFzZUF1ZGlvU2hhcmVkVW5pdCYgc2luZ2xl
dG9uKCkgIHsgcmV0dXJuIHVuaXQoKTsgfQogICAgIENvcmVBdWRpb1NoYXJlZFVuaXQoKTsKIAor
ICAgIHZvaWQgcmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJT
YW1wbGVzUHJvZHVjZXImKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1
Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImKTsKKyAgICBib29sIGlzUnVubmlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQorCiBwcml2YXRlOgogICAgIHN0
YXRpYyBzaXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7CiAKQEAgLTEwMyw3ICsxMDgsNyBA
QCBwcml2YXRlOgogICAgIE9TU3RhdHVzIHByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUludDMyLCBVSW50
MzIsIEF1ZGlvQnVmZmVyTGlzdCopOwogCiAgICAgc3RhdGljIE9TU3RhdHVzIHNwZWFrZXJDYWxs
YmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKLSAgICBPU1N0YXR1cyBw
cm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBjb25zdCBBdWRp
b1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAgICBPU1N0
YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBjb25z
dCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QmKTsKIAog
ICAgIHZvaWQgdW5kdWNrKCk7CiAKQEAgLTExOSw3ICsxMjQsNiBAQCBwcml2YXRlOgogICAgIHVp
bnQ2NF90IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OwogCiAgICAgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7Ci0gICAgUmVmUHRyPEF1ZGlvU2FtcGxlQnVm
ZmVyTGlzdD4gbV9zcGVha2VyU2FtcGxlQnVmZmVyOwogCiAgICAgZG91YmxlIG1fRFRTQ29udmVy
c2lvblJhdGlvIHsgMCB9OwogCkBAIC0xMzMsMTMgKzEzNywxNSBAQCBwcml2YXRlOgogICAgIHZv
aWQgY2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJs
ZSk7CiAKICAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwotICAgIHVpbnQ2NF90IG1fc3BlYWtlclBy
b2NzQ2FsbGVkIHsgMCB9OwogI2VuZGlmCiAKICAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9j
c0NhbGxlZCB7IDAgfTsKICAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZExhc3RU
aW1lIHsgMCB9OwogICAgIFRpbWVyIG1fdmVyaWZ5Q2FwdHVyaW5nVGltZXI7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBTZWNvbmRzIHZlcmlmeUNhcHR1cmVJbnRlcnZhbCA9IDEwX3M7CisKKyAgICBM
b2NrIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2s7CisgICAgQ29yZUF1ZGlvU3BlYWtlclNh
bXBsZXNQcm9kdWNlciogbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jaykgeyBudWxscHRyIH07CiB9OwogCiBDb3Jl
QXVkaW9TaGFyZWRVbml0JiBDb3JlQXVkaW9TaGFyZWRVbml0Ojp1bml0KCkKQEAgLTI2OCw2ICsy
NzQsOSBAQCB2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuZHVjaygpCiAKIE9TU3RhdHVzIENv
cmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCkKIHsKKyAgICBpZiAo
IWlzUHJvZHVjaW5nTWljcm9waG9uZVNhbXBsZXMoKSkKKyAgICAgICAgcmV0dXJuIG5vRXJyOwor
CiAgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgbWljcm9waG9uZUNhbGxi
YWNrLCB0aGlzIH07CiAgICAgYXV0byBlcnIgPSBQQUw6OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
aW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfU2V0SW5wdXRDYWxsYmFjaywga0F1ZGlv
VW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7
CiAgICAgaWYgKGVycikgewpAQCAtMzA2LDIzICszMTUsMjggQEAgT1NTdGF0dXMgQ29yZUF1ZGlv
U2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoKQogICAgICAgICByZXR1cm4gZXJyOwog
ICAgIH0KIAotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzcGVha2VyUHJvY0Zvcm1h
dCA9IHsgfTsKLQorICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzcGVha2VyUHJvY0Zv
cm1hdDsKICAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihzcGVha2VyUHJvY0Zvcm1hdCk7Ci0gICAg
ZXJyID0gUEFMOjpBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3Bl
cnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZzcGVh
a2VyUHJvY0Zvcm1hdCwgJnNpemUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclBy
b2MoJXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2Nr
IH07CisgICAgICAgIGlmIChtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCisgICAgICAgICAgICBz
cGVha2VyUHJvY0Zvcm1hdCA9IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Zm9ybWF0KCkuc3Ry
ZWFtRGVzY3JpcHRpb24oKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlcnIgPSBQQUw6
OkF1ZGlvVW5pdEdldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFt
Rm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9y
bWF0LCAmc2l6ZSk7CisgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3Bl
YWtlclByb2MoJXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQg
KCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3BlYWtlclByb2NGb3JtYXQu
bVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlKCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBzcGVh
a2VyUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGUoKTsKICAgICBlcnIgPSBQQUw6
OkF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFt
Rm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9y
bWF0LCBzaXplKTsKICAgICBpZiAoZXJyKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdl
YlJUQywgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFi
bGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChp
bnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAg
bV9zcGVha2VyU2FtcGxlQnVmZmVyID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUoc3Bl
YWtlclByb2NGb3JtYXQsIHByZWZlcnJlZElPQnVmZmVyU2l6ZSgpICogMik7CiAgICAgbV9zcGVh
a2VyUHJvY0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OwogCiAgICAgcmV0dXJuIGVycjsKQEAg
LTMzNiw0MiArMzUwLDIxIEBAIHZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2hlY2tUaW1lc3Rh
bXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2CiB9CiAjZW5kaWYKIAot
T1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzJiAvKmlvQWN0aW9uRmxhZ3MqLywgY29uc3QgQXVkaW9UaW1lU3Rh
bXAmIHRpbWVTdGFtcCwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJh
bWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVu
aXQ6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgZmxhZ3Ms
IGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiAvKmluQnVzTnVtYmVyKi8s
IFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0JiBpb0RhdGEpCiB7Ci0gICAg
Ly8gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIHVuaXQgbmVlZHMgZGF0YSB0byBwbGF5IHRocm91Z2gg
dGhlIHNwZWFrZXJzLgotI2lmICFMT0dfRElTQUJMRUQKLSAgICArK21fc3BlYWtlclByb2NzQ2Fs
bGVkOwotI2VuZGlmCi0KLSAgICBpZiAobV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBh
Y2l0eSgpIDwgaW5OdW1iZXJGcmFtZXMpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlU291cmNlcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNwZWFrZXJEYXRhOiBzcGVh
a2VyIHNhbXBsZSBidWZmZXIgc2l6ZSAoJWQpIHRvbyBzbWFsbCBmb3IgYW1vdW50IG9mIHNhbXBs
ZSBkYXRhIHJlcXVlc3RlZCAoJWQpISIsIG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+c2FtcGxlQ2Fw
YWNpdHkoKSwgKGludClpbk51bWJlckZyYW1lcyk7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGZh
aWxzIHRoZSBjYXB0dXJlLCB3ZSBzaG91bGQgdGh1cyBlaXRoZXIgcmVjb25maWd1cmUgdGhlIGF1
ZGlvIHVuaXQgb3Igbm90aWZ5IGFsbCBjbGllbnRzIHRoYXQgY2FwdHVyZSBpcyBmYWlsaW5nLgot
ICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisgICAgaWYgKCFtX3NwZWFrZXJTYW1w
bGVzUHJvZHVjZXJMb2NrLnRyeUxvY2soKSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluTnVtYmVyRnJhbWVzICog
bV9zcGVha2VyUHJvY0Zvcm1hdC5ieXRlc1BlckZyYW1lKCkpKTsKKyAgICAgICAgZmxhZ3MgPSBr
QXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAgICAgICAgcmV0dXJuIG5v
RXJyOwogICAgIH0KIAotICAgIGlmIChtX2FjdGl2ZVNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGRvdWJsZSBhZGp1c3RlZEhvc3RUaW1lID0gbV9EVFNDb252ZXJz
aW9uUmF0aW8gKiB0aW1lU3RhbXAubUhvc3RUaW1lOwotICAgIHVpbnQ2NF90IHNhbXBsZVRpbWUg
PSB0aW1lU3RhbXAubVNhbXBsZVRpbWU7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGNoZWNrVGlt
ZXN0YW1wcyh0aW1lU3RhbXAsIHNhbXBsZVRpbWUsIGFkanVzdGVkSG9zdFRpbWUpOwotI2VuZGlm
Ci0gICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zZXRUaW1lcyhhZGp1c3RlZEhvc3RUaW1lLCBz
YW1wbGVUaW1lKTsKLQotICAgIEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fc3BlYWtl
clNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzOyArK2kpCi0gICAgICAgIGJ1ZmZlckxpc3QubUJ1
ZmZlcnNbaV0gPSBpb0RhdGEtPm1CdWZmZXJzW2ldOwotCi0gICAgYm9vbCBmaXJzdFNvdXJjZSA9
IHRydWU7Ci0gICAgZm9yIChhdXRvJiBzb3VyY2UgOiBtX2FjdGl2ZVNvdXJjZXMpIHsKLSAgICAg
ICAgc291cmNlLT5wdWxsU2FtcGxlcyhidWZmZXJMaXN0LCBpbk51bWJlckZyYW1lcywgYWRqdXN0
ZWRIb3N0VGltZSwgc2FtcGxlVGltZSwgZmlyc3RTb3VyY2UgPyBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OkNvcHkgOiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6Ok1peCk7Ci0gICAgICAgIGZpcnN0U291
cmNlID0gZmFsc2U7CisgICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgbV9zcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyTG9jayB9OworICAgIGlmICghbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyKSB7
CisgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChpb0RhdGEsIHN0YXRpY19j
YXN0PHNpemVfdD4oaW5OdW1iZXJGcmFtZXMgKiBtX3NwZWFrZXJQcm9jRm9ybWF0LmJ5dGVzUGVy
RnJhbWUoKSkpOworICAgICAgICBmbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0
SXNTaWxlbmNlOworICAgICAgICByZXR1cm4gbm9FcnI7CiAgICAgfQotCi0gICAgcmV0dXJuIG5v
RXJyOworICAgIHJldHVybiBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXItPnByb2R1Y2VTcGVha2Vy
U2FtcGxlcyhpbk51bWJlckZyYW1lcywgaW9EYXRhLCB0aW1lU3RhbXAubVNhbXBsZVRpbWUsIHRp
bWVTdGFtcC5tSG9zdFRpbWUsIGZsYWdzKTsKIH0KIAogT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6c3BlYWtlckNhbGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGFncyogaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1w
LCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJM
aXN0KiBpb0RhdGEpCkBAIC0zNzksNyArMzcyLDcgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6c3BlYWtlckNhbGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3QK
ICAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7CiAgICAgQVNTRVJUKGluVGltZVN0YW1wKTsKICAg
ICBhdXRvIGRhdGFTb3VyY2UgPSBzdGF0aWNfY2FzdDxDb3JlQXVkaW9TaGFyZWRVbml0Kj4oaW5S
ZWZDb24pOwotICAgIHJldHVybiBkYXRhU291cmNlLT5wcm92aWRlU3BlYWtlckRhdGEoKmlvQWN0
aW9uRmxhZ3MsICppblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBpb0Rh
dGEpOworICAgIHJldHVybiBkYXRhU291cmNlLT5wcm92aWRlU3BlYWtlckRhdGEoKmlvQWN0aW9u
RmxhZ3MsICppblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCAqaW9EYXRh
KTsKIH0KIAogT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvY2Vzc01pY3JvcGhvbmVT
YW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBpb0FjdGlvbkZsYWdzLCBjb25zdCBB
dWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51
bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiAvKmlvRGF0YSovKQpAQCAtNDQxLDcgKzQzNCw2
IEBAIHZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2xlYW51cEF1ZGlvVW5pdCgpCiAgICAgfQog
CiAgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBtX3NwZWFrZXJT
YW1wbGVCdWZmZXIgPSBudWxscHRyOwogI2lmICFMT0dfRElTQUJMRUQKICAgICBtX2lvVW5pdE5h
bWUgPSBlbXB0eVN0cmluZygpOwogI2VuZGlmCkBAIC00NzgsNiArNDcwLDggQEAgT1NTdGF0dXMg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVjb25maWd1cmVBdWRpb1VuaXQoKQogCiBPU1N0YXR1cyBD
b3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydEludGVybmFsKCkKIHsKKyAgICBzZXRJc1Byb2R1Y2lu
Z01pY3JvcGhvbmVTYW1wbGVzKHRydWUpOworCiAgICAgT1NTdGF0dXMgZXJyOwogICAgIGlmICgh
bV9pb1VuaXQpIHsKICAgICAgICAgZXJyID0gc2V0dXBBdWRpb1VuaXQoKTsKQEAgLTQ5MSw4ICs0
ODUsMjAgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRJbnRlcm5hbCgpCiAK
ICAgICB1bmR1Y2soKTsKIAorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtl
clNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlcikKKyAgICAgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlci0+Y2FwdHVyZVVuaXRJ
c1N0YXJ0aW5nKCk7CisgICAgfQorCiAgICAgZXJyID0gUEFMOjpBdWRpb091dHB1dFVuaXRTdGFy
dChtX2lvVW5pdCk7CiAgICAgaWYgKGVycikgeworICAgICAgICB7CisgICAgICAgICAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyTG9jayB9OworICAgICAgICAgICAg
aWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAgICAgICAgICAgICBtX3NwZWFrZXJT
YW1wbGVzUHJvZHVjZXItPmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpOworICAgICAgICB9CisKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3Rh
cnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAgIGNsZWFudXBBdWRpb1VuaXQo
KTsKICAgICAgICAgQVNTRVJUKCFtX2lvVW5pdCk7CkBAIC01MzEsNiArNTM3LDExIEBAIHZvaWQg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcEludGVybmFsKCkKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoV2ViUlRDLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcCglcCkgQXVkaW9PdXRwdXRV
bml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIHsKKyAgICAgICAgTG9ja2Vy
IGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAgICAgICAgaWYgKG1f
c3BlYWtlclNhbXBsZXNQcm9kdWNlcikKKyAgICAgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9k
dWNlci0+Y2FwdHVyZVVuaXRIYXNTdG9wcGVkKCk7CisgICAgfQogCiAgICAgbV9pb1VuaXRTdGFy
dGVkID0gZmFsc2U7CiB9CkBAIC01NzMsNiArNTg0LDM1IEBAIE9TU3RhdHVzIENvcmVBdWRpb1No
YXJlZFVuaXQ6OmRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqIGRldmljZUlEKQogICAgIHJl
dHVybiBlcnI7CiB9CiAKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVnaXN0ZXJTcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2Vy
KQoreworICAgIHNldElzUmVuZGVyaW5nQXVkaW8odHJ1ZSk7CisKKyAgICBDb3JlQXVkaW9TcGVh
a2VyU2FtcGxlc1Byb2R1Y2VyKiBvbGRQcm9kdWNlcjsKKyAgICB7CisgICAgICAgIExvY2tlciBs
b2NrZXIgeyBtX3NwZWFrZXJTYW1wbGVzUHJvZHVjZXJMb2NrIH07CisgICAgICAgIG9sZFByb2R1
Y2VyID0gbV9zcGVha2VyU2FtcGxlc1Byb2R1Y2VyOworICAgICAgICBtX3NwZWFrZXJTYW1wbGVz
UHJvZHVjZXIgPSAmcHJvZHVjZXI7CisgICAgfQorICAgIGlmIChvbGRQcm9kdWNlciAmJiBvbGRQ
cm9kdWNlciAhPSAmcHJvZHVjZXIpCisgICAgICAgIG9sZFByb2R1Y2VyLT5jYXB0dXJlVW5pdEhh
c1N0b3BwZWQoKTsKKworICAgIGlmIChoYXNBdWRpb1VuaXQoKSAmJiBwcm9kdWNlci5mb3JtYXQo
KSAhPSBtX3NwZWFrZXJQcm9jRm9ybWF0KQorICAgICAgICByZWNvbmZpZ3VyZSgpOworfQorCit2
b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2Vy
KENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQoreworICAgIHsKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlckxvY2sgfTsKKyAg
ICAgICAgaWYgKG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciAhPSAmcHJvZHVjZXIpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fc3BlYWtlclNhbXBsZXNQcm9kdWNlciA9IG51bGxwdHI7
CisgICAgfQorCisgICAgc2V0SXNSZW5kZXJpbmdBdWRpbyhmYWxzZSk7Cit9CisKIHN0YXRpYyBD
YXB0dXJlU291cmNlT3JFcnJvciBpbml0aWFsaXplQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShSZWY8
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4mJiBzb3VyY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMq
IGNvbnN0cmFpbnRzKQogewogICAgIGlmIChjb25zdHJhaW50cykgewpAQCAtNjc0LDYgKzcxNCwy
MSBAQCB2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5OjpkZXZpY2VzQ2hhbmdlZChj
b25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mCiAgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6dW5p
dCgpLmRldmljZXNDaGFuZ2VkKGRldmljZXMpOwogfQogCit2b2lkIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2VGYWN0b3J5OjpyZWdpc3RlclNwZWFrZXJTYW1wbGVzUHJvZHVjZXIoQ29yZUF1ZGlvU3Bl
YWtlclNhbXBsZXNQcm9kdWNlciYgcHJvZHVjZXIpCit7CisgICAgQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6dW5pdCgpLnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihwcm9kdWNlcik7Cit9CisK
K3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk6OnVucmVnaXN0ZXJTcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyKENvcmVBdWRpb1NwZWFrZXJTYW1wbGVzUHJvZHVjZXImIHByb2R1Y2VyKQor
eworICAgIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnVuaXQoKS51bnJlZ2lzdGVyU3BlYWtlclNhbXBs
ZXNQcm9kdWNlcihwcm9kdWNlcik7Cit9CisKK2Jvb2wgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZh
Y3Rvcnk6OmlzQXVkaW9DYXB0dXJlVW5pdFJ1bm5pbmcoKQoreworICAgIHJldHVybiBDb3JlQXVk
aW9TaGFyZWRVbml0Ojp1bml0KCkuaXNSdW5uaW5nKCk7Cit9CisKIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoU3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZyYm
IGxhYmVsLCBTdHJpbmcmJiBoYXNoU2FsdCwgdWludDMyX3QgY2FwdHVyZURldmljZUlELCBCYXNl
QXVkaW9TaGFyZWRVbml0KiBvdmVycmlkZVVuaXQpCiAgICAgOiBSZWFsdGltZU1lZGlhU291cmNl
KFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvLCBXVEZNb3ZlKGxhYmVsKSwgV1RGTW92
ZShkZXZpY2VJRCksIFdURk1vdmUoaGFzaFNhbHQpKQogICAgICwgbV9jYXB0dXJlRGV2aWNlSUQo
Y2FwdHVyZURldmljZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmgKaW5kZXggNWVj
M2Q4ZWM5YjdlZTNlYjU1MWQwYzA5ZWE5MzEwNWE2ZDg3OGIwZi4uNDFhY2I5NjQ0MmI4NzQ3ZDgy
MjYyMjg2YjFhZWZmZDFkNjA5OTEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5o
CkBAIC0xMDIsOSArMTAyLDIwIEBAIHByaXZhdGU6CiAgICAgQmFzZUF1ZGlvU2hhcmVkVW5pdCog
bV9vdmVycmlkZVVuaXQgeyBudWxscHRyIH07CiB9OwogCitjbGFzcyBDb3JlQXVkaW9TcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Db3JlQXVkaW9TcGVha2Vy
U2FtcGxlc1Byb2R1Y2VyKCkgPSBkZWZhdWx0OworICAgIC8vIE1haW4gdGhyZWFkCisgICAgdmly
dHVhbCBjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY2FwdHVyZVVuaXRJc1N0YXJ0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjYXB0dXJlVW5pdEhhc1N0b3BwZWQoKSA9IDA7CisgICAgLy8gQmFja2dyb3VuZCB0aHJlYWQu
CisgICAgdmlydHVhbCBPU1N0YXR1cyBwcm9kdWNlU3BlYWtlclNhbXBsZXMoc2l6ZV90IHNhbXBs
ZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9z
dFRpbWUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJikgPSAwOworfTsKKwogY2xhc3MgQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkgOiBwdWJsaWMgQXVkaW9DYXB0dXJlRmFjdG9yeSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5JiBzaW5n
bGV0b24oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUZhY3RvcnkmIHNpbmdsZXRvbigpOwogCiAgICAgdm9pZCBiZWdpbkludGVycnVwdGlvbigpOwog
ICAgIHZvaWQgZW5kSW50ZXJydXB0aW9uKCk7CkBAIC0xMTIsNiArMTIzLDEwIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZGV2aWNlc0NoYW5nZWQoY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+Jik7
CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNl
cihDb3JlQXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1bnJlZ2lzdGVyU3BlYWtlclNhbXBsZXNQcm9kdWNlcihDb3JlQXVkaW9TcGVha2VyU2Ft
cGxlc1Byb2R1Y2VyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0F1ZGlvQ2FwdHVyZVVu
aXRSdW5uaW5nKCk7CisKIHByaXZhdGU6CiAgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRl
QXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IENhcHR1cmVEZXZpY2UmLCBTdHJpbmcmJiwgY29uc3Qg
TWVkaWFDb25zdHJhaW50cyopIG92ZXJyaWRlOwogICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyJiBh
dWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggNTJhZTg4
MTkzNzFhM2VkZDYwY2Q3MjBjZDA4NGJiM2M4NTdmYTdjZC4uMTdiZjA3OWFlYTE0NWMzZTZiYWM3
NDgxY2FmMGI4OWIyMjQzMzMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTk4LDcgKzE5OCwxNCBAQCBw
cml2YXRlOgogICAgICAgICBtX3Byb2Nlc3Muc2V0VENDSWRlbnRpdHkoKTsKICAgICB9CiAjZW5k
aWYKLQorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZv
aWQgc3RhcnRQcm9kdWNpbmdEYXRhKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSkgZmlu
YWwKKyAgICB7CisgICAgICAgIGlmICh0eXBlICE9IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OkF1ZGlvKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3Byb2Nlc3Muc3RhcnRDYXB0
dXJpbmdBdWRpbygpOworICAgIH0KKyNlbmRpZgogI2lmIEhBVkUoSU9TVVJGQUNFX1NFVF9PV05F
UlNISVBfSURFTlRJVFkpCiAgICAgc3RkOjpvcHRpb25hbDx0YXNrX2lkX3Rva2VuX3Q+IHdlYlBy
b2Nlc3NJZGVudGl0eVRva2VuKCkgY29uc3QgZmluYWwKICAgICB7CkBAIC04ODcsNiArODk0LDIw
IEBAIHZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6dXBkYXRlQ2FwdHVyZU9yaWdpbihj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpCiAgICAgbV9jYXB0dXJlT3JpZ2luID0gb3JpZ2lu
RGF0YS5zZWN1cml0eU9yaWdpbigpOwogfQogCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJM
RShNRURJQV9TVFJFQU0pCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnN0YXJ0Q2Fw
dHVyaW5nQXVkaW8oKQoreworICAgIGdwdVByb2Nlc3MoKS5wcm9jZXNzSXNTdGFydGluZ1RvQ2Fw
dHVyZUF1ZGlvKCp0aGlzKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpw
cm9jZXNzSXNTdGFydGluZ1RvQ2FwdHVyZUF1ZGlvKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
IHByb2Nlc3MpCit7CisgICAgbV9pc0xhc3RUb0NhcHR1cmVBdWRpbyA9IHRoaXMgPT0gJnByb2Nl
c3M7CisgICAgaWYgKG1fYXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRN
YW5hZ2VyKQorICAgICAgICBtX2F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0TWFuYWdlci0+bm90aWZ5TGFzdFRvQ2FwdHVyZUF1ZGlvQ2hhbmdlZCgpOworfQorI2VuZGlm
CisKICNpZiAhUExBVEZPUk0oQ09DT0EpCiBib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnNldENhcHR1cmVBdHRyaWJ1dGlvblN0cmluZygpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBhZTc5
NTA1MjU4NjBkZTNjZjZhMmIxNzg4ZmUzNWE1ZWFiZGE1NjdkLi43NmIyMDhhYjAwMjNiZmRiMmMz
NzY4YWI2NjcwYTJlMTMwYTNlZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTEzNiw2ICsxMzYsMTIgQEAgcHVi
bGljOgogICAgIGJvb2wgYWxsb3dzRGlzcGxheUNhcHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93c0Rpc3BsYXlDYXB0dXJlOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgc3RhcnRDYXB0dXJpbmdBdWRpbygpOworICAg
IHZvaWQgcHJvY2Vzc0lzU3RhcnRpbmdUb0NhcHR1cmVBdWRpbyhHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzJik7CisgICAgYm9vbCBpc0xhc3RUb0NhcHR1cmVBdWRpbygpIGNvbnN0IHsgcmV0dXJu
IG1faXNMYXN0VG9DYXB0dXJlQXVkaW87IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFQUF9QUklW
QUNZX1JFUE9SVCkKICAgICB2b2lkIHNldFRDQ0lkZW50aXR5KCk7CiAjZW5kaWYKQEAgLTI4OCw5
ICsyOTQsMTAgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94
eT4gbV91c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI+IG1f
YXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOworICAgIGJv
b2wgbV9pc0xhc3RUb0NhcHR1cmVBdWRpbyB7IGZhbHNlIH07CisKICAgICBSZWY8UmVtb3RlU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcj4gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJN
YW5hZ2VyOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI+IG1f
cmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuY3BwCmluZGV4IGMwNzZkZTRm
OGEwYWQyOWJiNDI1NzMzMTg1NWIwYzY5NzAxNWQ4NDguLjM1MzQzNTFkYjY3N2I0NTlmNjhjYjlh
OWY5YzcxMGNjNDNiODNkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5j
cHAKQEAgLTUxMiw2ICs1MTIsMTQgQEAgdm9pZCBHUFVQcm9jZXNzOjp3ZWJQcm9jZXNzQ29ubmVj
dGlvbkNvdW50Rm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQKICAgICBjb21w
bGV0aW9uSGFuZGxlcihHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpvYmplY3RDb3VudEZvclRl
c3RpbmcoKSk7CiB9CiAKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKK3ZvaWQgR1BVUHJvY2Vzczo6cHJvY2Vzc0lzU3RhcnRpbmdUb0NhcHR1cmVBdWRpbyhHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiBwcm9jZXNzKQoreworICAgIGZvciAoYXV0byYgY29ubmVj
dGlvbiA6IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnZhbHVlcygpKQorICAgICAgICBjb25uZWN0
aW9uLT5wcm9jZXNzSXNTdGFydGluZ1RvQ2FwdHVyZUF1ZGlvKHByb2Nlc3MpOworfQorI2VuZGlm
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nlc3MuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmgKaW5kZXggMjk0OWZmOGU4NTcxMjVj
Y2M3NDhiNWRhZWQwY2FmZGEwOWFhZTRmOC4uMTEyMjc2ZjkyYzliNDE2ODdjN2I2MjVlNGJmYmEy
YjA0ZTA1NDM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVVByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5oCkBAIC0xMTYs
NiArMTE2LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2ViUHJvY2Vzc0Nvbm5lY3Rpb25Db3Vu
dEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYpOwogCisjaWYg
UExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgdm9pZCBwcm9jZXNz
SXNTdGFydGluZ1RvQ2FwdHVyZUF1ZGlvKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmKTsKKyNl
bmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgbG93TWVtb3J5SGFuZGxlcihDcml0aWNhbCwgU3lu
Y2hyb25vdXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRj
L1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5jcHAKaW5kZXggN2E4N2UxZDQzN2I3
MzNlZDc3ZDQzMDcxYWQ1YmYwYTAyYmUzNzQ1Zi4uNTBiZWMzMWVmZDZhYzMyMWQzOTA0ZDU2NmZk
ZTFmODllMTU3MjUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0
Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLmNwcApAQCAtNDMsMTkgKzQz
LDE4IEBACiAjaW5jbHVkZSAiU2hhcmVkUmluZ0J1ZmZlclN0b3JhZ2UuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ0FS
aW5nQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJBdWRpb0J1ZmZlckxpc3QuaD4KICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvU2Vzc2lvbklPUy5o
PgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBSZW1vdGVBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQgOiBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVu
aXRNYW5hZ2VyOjpVbml0PiB7CitjbGFzcyBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQKKyAgICA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6
OlVuaXQ+CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29yZUF1ZGlvU3BlYWtlclNhbXBsZXNQcm9k
dWNlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVW5pdChB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdElkZW50aWZpZXIsIFJlZjxJ
UEM6OkNvbm5lY3Rpb24+JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KT4mJik7CisgICAgVW5pdChBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdElkZW50aWZpZXIsIFJlZjxJUEM6OkNv
bm5lY3Rpb24+JiYsIGJvb2wgc2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uJiwgc2l6ZV90KT4mJik7CiAgICAgflVuaXQoKTsKIAogICAgIHZvaWQgc3RhcnQoY29u
c3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCBjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mLCB1aW50NjRfdCBudW1iZXJPZkZyYW1lcywgSVBDOjpTZW1hcGhvcmUmJik7CkBA
IC02NCwxMiArNjMsMTcgQEAgcHVibGljOgogICAgIE9TU3RhdHVzIHJlbmRlcihzaXplX3Qgc2Ft
cGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBo
b3N0VGltZSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmKTsKICAgICB2b2lkIG5vdGlmeVJl
c2V0KCk7CiAKKyAgICB2b2lkIHNldFNob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1
Y2VyKGJvb2wpOworCiBwcml2YXRlOgogICAgIHZvaWQgc3RvcmFnZUNoYW5nZWQoU2hhcmVkTWVt
b3J5KiwgY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KTsK
IAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBjYXRlZ29yeURpZENoYW5nZShX
ZWJDb3JlOjpBdWRpb1Nlc3Npb246OkNhdGVnb3J5VHlwZSk7Ci0jZW5kaWYKKyAgICAvLyBDb3Jl
QXVkaW9TcGVha2VyU2FtcGxlc1Byb2R1Y2VyCisgICAgY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQoKSBmaW5hbCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9
CisgICAgdm9pZCBjYXB0dXJlVW5pdElzU3RhcnRpbmcoKSBmaW5hbDsKKyAgICB2b2lkIGNhcHR1
cmVVbml0SGFzU3RvcHBlZCgpIGZpbmFsOworICAgIC8vIEJhY2tncm91bmQgdGhyZWFkLgorICAg
IE9TU3RhdHVzIHByb2R1Y2VTcGVha2VyU2FtcGxlcyhzaXplX3Qgc2FtcGxlQ291bnQsIEF1ZGlv
QnVmZmVyTGlzdCYsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSwgQXVkaW9V
bml0UmVuZGVyQWN0aW9uRmxhZ3MmKSBmaW5hbDsKIAogICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgUmVmPElQ
Qzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwpAQCAtODIsMTEgKzg2LDggQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q0FSaW5nQnVmZmVyPiBtX3JpbmdCdWZmZXI7
CiAjZW5kaWYKICAgICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIGZsb2F0IG1fdm9sdW1lIHsgMS4wIH07Ci0gICAgV2ViQ29yZTo6QXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0IG1fZm9ybWF0IHsgV2ViQ29yZTo6QXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0OjpGbG9hdDMyIH07Ci0gICAgV2ViQ29yZTo6QXVk
aW9TZXNzaW9uSU9TOjpDYXRlZ29yeUNoYW5nZWRPYnNlcnZlciBtX2NhdGVnb3J5Q2hhbmdlT2Jz
ZXJ2ZXI7Ci0jZW5kaWYKKyAgICBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9k
ZXNjcmlwdGlvbjsKKyAgICBib29sIG1fc2hvdWxkUmVnaXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJv
ZHVjZXIgeyBmYWxzZSB9OwogfTsKIAogUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdE1hbmFnZXIoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcykKQEAgLTEwMSw3ICsxMDIsNyBAQCBSZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6On5SZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVAogdm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5p
dE1hbmFnZXI6OmNyZWF0ZVVuaXQoQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXRJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
V2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KT4mJiBjYWxsYmFjaykK
IHsKICAgICBBU1NFUlQoIW1fdW5pdHMuY29udGFpbnMoaWRlbnRpZmllcikpOwotICAgIG1fdW5p
dHMuYWRkKGlkZW50aWZpZXIsIG1ha2VVbmlxdWVSZWY8UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0PihpZGVudGlmaWVyLCBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY29ubmVjdGlvbigpLCBXVEZNb3ZlKGNhbGxiYWNrKSkpOwor
ICAgIG1fdW5pdHMuYWRkKGlkZW50aWZpZXIsIG1ha2VVbmlxdWVSZWY8UmVtb3RlQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0PihpZGVudGlmaWVy
LCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY29ubmVjdGlvbigpLCBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaXNMYXN0VG9DYXB0dXJlQXVkaW8oKSwgV1RGTW92ZShjYWxsYmFjaykp
KTsKIH0KIAogdm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdE1hbmFnZXI6OmRlbGV0ZVVuaXQoQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRl
cm5hbFVuaXRJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xMzEsNiArMTMyLDEzIEBAIHZvaWQg
UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpz
ZXRBdWRpb091dHB1dERldmljCiAgICAgICAgIHVuaXQtPnNldEF1ZGlvT3V0cHV0RGV2aWNlKGRl
dmljZUlkKTsKIH0KIAordm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklu
dGVybmFsVW5pdE1hbmFnZXI6Om5vdGlmeUxhc3RUb0NhcHR1cmVBdWRpb0NoYW5nZWQoKQorewor
ICAgIC8vIEZJWE1FOiBXaGVuIHN1cHBvcnRpbmcgbXVsdGlwbGUgdW5pdHMgdG8gZGlmZmVyZW50
IHNwZWFrZXJzLCB3ZSBzaG91bGQgb25seSBzZWxlY3QgdGhlIHVuaXQgbWF0Y2hpbmcgdGhlIFZQ
SU8gb3V0cHV0IGRldmljZS4KKyAgICBmb3IgKGF1dG8mIHVuaXQgOiBtX3VuaXRzLnZhbHVlcygp
KQorICAgICAgICB1bml0LT5zZXRTaG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNl
cihtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaXNMYXN0VG9DYXB0dXJlQXVkaW8oKSk7Cit9
CisKIHN0YXRpYyBXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdDo6UmVuZGVyQ2FsbGJhY2sgcmVuZGVyQ2FsbGJhY2soUmVtb3RlQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0JiB1bml0KQogewogICAgIHJl
dHVybiBbJnVuaXRdKGF1dG8gc2FtcGxlQ291bnQsIGF1dG8mIGxpc3QsIGF1dG8gc2FtcGxlVGlt
ZSwgYXV0byBob3N0VGltZSwgYXV0byYgZmxhZ3MpIHsKQEAgLTE0NSwxMyArMTUzLDExIEBAIHN0
YXRpYyBXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6
UmVzZXRDYWxsYmFjayByZXNldENhCiAgICAgfTsKIH0KIAotUmVtb3RlQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpVbml0KEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0SWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWY8
SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KT4mJiBjYWxsYmFj
aykKK1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdl
cjo6VW5pdDo6VW5pdChBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdElk
ZW50aWZpZXIgaWRlbnRpZmllciwgUmVmPElQQzo6Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uLCBi
b29sIHNob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVf
dCk+JiYgY2FsbGJhY2spCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1f
Y29ubmVjdGlvbihXVEZNb3ZlKGNvbm5lY3Rpb24pKQogICAgICwgbV9sb2NhbFVuaXQoV2ViQ29y
ZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OmNyZWF0ZUxvY2Fs
SW50ZXJuYWxVbml0KHJlbmRlckNhbGxiYWNrKCp0aGlzKSwgcmVzZXRDYWxsYmFjaygqdGhpcykp
KQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2NhdGVnb3J5Q2hhbmdlT2JzZXJ2
ZXIoW3RoaXNdKGF1dG8mLCBhdXRvIGNhdGVnb3J5KSB7IGNhdGVnb3J5RGlkQ2hhbmdlKGNhdGVn
b3J5KTsgfSkKLSNlbmRpZgorICAgICwgbV9zaG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQ
cm9kdWNlcihzaG91bGRSZWdpc3RlckFzU3BlYWtlclNhbXBsZXNQcm9kdWNlcikKIHsKICAgICBt
X2xvY2FsVW5pdC0+cmV0cmlldmVGb3JtYXREZXNjcmlwdGlvbihbd2Vha1RoaXMgPSBXZWFrUHRy
IHsgKnRoaXMgfSwgdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGRl
c2NyaXB0aW9uKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhZGVzY3JpcHRp
b24pIHsKQEAgLTE2Myw5ICsxNjksNiBAQCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OlVuaXQoQXVkaW9NZWRpYVN0cgogICAgICAg
ICBtX2ZyYW1lQ2h1bmtTaXplID0gc3RkOjptYXgoV2ViQ29yZTo6QXVkaW9VdGlsaXRpZXM6OnJl
bmRlclF1YW50dW1TaXplLCB0ZW5Nc1NhbXBsZVNpemUpOwogICAgICAgICBjYWxsYmFjaygqZGVz
Y3JpcHRpb24sIG1fZnJhbWVDaHVua1NpemUpOwogICAgIH0pOwotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgV2ViQ29yZTo6QXVkaW9TZXNzaW9uSU9TOjphZGRBdWRpb1Nlc3Npb25DYXRl
Z29yeUNoYW5nZWRPYnNlcnZlcihtX2NhdGVnb3J5Q2hhbmdlT2JzZXJ2ZXIpOwotI2VuZGlmCiB9
CiAKIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdl
cjo6VW5pdDo6flVuaXQoKQpAQCAtMTc4LDYgKzE4MSwxOSBAQCB2b2lkIFJlbW90ZUF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6bm90aWZ5UmVz
ZXQoKQogICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6R1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OlJlc2V0QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQgeyBtX2lk
ZW50aWZpZXIgfSwgMCk7CiB9CiAKK3ZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpzZXRTaG91bGRSZWdpc3RlckFzU3BlYWtl
clNhbXBsZXNQcm9kdWNlcihib29sIHZhbHVlKQoreworICAgIGlmIChtX3Nob3VsZFJlZ2lzdGVy
QXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyID09IHZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Nob3VsZFJlZ2lzdGVyQXNTcGVha2VyU2FtcGxlc1Byb2R1Y2VyID0gdmFsdWU7CisgICAg
aWYgKCFtX2lzUGxheWluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvdWxkUmVn
aXN0ZXJBc1NwZWFrZXJTYW1wbGVzUHJvZHVjZXIpCisgICAgICAgIFdlYkNvcmU6OkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2VGYWN0b3J5OjpzaW5nbGV0b24oKS5yZWdpc3RlclNwZWFrZXJTYW1wbGVz
UHJvZHVjZXIoKnRoaXMpOworfQorCiB2b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6c3RhcnQoY29uc3QgU2hhcmVkTWVtb3J5
OjpIYW5kbGUmIGhhbmRsZSwgY29uc3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgdWludDY0X3QgbnVtYmVyT2ZGcmFtZXMsIElQQzo6U2VtYXBob3JlJiYg
c2VtYXBob3JlKQogewogICAgIGlmIChtX2lzUGxheWluZykKQEAgLTE4OCwxNSArMjA0LDIxIEBA
IHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5h
Z2VyOjpVbml0OjpzdGFydChjb25zdCBTCiAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwogICAgIG1f
cmluZ0J1ZmZlciA9IFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6YWRvcHRTdG9yYWdlKG1ha2VVbmlx
dWVSZWY8UmVhZE9ubHlTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZT4oaGFuZGxlKSwgZGVzY3JpcHRp
b24sIG51bWJlck9mRnJhbWVzKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICBtX3JlbmRlclNlbWFw
aG9yZSA9IFdURk1vdmUoc2VtYXBob3JlKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IG1fZm9ybWF0ID0gZGVzY3JpcHRpb24uZm9ybWF0KCk7Ci0jZW5kaWYKKyAgICBtX2Rlc2NyaXB0
aW9uID0gZGVzY3JpcHRpb247CisKKyAgICBpZiAobV9zaG91bGRSZWdpc3RlckFzU3BlYWtlclNh
bXBsZXNQcm9kdWNlcikgeworICAgICAgICBXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNl
RmFjdG9yeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJTcGVha2VyU2FtcGxlc1Byb2R1Y2VyKCp0aGlz
KTsKKyAgICAgICAgaWYgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5Ojpz
aW5nbGV0b24oKS5pc0F1ZGlvQ2FwdHVyZVVuaXRSdW5uaW5nKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgbV9sb2NhbFVuaXQtPnN0YXJ0KCk7CiB9CiAKIHZvaWQgUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0Ojpz
dG9wKCkKIHsKICAgICBtX2lzUGxheWluZyA9IGZhbHNlOworICAgIFdlYkNvcmU6OkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2VGYWN0b3J5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyU3BlYWtlclNhbXBs
ZXNQcm9kdWNlcigqdGhpcyk7CiAgICAgbV9sb2NhbFVuaXQtPnN0b3AoKTsKIH0KIApAQCAtMjA1
LDcgKzIyNyw3IEBAIHZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRl
cm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpzZXRBdWRpb091dHB1CiAgICAgbV9sb2NhbFVuaXQtPnNl
dEF1ZGlvT3V0cHV0RGV2aWNlKGRldmljZUlkKTsKIH0KIAotT1NTdGF0dXMgUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpyZW5kZXIo
c2l6ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmIGxpc3QsIHVpbnQ2NF90LCBkb3Vi
bGUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJikKK09TU3RhdHVzIFJlbW90ZUF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6cmVuZGVyKHNp
emVfdCBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiBsaXN0LCB1aW50NjRfdCwgZG91Ymxl
LCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgZmxhZ3MpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5SdW5Mb29wKCkpOwogCkBAIC0yMTQsMTEgKzIzNiw5IEBAIE9TU3RhdHVzIFJlbW90ZUF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5pdDo6cmVuZGVy
KHNpCiAgICAgaWYgKG1fcmluZ0J1ZmZlci0+ZmV0Y2hJZkhhc0Vub3VnaERhdGEoJmxpc3QsIHNh
bXBsZUNvdW50LCBtX3JlYWRPZmZzZXQpKSB7CiAgICAgICAgIG1fcmVhZE9mZnNldCArPSBzYW1w
bGVDb3VudDsKICAgICAgICAgc3RhdHVzID0gbm9FcnI7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgICAgICBpZiAobV92b2x1bWUgIT0gMSkKLSAgICAgICAgICAgIFdlYkNvcmU6OkF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGxpc3QsIG1fdm9sdW1lLCBtX2Zvcm1hdCk7
Ci0jZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6Onplcm9BQkwobGlzdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3VudCAqIG1f
ZGVzY3JpcHRpb24uYnl0ZXNQZXJGcmFtZSgpKSk7CisgICAgICAgIGZsYWdzID0ga0F1ZGlvVW5p
dFJlbmRlckFjdGlvbl9PdXRwdXRJc1NpbGVuY2U7CiAgICAgfQogCiAgICAgYXV0byByZXF1ZXN0
ZWRTYW1wbGVzQ291bnQgPSBtX2dlbmVyYXRlT2Zmc2V0OwpAQCAtMjI5LDEzICsyNDksMjUgQEAg
T1NTdGF0dXMgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXRN
YW5hZ2VyOjpVbml0OjpyZW5kZXIoc2kKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0OjpjYXRlZ29yeURpZENoYW5nZShXZWJDb3JlOjpB
dWRpb1Nlc3Npb246OkNhdGVnb3J5VHlwZSB0eXBlKQordm9pZCBSZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OmNhcHR1cmVVbml0SXNT
dGFydGluZygpCit7CisgICAgLy8gQ2FwdHVyZSB1bml0IGlzIHN0YXJ0aW5nIGFuZCBhdWRpbyB3
aWxsIGJlIHJlbmRlcmVkIHRocm91Z2ggaXQgYW5kIG5vdCBieSBvdXIgbGNvYWwgdW5pdCBzbyBz
dG9wIHRoZSBsb2NhbCB1bml0LgorICAgIGlmIChtX2lzUGxheWluZykKKyAgICAgICAgbV9sb2Nh
bFVuaXQtPnN0b3AoKTsKK30KKwordm9pZCBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckludGVybmFsVW5pdE1hbmFnZXI6OlVuaXQ6OmNhcHR1cmVVbml0SGFzU3RvcHBlZCgpCit7
CisgICAgLy8gQ2FwdHVyZSB1bml0IGhhcyBzdG9wcGVkIGFuZCBhdWRpbyB3aWxsIG5vIGxvbmdl
ciBiZSByZW5kZXJlZCB0aHJvdWdoIGl0IHNvIHN0YXJ0IHRoZSBsb2NhbCB1bml0LgorICAgIGlm
IChtX2lzUGxheWluZykKKyAgICAgICAgbV9sb2NhbFVuaXQtPnN0YXJ0KCk7Cit9CisKKy8vIEJh
Y2tncm91bmQgdGhyZWFkLgorT1NTdGF0dXMgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyOjpVbml0Ojpwcm9kdWNlU3BlYWtlclNhbXBsZXMoc2l6
ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmIGxpc3QsIHVpbnQ2NF90IHNhbXBsZVRp
bWUsIGRvdWJsZSBob3N0VGltZSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGZsYWdzKQog
ewotICAgIG1fdm9sdW1lID0gdHlwZSA9PSBXZWJDb3JlOjpBdWRpb1Nlc3Npb246OkNhdGVnb3J5
VHlwZTo6UGxheUFuZFJlY29yZCA/IDUgOiAxOwotICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlJl
bW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0TWFuYWdlcjo6VW5p
dDo6Y2F0ZWdvcnlEaWRDaGFuZ2UgJWQsIHNldHRpbmcgdm9sdW1lIHRvICVmIiwgKGludCl0eXBl
LCBtX3ZvbHVtZSk7CisgICAgcmV0dXJuIHJlbmRlcihzYW1wbGVDb3VudCwgbGlzdCwgc2FtcGxl
VGltZSwgaG9zdFRpbWUsIGZsYWdzKTsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJJbnRlcm5hbFVuaXRNYW5hZ2VyLmgKaW5kZXggNTJkYzhlZmRkYTk2ZDMzYjhkZjhlMGE2
MTc4ZTlmOTkyNDk5YjdhOS4uYmI3MmMwN2U2NGE1MDI2OTgxYzNkNDZhNTY2ZGJmZDZkZTg1NDJj
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdE1hbmFnZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVySW50ZXJuYWxVbml0TWFuYWdlci5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc1VuaXRzKCkgeyByZXR1cm4gIW1fdW5pdHMuaXNFbXB0eSgpOyB9CiAgICAgY2xh
c3MgVW5pdDsKIAorICAgIHZvaWQgbm90aWZ5TGFzdFRvQ2FwdHVyZUF1ZGlvQ2hhbmdlZCgpOwor
CiBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzCiAgICAgdm9pZCBjcmVhdGVVbml0KEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0SWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXpl
X3QpPiYmIGNhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKaW5kZXggODFjMGFj
Y2JlYjZiNzg5NWE3MTJkZDJiNDQ4Yjg4YmNkZTQzZTA0MC4uY2FiYmQwOTVhZTZlN2M5YmY3ZDk5
MzU1Y2Y2MTkwOTczODEzMzg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKQEAgLTM1
MCw2ICszNTAsNyBAQCB2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OnN0YXJ0UHJv
ZHVjaW5nRGF0YShSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZgogI2lmIEVOQUJMRShBUFBfUFJJ
VkFDWV9SRVBPUlQpCiAgICAgbV9jb25uZWN0aW9uUHJveHktPnNldFRDQ0lkZW50aXR5KCk7CiAj
ZW5kaWYKKyAgICBtX2Nvbm5lY3Rpb25Qcm94eS0+c3RhcnRQcm9kdWNpbmdEYXRhKHByb3h5LT5z
b3VyY2UoKS50eXBlKCkpOwogICAgIHByb3h5LT5zdGFydCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5LmgKaW5kZXggN2FmZjQyNGQ1NDBkM2IxZmRlY2RhYmM4NjU1YzNjNTZjNTBhMTBlNS4u
YTA5NDI5ZGY2NzkxZTkwZjg0YTkzNDk1ZmIwZWQyODVjY2VkMGQyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyUHJveHkuaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEFQUF9QUklW
QUNZX1JFUE9SVCkKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFRDQ0lkZW50aXR5KCkgeyB9CiAj
ZW5kaWYKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YShXZWJDb3JlOjpS
ZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKSB7IH0KICAgICB9OwogICAgIGV4cGxpY2l0IFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoVW5pcXVlUmVmPENvbm5lY3Rpb25Qcm94eT4mJik7CiAg
ICAgflVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>