<?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>220471</bug_id>
          
          <creation_ts>2021-01-08 11:35:31 -0800</creation_ts>
          <short_desc>[HANG] 496ms to 1360ms in WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices()</short_desc>
          <delta_ts>2021-03-18 13:45:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=223476</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="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>peng.liu6</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>1718361</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-08 11:35:31 -0800</bug_when>
    <thetext>[HANG] 496ms to 1360ms in WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718365</commentid>
    <comment_count>1</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-08 11:46:00 -0800</bug_when>
    <thetext>&lt;rdar://72349642&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718370</commentid>
    <comment_count>2</comment_count>
      <attachid>417285</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-08 11:54:22 -0800</bug_when>
    <thetext>Created attachment 417285
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718457</commentid>
    <comment_count>3</comment_count>
      <attachid>417285</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-01-08 14:56:55 -0800</bug_when>
    <thetext>Comment on attachment 417285
Patch

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

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:146
&gt; +        unsigned m_resultsRemaining { 1 };

Maybe my understanding is wrong. I feel the initial value here needs to be 0?

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:150
&gt; +    auto accumulator = CaptureDeviceAccumulator::create([completion = WTFMove(completion)] (Vector&lt;CaptureDevice&gt; devices) mutable {

Nit. The space between square brackets and parentheses can be removed.

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:153
&gt; +    getCaptureDevices([] (Vector&lt;CaptureDevice&gt;) { });

Ditto.

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:183
&gt; +    dispatch_async(m_dispatchQueue, makeBlockPtr([this, completion = WTFMove(completion)] () mutable {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718468</commentid>
    <comment_count>4</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-08 15:34:23 -0800</bug_when>
    <thetext>(In reply to Peng Liu from comment #3)
&gt; Comment on attachment 417285 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417285&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:146
&gt; &gt; +        unsigned m_resultsRemaining { 1 };
&gt; 
&gt; Maybe my understanding is wrong. I feel the initial value here needs to be 0?

Nope. We need to handle the case where all the callbacks are called synchronously. If we start at zero, the master callback will be called if the first callback is called before the second one is added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718688</commentid>
    <comment_count>5</comment_count>
      <attachid>417285</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-11 08:31:00 -0800</bug_when>
    <thetext>Comment on attachment 417285
Patch

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

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:115
&gt; +void RealtimeMediaSourceCenter::getMediaStreamDevices(CompletionHandler&lt;void(Vector&lt;CaptureDevice&gt;)&gt;&amp;&amp; completion)

Should probably be CompletionHandler&lt;void(Vector&lt;CaptureDevice&gt;&amp;&amp;)&gt;&amp;&amp;.
Here and below

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:117
&gt; +    class CaptureDeviceAccumulator : public RefCounted&lt;CaptureDeviceAccumulator&gt; {

Can we use CallbackAggregator instead?

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:136
&gt; +                m_completion(m_results);

WTFMove()

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:140
&gt; +        CaptureDeviceAccumulator(CompletionHandler&lt;void(Vector&lt;CaptureDevice&gt;)&gt;&amp;&amp; completion)

explicit

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:145
&gt; +        CompletionHandler&lt;void(Vector&lt;CaptureDevice&gt;)&gt; m_completion;

s/m_completion/m_completionHandler/

&gt;&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:150
&gt;&gt; +    auto accumulator = CaptureDeviceAccumulator::create([completion = WTFMove(completion)] (Vector&lt;CaptureDevice&gt; devices) mutable {
&gt; 
&gt; Nit. The space between square brackets and parentheses can be removed.

s/(Vector&lt;CaptureDevice&gt; devices)/(auto&amp;&amp; devices)

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:154
&gt; +        completion(devices);

WTFMove(devices)

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h:69
&gt; +    WEBCORE_EXPORT void getMediaStreamDevices(CompletionHandler&lt;void(Vector&lt;CaptureDevice&gt;)&gt;&amp;&amp;);

&amp;&amp;

&gt;&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:153
&gt;&gt; +    getCaptureDevices([] (Vector&lt;CaptureDevice&gt;) { });
&gt; 
&gt; Ditto.

auto

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:185
&gt; +        callOnWebThreadOrDispatchAsyncOnMainThread(makeBlockPtr([this, completion = WTFMove(completion), newAudioDevices = WTFMove(newAudioDevices)] () mutable {

Why not simply callOnMainThread? This code is not expected to work in WebKit 1 anyway.
It might be safer also to isolate copy newAudioDevices.
Something like newAudioDevices = crossThreadCopy(WTFMove(newAudioDevices)) after adding a CaptureDevice::isolatedCopy().

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:662
&gt; +    RealtimeMediaSourceCenter::singleton().getMediaStreamDevices([this, weakThis = makeWeakPtr(this), revealIdsAndLabels, completion = WTFMove(completion)] (Vector&lt;CaptureDevice&gt; devices) mutable {

auto&amp;&amp;

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:664
&gt; +        int microphoneCount = 0;

unsigned maybe

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:743
&gt; +            computeFilteredDeviceList(revealIdsAndLabels, [completionHandler = WTFMove(completionHandler), deviceIDHashSalt] (Vector&lt;CaptureDevice&gt;&amp;&amp; devices) mutable {

deviceIDHashSalt = WTFMove(deviceIDHashSalt)

&gt; Source/WebKit/UIProcess/UserMediaProcessManager.cpp:222
&gt; +    WebCore::RealtimeMediaSourceCenter::singleton().getMediaStreamDevices([this, shouldNotify] (Vector&lt;WebCore::CaptureDevice&gt;&amp;&amp; newDevices) mutable {

auto&amp;&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718722</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-11 10:09:11 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; Comment on attachment 417285 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417285&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:115
&gt; &gt; +void RealtimeMediaSourceCenter::getMediaStreamDevices(CompletionHandler&lt;void(Vector&lt;CaptureDevice&gt;)&gt;&amp;&amp; completion)
&gt; 
&gt; Should probably be CompletionHandler&lt;void(Vector&lt;CaptureDevice&gt;&amp;&amp;)&gt;&amp;&amp;.
&gt; Here and below

Sure.

&gt; &gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:117
&gt; &gt; +    class CaptureDeviceAccumulator : public RefCounted&lt;CaptureDeviceAccumulator&gt; {
&gt; 
&gt; Can we use CallbackAggregator instead?

No, despite its name, CallbackAggregator doesn&apos;t aggregate the results passed into the callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718789</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-11 12:55:03 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; Comment on attachment 417285 [details]
&gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:185
&gt; &gt; +        callOnWebThreadOrDispatchAsyncOnMainThread(makeBlockPtr([this, completion = WTFMove(completion), newAudioDevices = WTFMove(newAudioDevices)] () mutable {
&gt; 
&gt; Why not simply callOnMainThread? This code is not expected to work in WebKit
&gt; 1 anyway.

I&apos;m not looking to make any significant architectural changes here; the existing code calls to the WebThread, so I&apos;m going to keep that code in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718790</commentid>
    <comment_count>8</comment_count>
      <attachid>417285</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-11 12:57:06 -0800</bug_when>
    <thetext>Comment on attachment 417285
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:117
&gt;&gt;&gt; +    class CaptureDeviceAccumulator : public RefCounted&lt;CaptureDeviceAccumulator&gt; {
&gt;&gt; 
&gt;&gt; Can we use CallbackAggregator instead?
&gt; 
&gt; No, despite its name, CallbackAggregator doesn&apos;t aggregate the results passed into the callbacks.

That is a bit sad we do not have a pattern for it.
In any case, I think we should stick with the idea of calling the completion handler when CaptureDeviceAccumulator gets destroyed.
That should remove the need for m_resultsRemaining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719221</commentid>
    <comment_count>9</comment_count>
      <attachid>417512</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-12 23:47:28 -0800</bug_when>
    <thetext>Created attachment 417512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719228</commentid>
    <comment_count>10</comment_count>
      <attachid>417512</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-13 01:34:08 -0800</bug_when>
    <thetext>Comment on attachment 417512
Patch

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

&gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.h:37
&gt;      virtual const Vector&lt;CaptureDevice&gt;&amp; captureDevices() = 0;

Can we make captureDevices() private or protected at least?

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:184
&gt; +        auto newAudioDevices = retrieveAudioSessionCaptureDevices();

This is fine as is now but could easily break in the future if we decide to ref/unref some strings there.
I would tend to isolateCopy just in case.
Or we could make retrieveAudioSessionCaptureDevices a free function and pass it the audio session.

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:662
&gt; +    RealtimeMediaSourceCenter::singleton().getMediaStreamDevices([this, weakThis = makeWeakPtr(this), revealIdsAndLabels, completion = WTFMove(completion)] (auto&amp;&amp; devices) mutable {

We probably need a weakThis check here.

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:743
&gt; +            computeFilteredDeviceList(revealIdsAndLabels, [completionHandler = WTFMove(completionHandler), deviceIDHashSalt = WTFMove(deviceIDHashSalt)] (Vector&lt;CaptureDevice&gt;&amp;&amp; devices) mutable {

auto&amp;&amp;?

&gt; Source/WebKit/UIProcess/UserMediaProcessManager.cpp:222
&gt; +    WebCore::RealtimeMediaSourceCenter::singleton().getMediaStreamDevices([this, shouldNotify] (Vector&lt;WebCore::CaptureDevice&gt;&amp;&amp; newDevices) mutable {

auto&amp;&amp;?

&gt; LayoutTests/ChangeLog:12
&gt; +        does), then the test turns that into a video capture constraint, which fails.

I wonder why we have this change of behavior.
It seems the audiooutput was filtered out previously and is included now. This seems like a progression to me.

As a side bonus, we could make MockAudioCaptureDeviceManager implement getCaptureDevices and return the list of devices asynchronously to validate this code path.
That will make it closer to the real manager and might catch future bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719317</commentid>
    <comment_count>11</comment_count>
      <attachid>417512</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-13 09:50:06 -0800</bug_when>
    <thetext>Comment on attachment 417512
Patch

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

&gt;&gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.h:37
&gt;&gt;      virtual const Vector&lt;CaptureDevice&gt;&amp; captureDevices() = 0;
&gt; 
&gt; Can we make captureDevices() private or protected at least?

Private, probably not. Protected, maybe. I&apos;ll see.

&gt;&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:662
&gt;&gt; +    RealtimeMediaSourceCenter::singleton().getMediaStreamDevices([this, weakThis = makeWeakPtr(this), revealIdsAndLabels, completion = WTFMove(completion)] (auto&amp;&amp; devices) mutable {
&gt; 
&gt; We probably need a weakThis check here.

Ok.

&gt;&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:743
&gt;&gt; +            computeFilteredDeviceList(revealIdsAndLabels, [completionHandler = WTFMove(completionHandler), deviceIDHashSalt = WTFMove(deviceIDHashSalt)] (Vector&lt;CaptureDevice&gt;&amp;&amp; devices) mutable {
&gt; 
&gt; auto&amp;&amp;?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719405</commentid>
    <comment_count>12</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-13 13:18:58 -0800</bug_when>
    <thetext>(In reply to Jer Noble from comment #11)
&gt; Comment on attachment 417512 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417512&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.h:37
&gt; &gt;&gt;      virtual const Vector&lt;CaptureDevice&gt;&amp; captureDevices() = 0;
&gt; &gt; 
&gt; &gt; Can we make captureDevices() private or protected at least?
&gt; 
&gt; Private, probably not. Protected, maybe. I&apos;ll see.

Nope: 

```
./platform/mediastream/RealtimeMediaSourceCenter.cpp:211:79: error: &apos;captureDevices&apos; is a protected member of &apos;WebCore::CaptureDeviceManager&apos;
```

I think we&apos;ll need to go even further to purge all the synchronous calls from the rest of WebKit before we can do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719420</commentid>
    <comment_count>13</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-13 13:57:44 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #10)
&gt; Comment on attachment 417512 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417512&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.h:37
&gt; &gt;      virtual const Vector&lt;CaptureDevice&gt;&amp; captureDevices() = 0;
&gt; 
&gt; Can we make captureDevices() private or protected at least?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:184
&gt; &gt; +        auto newAudioDevices = retrieveAudioSessionCaptureDevices();
&gt; 
&gt; This is fine as is now but could easily break in the future if we decide to
&gt; ref/unref some strings there.
&gt; I would tend to isolateCopy just in case.

```
usr/local/include/wtf/Vector.h:1610:38: No member named &apos;isolatedCopy&apos; in &apos;WebCore::AVAudioSessionCaptureDevice&apos;
```

We&apos;d need to implement an isolatedCopy() method on the capture device first; we can do that as a follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719421</commentid>
    <comment_count>14</comment_count>
      <attachid>417560</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-01-13 14:00:16 -0800</bug_when>
    <thetext>Created attachment 417560
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719471</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-13 16:01:42 -0800</bug_when>
    <thetext>Committed r271471: &lt;https://trac.webkit.org/changeset/271471&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417560.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719826</commentid>
    <comment_count>16</comment_count>
      <attachid>417560</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-01-15 02:02:18 -0800</bug_when>
    <thetext>Comment on attachment 417560
Patch for landing

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

&gt; LayoutTests/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=220493

The title and bug number is wrong here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417285</attachid>
            <date>2021-01-08 11:54:22 -0800</date>
            <delta_ts>2021-01-12 23:47:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220471-20210108115421.patch</filename>
            <type>text/plain</type>
            <size>27459</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc3MDJlZDUwMjMzOTBi
OTFiZDRlNjY1Y2IxYzAyOTY4YjJiOGI4Ni4uNWQ5NTBlNDNkOTNlZDc1OGFhMTBiM2FmOGRkZGZl
YzRkODA3MTgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTAxLTA4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtIQU5HXSA0OTZtcyB0byAx
MzYwbXMgaW4gV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVm
cmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNDcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Z2V0
TWVkaWFTdHJlYW1EZXZpY2VzKCkgdG8gdGFrZSBhIGNvbXBsZXRpb24gaGFuZGxlciwgcmF0aGVy
IHRoYW4KKyAgICAgICAgc3luY2hyb25vdXNseSByZXR1cm4gYSBWZWN0b3Igb2YgQ2FwdHVyZURl
dmljZXMuIFRoaXMgYWxzbyByZXF1aXJlcyBhbGwgQ2FwdHVyZURldmljZU1hbmFnZXIgc3ViY2xh
c3NlcworICAgICAgICB0byBzdXBwb3J0IHRha2luZyBhIGNvbXBsZXRpb24gaGFuZGxlciB0aGVt
c2VsdmVzLiBCeSBkZWZhdWx0LCBhbGwgQ2FwdHVyZURldmljZU1hbmFnZXJzIHdpbGwgc3VwcG9y
dAorICAgICAgICB0aGUgQ29tcGxldGlvbkhhbmRsZXIgcGF0aCBieSBqdXN0IHN5bmNocm9ub3Vz
bHkgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdpdGggdGhlIGV4aXN0aW5nCisgICAg
ICAgIHN5bmNocm9ub3VzIG1ldGhvZC4gQnV0IGZvciBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLCBvdmVycmlkZSB0aGF0IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYnkKKyAgICAg
ICAgYWN0aXZhdGluZyB0aGUgQVZBdWRpb1Nlc3Npb24gb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwg
YW5kIHF1ZXJ5aW5nIHRoYXQgc2Vzc2lvbidzIGlucHV0cyBvbiBhIGJhY2tncm91bmQKKyAgICAg
ICAgdGhyZWFkIGFzIHdlbGwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0
dXJlRGV2aWNlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlcjo6Z2V0TWVkaWFTdHJlYW1EZXZpY2VzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUZhY3RvcnkuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvQ2FwdHVyZUZhY3Rvcnk6OmdldFNwZWFrZXJEZXZpY2VzIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1
ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6YXVkaW9TZXNzaW9uRGV2aWNlV2l0aFVJ
RCk6CisgICAgICAgIChXZWJDb3JlOjpBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzY2hlZHVsZVVwZGF0ZUNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6
OmdldENhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZU1hbmFnZXI6OmFjdGl2YXRlQXVkaW9TZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OnJldHJpZXZlQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2V0QXVkaW9DYXB0dXJlRGV2aWNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjphdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlcyk6IERlbGV0ZWQuCisKIDIwMjEtMDEtMDUgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBSZXZlcnQgYXVkaW9UaW1lUGl0
Y2hBbGdvcml0aG0gdG8gIlRpbWVEb21haW4iIGZyb20gIlNwZWN0cmFsIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBk
ODE4ZDUyZTk4MzY2YWNjYzZhMjI1MzEwZWZmOGUwYjU5ZDA3NjMwLi5jNDQyNjkyOTkwN2E0ODA5
YWE5Mjc3YjkwNTUxYTQ2NTVjYTk3OTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIx
LTAxLTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtIQU5H
XSA0OTZtcyB0byAxMzYwbXMgaW4gV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNl
TWFuYWdlcjo6cmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNDcxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIHRoZSBjb21wbGV0aW9uLWhhbmRsZXIg
dmVyc2lvbiBvZiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpnZXRNZWRpYVN0cmVhbURldmlj
ZXMoKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5Ojpjb21wdXRlRmlsdGVyZWREZXZpY2VMaXN0KToKKyAgICAgICAgKFdl
YktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmVudW1lcmF0ZU1l
ZGlhRGV2aWNlc0ZvckZyYW1lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlh
UHJvY2Vzc01hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFu
YWdlcjo6dXBkYXRlQ2FwdHVyZURldmljZXMpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQ
cm9jZXNzTWFuYWdlcjo6YmVnaW5Nb25pdG9yaW5nQ2FwdHVyZURldmljZXMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oOgorCiAyMDIxLTAxLTA1ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gUmV2ZXJ0IGF1
ZGlvVGltZVBpdGNoQWxnb3JpdGhtIHRvICJUaW1lRG9tYWluIiBmcm9tICJTcGVjdHJhbCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJl
RGV2aWNlTWFuYWdlci5oCmluZGV4IDJmY2ZhMGIwMzZiZDA5YmZlZTZjMDkwZWNhNmExZTEyZmU2
YWJjOGUuLjc2MjBhZDI1N2Y0ODNlMzMyNTc1MDc3Nzc1M2IwY2EzMzQ2NWY1NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2VNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURl
dmljZU1hbmFnZXIuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBXRUJDT1JFX0VYUE9SVCBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCBjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRDYXB0dXJlRGV2aWNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjayhjb3B5VG9W
ZWN0b3IoY2FwdHVyZURldmljZXMoKSkpOyB9OwogICAgIHZpcnR1YWwgT3B0aW9uYWw8Q2FwdHVy
ZURldmljZT4gY2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoQ2FwdHVyZURldmljZTo6RGV2
aWNlVHlwZSwgY29uc3QgU3RyaW5nJikgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByb3Rl
Y3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKaW5kZXggYzFkOTZhYjFhY2E5
ZWU2M2RjZmI0ZmZlYjJiMjZhODU1MDJjNTI3OS4uYWFhZGEwZWRjNjQ4NzM2MmUzYTkwMzA5NjBj
ZTQ2ZmIwM2U0MjQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTEx
MiwyNyArMTEyLDUzIEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Y3JlYXRlTWVk
aWFTdHJlYW0oUmVmPGNvbnN0IExvZ2dlcj4mJiBsb2dnZXIsIE5lCiAgICAgYXVkaW9Tb3VyY2Ut
PndoZW5SZWFkeShXVEZNb3ZlKHdoZW5BdWRpb1NvdXJjZVJlYWR5KSk7CiB9CiAKLVZlY3RvcjxD
YXB0dXJlRGV2aWNlPiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpnZXRNZWRpYVN0cmVhbURl
dmljZXMoKQordm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpnZXRNZWRpYVN0cmVhbURl
dmljZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4pPiYmIGNv
bXBsZXRpb24pCiB7Ci0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IHJlc3VsdDsKLSAgICBmb3Ig
KGF1dG8mIGRldmljZSA6IGF1ZGlvQ2FwdHVyZUZhY3RvcnkoKS5hdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyKCkuY2FwdHVyZURldmljZXMoKSkgewotICAgICAgICBpZiAoZGV2aWNlLmVuYWJsZWQo
KSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGV2aWNlKTsKLSAgICB9Ci0gICAgZm9yIChh
dXRvJiBkZXZpY2UgOiBhdWRpb0NhcHR1cmVGYWN0b3J5KCkuc3BlYWtlckRldmljZXMoKSkgewot
ICAgICAgICBpZiAoZGV2aWNlLmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
ZGV2aWNlKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBkZXZpY2UgOiB2aWRlb0NhcHR1cmVGYWN0
b3J5KCkudmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpLmNhcHR1cmVEZXZpY2VzKCkpIHsKLSAg
ICAgICAgaWYgKGRldmljZS5lbmFibGVkKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRl
dmljZSk7Ci0gICAgfQotICAgIGZvciAoYXV0byYgZGV2aWNlIDogZGlzcGxheUNhcHR1cmVGYWN0
b3J5KCkuZGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkuY2FwdHVyZURldmljZXMoKSkgewot
ICAgICAgICBpZiAoZGV2aWNlLmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
ZGV2aWNlKTsKLSAgICB9CisgICAgY2xhc3MgQ2FwdHVyZURldmljZUFjY3VtdWxhdG9yIDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2FwdHVyZURldmljZUFjY3VtdWxhdG9yPiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUmVmPENhcHR1cmVEZXZpY2VBY2N1bXVsYXRvcj4gY3JlYXRlKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENhcHR1cmVEZXZpY2U+KT4mJiBjb21wbGV0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYXB0dXJlRGV2aWNl
QWNjdW11bGF0b3IoV1RGTW92ZShjb21wbGV0aW9uKSkpOworICAgICAgICB9CisKKyAgICAgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4pPiBhY2N1bXVsYXRl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgKyttX3Jlc3VsdHNSZW1haW5pbmc7CisgICAgICAg
ICAgICByZXR1cm4gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFZlY3Rv
cjxDYXB0dXJlRGV2aWNlPiByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBw
ZW5kVmVjdG9yKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgY29sbGVjdFJlc3Vs
dHMoKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIHZvaWQgY29sbGVjdFJlc3VsdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IS0tbV9yZXN1bHRzUmVtYWluaW5nKQorICAgICAgICAgICAgICAgIG1fY29tcGxldGlvbihtX3Jl
c3VsdHMpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDYXB0dXJlRGV2aWNl
QWNjdW11bGF0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4p
PiYmIGNvbXBsZXRpb24pCisgICAgICAgICAgICA6IG1fY29tcGxldGlvbihXVEZNb3ZlKGNvbXBs
ZXRpb24pKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPik+IG1fY29tcGxldGlvbjsKKyAgICAgICAgdW5z
aWduZWQgbV9yZXN1bHRzUmVtYWluaW5nIHsgMSB9OworICAgICAgICBWZWN0b3I8Q2FwdHVyZURl
dmljZT4gbV9yZXN1bHRzOworICAgIH07CisKKyAgICBhdXRvIGFjY3VtdWxhdG9yID0gQ2FwdHVy
ZURldmljZUFjY3VtdWxhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb24gPSBXVEZNb3ZlKGNvbXBsZXRp
b24pXSAoVmVjdG9yPENhcHR1cmVEZXZpY2U+IGRldmljZXMpIG11dGFibGUgeworICAgICAgICBk
ZXZpY2VzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChhdXRvJiBjYXB0dXJlRGV2aWNlKSB7CisgICAg
ICAgICAgICByZXR1cm4gIWNhcHR1cmVEZXZpY2UuZW5hYmxlZCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgY29tcGxldGlvbihkZXZpY2VzKTsKKyAgICB9KTsKKworICAgIGF1ZGlvQ2FwdHVyZUZh
Y3RvcnkoKS5hdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkuZ2V0Q2FwdHVyZURldmljZXMoYWNj
dW11bGF0b3ItPmFjY3VtdWxhdGUoKSk7CisgICAgdmlkZW9DYXB0dXJlRmFjdG9yeSgpLnZpZGVv
Q2FwdHVyZURldmljZU1hbmFnZXIoKS5nZXRDYXB0dXJlRGV2aWNlcyhhY2N1bXVsYXRvci0+YWNj
dW11bGF0ZSgpKTsKKyAgICBkaXNwbGF5Q2FwdHVyZUZhY3RvcnkoKS5kaXNwbGF5Q2FwdHVyZURl
dmljZU1hbmFnZXIoKS5nZXRDYXB0dXJlRGV2aWNlcyhhY2N1bXVsYXRvci0+YWNjdW11bGF0ZSgp
KTsKKyAgICBhdWRpb0NhcHR1cmVGYWN0b3J5KCkuZ2V0U3BlYWtlckRldmljZXMoYWNjdW11bGF0
b3ItPmFjY3VtdWxhdGUoKSk7CisgICAgYWNjdW11bGF0b3ItPmNvbGxlY3RSZXN1bHRzKCk7CiB9
CiAKIHN0YXRpYyB2b2lkIGFkZFN0cmluZ1RvU0hBMShTSEExJiBzaGExLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaAppbmRleCAwMjgyODY1OGUwOWVh
ZGU5NzIxMThhZGVjZGMxN2YzNjRmZWEzMGUxLi41ODQxMzNlNmNjZWJlYmZjODU5YmU3OTI0NzNl
ZjgwMzA3MDAyZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oCkBAIC02Niw3ICs2
Niw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBOZXdNZWRpYVN0cmVhbUhhbmRsZXIgPSBGdW5jdGlv
bjx2b2lkKEV4cGVjdGVkPFJlZjxNZWRpYVN0cmVhbVByaXZhdGU+LCBTdHJpbmc+JiYpPjsKICAg
ICB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFJlZjxjb25zdCBMb2dnZXI+JiYsIE5ld01lZGlhU3Ry
ZWFtSGFuZGxlciYmLCBTdHJpbmcmJiwgQ2FwdHVyZURldmljZSYmIGF1ZGlvRGV2aWNlLCBDYXB0
dXJlRGV2aWNlJiYgdmlkZW9EZXZpY2UsIGNvbnN0IE1lZGlhU3RyZWFtUmVxdWVzdCYpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPENhcHR1cmVEZXZpY2U+IGdldE1lZGlhU3RyZWFtRGV2
aWNlcygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0TWVkaWFTdHJlYW1EZXZpY2VzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENhcHR1cmVEZXZpY2U+KT4mJik7CiAKICAgICBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENv
bnN0cmFpbnRzKCkgeyByZXR1cm4gbV9zdXBwb3J0ZWRDb25zdHJhaW50czsgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUZhY3RvcnkuaAppbmRleCBiMTdjNzNmYzA5NWZiMmY1YzkyOTIxMGNhYjdj
NzRiZmVkYTkwNzZkLi5kZTBjODA2NGZjY2RmMjI0OWZkZjcwNzE3N2RjYzdiOTdjNzkwZWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VGYWN0b3J5LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC02Miw2ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENhcHR1cmVTb3Vy
Y2VPckVycm9yIGNyZWF0ZUF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJiwg
U3RyaW5nJiYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKSA9IDA7CiAgICAgdmlydHVhbCBDYXB0
dXJlRGV2aWNlTWFuYWdlciYgYXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpID0gMDsKICAgICB2
aXJ0dWFsIGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgc3BlYWtlckRldmljZXMoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNwZWFrZXJEZXZpY2VzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiYpPiYmIGNvbXBsZXRpb24pIGNvbnN0IHsg
Y29tcGxldGlvbihjb3B5VG9WZWN0b3Ioc3BlYWtlckRldmljZXMoKSkpOyB9CiAKICAgICBjbGFz
cyBFeHRlbnNpdmVPYnNlcnZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxFeHRlbnNpdmVPYnNl
cnZlcj4geyB9OwogICAgIHZpcnR1YWwgdm9pZCBhZGRFeHRlbnNpdmVPYnNlcnZlcihFeHRlbnNp
dmVPYnNlcnZlciYpIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlTWFuYWdlci5oCmluZGV4IDJiYzU2NDJlZmU3Y2UxMjBkYzA1NmM3ZDA3Y2Y4YWY1MjA4
N2I5MjkuLjNjYmU4Y2VhNjg1YTU0NTg4MjBkZjI4OGJkZjZjYTZkZWFiMjNiOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaApAQCAtNDgs
NiArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmlj
ZU1hbmFnZXImIHNpbmdsZXRvbigpOwogCiAgICAgY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+
JiBjYXB0dXJlRGV2aWNlcygpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2FwdHVyZURldmljZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4mJik+JiYpIGZpbmFsOwog
ICAgIGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgc3BlYWtlckRldmljZXMoKSBjb25zdCB7
IHJldHVybiBtX3NwZWFrZXJEZXZpY2VzOyB9CiAgICAgT3B0aW9uYWw8Q2FwdHVyZURldmljZT4g
Y2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSwg
Y29uc3QgU3RyaW5nJik7CiAKQEAgLTYzLDggKzY0LDEwIEBAIHByaXZhdGU6CiAgICAgfkFWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIoKTsKIAogICAgIHZvaWQgY3JlYXRlQXVkaW9T
ZXNzaW9uKCk7CisgICAgdm9pZCBhY3RpdmF0ZUF1ZGlvU2Vzc2lvbigpOwogICAgIHZvaWQgcmVm
cmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKTsKLSAgICBWZWN0b3I8QVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlPiYgYXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZXMoKTsKKyAgICBWZWN0b3I8QVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiByZXRyaWV2ZUF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBdWRpb0NhcHR1cmVEZXZpY2VzKFZlY3RvcjxBVkF1
ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+JiYpOwogCiAgICAgZW51bSBjbGFzcyBBdWRpb1Nlc3Np
b25TdGF0ZSB7IE5vdE5lZWRlZCwgSW5hY3RpdmUsIEFjdGl2ZSB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCmluZGV4IDVkODg5ZjU2
ZTk4YjcwMDNiNzAzYTM2MjA3NzljZjRkOWM1NTQ1YWUuLjc0MGM5NWI5NDgwYzUxZTk0YzBkMWIy
ZGRmYzhhZjNiMjgyMzM3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLm1tCkBAIC0xMzYsMTYgKzEzNiwxMiBAQCBPcHRpb25hbDxDYXB0
dXJlRGV2aWNlPiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2
aWNlV2l0aFBlcgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVZlY3RvcjxBVkF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2U+JiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjphdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcygpCitPcHRpb25hbDxBVkF1ZGlvU2Vzc2lvbkNh
cHR1cmVEZXZpY2U+IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmF1ZGlvU2Vz
c2lvbkRldmljZVdpdGhVSUQoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKIHsKICAgICBpZiAoIW1f
YXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZXMpCiAgICAgICAgIHJlZnJlc2hBdWRpb0NhcHR1cmVE
ZXZpY2VzKCk7Ci0gICAgcmV0dXJuIG1fYXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZXMudmFsdWUo
KTsKLX0KIAotT3B0aW9uYWw8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBBVkF1ZGlvU2Vz
c2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjphdWRpb1Nlc3Npb25EZXZpY2VXaXRoVUlEKGNvbnN0
IFN0cmluZyYgZGV2aWNlSUQpCi17Ci0gICAgZm9yIChhdXRvJiBkZXZpY2UgOiBhdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlcygpKSB7CisgICAgZm9yIChhdXRvJiBkZXZpY2UgOiAqbV9hdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlcykgewogICAgICAgICBpZiAoZGV2aWNlLnBlcnNpc3RlbnRJZCgp
ID09IGRldmljZUlEKQogICAgICAgICAgICAgcmV0dXJuIGRldmljZTsKICAgICB9CkBAIC0xNTQs
NDIgKzE1MCw3MSBAQCBPcHRpb25hbDxBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+IEFWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmF1ZGlvUwogCiB2b2lkIEFWQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OnNjaGVkdWxlVXBkYXRlQ2FwdHVyZURldmljZXMoKQog
ewotICAgIGlmIChtX3VwZGF0ZURldmljZVN0YXRlUXVldWUuaGFzUGVuZGluZ1Rhc2tzKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fdXBkYXRlRGV2aWNlU3RhdGVRdWV1ZS5lbnF1ZXVlVGFz
ayhbdGhpc10gewotICAgICAgICByZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpOwotICAgIH0p
OworICAgIGdldENhcHR1cmVEZXZpY2VzKFtdIChWZWN0b3I8Q2FwdHVyZURldmljZT4pIHsgfSk7
CiB9CiAKIHZvaWQgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaEF1
ZGlvQ2FwdHVyZURldmljZXMoKQogewotICAgIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhh
dmUgY3JlYXRlZCB0aGUgYXVkaW8gc2Vzc2lvbi4KLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwotICAgIH0KLSAgICBib29sIGZpcnN0VGltZSA9ICFtX2RldmljZXM7CiAg
ICAgaWYgKG1fYXVkaW9TZXNzaW9uU3RhdGUgPT0gQXVkaW9TZXNzaW9uU3RhdGU6OkluYWN0aXZl
KSB7CiAgICAgICAgIG1fYXVkaW9TZXNzaW9uU3RhdGUgPSBBdWRpb1Nlc3Npb25TdGF0ZTo6QWN0
aXZlOwogCi0gICAgICAgIGlmICghbV9saXN0ZW5lcikKLSAgICAgICAgICAgIG1fbGlzdGVuZXIg
PSBhZG9wdE5TKFtbV2ViQVZBdWRpb1Nlc3Npb25BdmFpbGFibGVJbnB1dHNMaXN0ZW5lciBhbGxv
Y10gaW5pdFdpdGhDYWxsYmFjazp0aGlzIGF1ZGlvU2Vzc2lvbjptX2F1ZGlvU2Vzc2lvbi5nZXQo
KV0pOworICAgICAgICBkaXNwYXRjaF9zeW5jKG1fZGlzcGF0Y2hRdWV1ZSwgbWFrZUJsb2NrUHRy
KFt0aGlzXSB7CisgICAgICAgICAgICBhY3RpdmF0ZUF1ZGlvU2Vzc2lvbigpOworICAgICAgICB9
KS5nZXQoKSk7CisgICAgfQogCi0gICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgICAg
ICBbbV9hdWRpb1Nlc3Npb24gc2V0QWN0aXZlOllFUyB3aXRoT3B0aW9uczowIGVycm9yOiZlcnJv
cl07Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdl
YlJUQywgIkZhaWxlZCB0byBhY3RpdmF0ZSBhdWRpbyBzZXNzaW9uIHdpdGggZXJyb3I6ICVALiIs
IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKTsKKyAgICBWZWN0b3I8QVZBdWRpb1Nlc3Npb25D
YXB0dXJlRGV2aWNlPiBuZXdBdWRpb0RldmljZXM7CisgICAgZGlzcGF0Y2hfc3luYyhtX2Rpc3Bh
dGNoUXVldWUsIG1ha2VCbG9ja1B0cihbJl0geworICAgICAgICBuZXdBdWRpb0RldmljZXMgPSBy
ZXRyaWV2ZUF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKCk7CisgICAgfSkuZ2V0KCkpOworICAg
IHNldEF1ZGlvQ2FwdHVyZURldmljZXMoV1RGTW92ZShuZXdBdWRpb0RldmljZXMpKTsKK30KKwor
dm9pZCBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRDYXB0dXJlRGV2aWNl
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmKT4mJiBjb21w
bGV0aW9uKQoreworICAgIGlmIChtX2F1ZGlvU2Vzc2lvblN0YXRlID09IEF1ZGlvU2Vzc2lvblN0
YXRlOjpJbmFjdGl2ZSkgeworICAgICAgICBtX2F1ZGlvU2Vzc2lvblN0YXRlID0gQXVkaW9TZXNz
aW9uU3RhdGU6OkFjdGl2ZTsKKworICAgICAgICBkaXNwYXRjaF9hc3luYyhtX2Rpc3BhdGNoUXVl
dWUsIG1ha2VCbG9ja1B0cihbdGhpc10geworICAgICAgICAgICAgYWN0aXZhdGVBdWRpb1Nlc3Np
b24oKTsKKyAgICAgICAgfSkuZ2V0KCkpOwogICAgIH0KIAorICAgIGRpc3BhdGNoX2FzeW5jKG1f
ZGlzcGF0Y2hRdWV1ZSwgbWFrZUJsb2NrUHRyKFt0aGlzLCBjb21wbGV0aW9uID0gV1RGTW92ZShj
b21wbGV0aW9uKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gbmV3QXVkaW9EZXZpY2VzID0g
cmV0cmlldmVBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcygpOworICAgICAgICBjYWxsT25XZWJU
aHJlYWRPckRpc3BhdGNoQXN5bmNPbk1haW5UaHJlYWQobWFrZUJsb2NrUHRyKFt0aGlzLCBjb21w
bGV0aW9uID0gV1RGTW92ZShjb21wbGV0aW9uKSwgbmV3QXVkaW9EZXZpY2VzID0gV1RGTW92ZShu
ZXdBdWRpb0RldmljZXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHNldEF1ZGlvQ2FwdHVy
ZURldmljZXMoV1RGTW92ZShuZXdBdWRpb0RldmljZXMpKTsKKyAgICAgICAgICAgIGNvbXBsZXRp
b24oY29weVRvVmVjdG9yKCptX2RldmljZXMpKTsKKyAgICAgICAgfSkuZ2V0KCkpOworICAgIH0p
LmdldCgpKTsKK30KKwordm9pZCBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjph
Y3RpdmF0ZUF1ZGlvU2Vzc2lvbigpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyKQorICAgICAgICBt
X2xpc3RlbmVyID0gYWRvcHROUyhbW1dlYkFWQXVkaW9TZXNzaW9uQXZhaWxhYmxlSW5wdXRzTGlz
dGVuZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpcyBhdWRpb1Nlc3Npb246bV9hdWRpb1Nl
c3Npb24uZ2V0KCldKTsKKworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIFttX2F1ZGlv
U2Vzc2lvbiBzZXRBY3RpdmU6WUVTIHdpdGhPcHRpb25zOjAgZXJyb3I6JmVycm9yXTsKKyAgICBp
ZiAoZXJyb3IpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkZhaWxlZCB0byBh
Y3RpdmF0ZSBhdWRpbyBzZXNzaW9uIHdpdGggZXJyb3I6ICVALiIsIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKTsKK30KKworVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZT4gQVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmV0cmlldmVBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlcygpIGNvbnN0Cit7CiAgICAgVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZT4gbmV3QXVkaW9EZXZpY2VzOwotICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiBuZXdEZXZp
Y2VzOwogICAgIGF1dG8gKmRlZmF1bHRJbnB1dCA9IFttX2F1ZGlvU2Vzc2lvbiBjdXJyZW50Um91
dGVdLmlucHV0cy5maXJzdE9iamVjdDsKLSAgICBmb3IgKEFWQXVkaW9TZXNzaW9uUG9ydERlc2Ny
aXB0aW9uICpwb3J0RGVzY3JpcHRpb24gaW4gW21fYXVkaW9TZXNzaW9uIGF2YWlsYWJsZUlucHV0
c10pIHsKLSAgICAgICAgYXV0byBhdWRpb0RldmljZSA9IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZTo6Y3JlYXRlKHBvcnREZXNjcmlwdGlvbiwgZGVmYXVsdElucHV0KTsKLSAgICAgICAgbmV3
RGV2aWNlcy5hcHBlbmQoYXVkaW9EZXZpY2UpOwotICAgICAgICBuZXdBdWRpb0RldmljZXMuYXBw
ZW5kKFdURk1vdmUoYXVkaW9EZXZpY2UpKTsKLSAgICB9CisgICAgbmV3QXVkaW9EZXZpY2VzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoW21fYXVkaW9TZXNzaW9uIGF2YWlsYWJsZUlucHV0c10uY291
bnQpOworCisgICAgZm9yIChBVkF1ZGlvU2Vzc2lvblBvcnREZXNjcmlwdGlvbiAqcG9ydERlc2Ny
aXB0aW9uIGluIFttX2F1ZGlvU2Vzc2lvbiBhdmFpbGFibGVJbnB1dHNdKQorICAgICAgICBuZXdB
dWRpb0RldmljZXMudW5jaGVja2VkQXBwZW5kKEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZTo6
Y3JlYXRlKHBvcnREZXNjcmlwdGlvbiwgZGVmYXVsdElucHV0KSk7CiAKKyAgICByZXR1cm4gbmV3
QXVkaW9EZXZpY2VzOworfQorCit2b2lkIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFn
ZXI6OnNldEF1ZGlvQ2FwdHVyZURldmljZXMoVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZT4mJiBuZXdBdWRpb0RldmljZXMpCit7CisgICAgYm9vbCBmaXJzdFRpbWUgPSAhbV9kZXZp
Y2VzOwogICAgIGJvb2wgaGF2ZURldmljZUNoYW5nZXMgPSAhbV9kZXZpY2VzIHx8IG5ld0F1ZGlv
RGV2aWNlcy5zaXplKCkgIT0gbV9kZXZpY2VzLT5zaXplKCk7CiAgICAgaWYgKCFoYXZlRGV2aWNl
Q2hhbmdlcykgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0F1ZGlvRGV2aWNl
cy5zaXplKCk7ICsraSkgewpAQCAtMjAzLDYgKzIyOCw3IEBAIHZvaWQgQVZBdWRpb1Nlc3Npb25D
YXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKQogICAgIGlm
ICghaGF2ZURldmljZUNoYW5nZXMgJiYgIWZpcnN0VGltZSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgYXV0byBuZXdEZXZpY2VzID0gY29weVRvVmVjdG9yT2Y8Q2FwdHVyZURldmljZT4obmV3QXVk
aW9EZXZpY2VzKTsKICAgICBtX2F1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzID0gV1RGTW92ZShu
ZXdBdWRpb0RldmljZXMpOwogICAgIHN0ZDo6c29ydChuZXdEZXZpY2VzLmJlZ2luKCksIG5ld0Rl
dmljZXMuZW5kKCksIFtdIChhdXRvJiBmaXJzdCwgYXV0byYgc2Vjb25kKSAtPiBib29sIHsKICAg
ICAgICAgcmV0dXJuIGZpcnN0LmlzRGVmYXVsdCgpICYmICFzZWNvbmQuaXNEZWZhdWx0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggNGVmZWY5OTY5NDk1NzFiNTU2
Y2EzNGNhYjQ3MWZkZmZkNDVkZjUzZi4uMjkwZDYxMzVjNjFmZGNjODRlYWExNmFkNzk2ODMyZjVm
ODViZWJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtNjU0LDQw
ICs2NTQsNDEgQEAgc3RhdGljIGlubGluZSBib29sIGhhdmVNaWNyb3Bob25lRGV2aWNlKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDYXB0dXJlRGV2aWNlPiYgZGUKICAgICB9KTsKIH0KIAotVmVjdG9y
PENhcHR1cmVEZXZpY2U+IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojpj
b21wdXRlRmlsdGVyZWREZXZpY2VMaXN0KGJvb2wgcmV2ZWFsSWRzQW5kTGFiZWxzKQordm9pZCBV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6Y29tcHV0ZUZpbHRlcmVkRGV2
aWNlTGlzdChib29sIHJldmVhbElkc0FuZExhYmVscywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8Q2FwdHVyZURldmljZT4mJik+JiYgY29tcGxldGlvbikKIHsKICAgICBzdGF0aWMgY29u
c3QgaW50IGRlZmF1bHRNYXhpbXVtQ2FtZXJhQ291bnQgPSAxOwogICAgIHN0YXRpYyBjb25zdCBp
bnQgZGVmYXVsdE1heGltdW1NaWNyb3Bob25lQ291bnQgPSAxOwogCi0gICAgYXV0byBkZXZpY2Vz
ID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuZ2V0TWVkaWFTdHJlYW1E
ZXZpY2VzKCk7Ci0gICAgaW50IGNhbWVyYUNvdW50ID0gMDsKLSAgICBpbnQgbWljcm9waG9uZUNv
dW50ID0gMDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5nZXRN
ZWRpYVN0cmVhbURldmljZXMoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHJl
dmVhbElkc0FuZExhYmVscywgY29tcGxldGlvbiA9IFdURk1vdmUoY29tcGxldGlvbildIChWZWN0
b3I8Q2FwdHVyZURldmljZT4gZGV2aWNlcykgbXV0YWJsZSB7CisgICAgICAgIGludCBjYW1lcmFD
b3VudCA9IDA7CisgICAgICAgIGludCBtaWNyb3Bob25lQ291bnQgPSAwOwogCi0gICAgVmVjdG9y
PENhcHR1cmVEZXZpY2U+IGZpbHRlcmVkRGV2aWNlczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGRl
dmljZSA6IGRldmljZXMpIHsKLSAgICAgICAgaWYgKCFkZXZpY2UuZW5hYmxlZCgpIHx8IChkZXZp
Y2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSAm
JiBkZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1p
Y3JvcGhvbmUgJiYgZGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpTcGVha2VyKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICgh
cmV2ZWFsSWRzQW5kTGFiZWxzKSB7Ci0gICAgICAgICAgICBpZiAoZGV2aWNlLnR5cGUoKSA9PSBX
ZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgKytjYW1lcmFDb3Vu
dCA+IGRlZmF1bHRNYXhpbXVtQ2FtZXJhQ291bnQpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAoZGV2aWNlLnR5cGUoKSA9PSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lICYmICsrbWljcm9waG9uZUNvdW50ID4gZGVmYXVsdE1h
eGltdW1NaWNyb3Bob25lQ291bnQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAoZGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VU
eXBlOjpDYW1lcmEgJiYgZGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpE
ZXZpY2VUeXBlOjpNaWNyb3Bob25lKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugb25seSBleHBvc2Ugc3BlYWtlcnMgdGllZCB0
byBhIG1pY3JvcGhvbmUgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoZGV2aWNlLnR5
cGUoKSA9PSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTcGVha2VyICYmICFo
YXZlTWljcm9waG9uZURldmljZShkZXZpY2VzLCBkZXZpY2UuZ3JvdXBJZCgpKSkKKyAgICAgICAg
VmVjdG9yPENhcHR1cmVEZXZpY2U+IGZpbHRlcmVkRGV2aWNlczsKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBkZXZpY2UgOiBkZXZpY2VzKSB7CisgICAgICAgICAgICBpZiAoIWRldmljZS5lbmFi
bGVkKCkgfHwgKGRldmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNl
VHlwZTo6Q2FtZXJhICYmIGRldmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6TWljcm9waG9uZSAmJiBkZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1
cmVEZXZpY2U6OkRldmljZVR5cGU6OlNwZWFrZXIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9CiAKLSAgICAgICAgZmlsdGVyZWREZXZpY2VzLmFwcGVuZChyZXZlYWxJZHNB
bmRMYWJlbHMgPyBkZXZpY2UgOiBDYXB0dXJlRGV2aWNlKHsgfSwgZGV2aWNlLnR5cGUoKSwgeyB9
LCB7IH0pKTsKLSAgICB9CisgICAgICAgICAgICBpZiAoIXJldmVhbElkc0FuZExhYmVscykgewor
ICAgICAgICAgICAgICAgIGlmIChkZXZpY2UudHlwZSgpID09IFdlYkNvcmU6OkNhcHR1cmVEZXZp
Y2U6OkRldmljZVR5cGU6OkNhbWVyYSAmJiArK2NhbWVyYUNvdW50ID4gZGVmYXVsdE1heGltdW1D
YW1lcmFDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgaWYgKGRldmljZS50eXBlKCkgPT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlw
ZTo6TWljcm9waG9uZSAmJiArK21pY3JvcGhvbmVDb3VudCA+IGRlZmF1bHRNYXhpbXVtTWljcm9w
aG9uZUNvdW50KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoZGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBl
OjpDYW1lcmEgJiYgZGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpNaWNyb3Bob25lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBleHBvc2Ugc3BlYWtl
cnMgdGllZCB0byBhIG1pY3JvcGhvbmUgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAg
aWYgKGRldmljZS50eXBlKCkgPT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
U3BlYWtlciAmJiAhaGF2ZU1pY3JvcGhvbmVEZXZpY2UoZGV2aWNlcywgZGV2aWNlLmdyb3VwSWQo
KSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmaWx0ZXJlZERldmljZXMuYXBwZW5kKHJldmVhbElkc0FuZExhYmVscyA/IGRldmlj
ZSA6IENhcHR1cmVEZXZpY2UoeyB9LCBkZXZpY2UudHlwZSgpLCB7IH0sIHsgfSkpOworICAgICAg
ICB9CiAKLSAgICBtX2hhc0ZpbHRlcmVkRGV2aWNlTGlzdCA9ICFyZXZlYWxJZHNBbmRMYWJlbHM7
CisgICAgICAgIG1faGFzRmlsdGVyZWREZXZpY2VMaXN0ID0gIXJldmVhbElkc0FuZExhYmVsczsK
IAotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgZmlsdGVyZWREZXZpY2VzLnNpemUoKSwg
IiBkZXZpY2VzIHJldmVhbGVkIik7Ci0gICAgcmV0dXJuIGZpbHRlcmVkRGV2aWNlczsKKyAgICAg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCBmaWx0ZXJlZERldmljZXMuc2l6ZSgpLCAiIGRl
dmljZXMgcmV2ZWFsZWQiKTsKKyAgICAgICAgY29tcGxldGlvbihXVEZNb3ZlKGZpbHRlcmVkRGV2
aWNlcykpOworICAgIH0pOwogfQogI2VuZGlmCiAKQEAgLTczOSw3ICs3NDAsOSBAQCB2b2lkIFVz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjplbnVtZXJhdGVNZWRpYURldmlj
ZXNGb3JGcmFtZShGcmFtZQogICAgICAgICAgICAgYm9vbCByZXZlYWxJZHNBbmRMYWJlbHMgPSBv
cmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzIHx8IHdhc0dyYW50ZWRWaWRlb09yQXVkaW9BY2Nlc3Mo
ZnJhbWVJRCwgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4uZ2V0KCksIHRvcExldmVsRG9jdW1lbnRP
cmlnaW4uZ2V0KCkpOwogCiAgICAgICAgICAgICBjYWxsQ29tcGxldGlvbkhhbmRsZXIucmVsZWFz
ZSgpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29tcHV0ZUZpbHRlcmVkRGV2aWNl
TGlzdChyZXZlYWxJZHNBbmRMYWJlbHMpLCBkZXZpY2VJREhhc2hTYWx0KTsKKyAgICAgICAgICAg
IGNvbXB1dGVGaWx0ZXJlZERldmljZUxpc3QocmV2ZWFsSWRzQW5kTGFiZWxzLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZGV2aWNlSURIYXNoU2FsdF0g
KFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmIGRldmljZXMpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGRldmljZXMsIGRldmljZUlESGFzaFNhbHQpOworICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5oCmluZGV4IDVhZWQxNTI3Y2Y3MDEyMmI1MjMxZDNhOWQ4ZmE2YjA5NTE0MjNjY2MuLmMw
OWZkZjUxYjA0ZGVmNjFlNDRkZTM5OWI2NWVmM2EzMGQ2YzA2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAKICAgICBib29s
IHdhc0dyYW50ZWRWaWRlb09yQXVkaW9BY2Nlc3MoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luKTsKIAot
ICAgIFZlY3RvcjxXZWJDb3JlOjpDYXB0dXJlRGV2aWNlPiBjb21wdXRlRmlsdGVyZWREZXZpY2VM
aXN0KGJvb2wgcmV2ZWFsSWRzQW5kTGFiZWxzKTsKKyAgICB2b2lkIGNvbXB1dGVGaWx0ZXJlZERl
dmljZUxpc3QoYm9vbCByZXZlYWxJZHNBbmRMYWJlbHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U+JiYpPiYmKTsKIAogICAgIHZvaWQgcHJvY2Vz
c1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KCk7CiAgICAgdm9pZCBwcm9jZXNzVXNlck1lZGlh
UGVybWlzc2lvbkludmFsaWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vzc01h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vzc01hbmFn
ZXIuY3BwCmluZGV4IDI5ZjA5MjUyMmJhODIyMDJhZmIwNmFjNjRlN2RjYmI5NmQ0ZWE5NDIuLmFh
MTkwNmVjNDlmNzg4ZDM2NjA3NmU1NDI3MGFmOTBiYjdlY2NjMDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5jcHAKQEAgLTIxNyw0
MSArMjE3LDUxIEBAIHZvaWQgVXNlck1lZGlhUHJvY2Vzc01hbmFnZXI6OmNhcHR1cmVEZXZpY2Vz
Q2hhbmdlZCgpCiAgICAgfSk7CiB9CiAKK3ZvaWQgVXNlck1lZGlhUHJvY2Vzc01hbmFnZXI6OnVw
ZGF0ZUNhcHR1cmVEZXZpY2VzKFNob3VsZE5vdGlmeSBzaG91bGROb3RpZnkpCit7CisgICAgV2Vi
Q29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuZ2V0TWVkaWFTdHJl
YW1EZXZpY2VzKFt0aGlzLCBzaG91bGROb3RpZnldIChWZWN0b3I8V2ViQ29yZTo6Q2FwdHVyZURl
dmljZT4mJiBuZXdEZXZpY2VzKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBvbGREZXZpY2VzID0g
V1RGTW92ZShtX2NhcHR1cmVEZXZpY2VzKTsKKyAgICAgICAgbV9jYXB0dXJlRGV2aWNlcyA9IFdU
Rk1vdmUobmV3RGV2aWNlcyk7CisKKyAgICAgICAgaWYgKHNob3VsZE5vdGlmeSA9PSBTaG91bGRO
b3RpZnk6Ok5vKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX2NhcHR1cmVE
ZXZpY2VzLnNpemUoKSA9PSBvbGREZXZpY2VzLnNpemUoKSkgeworICAgICAgICAgICAgYm9vbCBo
YXZlQ2hhbmdlcyA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChhdXRvICZuZXdEZXZpY2UgOiBt
X2NhcHR1cmVEZXZpY2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKG5ld0RldmljZS50eXBlKCkg
IT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhICYmIG5ld0Rldmlj
ZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9u
ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRv
IGluZGV4ID0gb2xkRGV2aWNlcy5maW5kTWF0Y2hpbmcoWyZuZXdEZXZpY2VdIChhdXRvJiBvbGRE
ZXZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0RldmljZS5wZXJzaXN0ZW50
SWQoKSA9PSBvbGREZXZpY2UucGVyc2lzdGVudElkKCkgJiYgbmV3RGV2aWNlLmVuYWJsZWQoKSAh
PSBvbGREZXZpY2UuZW5hYmxlZCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGhhdmVD
aGFuZ2VzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWhhdmVDaGFuZ2VzKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gYSBkZXZp
Y2Ugd2l0aCBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgaXMgYXR0YWNoZWQgb3IgZGV0YWNoZWQsIHRo
ZSBDYXB0dXJlRGV2aWNlIG5vdGlmaWNhdGlvbiBmb3IKKyAgICAgICAgLy8gdGhlIGRpZmZlcmVu
dCBkZXZpY2VzIHdvbid0IGFycml2ZSBhdCB0aGUgc2FtZSB0aW1lIHNvIGRlbGF5IGEgYml0IHNv
IHdlIGNhbiBjb2FsZXNjZSB0aGUgY2FsbGJhY2tzLgorICAgICAgICBpZiAoIW1fZGVib3VuY2VU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9kZWJvdW5jZVRpbWVyLnN0YXJ0T25lU2hv
dChkZXZpY2VDaGFuZ2VEZWJvdW5jZVRpbWVySW50ZXJ2YWwpOworICAgIH0pOworfQorCiB2b2lk
IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpiZWdpbk1vbml0b3JpbmdDYXB0dXJlRGV2aWNlcygp
CiB7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogCiAgICAgc3RkOjpjYWxs
X29uY2Uob25jZUZsYWcsIFt0aGlzXSB7Ci0gICAgICAgIG1fY2FwdHVyZURldmljZXMgPSBXZWJD
b3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5nZXRNZWRpYVN0cmVh
bURldmljZXMoKTsKKyAgICAgICAgdXBkYXRlQ2FwdHVyZURldmljZXMoU2hvdWxkTm90aWZ5OjpO
byk7CiAKICAgICAgICAgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xl
dG9uKCkuc2V0RGV2aWNlc0NoYW5nZWRPYnNlcnZlcihbdGhpc10oKSB7Ci0gICAgICAgICAgICBh
dXRvIG9sZERldmljZXMgPSBXVEZNb3ZlKG1fY2FwdHVyZURldmljZXMpOwotICAgICAgICAgICAg
bV9jYXB0dXJlRGV2aWNlcyA9IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNp
bmdsZXRvbigpLmdldE1lZGlhU3RyZWFtRGV2aWNlcygpOwotCi0gICAgICAgICAgICBpZiAobV9j
YXB0dXJlRGV2aWNlcy5zaXplKCkgPT0gb2xkRGV2aWNlcy5zaXplKCkpIHsKLSAgICAgICAgICAg
ICAgICBib29sIGhhdmVDaGFuZ2VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRv
ICZuZXdEZXZpY2UgOiBtX2NhcHR1cmVEZXZpY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChuZXdEZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6
OkNhbWVyYSAmJiBuZXdEZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6Ok1pY3JvcGhvbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4ID0gb2xkRGV2aWNlcy5maW5kTWF0Y2hp
bmcoWyZuZXdEZXZpY2VdIChhdXRvJiBvbGREZXZpY2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuZXdEZXZpY2UucGVyc2lzdGVudElkKCkgPT0gb2xkRGV2aWNlLnBlcnNpc3Rl
bnRJZCgpICYmIG5ld0RldmljZS5lbmFibGVkKCkgIT0gb2xkRGV2aWNlLmVuYWJsZWQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09
IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlQ2hhbmdlcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaGF2ZUNoYW5nZXMpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gV2hlbiBhIGRldmljZSB3aXRoIGNhbWVyYSBhbmQgbWljcm9waG9uZSBpcyBhdHRhY2hlZCBv
ciBkZXRhY2hlZCwgdGhlIENhcHR1cmVEZXZpY2Ugbm90aWZpY2F0aW9uIGZvcgotICAgICAgICAg
ICAgLy8gdGhlIGRpZmZlcmVudCBkZXZpY2VzIHdvbid0IGFycml2ZSBhdCB0aGUgc2FtZSB0aW1l
IHNvIGRlbGF5IGEgYml0IHNvIHdlIGNhbiBjb2FsZXNjZSB0aGUgY2FsbGJhY2tzLgotICAgICAg
ICAgICAgaWYgKCFtX2RlYm91bmNlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBt
X2RlYm91bmNlVGltZXIuc3RhcnRPbmVTaG90KGRldmljZUNoYW5nZURlYm91bmNlVGltZXJJbnRl
cnZhbCk7CisgICAgICAgICAgICB1cGRhdGVDYXB0dXJlRGV2aWNlcyhTaG91bGROb3RpZnk6Olll
cyk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1VzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmgKaW5kZXggMzkxOGQzOGI5MWUyNDE1NWZjNTUw
NDkwNDUzMGE5ZDc1MjRhNTQ1OS4uNmI5ODRkMTRmN2RjNjA2MDY3OWQzMTY2YTcwZTBmZjhlMzYz
ZjhmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vz
c01hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNz
TWFuYWdlci5oCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luTW9uaXRv
cmluZ0NhcHR1cmVEZXZpY2VzKCk7CiAKIHByaXZhdGU6CisgICAgZW51bSBjbGFzcyBTaG91bGRO
b3RpZnkgeyBZZXMsIE5vIH07CisgICAgdm9pZCB1cGRhdGVDYXB0dXJlRGV2aWNlcyhTaG91bGRO
b3RpZnkpOwogICAgIHZvaWQgY2FwdHVyZURldmljZXNDaGFuZ2VkKCk7CiAKICAgICBWZWN0b3I8
V2ViQ29yZTo6Q2FwdHVyZURldmljZT4gbV9jYXB0dXJlRGV2aWNlczsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417512</attachid>
            <date>2021-01-12 23:47:28 -0800</date>
            <delta_ts>2021-01-13 01:34:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220471-20210112234727.patch</filename>
            <type>text/plain</type>
            <size>29343</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdkNjhmY2VkNGQ3ZjQz
NDFjYjlmYjEzMjY4MWFhMTc5ODM5YmY3Yi4uN2ZiMDU2Zjk1MWFhYTcxYTM5NzFkNDZiMDJlMjky
N2UyNWZiNzg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTAxLTA4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtIQU5HXSA0OTZtcyB0byAx
MzYwbXMgaW4gV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVm
cmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNDcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Z2V0
TWVkaWFTdHJlYW1EZXZpY2VzKCkgdG8gdGFrZSBhIGNvbXBsZXRpb24gaGFuZGxlciwgcmF0aGVy
IHRoYW4KKyAgICAgICAgc3luY2hyb25vdXNseSByZXR1cm4gYSBWZWN0b3Igb2YgQ2FwdHVyZURl
dmljZXMuIFRoaXMgYWxzbyByZXF1aXJlcyBhbGwgQ2FwdHVyZURldmljZU1hbmFnZXIgc3ViY2xh
c3NlcworICAgICAgICB0byBzdXBwb3J0IHRha2luZyBhIGNvbXBsZXRpb24gaGFuZGxlciB0aGVt
c2VsdmVzLiBCeSBkZWZhdWx0LCBhbGwgQ2FwdHVyZURldmljZU1hbmFnZXJzIHdpbGwgc3VwcG9y
dAorICAgICAgICB0aGUgQ29tcGxldGlvbkhhbmRsZXIgcGF0aCBieSBqdXN0IHN5bmNocm9ub3Vz
bHkgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdpdGggdGhlIGV4aXN0aW5nCisgICAg
ICAgIHN5bmNocm9ub3VzIG1ldGhvZC4gQnV0IGZvciBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLCBvdmVycmlkZSB0aGF0IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYnkKKyAgICAg
ICAgYWN0aXZhdGluZyB0aGUgQVZBdWRpb1Nlc3Npb24gb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwg
YW5kIHF1ZXJ5aW5nIHRoYXQgc2Vzc2lvbidzIGlucHV0cyBvbiBhIGJhY2tncm91bmQKKyAgICAg
ICAgdGhyZWFkIGFzIHdlbGwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0
dXJlRGV2aWNlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlcjo6Z2V0TWVkaWFTdHJlYW1EZXZpY2VzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUZhY3RvcnkuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvQ2FwdHVyZUZhY3Rvcnk6OmdldFNwZWFrZXJEZXZpY2VzIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1
ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6YXVkaW9TZXNzaW9uRGV2aWNlV2l0aFVJ
RCk6CisgICAgICAgIChXZWJDb3JlOjpBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzY2hlZHVsZVVwZGF0ZUNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6
OmdldENhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZU1hbmFnZXI6OmFjdGl2YXRlQXVkaW9TZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OnJldHJpZXZlQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2V0QXVkaW9DYXB0dXJlRGV2aWNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjphdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlcyk6IERlbGV0ZWQuCisKIDIwMjEtMDEtMDggIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBTdXBwb3J0IGtleSByb3RhdGlv
biB3aXRoIEhMUy1iYWNrZWQgZW5jcnlwdGVkIG1lZGlhIHN0cmVhbXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTgy
M2I4NmU4YTQ3ZTVmZTUzNWUyMWExZDg3Njg4MmNiNWUwYjQxMi4uZGUxZDhiNzRmNmJmMzdmNWY5
N2RkNWViZDkwOTliMzdjNzVkMTg5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMS0w
MS0wOCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBbSEFOR10g
NDk2bXMgdG8gMTM2MG1zIGluIFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1h
bmFnZXI6OnJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2VzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDQ3MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSB0aGUgY29tcGxldGlvbi1oYW5kbGVyIHZl
cnNpb24gb2YgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Z2V0TWVkaWFTdHJlYW1EZXZpY2Vz
KCkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eTo6Y29tcHV0ZUZpbHRlcmVkRGV2aWNlTGlzdCk6CisgICAgICAgIChXZWJL
aXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjplbnVtZXJhdGVNZWRp
YURldmljZXNGb3JGcmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBy
b2Nlc3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUHJvY2Vzc01hbmFn
ZXI6OnVwZGF0ZUNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUHJv
Y2Vzc01hbmFnZXI6OmJlZ2luTW9uaXRvcmluZ0NhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaDoKKwogMjAyMS0wMS0wOCAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFN1cHBvcnQga2V5
IHJvdGF0aW9uIHdpdGggSExTLWJhY2tlZCBlbmNyeXB0ZWQgbWVkaWEgc3RyZWFtcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmgKaW5kZXggMmZjZmEwYjAzNmJkMDliZmVlNmMwOTBlY2E2YTFlMTJmZTZhYmM4
ZS4uNzYyMGFkMjU3ZjQ4M2UzMzI1NzUwNzc3NzUzYjBjYTMzNDY1ZjU0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNl
TWFuYWdlci5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdF
QkNPUkVfRVhQT1JUIENhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZXMoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGdldENhcHR1cmVEZXZpY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPENhcHR1cmVEZXZpY2U+JiYpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKGNvcHlUb1ZlY3Rv
cihjYXB0dXJlRGV2aWNlcygpKSk7IH07CiAgICAgdmlydHVhbCBPcHRpb25hbDxDYXB0dXJlRGV2
aWNlPiBjYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChDYXB0dXJlRGV2aWNlOjpEZXZpY2VU
eXBlLCBjb25zdCBTdHJpbmcmKSB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAppbmRleCBjMWQ5NmFiMWFjYTllZTYz
ZGNmYjRmZmViMmIyNmE4NTUwMmM1Mjc5Li5kYzU0ZDRhMGUxMGE5Y2NiNjgzZWFjNGE2Y2NiZjMx
OTFhM2VmN2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcApAQCAtMTEyLDI3
ICsxMTIsNDggQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpjcmVhdGVNZWRpYVN0
cmVhbShSZWY8Y29uc3QgTG9nZ2VyPiYmIGxvZ2dlciwgTmUKICAgICBhdWRpb1NvdXJjZS0+d2hl
blJlYWR5KFdURk1vdmUod2hlbkF1ZGlvU291cmNlUmVhZHkpKTsKIH0KIAotVmVjdG9yPENhcHR1
cmVEZXZpY2U+IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OmdldE1lZGlhU3RyZWFtRGV2aWNl
cygpCit2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OmdldE1lZGlhU3RyZWFtRGV2aWNl
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmKT4mJiBjb21w
bGV0aW9uKQogewotICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiByZXN1bHQ7Ci0gICAgZm9yIChh
dXRvJiBkZXZpY2UgOiBhdWRpb0NhcHR1cmVGYWN0b3J5KCkuYXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlcigpLmNhcHR1cmVEZXZpY2VzKCkpIHsKLSAgICAgICAgaWYgKGRldmljZS5lbmFibGVkKCkp
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRldmljZSk7Ci0gICAgfQotICAgIGZvciAoYXV0
byYgZGV2aWNlIDogYXVkaW9DYXB0dXJlRmFjdG9yeSgpLnNwZWFrZXJEZXZpY2VzKCkpIHsKLSAg
ICAgICAgaWYgKGRldmljZS5lbmFibGVkKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRl
dmljZSk7Ci0gICAgfQotICAgIGZvciAoYXV0byYgZGV2aWNlIDogdmlkZW9DYXB0dXJlRmFjdG9y
eSgpLnZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXIoKS5jYXB0dXJlRGV2aWNlcygpKSB7Ci0gICAg
ICAgIGlmIChkZXZpY2UuZW5hYmxlZCgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZXZp
Y2UpOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIGRldmljZSA6IGRpc3BsYXlDYXB0dXJlRmFjdG9y
eSgpLmRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpLmNhcHR1cmVEZXZpY2VzKCkpIHsKLSAg
ICAgICAgaWYgKGRldmljZS5lbmFibGVkKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRl
dmljZSk7Ci0gICAgfQorICAgIGNsYXNzIENhcHR1cmVEZXZpY2VBY2N1bXVsYXRvciA6IHB1Ymxp
YyBSZWZDb3VudGVkPENhcHR1cmVEZXZpY2VBY2N1bXVsYXRvcj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFJlZjxDYXB0dXJlRGV2aWNlQWNjdW11bGF0b3I+IGNyZWF0ZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmKT4mJiBjb21wbGV0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYXB0dXJlRGV2aWNl
QWNjdW11bGF0b3IoV1RGTW92ZShjb21wbGV0aW9uKSkpOworICAgICAgICB9CisKKyAgICAgICAg
fkNhcHR1cmVEZXZpY2VBY2N1bXVsYXRvcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShtX3Jlc3VsdHMpKTsKKyAgICAgICAgfQorCisgICAgICAg
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiYpPiBhY2N1bXVs
YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIChWZWN0b3I8Q2FwdHVyZURldmljZT4mJiByZXN1bHQpIHsKKyAg
ICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kVmVjdG9yKFdURk1vdmUocmVzdWx0KSk7Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNp
dCBDYXB0dXJlRGV2aWNlQWNjdW11bGF0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
Q2FwdHVyZURldmljZT4mJik+JiYgY29tcGxldGlvbikKKyAgICAgICAgICAgIDogbV9jb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb24pKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmKT4g
bV9jb21wbGV0aW9uSGFuZGxlcjsKKyAgICAgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IG1fcmVz
dWx0czsKKyAgICB9OworCisgICAgYXV0byBhY2N1bXVsYXRvciA9IENhcHR1cmVEZXZpY2VBY2N1
bXVsYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uID0gV1RGTW92ZShjb21wbGV0aW9uKV0gKGF1dG8m
JiBkZXZpY2VzKSBtdXRhYmxlIHsKKyAgICAgICAgZGV2aWNlcy5yZW1vdmVBbGxNYXRjaGluZyhb
XSAoYXV0byYgY2FwdHVyZURldmljZSkgeworICAgICAgICAgICAgcmV0dXJuICFjYXB0dXJlRGV2
aWNlLmVuYWJsZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNvbXBsZXRpb24oV1RGTW92ZShk
ZXZpY2VzKSk7CisgICAgfSk7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1ZGlvQ2FwdHVy
ZUZhY3RvcnkoKS5hdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkuZ2V0Q2FwdHVyZURldmljZXMo
YWNjdW11bGF0b3ItPmFjY3VtdWxhdGUoKSk7CisgICAgdmlkZW9DYXB0dXJlRmFjdG9yeSgpLnZp
ZGVvQ2FwdHVyZURldmljZU1hbmFnZXIoKS5nZXRDYXB0dXJlRGV2aWNlcyhhY2N1bXVsYXRvci0+
YWNjdW11bGF0ZSgpKTsKKyAgICBkaXNwbGF5Q2FwdHVyZUZhY3RvcnkoKS5kaXNwbGF5Q2FwdHVy
ZURldmljZU1hbmFnZXIoKS5nZXRDYXB0dXJlRGV2aWNlcyhhY2N1bXVsYXRvci0+YWNjdW11bGF0
ZSgpKTsKKyAgICBhdWRpb0NhcHR1cmVGYWN0b3J5KCkuZ2V0U3BlYWtlckRldmljZXMoYWNjdW11
bGF0b3ItPmFjY3VtdWxhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZFN0cmluZ1RvU0hBMShT
SEExJiBzaGExLCBjb25zdCBTdHJpbmcmIHN0cmluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIuaAppbmRleCAwMjgyODY1OGUwOWVhZGU5NzIxMThhZGVjZGMxN2YzNjRmZWEzMGUxLi42OTU2
MWIxOWJhODQ1NTE3Yjc0NDI0MjQ1Njg2ZmEzNjRkNGQ0NTkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlci5oCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBOZXdNZWRp
YVN0cmVhbUhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFJlZjxNZWRpYVN0cmVhbVBy
aXZhdGU+LCBTdHJpbmc+JiYpPjsKICAgICB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFJlZjxjb25z
dCBMb2dnZXI+JiYsIE5ld01lZGlhU3RyZWFtSGFuZGxlciYmLCBTdHJpbmcmJiwgQ2FwdHVyZURl
dmljZSYmIGF1ZGlvRGV2aWNlLCBDYXB0dXJlRGV2aWNlJiYgdmlkZW9EZXZpY2UsIGNvbnN0IE1l
ZGlhU3RyZWFtUmVxdWVzdCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPENhcHR1cmVE
ZXZpY2U+IGdldE1lZGlhU3RyZWFtRGV2aWNlcygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Z2V0TWVkaWFTdHJlYW1EZXZpY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENhcHR1
cmVEZXZpY2U+JiYpPiYmKTsKIAogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMoKSB7IHJldHVybiBtX3N1cHBvcnRl
ZENvbnN0cmFpbnRzOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlRmFjdG9yeS5oCmluZGV4IGIx
N2M3M2ZjMDk1ZmIyZjVjOTI5MjEwY2FiN2M3NGJmZWRhOTA3NmQuLmRlMGM4MDY0ZmNjZGYyMjQ5
ZmRmNzA3MTc3ZGNjN2I5N2M3OTBlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VGYWN0b3J5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUZhY3Rvcnku
aApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1
ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYyLDYgKzYzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlQXVkaW9DYXB0dXJlU291
cmNlKGNvbnN0IENhcHR1cmVEZXZpY2UmLCBTdHJpbmcmJiwgY29uc3QgTWVkaWFDb25zdHJhaW50
cyopID0gMDsKICAgICB2aXJ0dWFsIENhcHR1cmVEZXZpY2VNYW5hZ2VyJiBhdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyKCkgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPENhcHR1cmVEZXZp
Y2U+JiBzcGVha2VyRGV2aWNlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3Bl
YWtlckRldmljZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4m
Jik+JiYgY29tcGxldGlvbikgY29uc3QgeyBjb21wbGV0aW9uKGNvcHlUb1ZlY3RvcihzcGVha2Vy
RGV2aWNlcygpKSk7IH0KIAogICAgIGNsYXNzIEV4dGVuc2l2ZU9ic2VydmVyIDogcHVibGljIENh
bk1ha2VXZWFrUHRyPEV4dGVuc2l2ZU9ic2VydmVyPiB7IH07CiAgICAgdmlydHVhbCB2b2lkIGFk
ZEV4dGVuc2l2ZU9ic2VydmVyKEV4dGVuc2l2ZU9ic2VydmVyJikgeyB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKaW5kZXggMmJjNTY0MmVm
ZTdjZTEyMGRjMDU2YzdkMDdjZjhhZjUyMDg3YjkyOS4uM2NiZThjZWE2ODVhNTQ1ODgyMGRmMjg4
YmRmNmNhNmRlYWIyM2I5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlci5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CiAKICAgICBj
b25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7CisgICAg
dm9pZCBnZXRDYXB0dXJlRGV2aWNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0
dXJlRGV2aWNlPiYmKT4mJikgZmluYWw7CiAgICAgY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+
JiBzcGVha2VyRGV2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3BlYWtlckRldmljZXM7IH0KICAg
ICBPcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBjYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChD
YXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlLCBjb25zdCBTdHJpbmcmKTsKIApAQCAtNjMsOCArNjQs
MTAgQEAgcHJpdmF0ZToKICAgICB+QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcigp
OwogCiAgICAgdm9pZCBjcmVhdGVBdWRpb1Nlc3Npb24oKTsKKyAgICB2b2lkIGFjdGl2YXRlQXVk
aW9TZXNzaW9uKCk7CiAgICAgdm9pZCByZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpOwotICAg
IFZlY3RvcjxBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+JiBhdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlcygpOworICAgIFZlY3RvcjxBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+IHJldHJp
ZXZlQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldEF1ZGlv
Q2FwdHVyZURldmljZXMoVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZT4mJik7CiAK
ICAgICBlbnVtIGNsYXNzIEF1ZGlvU2Vzc2lvblN0YXRlIHsgTm90TmVlZGVkLCBJbmFjdGl2ZSwg
QWN0aXZlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmlj
ZU1hbmFnZXIubW0KaW5kZXggNWQ4ODlmNTZlOThiNzAwM2I3MDNhMzYyMDc3OWNmNGQ5YzU1NDVh
ZS4uZjJjOTQwYTBmODlmZGEzNDIyZTI5MDYwMDJmMjQ1ZjQ1MGQzZTA3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW0KQEAgLTEzNiwx
NiArMTM2LDEyIEBAIE9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IEFWQXVkaW9TZXNzaW9uQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VXaXRoUGVyCiAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KIAotVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZT4mIEFWQXVkaW9T
ZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKCkK
K09wdGlvbmFsPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZT4gQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlcjo6YXVkaW9TZXNzaW9uRGV2aWNlV2l0aFVJRChjb25zdCBTdHJpbmcm
IGRldmljZUlEKQogewogICAgIGlmICghbV9hdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcykKICAg
ICAgICAgcmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKTsKLSAgICByZXR1cm4gbV9hdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlcy52YWx1ZSgpOwotfQogCi1PcHRpb25hbDxBVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2U+IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmF1ZGlv
U2Vzc2lvbkRldmljZVdpdGhVSUQoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKLXsKLSAgICBmb3Ig
KGF1dG8mIGRldmljZSA6IGF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIGRldmljZSA6ICptX2F1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKSB7CiAgICAgICAg
IGlmIChkZXZpY2UucGVyc2lzdGVudElkKCkgPT0gZGV2aWNlSUQpCiAgICAgICAgICAgICByZXR1
cm4gZGV2aWNlOwogICAgIH0KQEAgLTE1NCw0MiArMTUwLDcxIEBAIE9wdGlvbmFsPEFWQXVkaW9T
ZXNzaW9uQ2FwdHVyZURldmljZT4gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6
YXVkaW9TCiAKIHZvaWQgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2NoZWR1
bGVVcGRhdGVDYXB0dXJlRGV2aWNlcygpCiB7Ci0gICAgaWYgKG1fdXBkYXRlRGV2aWNlU3RhdGVR
dWV1ZS5oYXNQZW5kaW5nVGFza3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91cGRhdGVE
ZXZpY2VTdGF0ZVF1ZXVlLmVucXVldWVUYXNrKFt0aGlzXSB7Ci0gICAgICAgIHJlZnJlc2hBdWRp
b0NhcHR1cmVEZXZpY2VzKCk7Ci0gICAgfSk7CisgICAgZ2V0Q2FwdHVyZURldmljZXMoW10gKGF1
dG8pIHsgfSk7CiB9CiAKIHZvaWQgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6
cmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKQogewotICAgIHsKLSAgICAgICAgLy8gTWFrZSBz
dXJlIHdlIGhhdmUgY3JlYXRlZCB0aGUgYXVkaW8gc2Vzc2lvbi4KLSAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgIH0KLSAgICBib29sIGZpcnN0VGltZSA9ICFtX2Rl
dmljZXM7CiAgICAgaWYgKG1fYXVkaW9TZXNzaW9uU3RhdGUgPT0gQXVkaW9TZXNzaW9uU3RhdGU6
OkluYWN0aXZlKSB7CiAgICAgICAgIG1fYXVkaW9TZXNzaW9uU3RhdGUgPSBBdWRpb1Nlc3Npb25T
dGF0ZTo6QWN0aXZlOwogCi0gICAgICAgIGlmICghbV9saXN0ZW5lcikKLSAgICAgICAgICAgIG1f
bGlzdGVuZXIgPSBhZG9wdE5TKFtbV2ViQVZBdWRpb1Nlc3Npb25BdmFpbGFibGVJbnB1dHNMaXN0
ZW5lciBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzIGF1ZGlvU2Vzc2lvbjptX2F1ZGlvU2Vz
c2lvbi5nZXQoKV0pOworICAgICAgICBkaXNwYXRjaF9zeW5jKG1fZGlzcGF0Y2hRdWV1ZSwgbWFr
ZUJsb2NrUHRyKFt0aGlzXSB7CisgICAgICAgICAgICBhY3RpdmF0ZUF1ZGlvU2Vzc2lvbigpOwor
ICAgICAgICB9KS5nZXQoKSk7CisgICAgfQogCi0gICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OwotICAgICAgICBbbV9hdWRpb1Nlc3Npb24gc2V0QWN0aXZlOllFUyB3aXRoT3B0aW9uczowIGVy
cm9yOiZlcnJvcl07Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIkZhaWxlZCB0byBhY3RpdmF0ZSBhdWRpbyBzZXNzaW9uIHdpdGggZXJy
b3I6ICVALiIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKTsKKyAgICBWZWN0b3I8QVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBuZXdBdWRpb0RldmljZXM7CisgICAgZGlzcGF0Y2hfc3lu
YyhtX2Rpc3BhdGNoUXVldWUsIG1ha2VCbG9ja1B0cihbJl0geworICAgICAgICBuZXdBdWRpb0Rl
dmljZXMgPSByZXRyaWV2ZUF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKCk7CisgICAgfSkuZ2V0
KCkpOworICAgIHNldEF1ZGlvQ2FwdHVyZURldmljZXMoV1RGTW92ZShuZXdBdWRpb0RldmljZXMp
KTsKK30KKwordm9pZCBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRDYXB0
dXJlRGV2aWNlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYm
KT4mJiBjb21wbGV0aW9uKQoreworICAgIGlmIChtX2F1ZGlvU2Vzc2lvblN0YXRlID09IEF1ZGlv
U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgICAgICBtX2F1ZGlvU2Vzc2lvblN0YXRlID0g
QXVkaW9TZXNzaW9uU3RhdGU6OkFjdGl2ZTsKKworICAgICAgICBkaXNwYXRjaF9hc3luYyhtX2Rp
c3BhdGNoUXVldWUsIG1ha2VCbG9ja1B0cihbdGhpc10geworICAgICAgICAgICAgYWN0aXZhdGVB
dWRpb1Nlc3Npb24oKTsKKyAgICAgICAgfSkuZ2V0KCkpOwogICAgIH0KIAorICAgIGRpc3BhdGNo
X2FzeW5jKG1fZGlzcGF0Y2hRdWV1ZSwgbWFrZUJsb2NrUHRyKFt0aGlzLCBjb21wbGV0aW9uID0g
V1RGTW92ZShjb21wbGV0aW9uKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gbmV3QXVkaW9E
ZXZpY2VzID0gcmV0cmlldmVBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcygpOworICAgICAgICBj
YWxsT25XZWJUaHJlYWRPckRpc3BhdGNoQXN5bmNPbk1haW5UaHJlYWQobWFrZUJsb2NrUHRyKFt0
aGlzLCBjb21wbGV0aW9uID0gV1RGTW92ZShjb21wbGV0aW9uKSwgbmV3QXVkaW9EZXZpY2VzID0g
V1RGTW92ZShuZXdBdWRpb0RldmljZXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHNldEF1
ZGlvQ2FwdHVyZURldmljZXMoV1RGTW92ZShuZXdBdWRpb0RldmljZXMpKTsKKyAgICAgICAgICAg
IGNvbXBsZXRpb24oY29weVRvVmVjdG9yKCptX2RldmljZXMpKTsKKyAgICAgICAgfSkuZ2V0KCkp
OworICAgIH0pLmdldCgpKTsKK30KKwordm9pZCBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjphY3RpdmF0ZUF1ZGlvU2Vzc2lvbigpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyKQor
ICAgICAgICBtX2xpc3RlbmVyID0gYWRvcHROUyhbW1dlYkFWQXVkaW9TZXNzaW9uQXZhaWxhYmxl
SW5wdXRzTGlzdGVuZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpcyBhdWRpb1Nlc3Npb246
bV9hdWRpb1Nlc3Npb24uZ2V0KCldKTsKKworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAg
IFttX2F1ZGlvU2Vzc2lvbiBzZXRBY3RpdmU6WUVTIHdpdGhPcHRpb25zOjAgZXJyb3I6JmVycm9y
XTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkZh
aWxlZCB0byBhY3RpdmF0ZSBhdWRpbyBzZXNzaW9uIHdpdGggZXJyb3I6ICVALiIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKTsKK30KKworVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZT4gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmV0cmlldmVBdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlcygpIGNvbnN0Cit7CiAgICAgVmVjdG9yPEFWQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZT4gbmV3QXVkaW9EZXZpY2VzOwotICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNl
PiBuZXdEZXZpY2VzOwogICAgIGF1dG8gKmRlZmF1bHRJbnB1dCA9IFttX2F1ZGlvU2Vzc2lvbiBj
dXJyZW50Um91dGVdLmlucHV0cy5maXJzdE9iamVjdDsKLSAgICBmb3IgKEFWQXVkaW9TZXNzaW9u
UG9ydERlc2NyaXB0aW9uICpwb3J0RGVzY3JpcHRpb24gaW4gW21fYXVkaW9TZXNzaW9uIGF2YWls
YWJsZUlucHV0c10pIHsKLSAgICAgICAgYXV0byBhdWRpb0RldmljZSA9IEFWQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZTo6Y3JlYXRlKHBvcnREZXNjcmlwdGlvbiwgZGVmYXVsdElucHV0KTsKLSAg
ICAgICAgbmV3RGV2aWNlcy5hcHBlbmQoYXVkaW9EZXZpY2UpOwotICAgICAgICBuZXdBdWRpb0Rl
dmljZXMuYXBwZW5kKFdURk1vdmUoYXVkaW9EZXZpY2UpKTsKLSAgICB9CisgICAgbmV3QXVkaW9E
ZXZpY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoW21fYXVkaW9TZXNzaW9uIGF2YWlsYWJsZUlu
cHV0c10uY291bnQpOworCisgICAgZm9yIChBVkF1ZGlvU2Vzc2lvblBvcnREZXNjcmlwdGlvbiAq
cG9ydERlc2NyaXB0aW9uIGluIFttX2F1ZGlvU2Vzc2lvbiBhdmFpbGFibGVJbnB1dHNdKQorICAg
ICAgICBuZXdBdWRpb0RldmljZXMudW5jaGVja2VkQXBwZW5kKEFWQXVkaW9TZXNzaW9uQ2FwdHVy
ZURldmljZTo6Y3JlYXRlKHBvcnREZXNjcmlwdGlvbiwgZGVmYXVsdElucHV0KSk7CiAKKyAgICBy
ZXR1cm4gbmV3QXVkaW9EZXZpY2VzOworfQorCit2b2lkIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZU1hbmFnZXI6OnNldEF1ZGlvQ2FwdHVyZURldmljZXMoVmVjdG9yPEFWQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZT4mJiBuZXdBdWRpb0RldmljZXMpCit7CisgICAgYm9vbCBmaXJzdFRpbWUg
PSAhbV9kZXZpY2VzOwogICAgIGJvb2wgaGF2ZURldmljZUNoYW5nZXMgPSAhbV9kZXZpY2VzIHx8
IG5ld0F1ZGlvRGV2aWNlcy5zaXplKCkgIT0gbV9kZXZpY2VzLT5zaXplKCk7CiAgICAgaWYgKCFo
YXZlRGV2aWNlQ2hhbmdlcykgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0F1
ZGlvRGV2aWNlcy5zaXplKCk7ICsraSkgewpAQCAtMjAzLDYgKzIyOCw3IEBAIHZvaWQgQVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMo
KQogICAgIGlmICghaGF2ZURldmljZUNoYW5nZXMgJiYgIWZpcnN0VGltZSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgYXV0byBuZXdEZXZpY2VzID0gY29weVRvVmVjdG9yT2Y8Q2FwdHVyZURldmlj
ZT4obmV3QXVkaW9EZXZpY2VzKTsKICAgICBtX2F1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzID0g
V1RGTW92ZShuZXdBdWRpb0RldmljZXMpOwogICAgIHN0ZDo6c29ydChuZXdEZXZpY2VzLmJlZ2lu
KCksIG5ld0RldmljZXMuZW5kKCksIFtdIChhdXRvJiBmaXJzdCwgYXV0byYgc2Vjb25kKSAtPiBi
b29sIHsKICAgICAgICAgcmV0dXJuIGZpcnN0LmlzRGVmYXVsdCgpICYmICFzZWNvbmQuaXNEZWZh
dWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9V
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggNGVmZWY5OTY5
NDk1NzFiNTU2Y2EzNGNhYjQ3MWZkZmZkNDVkZjUzZi4uZTA3ODllZmRlMDQ0NDc4NDFkMGY3Y2I4
ZGI0MmZjZjFmZTlhYWNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApA
QCAtNjU0LDQwICs2NTQsNDEgQEAgc3RhdGljIGlubGluZSBib29sIGhhdmVNaWNyb3Bob25lRGV2
aWNlKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDYXB0dXJlRGV2aWNlPiYgZGUKICAgICB9KTsKIH0K
IAotVmVjdG9yPENhcHR1cmVEZXZpY2U+IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByb3h5Ojpjb21wdXRlRmlsdGVyZWREZXZpY2VMaXN0KGJvb2wgcmV2ZWFsSWRzQW5kTGFiZWxz
KQordm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6Y29tcHV0ZUZp
bHRlcmVkRGV2aWNlTGlzdChib29sIHJldmVhbElkc0FuZExhYmVscywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4mJik+JiYgY29tcGxldGlvbikKIHsKLSAgICBz
dGF0aWMgY29uc3QgaW50IGRlZmF1bHRNYXhpbXVtQ2FtZXJhQ291bnQgPSAxOwotICAgIHN0YXRp
YyBjb25zdCBpbnQgZGVmYXVsdE1heGltdW1NaWNyb3Bob25lQ291bnQgPSAxOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0TWF4aW11bUNhbWVyYUNvdW50ID0gMTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdE1heGltdW1NaWNyb3Bob25lQ291bnQgPSAxOwogCi0g
ICAgYXV0byBkZXZpY2VzID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCku
Z2V0TWVkaWFTdHJlYW1EZXZpY2VzKCk7Ci0gICAgaW50IGNhbWVyYUNvdW50ID0gMDsKLSAgICBp
bnQgbWljcm9waG9uZUNvdW50ID0gMDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpz
aW5nbGV0b24oKS5nZXRNZWRpYVN0cmVhbURldmljZXMoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyksIHJldmVhbElkc0FuZExhYmVscywgY29tcGxldGlvbiA9IFdURk1vdmUoY29t
cGxldGlvbildIChhdXRvJiYgZGV2aWNlcykgbXV0YWJsZSB7CisgICAgICAgIHVuc2lnbmVkIGNh
bWVyYUNvdW50ID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWljcm9waG9uZUNvdW50ID0gMDsKIAot
ICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiBmaWx0ZXJlZERldmljZXM7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBkZXZpY2UgOiBkZXZpY2VzKSB7Ci0gICAgICAgIGlmICghZGV2aWNlLmVuYWJsZWQo
KSB8fCAoZGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBl
OjpDYW1lcmEgJiYgZGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpNaWNyb3Bob25lICYmIGRldmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURl
dmljZTo6RGV2aWNlVHlwZTo6U3BlYWtlcikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBpZiAoIXJldmVhbElkc0FuZExhYmVscykgewotICAgICAgICAgICAgaWYgKGRldmljZS50
eXBlKCkgPT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhICYmICsr
Y2FtZXJhQ291bnQgPiBkZWZhdWx0TWF4aW11bUNhbWVyYUNvdW50KQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGRldmljZS50eXBlKCkgPT0gV2ViQ29yZTo6Q2Fw
dHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSAmJiArK21pY3JvcGhvbmVDb3VudCA+
IGRlZmF1bHRNYXhpbXVtTWljcm9waG9uZUNvdW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKGRldmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZTo6Q2FtZXJhICYmIGRldmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG9ubHkgZXhwb3NlIHNwZWFr
ZXJzIHRpZWQgdG8gYSBtaWNyb3Bob25lIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgaWYg
KGRldmljZS50eXBlKCkgPT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U3Bl
YWtlciAmJiAhaGF2ZU1pY3JvcGhvbmVEZXZpY2UoZGV2aWNlcywgZGV2aWNlLmdyb3VwSWQoKSkp
CisgICAgICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiBmaWx0ZXJlZERldmljZXM7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgZGV2aWNlIDogZGV2aWNlcykgeworICAgICAgICAgICAgaWYgKCFk
ZXZpY2UuZW5hYmxlZCgpIHx8IChkZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZp
Y2U6OkRldmljZVR5cGU6OkNhbWVyYSAmJiBkZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1
cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUgJiYgZGV2aWNlLnR5cGUoKSAhPSBXZWJD
b3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTcGVha2VyKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQogCi0gICAgICAgIGZpbHRlcmVkRGV2aWNlcy5hcHBlbmQo
cmV2ZWFsSWRzQW5kTGFiZWxzID8gZGV2aWNlIDogQ2FwdHVyZURldmljZSh7IH0sIGRldmljZS50
eXBlKCksIHsgfSwgeyB9KSk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKCFyZXZlYWxJZHNBbmRM
YWJlbHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGV2aWNlLnR5cGUoKSA9PSBXZWJDb3JlOjpD
YXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgKytjYW1lcmFDb3VudCA+IGRlZmF1
bHRNYXhpbXVtQ2FtZXJhQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGlmIChkZXZpY2UudHlwZSgpID09IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6
OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUgJiYgKyttaWNyb3Bob25lQ291bnQgPiBkZWZhdWx0TWF4
aW11bU1pY3JvcGhvbmVDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgaWYgKGRldmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6Q2FtZXJhICYmIGRldmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURl
dmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgZXhw
b3NlIHNwZWFrZXJzIHRpZWQgdG8gYSBtaWNyb3Bob25lIGZvciB0aGUgbW9tZW50LgorICAgICAg
ICAgICAgICAgIGlmIChkZXZpY2UudHlwZSgpID09IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6OlNwZWFrZXIgJiYgIWhhdmVNaWNyb3Bob25lRGV2aWNlKGRldmljZXMsIGRldmlj
ZS5ncm91cElkKCkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZmlsdGVyZWREZXZpY2VzLmFwcGVuZChyZXZlYWxJZHNBbmRMYWJl
bHMgPyBkZXZpY2UgOiBDYXB0dXJlRGV2aWNlKHsgfSwgZGV2aWNlLnR5cGUoKSwgeyB9LCB7IH0p
KTsKKyAgICAgICAgfQogCi0gICAgbV9oYXNGaWx0ZXJlZERldmljZUxpc3QgPSAhcmV2ZWFsSWRz
QW5kTGFiZWxzOworICAgICAgICBtX2hhc0ZpbHRlcmVkRGV2aWNlTGlzdCA9ICFyZXZlYWxJZHNB
bmRMYWJlbHM7CiAKLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsIGZpbHRlcmVkRGV2aWNl
cy5zaXplKCksICIgZGV2aWNlcyByZXZlYWxlZCIpOwotICAgIHJldHVybiBmaWx0ZXJlZERldmlj
ZXM7CisgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgZmlsdGVyZWREZXZpY2VzLnNp
emUoKSwgIiBkZXZpY2VzIHJldmVhbGVkIik7CisgICAgICAgIGNvbXBsZXRpb24oV1RGTW92ZShm
aWx0ZXJlZERldmljZXMpKTsKKyAgICB9KTsKIH0KICNlbmRpZgogCkBAIC03MzksNyArNzQwLDkg
QEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6ZW51bWVyYXRl
TWVkaWFEZXZpY2VzRm9yRnJhbWUoRnJhbWUKICAgICAgICAgICAgIGJvb2wgcmV2ZWFsSWRzQW5k
TGFiZWxzID0gb3JpZ2luSGFzUGVyc2lzdGVudEFjY2VzcyB8fCB3YXNHcmFudGVkVmlkZW9PckF1
ZGlvQWNjZXNzKGZyYW1lSUQsIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLmdldCgpLCB0b3BMZXZl
bERvY3VtZW50T3JpZ2luLmdldCgpKTsKIAogICAgICAgICAgICAgY2FsbENvbXBsZXRpb25IYW5k
bGVyLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbXB1dGVGaWx0
ZXJlZERldmljZUxpc3QocmV2ZWFsSWRzQW5kTGFiZWxzKSwgZGV2aWNlSURIYXNoU2FsdCk7Cisg
ICAgICAgICAgICBjb21wdXRlRmlsdGVyZWREZXZpY2VMaXN0KHJldmVhbElkc0FuZExhYmVscywg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGRldmljZUlE
SGFzaFNhbHQgPSBXVEZNb3ZlKGRldmljZUlESGFzaFNhbHQpXSAoVmVjdG9yPENhcHR1cmVEZXZp
Y2U+JiYgZGV2aWNlcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZGV2aWNlcywgZGV2aWNlSURIYXNoU2FsdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAg
fSk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgKaW5kZXggNWFlZDE1
MjdjZjcwMTIyYjUyMzFkM2E5ZDhmYTZiMDk1MTQyM2NjYy4uYzA5ZmRmNTFiMDRkZWY2MWU0NGRl
Mzk5YjY1ZWYzYTMwZDZjMDZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oCkBA
IC0xMTksNyArMTE5LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgd2FzR3JhbnRlZFZpZGVvT3JB
dWRpb0FjY2VzcyhXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkNhcHR1cmVEZXZpY2U+IGNvbXB1dGVGaWx0ZXJlZERldmljZUxpc3QoYm9vbCByZXZlYWxJZHNB
bmRMYWJlbHMpOworICAgIHZvaWQgY29tcHV0ZUZpbHRlcmVkRGV2aWNlTGlzdChib29sIHJldmVh
bElkc0FuZExhYmVscywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q2Fw
dHVyZURldmljZT4mJik+JiYpOwogCiAgICAgdm9pZCBwcm9jZXNzVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3QoKTsKICAgICB2b2lkIHByb2Nlc3NVc2VyTWVkaWFQZXJtaXNzaW9uSW52YWxpZFJl
cXVlc3QoY29uc3QgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWludCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5jcHAKaW5kZXggMjlmMDky
NTIyYmE4MjIwMmFmYjA2YWM2NGU3ZGNiYjk2ZDRlYTk0Mi4uYWExOTA2ZWM0OWY3ODhkMzY2MDc2
ZTU0MjcwYWY5MGJiN2VjY2MwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmNwcApAQCAtMjE3LDQxICsyMTcsNTEgQEAgdm9pZCBV
c2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6Y2FwdHVyZURldmljZXNDaGFuZ2VkKCkKICAgICB9KTsK
IH0KIAordm9pZCBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6dXBkYXRlQ2FwdHVyZURldmljZXMo
U2hvdWxkTm90aWZ5IHNob3VsZE5vdGlmeSkKK3sKKyAgICBXZWJDb3JlOjpSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5nZXRNZWRpYVN0cmVhbURldmljZXMoW3RoaXMsIHNo
b3VsZE5vdGlmeV0gKFZlY3RvcjxXZWJDb3JlOjpDYXB0dXJlRGV2aWNlPiYmIG5ld0RldmljZXMp
IG11dGFibGUgeworICAgICAgICBhdXRvIG9sZERldmljZXMgPSBXVEZNb3ZlKG1fY2FwdHVyZURl
dmljZXMpOworICAgICAgICBtX2NhcHR1cmVEZXZpY2VzID0gV1RGTW92ZShuZXdEZXZpY2VzKTsK
KworICAgICAgICBpZiAoc2hvdWxkTm90aWZ5ID09IFNob3VsZE5vdGlmeTo6Tm8pCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fY2FwdHVyZURldmljZXMuc2l6ZSgpID09IG9s
ZERldmljZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBib29sIGhhdmVDaGFuZ2VzID0gZmFsc2U7
CisgICAgICAgICAgICBmb3IgKGF1dG8gJm5ld0RldmljZSA6IG1fY2FwdHVyZURldmljZXMpIHsK
KyAgICAgICAgICAgICAgICBpZiAobmV3RGV2aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgbmV3RGV2aWNlLnR5cGUoKSAhPSBXZWJDb3Jl
OjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXggPSBvbGREZXZpY2Vz
LmZpbmRNYXRjaGluZyhbJm5ld0RldmljZV0gKGF1dG8mIG9sZERldmljZSkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3RGV2aWNlLnBlcnNpc3RlbnRJZCgpID09IG9sZERldmljZS5w
ZXJzaXN0ZW50SWQoKSAmJiBuZXdEZXZpY2UuZW5hYmxlZCgpICE9IG9sZERldmljZS5lbmFibGVk
KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaGF2ZUNoYW5nZXMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghaGF2ZUNoYW5nZXMpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgLy8gV2hlbiBhIGRldmljZSB3aXRoIGNhbWVyYSBhbmQg
bWljcm9waG9uZSBpcyBhdHRhY2hlZCBvciBkZXRhY2hlZCwgdGhlIENhcHR1cmVEZXZpY2Ugbm90
aWZpY2F0aW9uIGZvcgorICAgICAgICAvLyB0aGUgZGlmZmVyZW50IGRldmljZXMgd29uJ3QgYXJy
aXZlIGF0IHRoZSBzYW1lIHRpbWUgc28gZGVsYXkgYSBiaXQgc28gd2UgY2FuIGNvYWxlc2NlIHRo
ZSBjYWxsYmFja3MuCisgICAgICAgIGlmICghbV9kZWJvdW5jZVRpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgICAgICBtX2RlYm91bmNlVGltZXIuc3RhcnRPbmVTaG90KGRldmljZUNoYW5nZURlYm91
bmNlVGltZXJJbnRlcnZhbCk7CisgICAgfSk7Cit9CisKIHZvaWQgVXNlck1lZGlhUHJvY2Vzc01h
bmFnZXI6OmJlZ2luTW9uaXRvcmluZ0NhcHR1cmVEZXZpY2VzKCkKIHsKICAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW3Ro
aXNdIHsKLSAgICAgICAgbV9jYXB0dXJlRGV2aWNlcyA9IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLmdldE1lZGlhU3RyZWFtRGV2aWNlcygpOworICAgICAg
ICB1cGRhdGVDYXB0dXJlRGV2aWNlcyhTaG91bGROb3RpZnk6Ok5vKTsKIAogICAgICAgICBXZWJD
b3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5zZXREZXZpY2VzQ2hh
bmdlZE9ic2VydmVyKFt0aGlzXSgpIHsKLSAgICAgICAgICAgIGF1dG8gb2xkRGV2aWNlcyA9IFdU
Rk1vdmUobV9jYXB0dXJlRGV2aWNlcyk7Ci0gICAgICAgICAgICBtX2NhcHR1cmVEZXZpY2VzID0g
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuZ2V0TWVkaWFT
dHJlYW1EZXZpY2VzKCk7Ci0KLSAgICAgICAgICAgIGlmIChtX2NhcHR1cmVEZXZpY2VzLnNpemUo
KSA9PSBvbGREZXZpY2VzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgaGF2ZUNoYW5n
ZXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gJm5ld0RldmljZSA6IG1fY2Fw
dHVyZURldmljZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0RldmljZS50eXBlKCkg
IT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhICYmIG5ld0Rldmlj
ZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9u
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXggPSBvbGREZXZpY2VzLmZpbmRNYXRjaGluZyhbJm5ld0RldmljZV0gKGF1
dG8mIG9sZERldmljZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Rldmlj
ZS5wZXJzaXN0ZW50SWQoKSA9PSBvbGREZXZpY2UucGVyc2lzdGVudElkKCkgJiYgbmV3RGV2aWNl
LmVuYWJsZWQoKSAhPSBvbGREZXZpY2UuZW5hYmxlZCgpOwotICAgICAgICAgICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhdmVDaGFuZ2VzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXZlQ2hhbmdlcykKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXaGVuIGEgZGV2aWNlIHdp
dGggY2FtZXJhIGFuZCBtaWNyb3Bob25lIGlzIGF0dGFjaGVkIG9yIGRldGFjaGVkLCB0aGUgQ2Fw
dHVyZURldmljZSBub3RpZmljYXRpb24gZm9yCi0gICAgICAgICAgICAvLyB0aGUgZGlmZmVyZW50
IGRldmljZXMgd29uJ3QgYXJyaXZlIGF0IHRoZSBzYW1lIHRpbWUgc28gZGVsYXkgYSBiaXQgc28g
d2UgY2FuIGNvYWxlc2NlIHRoZSBjYWxsYmFja3MuCi0gICAgICAgICAgICBpZiAoIW1fZGVib3Vu
Y2VUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgICAgIG1fZGVib3VuY2VUaW1lci5zdGFy
dE9uZVNob3QoZGV2aWNlQ2hhbmdlRGVib3VuY2VUaW1lckludGVydmFsKTsKKyAgICAgICAgICAg
IHVwZGF0ZUNhcHR1cmVEZXZpY2VzKFNob3VsZE5vdGlmeTo6WWVzKTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQ
cm9jZXNzTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vz
c01hbmFnZXIuaAppbmRleCAzOTE4ZDM4YjkxZTI0MTU1ZmM1NTA0OTA0NTMwYTlkNzUyNGE1NDU5
Li42Yjk4NGQxNGY3ZGM2MDYwNjc5ZDMxNjZhNzBlMGZmOGUzNjNmOGY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmgKQEAgLTQ4LDYg
KzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgYmVnaW5Nb25pdG9yaW5nQ2FwdHVyZURldmljZXMo
KTsKIAogcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIFNob3VsZE5vdGlmeSB7IFllcywgTm8gfTsK
KyAgICB2b2lkIHVwZGF0ZUNhcHR1cmVEZXZpY2VzKFNob3VsZE5vdGlmeSk7CiAgICAgdm9pZCBj
YXB0dXJlRGV2aWNlc0NoYW5nZWQoKTsKIAogICAgIFZlY3RvcjxXZWJDb3JlOjpDYXB0dXJlRGV2
aWNlPiBtX2NhcHR1cmVEZXZpY2VzOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDk4ODE2YTU1NGI2ZTJjMTJlNmQzMGE0MWYy
MThjMTdiY2FkNWRkZTIuLmViNzQwNTM3NDNmMTc0YTY4OGE1MjlhYzVjNzU2YjlhZGVkOWZlY2Ug
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wMS0xMiAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIFN1cHBvcnQga2V5IHJvdGF0aW9uIHdpdGgg
SExTLWJhY2tlZCBlbmNyeXB0ZWQgbWVkaWEgc3RyZWFtcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNDkzCisgICAgICAgIDxyZGFyOi8vNjgyMjc3
MDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4
IGEgYnJva2VuIGxheW91dCB0ZXN0OyB0aGUgdGVzdCBlbnVtZXJhdGVzIGRldmljZXMsIHRoZW4g
dXNlcyB0aGUgZGV2aWNlSWRzIHJldHVybmVkIHRvIGdlbmVyYXRlCisgICAgICAgIGNvbnN0cmFp
bnRzIGZvciBhIGNhbGwgdG8gZ2V0VXNlck1lZGlhKCkuIEhvd2V2ZXIsIGl0IGFzc3VtZXMgYWxs
IGRldmljZXMgd2lsbCBlaXRoZXIgYmUgb2Yga2luZAorICAgICAgICAnYXVkaW9pbnB1dCcgb3Ig
J3ZpZGVvaW5wdXQnLiBJZiBhbiAnYXVkaW9vdXRwdXQnIGRldmljZSBpcyByZXR1cm5lZCAoYXMg
dGhlIE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyCisgICAgICAgIGRvZXMpLCB0aGVuIHRo
ZSB0ZXN0IHR1cm5zIHRoYXQgaW50byBhIHZpZGVvIGNhcHR1cmUgY29uc3RyYWludCwgd2hpY2gg
ZmFpbHMuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2dldC11c2VyLW1lZGlhLWRldmlj
ZS1pZC5odG1sOgorCiAyMDIwLTExLTA5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29t
PgogCiAgICAgICAgIE5vbi1mdWxsc2NyZWVuIHBhZ2UgY29udGVudHMgdmlzaWJsZSB3aGVuIHJv
dGF0aW5nIGRldmljZSBkdXJpbmcgZWxlbWVudCBmdWxsc2NyZWVuIHByZXNlbnRhdGlvbi4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0LXVzZXItbWVkaWEtZGV2
aWNlLWlkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldC11c2VyLW1lZGlh
LWRldmljZS1pZC5odG1sCmluZGV4IGI0ODdhZDVkYmRmOTAzZjJlMTk2ZTBhYzg1NWM5NmRlMzNh
OTg2ODQuLjBkNDE2Yzc5MTA3ZTRiYzE5NmYyZGIwMGM3N2NlMjQ1ZWQwNTgwYzcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0LXVzZXItbWVkaWEtZGV2aWNlLWlk
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXQtdXNlci1tZWRpYS1k
ZXZpY2UtaWQuaHRtbApAQCAtMjUsNiArMjUsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBu
YXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKTsKICAgICAgICAgICAgIH0p
LnRoZW4oZGV2aWNlcyA9PiB7CiAgICAgICAgICAgICAgICAgZGV2aWNlcy5mb3JFYWNoKChkZXZp
Y2UpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZS5raW5kID09ICJhdWRpb291
dHB1dCIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgIGxldCBraW5kID0gZGV2aWNlLmtpbmQgPT0gImF1ZGlvaW5wdXQiID8gImF1ZGlvIiA6ICJ2
aWRlbyI7CiAgICAgICAgICAgICAgICAgICAgIGRldmljZUlkcy5wdXNoKHsgdHlwZToga2luZCwg
aWQgOiBkZXZpY2UuZGV2aWNlSWR9KTsKICAgICAgICAgICAgICAgICB9KTsK
</data>
<flag name="review"
          id="435243"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417560</attachid>
            <date>2021-01-13 14:00:16 -0800</date>
            <delta_ts>2021-01-13 16:01:43 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-220471-20210113140015.patch</filename>
            <type>text/plain</type>
            <size>29298</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzEzNDk0NWIzZDAxYzk0
Y2I1ZmFiM2M1OGQ1Y2JmNTVjOTY5MjZlMi4uNDA0NzFmYzY1NTA2MWI2ZTM3ZWY1MDg1MmRlNWU5
MDc2ZmJiN2Y0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTAxLTA4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtIQU5HXSA0OTZtcyB0byAx
MzYwbXMgaW4gV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVm
cmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNDcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZh
YmxldC4KKworICAgICAgICBSZWZhY3RvciBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpnZXRN
ZWRpYVN0cmVhbURldmljZXMoKSB0byB0YWtlIGEgY29tcGxldGlvbiBoYW5kbGVyLCByYXRoZXIg
dGhhbgorICAgICAgICBzeW5jaHJvbm91c2x5IHJldHVybiBhIFZlY3RvciBvZiBDYXB0dXJlRGV2
aWNlcy4gVGhpcyBhbHNvIHJlcXVpcmVzIGFsbCBDYXB0dXJlRGV2aWNlTWFuYWdlciBzdWJjbGFz
c2VzCisgICAgICAgIHRvIHN1cHBvcnQgdGFraW5nIGEgY29tcGxldGlvbiBoYW5kbGVyIHRoZW1z
ZWx2ZXMuIEJ5IGRlZmF1bHQsIGFsbCBDYXB0dXJlRGV2aWNlTWFuYWdlcnMgd2lsbCBzdXBwb3J0
CisgICAgICAgIHRoZSBDb21wbGV0aW9uSGFuZGxlciBwYXRoIGJ5IGp1c3Qgc3luY2hyb25vdXNs
eSBjYWxsaW5nIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgd2l0aCB0aGUgZXhpc3RpbmcKKyAgICAg
ICAgc3luY2hyb25vdXMgbWV0aG9kLiBCdXQgZm9yIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmlj
ZU1hbmFnZXIsIG92ZXJyaWRlIHRoYXQgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBieQorICAgICAg
ICBhY3RpdmF0aW5nIHRoZSBBVkF1ZGlvU2Vzc2lvbiBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBh
bmQgcXVlcnlpbmcgdGhhdCBzZXNzaW9uJ3MgaW5wdXRzIG9uIGEgYmFja2dyb3VuZAorICAgICAg
ICB0aHJlYWQgYXMgd2VsbC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1
cmVEZXZpY2VNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpnZXRNZWRpYVN0cmVhbURldmljZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlRmFjdG9yeS5oOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9DYXB0dXJlRmFjdG9yeTo6Z2V0U3BlYWtlckRldmljZXMgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBVkF1
ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjphdWRpb1Nlc3Npb25EZXZpY2VXaXRoVUlE
KToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6
OnNjaGVkdWxlVXBkYXRlQ2FwdHVyZURldmljZXMpOgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6
Z2V0Q2FwdHVyZURldmljZXMpOgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlcjo6YWN0aXZhdGVBdWRpb1Nlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmV0cmlldmVBdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXRBdWRpb0NhcHR1cmVEZXZpY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VzKTogRGVsZXRlZC4KKwogMjAyMS0wMS0xMiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBGYWNlYm9vayBwYXVzZXMgdmlkZW8gaW4gUGlQ
IGR1cmluZyBzY3JvbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTgyM2I4NmU4YTQ3ZTVmZTUzNWUyMWExZDg3Njg4
MmNiNWUwYjQxMi4uYjNjOWQ1ZjFhZmI3OGZlNjM1Y2Y3Zjg3NGY1ODYxYmViZjgzOTQ2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMS0wMS0wOCAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KKworICAgICAgICBbSEFOR10gNDk2bXMgdG8gMTM2MG1zIGluIFdlYkNvcmU6
OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZnJlc2hBdWRpb0NhcHR1cmVE
ZXZpY2VzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMDQ3MQorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAg
VXNlIHRoZSBjb21wbGV0aW9uLWhhbmRsZXIgdmVyc2lvbiBvZiBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpnZXRNZWRpYVN0cmVhbURldmljZXMoKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9V
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojpjb21wdXRlRmlsdGVy
ZWREZXZpY2VMaXN0KToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHk6OmVudW1lcmF0ZU1lZGlhRGV2aWNlc0ZvckZyYW1lKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6dXBkYXRlQ2FwdHVyZURldmljZXMpOgor
ICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6YmVnaW5Nb25pdG9yaW5n
Q2FwdHVyZURldmljZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNzTWFu
YWdlci5oOgorCiAyMDIxLTAxLTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgog
CiAgICAgICAgIFtDb2NvYV0gU3VwcG9ydCBrZXkgcm90YXRpb24gd2l0aCBITFMtYmFja2VkIGVu
Y3J5cHRlZCBtZWRpYSBzdHJlYW1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIuaAppbmRleCAyZmNmYTBiMDM2
YmQwOWJmZWU2YzA5MGVjYTZhMWUxMmZlNmFiYzhlLi43NjIwYWQyNTdmNDgzZTMzMjU3NTA3Nzc3
NTNiMGNhMzM0NjVmNTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTM1LDYgKzM1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgV0VCQ09SRV9FWFBPUlQgQ2FwdHVyZURldmljZU1h
bmFnZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+
JiBjYXB0dXJlRGV2aWNlcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Q2FwdHVyZURldmlj
ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4mJik+JiYgY2Fs
bGJhY2spIHsgY2FsbGJhY2soY29weVRvVmVjdG9yKGNhcHR1cmVEZXZpY2VzKCkpKTsgfTsKICAg
ICB2aXJ0dWFsIE9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IGNhcHR1cmVEZXZpY2VXaXRoUGVyc2lz
dGVudElEKENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUsIGNvbnN0IFN0cmluZyYpIHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIuY3BwCmluZGV4IGMxZDk2YWIxYWNhOWVlNjNkY2ZiNGZmZWIyYjI2YTg1NTAyYzUyNzkuLmRj
NTRkNGEwZTEwYTljY2I2ODNlYWM0YTZjY2JmMzE5MWEzZWY3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwCkBAIC0xMTIsMjcgKzExMiw0OCBAQCB2b2lkIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFJlZjxjb25zdCBMb2dnZXI+JiYgbG9n
Z2VyLCBOZQogICAgIGF1ZGlvU291cmNlLT53aGVuUmVhZHkoV1RGTW92ZSh3aGVuQXVkaW9Tb3Vy
Y2VSZWFkeSkpOwogfQogCi1WZWN0b3I8Q2FwdHVyZURldmljZT4gUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6Z2V0TWVkaWFTdHJlYW1EZXZpY2VzKCkKK3ZvaWQgUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6Z2V0TWVkaWFTdHJlYW1EZXZpY2VzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPENhcHR1cmVEZXZpY2U+JiYpPiYmIGNvbXBsZXRpb24pCiB7Ci0gICAgVmVjdG9yPENhcHR1
cmVEZXZpY2U+IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8mIGRldmljZSA6IGF1ZGlvQ2FwdHVyZUZh
Y3RvcnkoKS5hdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkuY2FwdHVyZURldmljZXMoKSkgewot
ICAgICAgICBpZiAoZGV2aWNlLmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
ZGV2aWNlKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBkZXZpY2UgOiBhdWRpb0NhcHR1cmVGYWN0
b3J5KCkuc3BlYWtlckRldmljZXMoKSkgewotICAgICAgICBpZiAoZGV2aWNlLmVuYWJsZWQoKSkK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGV2aWNlKTsKLSAgICB9Ci0gICAgZm9yIChhdXRv
JiBkZXZpY2UgOiB2aWRlb0NhcHR1cmVGYWN0b3J5KCkudmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdl
cigpLmNhcHR1cmVEZXZpY2VzKCkpIHsKLSAgICAgICAgaWYgKGRldmljZS5lbmFibGVkKCkpCi0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRldmljZSk7Ci0gICAgfQotICAgIGZvciAoYXV0byYg
ZGV2aWNlIDogZGlzcGxheUNhcHR1cmVGYWN0b3J5KCkuZGlzcGxheUNhcHR1cmVEZXZpY2VNYW5h
Z2VyKCkuY2FwdHVyZURldmljZXMoKSkgewotICAgICAgICBpZiAoZGV2aWNlLmVuYWJsZWQoKSkK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGV2aWNlKTsKLSAgICB9CisgICAgY2xhc3MgQ2Fw
dHVyZURldmljZUFjY3VtdWxhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FwdHVyZURldmljZUFj
Y3VtdWxhdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVmPENhcHR1cmVEZXZp
Y2VBY2N1bXVsYXRvcj4gY3JlYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENhcHR1
cmVEZXZpY2U+JiYpPiYmIGNvbXBsZXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENhcHR1cmVEZXZpY2VBY2N1bXVsYXRvcihXVEZNb3ZlKGNvbXBsZXRp
b24pKSk7CisgICAgICAgIH0KKworICAgICAgICB+Q2FwdHVyZURldmljZUFjY3VtdWxhdG9yKCkK
KyAgICAgICAgeworICAgICAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG1fcmVz
dWx0cykpOworICAgICAgICB9CisKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8Q2FwdHVyZURldmljZT4mJik+IGFjY3VtdWxhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFZlY3RvcjxD
YXB0dXJlRGV2aWNlPiYmIHJlc3VsdCkgeworICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBl
bmRWZWN0b3IoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IENhcHR1cmVEZXZpY2VBY2N1bXVsYXRvcihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmKT4mJiBjb21wbGV0
aW9uKQorICAgICAgICAgICAgOiBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlv
bikpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiYpPiBtX2NvbXBsZXRpb25IYW5kbGVyOworICAgICAg
ICBWZWN0b3I8Q2FwdHVyZURldmljZT4gbV9yZXN1bHRzOworICAgIH07CisKKyAgICBhdXRvIGFj
Y3VtdWxhdG9yID0gQ2FwdHVyZURldmljZUFjY3VtdWxhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb24g
PSBXVEZNb3ZlKGNvbXBsZXRpb24pXSAoYXV0byYmIGRldmljZXMpIG11dGFibGUgeworICAgICAg
ICBkZXZpY2VzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChhdXRvJiBjYXB0dXJlRGV2aWNlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gIWNhcHR1cmVEZXZpY2UuZW5hYmxlZCgpOworICAgICAgICB9KTsK
KyAgICAgICAgY29tcGxldGlvbihXVEZNb3ZlKGRldmljZXMpKTsKKyAgICB9KTsKIAotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgYXVkaW9DYXB0dXJlRmFjdG9yeSgpLmF1ZGlvQ2FwdHVyZURldmlj
ZU1hbmFnZXIoKS5nZXRDYXB0dXJlRGV2aWNlcyhhY2N1bXVsYXRvci0+YWNjdW11bGF0ZSgpKTsK
KyAgICB2aWRlb0NhcHR1cmVGYWN0b3J5KCkudmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpLmdl
dENhcHR1cmVEZXZpY2VzKGFjY3VtdWxhdG9yLT5hY2N1bXVsYXRlKCkpOworICAgIGRpc3BsYXlD
YXB0dXJlRmFjdG9yeSgpLmRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpLmdldENhcHR1cmVE
ZXZpY2VzKGFjY3VtdWxhdG9yLT5hY2N1bXVsYXRlKCkpOworICAgIGF1ZGlvQ2FwdHVyZUZhY3Rv
cnkoKS5nZXRTcGVha2VyRGV2aWNlcyhhY2N1bXVsYXRvci0+YWNjdW11bGF0ZSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgYWRkU3RyaW5nVG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oCmluZGV4IDAyODI4NjU4ZTA5ZWFkZTk3
MjExOGFkZWNkYzE3ZjM2NGZlYTMwZTEuLjY5NTYxYjE5YmE4NDU1MTdiNzQ0MjQyNDU2ODZmYTM2
NGQ0ZDQ1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgKQEAgLTY2LDcgKzY2LDcg
QEAgcHVibGljOgogICAgIHVzaW5nIE5ld01lZGlhU3RyZWFtSGFuZGxlciA9IEZ1bmN0aW9uPHZv
aWQoRXhwZWN0ZWQ8UmVmPE1lZGlhU3RyZWFtUHJpdmF0ZT4sIFN0cmluZz4mJik+OwogICAgIHZv
aWQgY3JlYXRlTWVkaWFTdHJlYW0oUmVmPGNvbnN0IExvZ2dlcj4mJiwgTmV3TWVkaWFTdHJlYW1I
YW5kbGVyJiYsIFN0cmluZyYmLCBDYXB0dXJlRGV2aWNlJiYgYXVkaW9EZXZpY2UsIENhcHR1cmVE
ZXZpY2UmJiB2aWRlb0RldmljZSwgY29uc3QgTWVkaWFTdHJlYW1SZXF1ZXN0Jik7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBWZWN0b3I8Q2FwdHVyZURldmljZT4gZ2V0TWVkaWFTdHJlYW1EZXZpY2Vz
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRNZWRpYVN0cmVhbURldmljZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q2FwdHVyZURldmljZT4mJik+JiYpOwogCiAgICAgY29u
c3QgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzJiBzdXBwb3J0ZWRDb25z
dHJhaW50cygpIHsgcmV0dXJuIG1fc3VwcG9ydGVkQ29uc3RyYWludHM7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJj
ZUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
TWVkaWFTb3VyY2VGYWN0b3J5LmgKaW5kZXggYjE3YzczZmMwOTVmYjJmNWM5MjkyMTBjYWI3Yzc0
YmZlZGE5MDc2ZC4uZGUwYzgwNjRmY2NkZjIyNDlmZGY3MDcxNzdkY2M3Yjk3Yzc5MGVlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZUZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlRmFjdG9yeS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQogCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIApAQCAtNjIsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDYXB0dXJlU291cmNl
T3JFcnJvciBjcmVhdGVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYsIFN0
cmluZyYmLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKikgPSAwOwogICAgIHZpcnR1YWwgQ2FwdHVy
ZURldmljZU1hbmFnZXImIGF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIoKSA9IDA7CiAgICAgdmly
dHVhbCBjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIHNwZWFrZXJEZXZpY2VzKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRTcGVha2VyRGV2aWNlcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYmKT4mJiBjb21wbGV0aW9uKSBjb25zdCB7IGNv
bXBsZXRpb24oY29weVRvVmVjdG9yKHNwZWFrZXJEZXZpY2VzKCkpKTsgfQogCiAgICAgY2xhc3Mg
RXh0ZW5zaXZlT2JzZXJ2ZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8RXh0ZW5zaXZlT2JzZXJ2
ZXI+IHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRXh0ZW5zaXZlT2JzZXJ2ZXIoRXh0ZW5zaXZl
T2JzZXJ2ZXImKSB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZU1hbmFnZXIuaAppbmRleCAyYmM1NjQyZWZlN2NlMTIwZGMwNTZjN2QwN2NmOGFmNTIwODdi
OTI5Li4zY2JlOGNlYTY4NWE1NDU4ODIwZGYyODhiZGY2Y2E2ZGVhYjIzYjliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25D
YXB0dXJlRGV2aWNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTQ4LDYg
KzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VN
YW5hZ2VyJiBzaW5nbGV0b24oKTsKIAogICAgIGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYg
Y2FwdHVyZURldmljZXMoKSBmaW5hbDsKKyAgICB2b2lkIGdldENhcHR1cmVEZXZpY2VzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiYpPiYmKSBmaW5hbDsKICAg
ICBjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIHNwZWFrZXJEZXZpY2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGVha2VyRGV2aWNlczsgfQogICAgIE9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IGNh
cHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUsIGNv
bnN0IFN0cmluZyYpOwogCkBAIC02Myw4ICs2NCwxMCBAQCBwcml2YXRlOgogICAgIH5BVkF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCk7CiAKICAgICB2b2lkIGNyZWF0ZUF1ZGlvU2Vz
c2lvbigpOworICAgIHZvaWQgYWN0aXZhdGVBdWRpb1Nlc3Npb24oKTsKICAgICB2b2lkIHJlZnJl
c2hBdWRpb0NhcHR1cmVEZXZpY2VzKCk7Ci0gICAgVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVy
ZURldmljZT4mIGF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKCk7CisgICAgVmVjdG9yPEFWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZT4gcmV0cmlldmVBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNl
cygpIGNvbnN0OworICAgIHZvaWQgc2V0QXVkaW9DYXB0dXJlRGV2aWNlcyhWZWN0b3I8QVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlPiYmKTsKIAogICAgIGVudW0gY2xhc3MgQXVkaW9TZXNzaW9u
U3RhdGUgeyBOb3ROZWVkZWQsIEluYWN0aXZlLCBBY3RpdmUgfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVy
ZURldmljZU1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9p
b3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbQppbmRleCA1ZDg4OWY1NmU5
OGI3MDAzYjcwM2EzNjIwNzc5Y2Y0ZDljNTU0NWFlLi5mMmM5NDBhMGY4OWZkYTM0MjJlMjkwNjAw
MmYyNDVmNDUwZDNlMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlci5tbQpAQCAtMTM2LDE2ICsxMzYsMTIgQEAgT3B0aW9uYWw8Q2FwdHVy
ZURldmljZT4gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y2FwdHVyZURldmlj
ZVdpdGhQZXIKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1WZWN0b3I8QVZBdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlPiYgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6
YXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZXMoKQorT3B0aW9uYWw8QVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlPiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjphdWRpb1Nlc3Np
b25EZXZpY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpCiB7CiAgICAgaWYgKCFtX2F1
ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKQogICAgICAgICByZWZyZXNoQXVkaW9DYXB0dXJlRGV2
aWNlcygpOwotICAgIHJldHVybiBtX2F1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzLnZhbHVlKCk7
Ci19CiAKLU9wdGlvbmFsPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZT4gQVZBdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6YXVkaW9TZXNzaW9uRGV2aWNlV2l0aFVJRChjb25zdCBT
dHJpbmcmIGRldmljZUlEKQotewotICAgIGZvciAoYXV0byYgZGV2aWNlIDogYXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZXMoKSkgeworICAgIGZvciAoYXV0byYgZGV2aWNlIDogKm1fYXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZXMpIHsKICAgICAgICAgaWYgKGRldmljZS5wZXJzaXN0ZW50SWQoKSA9
PSBkZXZpY2VJRCkKICAgICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgfQpAQCAtMTU0LDQy
ICsxNTAsNzEgQEAgT3B0aW9uYWw8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBBVkF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjphdWRpb1MKIAogdm9pZCBBVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzY2hlZHVsZVVwZGF0ZUNhcHR1cmVEZXZpY2VzKCkKIHsK
LSAgICBpZiAobV91cGRhdGVEZXZpY2VTdGF0ZVF1ZXVlLmhhc1BlbmRpbmdUYXNrcygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3VwZGF0ZURldmljZVN0YXRlUXVldWUuZW5xdWV1ZVRhc2so
W3RoaXNdIHsKLSAgICAgICAgcmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKTsKLSAgICB9KTsK
KyAgICBnZXRDYXB0dXJlRGV2aWNlcyhbXSAoYXV0bykgeyB9KTsKIH0KIAogdm9pZCBBVkF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygp
CiB7Ci0gICAgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBjcmVhdGVkIHRoZSBhdWRp
byBzZXNzaW9uLgotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAg
fQotICAgIGJvb2wgZmlyc3RUaW1lID0gIW1fZGV2aWNlczsKICAgICBpZiAobV9hdWRpb1Nlc3Np
b25TdGF0ZSA9PSBBdWRpb1Nlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKICAgICAgICAgbV9hdWRp
b1Nlc3Npb25TdGF0ZSA9IEF1ZGlvU2Vzc2lvblN0YXRlOjpBY3RpdmU7CiAKLSAgICAgICAgaWYg
KCFtX2xpc3RlbmVyKQotICAgICAgICAgICAgbV9saXN0ZW5lciA9IGFkb3B0TlMoW1tXZWJBVkF1
ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xpc3RlbmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNr
OnRoaXMgYXVkaW9TZXNzaW9uOm1fYXVkaW9TZXNzaW9uLmdldCgpXSk7CisgICAgICAgIGRpc3Bh
dGNoX3N5bmMobV9kaXNwYXRjaFF1ZXVlLCBtYWtlQmxvY2tQdHIoW3RoaXNdIHsKKyAgICAgICAg
ICAgIGFjdGl2YXRlQXVkaW9TZXNzaW9uKCk7CisgICAgICAgIH0pLmdldCgpKTsKKyAgICB9CiAK
LSAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgICAgIFttX2F1ZGlvU2Vzc2lvbiBz
ZXRBY3RpdmU6WUVTIHdpdGhPcHRpb25zOjAgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKGVy
cm9yKQotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiRmFpbGVkIHRvIGFj
dGl2YXRlIGF1ZGlvIHNlc3Npb24gd2l0aCBlcnJvcjogJUAuIiwgZXJyb3IubG9jYWxpemVkRGVz
Y3JpcHRpb24pOworICAgIFZlY3RvcjxBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+IG5ld0F1
ZGlvRGV2aWNlczsKKyAgICBkaXNwYXRjaF9zeW5jKG1fZGlzcGF0Y2hRdWV1ZSwgbWFrZUJsb2Nr
UHRyKFsmXSB7CisgICAgICAgIG5ld0F1ZGlvRGV2aWNlcyA9IHJldHJpZXZlQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZXMoKTsKKyAgICB9KS5nZXQoKSk7CisgICAgc2V0QXVkaW9DYXB0dXJlRGV2
aWNlcyhXVEZNb3ZlKG5ld0F1ZGlvRGV2aWNlcykpOworfQorCit2b2lkIEFWQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZU1hbmFnZXI6OmdldENhcHR1cmVEZXZpY2VzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiYpPiYmIGNvbXBsZXRpb24pCit7CisgICAgaWYg
KG1fYXVkaW9TZXNzaW9uU3RhdGUgPT0gQXVkaW9TZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7Cisg
ICAgICAgIG1fYXVkaW9TZXNzaW9uU3RhdGUgPSBBdWRpb1Nlc3Npb25TdGF0ZTo6QWN0aXZlOwor
CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKG1fZGlzcGF0Y2hRdWV1ZSwgbWFrZUJsb2NrUHRyKFt0
aGlzXSB7CisgICAgICAgICAgICBhY3RpdmF0ZUF1ZGlvU2Vzc2lvbigpOworICAgICAgICB9KS5n
ZXQoKSk7CiAgICAgfQogCisgICAgZGlzcGF0Y2hfYXN5bmMobV9kaXNwYXRjaFF1ZXVlLCBtYWtl
QmxvY2tQdHIoW3RoaXMsIGNvbXBsZXRpb24gPSBXVEZNb3ZlKGNvbXBsZXRpb24pXSAoKSBtdXRh
YmxlIHsKKyAgICAgICAgYXV0byBuZXdBdWRpb0RldmljZXMgPSByZXRyaWV2ZUF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VzKCk7CisgICAgICAgIGNhbGxPbldlYlRocmVhZE9yRGlzcGF0Y2hBc3lu
Y09uTWFpblRocmVhZChtYWtlQmxvY2tQdHIoW3RoaXMsIGNvbXBsZXRpb24gPSBXVEZNb3ZlKGNv
bXBsZXRpb24pLCBuZXdBdWRpb0RldmljZXMgPSBXVEZNb3ZlKG5ld0F1ZGlvRGV2aWNlcyldICgp
IG11dGFibGUgeworICAgICAgICAgICAgc2V0QXVkaW9DYXB0dXJlRGV2aWNlcyhXVEZNb3ZlKG5l
d0F1ZGlvRGV2aWNlcykpOworICAgICAgICAgICAgY29tcGxldGlvbihjb3B5VG9WZWN0b3IoKm1f
ZGV2aWNlcykpOworICAgICAgICB9KS5nZXQoKSk7CisgICAgfSkuZ2V0KCkpOworfQorCit2b2lk
IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmFjdGl2YXRlQXVkaW9TZXNzaW9u
KCkKK3sKKyAgICBpZiAoIW1fbGlzdGVuZXIpCisgICAgICAgIG1fbGlzdGVuZXIgPSBhZG9wdE5T
KFtbV2ViQVZBdWRpb1Nlc3Npb25BdmFpbGFibGVJbnB1dHNMaXN0ZW5lciBhbGxvY10gaW5pdFdp
dGhDYWxsYmFjazp0aGlzIGF1ZGlvU2Vzc2lvbjptX2F1ZGlvU2Vzc2lvbi5nZXQoKV0pOworCisg
ICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgW21fYXVkaW9TZXNzaW9uIHNldEFjdGl2ZTpZ
RVMgd2l0aE9wdGlvbnM6MCBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJvcikKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiRmFpbGVkIHRvIGFjdGl2YXRlIGF1ZGlvIHNlc3Np
b24gd2l0aCBlcnJvcjogJUAuIiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24pOworfQorCitW
ZWN0b3I8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpyZXRyaWV2ZUF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKCkgY29uc3QK
K3sKICAgICBWZWN0b3I8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBuZXdBdWRpb0Rldmlj
ZXM7Ci0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IG5ld0RldmljZXM7CiAgICAgYXV0byAqZGVm
YXVsdElucHV0ID0gW21fYXVkaW9TZXNzaW9uIGN1cnJlbnRSb3V0ZV0uaW5wdXRzLmZpcnN0T2Jq
ZWN0OwotICAgIGZvciAoQVZBdWRpb1Nlc3Npb25Qb3J0RGVzY3JpcHRpb24gKnBvcnREZXNjcmlw
dGlvbiBpbiBbbV9hdWRpb1Nlc3Npb24gYXZhaWxhYmxlSW5wdXRzXSkgewotICAgICAgICBhdXRv
IGF1ZGlvRGV2aWNlID0gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlOjpjcmVhdGUocG9ydERl
c2NyaXB0aW9uLCBkZWZhdWx0SW5wdXQpOwotICAgICAgICBuZXdEZXZpY2VzLmFwcGVuZChhdWRp
b0RldmljZSk7Ci0gICAgICAgIG5ld0F1ZGlvRGV2aWNlcy5hcHBlbmQoV1RGTW92ZShhdWRpb0Rl
dmljZSkpOwotICAgIH0KKyAgICBuZXdBdWRpb0RldmljZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShbbV9hdWRpb1Nlc3Npb24gYXZhaWxhYmxlSW5wdXRzXS5jb3VudCk7CisKKyAgICBmb3IgKEFW
QXVkaW9TZXNzaW9uUG9ydERlc2NyaXB0aW9uICpwb3J0RGVzY3JpcHRpb24gaW4gW21fYXVkaW9T
ZXNzaW9uIGF2YWlsYWJsZUlucHV0c10pCisgICAgICAgIG5ld0F1ZGlvRGV2aWNlcy51bmNoZWNr
ZWRBcHBlbmQoQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlOjpjcmVhdGUocG9ydERlc2NyaXB0
aW9uLCBkZWZhdWx0SW5wdXQpKTsKIAorICAgIHJldHVybiBuZXdBdWRpb0RldmljZXM7Cit9CisK
K3ZvaWQgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2V0QXVkaW9DYXB0dXJl
RGV2aWNlcyhWZWN0b3I8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiYmIG5ld0F1ZGlvRGV2
aWNlcykKK3sKKyAgICBib29sIGZpcnN0VGltZSA9ICFtX2RldmljZXM7CiAgICAgYm9vbCBoYXZl
RGV2aWNlQ2hhbmdlcyA9ICFtX2RldmljZXMgfHwgbmV3QXVkaW9EZXZpY2VzLnNpemUoKSAhPSBt
X2RldmljZXMtPnNpemUoKTsKICAgICBpZiAoIWhhdmVEZXZpY2VDaGFuZ2VzKSB7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3QXVkaW9EZXZpY2VzLnNpemUoKTsgKytpKSB7CkBA
IC0yMDMsNiArMjI4LDcgQEAgdm9pZCBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpyZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpCiAgICAgaWYgKCFoYXZlRGV2aWNlQ2hhbmdl
cyAmJiAhZmlyc3RUaW1lKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIG5ld0RldmljZXMg
PSBjb3B5VG9WZWN0b3JPZjxDYXB0dXJlRGV2aWNlPihuZXdBdWRpb0RldmljZXMpOwogICAgIG1f
YXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZXMgPSBXVEZNb3ZlKG5ld0F1ZGlvRGV2aWNlcyk7CiAg
ICAgc3RkOjpzb3J0KG5ld0RldmljZXMuYmVnaW4oKSwgbmV3RGV2aWNlcy5lbmQoKSwgW10gKGF1
dG8mIGZpcnN0LCBhdXRvJiBzZWNvbmQpIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gZmlyc3Qu
aXNEZWZhdWx0KCkgJiYgIXNlY29uZC5pc0RlZmF1bHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlclByb3h5LmNwcAppbmRleCA0ZWZlZjk5Njk0OTU3MWI1NTZjYTM0Y2FiNDcxZmRmZmQ0NWRm
NTNmLi44NWQ0ZDE4OGFiN2E2ODczYjE5MGI1ODY1ODRjZjU3MzJjNmFmMDFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC02NTQsNDAgKzY1NCw0MiBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgaGF2ZU1pY3JvcGhvbmVEZXZpY2UoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNh
cHR1cmVEZXZpY2U+JiBkZQogICAgIH0pOwogfQogCi1WZWN0b3I8Q2FwdHVyZURldmljZT4gVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmNvbXB1dGVGaWx0ZXJlZERldmlj
ZUxpc3QoYm9vbCByZXZlYWxJZHNBbmRMYWJlbHMpCit2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5Ojpjb21wdXRlRmlsdGVyZWREZXZpY2VMaXN0KGJvb2wgcmV2ZWFs
SWRzQW5kTGFiZWxzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDYXB0dXJlRGV2aWNl
PiYmKT4mJiBjb21wbGV0aW9uKQogewotICAgIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdE1heGlt
dW1DYW1lcmFDb3VudCA9IDE7Ci0gICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0TWF4aW11bU1p
Y3JvcGhvbmVDb3VudCA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRNYXhp
bXVtQ2FtZXJhQ291bnQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0TWF4
aW11bU1pY3JvcGhvbmVDb3VudCA9IDE7CiAKLSAgICBhdXRvIGRldmljZXMgPSBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5nZXRNZWRpYVN0cmVhbURldmljZXMoKTsKLSAg
ICBpbnQgY2FtZXJhQ291bnQgPSAwOwotICAgIGludCBtaWNyb3Bob25lQ291bnQgPSAwOworICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLmdldE1lZGlhU3RyZWFtRGV2
aWNlcyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgcmV2ZWFsSWRzQW5kTGFi
ZWxzLCBjb21wbGV0aW9uID0gV1RGTW92ZShjb21wbGV0aW9uKV0gKGF1dG8mJiBkZXZpY2VzKSBt
dXRhYmxlIHsKKyAgICAgICAgdW5zaWduZWQgY2FtZXJhQ291bnQgPSAwOworICAgICAgICB1bnNp
Z25lZCBtaWNyb3Bob25lQ291bnQgPSAwOwogCi0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IGZp
bHRlcmVkRGV2aWNlczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGRldmljZSA6IGRldmljZXMpIHsK
LSAgICAgICAgaWYgKCFkZXZpY2UuZW5hYmxlZCgpIHx8IChkZXZpY2UudHlwZSgpICE9IFdlYkNv
cmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSAmJiBkZXZpY2UudHlwZSgpICE9
IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUgJiYgZGV2aWNl
LnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTcGVha2VyKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghcmV2ZWFsSWRzQW5kTGFiZWxz
KSB7Ci0gICAgICAgICAgICBpZiAoZGV2aWNlLnR5cGUoKSA9PSBXZWJDb3JlOjpDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgKytjYW1lcmFDb3VudCA+IGRlZmF1bHRNYXhpbXVt
Q2FtZXJhQ291bnQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
ZGV2aWNlLnR5cGUoKSA9PSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNy
b3Bob25lICYmICsrbWljcm9waG9uZUNvdW50ID4gZGVmYXVsdE1heGltdW1NaWNyb3Bob25lQ291
bnQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZGV2aWNlLnR5
cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgZGV2
aWNlLnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bo
b25lKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gV2Ugb25seSBleHBvc2Ugc3BlYWtlcnMgdGllZCB0byBhIG1pY3JvcGhvbmUgZm9y
IHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoZGV2aWNlLnR5cGUoKSA9PSBXZWJDb3JlOjpD
YXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTcGVha2VyICYmICFoYXZlTWljcm9waG9uZURldmlj
ZShkZXZpY2VzLCBkZXZpY2UuZ3JvdXBJZCgpKSkKKyAgICAgICAgVmVjdG9yPENhcHR1cmVEZXZp
Y2U+IGZpbHRlcmVkRGV2aWNlczsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBkZXZpY2UgOiBk
ZXZpY2VzKSB7CisgICAgICAgICAgICBpZiAoIWRldmljZS5lbmFibGVkKCkgfHwgKGRldmljZS50
eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhICYmIGRl
dmljZS50eXBlKCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9w
aG9uZSAmJiBkZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGU6OlNwZWFrZXIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAKLSAg
ICAgICAgZmlsdGVyZWREZXZpY2VzLmFwcGVuZChyZXZlYWxJZHNBbmRMYWJlbHMgPyBkZXZpY2Ug
OiBDYXB0dXJlRGV2aWNlKHsgfSwgZGV2aWNlLnR5cGUoKSwgeyB9LCB7IH0pKTsKLSAgICB9Cisg
ICAgICAgICAgICBpZiAoIXJldmVhbElkc0FuZExhYmVscykgeworICAgICAgICAgICAgICAgIGlm
IChkZXZpY2UudHlwZSgpID09IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNh
bWVyYSAmJiArK2NhbWVyYUNvdW50ID4gZGVmYXVsdE1heGltdW1DYW1lcmFDb3VudCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGRldmljZS50eXBl
KCkgPT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSAmJiAr
K21pY3JvcGhvbmVDb3VudCA+IGRlZmF1bHRNYXhpbXVtTWljcm9waG9uZUNvdW50KQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoZGV2aWNlLnR5cGUo
KSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgZGV2aWNl
LnR5cGUoKSAhPSBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25l
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2Ugb25seSBleHBvc2Ugc3BlYWtlcnMgdGllZCB0byBhIG1pY3Jv
cGhvbmUgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgaWYgKGRldmljZS50eXBlKCkg
PT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U3BlYWtlciAmJiAhaGF2ZU1p
Y3JvcGhvbmVEZXZpY2UoZGV2aWNlcywgZGV2aWNlLmdyb3VwSWQoKSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaWx0ZXJlZERl
dmljZXMuYXBwZW5kKHJldmVhbElkc0FuZExhYmVscyA/IGRldmljZSA6IENhcHR1cmVEZXZpY2Uo
eyB9LCBkZXZpY2UudHlwZSgpLCB7IH0sIHsgfSkpOworICAgICAgICB9CiAKLSAgICBtX2hhc0Zp
bHRlcmVkRGV2aWNlTGlzdCA9ICFyZXZlYWxJZHNBbmRMYWJlbHM7CisgICAgICAgIGlmICh3ZWFr
VGhpcykKKyAgICAgICAgICAgIG1faGFzRmlsdGVyZWREZXZpY2VMaXN0ID0gIXJldmVhbElkc0Fu
ZExhYmVsczsKIAotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgZmlsdGVyZWREZXZpY2Vz
LnNpemUoKSwgIiBkZXZpY2VzIHJldmVhbGVkIik7Ci0gICAgcmV0dXJuIGZpbHRlcmVkRGV2aWNl
czsKKyAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCBmaWx0ZXJlZERldmljZXMuc2l6
ZSgpLCAiIGRldmljZXMgcmV2ZWFsZWQiKTsKKyAgICAgICAgY29tcGxldGlvbihXVEZNb3ZlKGZp
bHRlcmVkRGV2aWNlcykpOworICAgIH0pOwogfQogI2VuZGlmCiAKQEAgLTczOSw3ICs3NDEsOSBA
QCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjplbnVtZXJhdGVN
ZWRpYURldmljZXNGb3JGcmFtZShGcmFtZQogICAgICAgICAgICAgYm9vbCByZXZlYWxJZHNBbmRM
YWJlbHMgPSBvcmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzIHx8IHdhc0dyYW50ZWRWaWRlb09yQXVk
aW9BY2Nlc3MoZnJhbWVJRCwgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4uZ2V0KCksIHRvcExldmVs
RG9jdW1lbnRPcmlnaW4uZ2V0KCkpOwogCiAgICAgICAgICAgICBjYWxsQ29tcGxldGlvbkhhbmRs
ZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29tcHV0ZUZpbHRl
cmVkRGV2aWNlTGlzdChyZXZlYWxJZHNBbmRMYWJlbHMpLCBkZXZpY2VJREhhc2hTYWx0KTsKKyAg
ICAgICAgICAgIGNvbXB1dGVGaWx0ZXJlZERldmljZUxpc3QocmV2ZWFsSWRzQW5kTGFiZWxzLCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZGV2aWNlSURI
YXNoU2FsdCA9IFdURk1vdmUoZGV2aWNlSURIYXNoU2FsdCldIChhdXRvJiYgZGV2aWNlcykgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGV2aWNlcywgZGV2aWNl
SURIYXNoU2FsdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAgICAgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgKaW5kZXggNWFlZDE1MjdjZjcwMTIyYjUyMzFkM2E5
ZDhmYTZiMDk1MTQyM2NjYy4uYzA5ZmRmNTFiMDRkZWY2MWU0NGRlMzk5YjY1ZWYzYTMwZDZjMDZm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oCkBAIC0xMTksNyArMTE5LDcgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgd2FzR3JhbnRlZFZpZGVvT3JBdWRpb0FjY2VzcyhXZWJDb3Jl
OjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVk
aWFEb2N1bWVudE9yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVs
RG9jdW1lbnRPcmlnaW4pOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U+IGNv
bXB1dGVGaWx0ZXJlZERldmljZUxpc3QoYm9vbCByZXZlYWxJZHNBbmRMYWJlbHMpOworICAgIHZv
aWQgY29tcHV0ZUZpbHRlcmVkRGV2aWNlTGlzdChib29sIHJldmVhbElkc0FuZExhYmVscywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q2FwdHVyZURldmljZT4mJik+JiYp
OwogCiAgICAgdm9pZCBwcm9jZXNzVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoKTsKICAgICB2
b2lkIHByb2Nlc3NVc2VyTWVkaWFQZXJtaXNzaW9uSW52YWxpZFJlcXVlc3QoY29uc3QgU3RyaW5n
JiBpbnZhbGlkQ29uc3RyYWludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Vc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9V
c2VyTWVkaWFQcm9jZXNzTWFuYWdlci5jcHAKaW5kZXggMjlmMDkyNTIyYmE4MjIwMmFmYjA2YWM2
NGU3ZGNiYjk2ZDRlYTk0Mi4uYzg0MjNkZWJjNzc3ZmM5NGZiYTYwMzUzMGI4NTRkNGZjY2ZhZDM0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vzc01h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVByb2Nlc3NN
YW5hZ2VyLmNwcApAQCAtMjE3LDQxICsyMTcsNTEgQEAgdm9pZCBVc2VyTWVkaWFQcm9jZXNzTWFu
YWdlcjo6Y2FwdHVyZURldmljZXNDaGFuZ2VkKCkKICAgICB9KTsKIH0KIAordm9pZCBVc2VyTWVk
aWFQcm9jZXNzTWFuYWdlcjo6dXBkYXRlQ2FwdHVyZURldmljZXMoU2hvdWxkTm90aWZ5IHNob3Vs
ZE5vdGlmeSkKK3sKKyAgICBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5n
bGV0b24oKS5nZXRNZWRpYVN0cmVhbURldmljZXMoW3RoaXMsIHNob3VsZE5vdGlmeV0gKGF1dG8m
JiBuZXdEZXZpY2VzKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBvbGREZXZpY2VzID0gV1RGTW92
ZShtX2NhcHR1cmVEZXZpY2VzKTsKKyAgICAgICAgbV9jYXB0dXJlRGV2aWNlcyA9IFdURk1vdmUo
bmV3RGV2aWNlcyk7CisKKyAgICAgICAgaWYgKHNob3VsZE5vdGlmeSA9PSBTaG91bGROb3RpZnk6
Ok5vKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX2NhcHR1cmVEZXZpY2Vz
LnNpemUoKSA9PSBvbGREZXZpY2VzLnNpemUoKSkgeworICAgICAgICAgICAgYm9vbCBoYXZlQ2hh
bmdlcyA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChhdXRvICZuZXdEZXZpY2UgOiBtX2NhcHR1
cmVEZXZpY2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKG5ld0RldmljZS50eXBlKCkgIT0gV2Vi
Q29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhICYmIG5ld0RldmljZS50eXBl
KCkgIT0gV2ViQ29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4
ID0gb2xkRGV2aWNlcy5maW5kTWF0Y2hpbmcoWyZuZXdEZXZpY2VdIChhdXRvJiBvbGREZXZpY2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0RldmljZS5wZXJzaXN0ZW50SWQoKSA9
PSBvbGREZXZpY2UucGVyc2lzdGVudElkKCkgJiYgbmV3RGV2aWNlLmVuYWJsZWQoKSAhPSBvbGRE
ZXZpY2UuZW5hYmxlZCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
aWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGhhdmVDaGFuZ2Vz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWhhdmVDaGFuZ2VzKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gYSBkZXZpY2Ugd2l0
aCBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgaXMgYXR0YWNoZWQgb3IgZGV0YWNoZWQsIHRoZSBDYXB0
dXJlRGV2aWNlIG5vdGlmaWNhdGlvbiBmb3IKKyAgICAgICAgLy8gdGhlIGRpZmZlcmVudCBkZXZp
Y2VzIHdvbid0IGFycml2ZSBhdCB0aGUgc2FtZSB0aW1lIHNvIGRlbGF5IGEgYml0IHNvIHdlIGNh
biBjb2FsZXNjZSB0aGUgY2FsbGJhY2tzLgorICAgICAgICBpZiAoIW1fZGVib3VuY2VUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9kZWJvdW5jZVRpbWVyLnN0YXJ0T25lU2hvdChkZXZp
Y2VDaGFuZ2VEZWJvdW5jZVRpbWVySW50ZXJ2YWwpOworICAgIH0pOworfQorCiB2b2lkIFVzZXJN
ZWRpYVByb2Nlc3NNYW5hZ2VyOjpiZWdpbk1vbml0b3JpbmdDYXB0dXJlRGV2aWNlcygpCiB7CiAg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogCiAgICAgc3RkOjpjYWxsX29uY2Uo
b25jZUZsYWcsIFt0aGlzXSB7Ci0gICAgICAgIG1fY2FwdHVyZURldmljZXMgPSBXZWJDb3JlOjpS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5nZXRNZWRpYVN0cmVhbURldmlj
ZXMoKTsKKyAgICAgICAgdXBkYXRlQ2FwdHVyZURldmljZXMoU2hvdWxkTm90aWZ5OjpObyk7CiAK
ICAgICAgICAgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCku
c2V0RGV2aWNlc0NoYW5nZWRPYnNlcnZlcihbdGhpc10oKSB7Ci0gICAgICAgICAgICBhdXRvIG9s
ZERldmljZXMgPSBXVEZNb3ZlKG1fY2FwdHVyZURldmljZXMpOwotICAgICAgICAgICAgbV9jYXB0
dXJlRGV2aWNlcyA9IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRv
bigpLmdldE1lZGlhU3RyZWFtRGV2aWNlcygpOwotCi0gICAgICAgICAgICBpZiAobV9jYXB0dXJl
RGV2aWNlcy5zaXplKCkgPT0gb2xkRGV2aWNlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBi
b29sIGhhdmVDaGFuZ2VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvICZuZXdE
ZXZpY2UgOiBtX2NhcHR1cmVEZXZpY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXdE
ZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVy
YSAmJiBuZXdEZXZpY2UudHlwZSgpICE9IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGU6Ok1pY3JvcGhvbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGluZGV4ID0gb2xkRGV2aWNlcy5maW5kTWF0Y2hpbmcoWyZu
ZXdEZXZpY2VdIChhdXRvJiBvbGREZXZpY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBuZXdEZXZpY2UucGVyc2lzdGVudElkKCkgPT0gb2xkRGV2aWNlLnBlcnNpc3RlbnRJZCgp
ICYmIG5ld0RldmljZS5lbmFibGVkKCkgIT0gb2xkRGV2aWNlLmVuYWJsZWQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IG5vdEZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlQ2hhbmdlcyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaGF2ZUNoYW5nZXMpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2hl
biBhIGRldmljZSB3aXRoIGNhbWVyYSBhbmQgbWljcm9waG9uZSBpcyBhdHRhY2hlZCBvciBkZXRh
Y2hlZCwgdGhlIENhcHR1cmVEZXZpY2Ugbm90aWZpY2F0aW9uIGZvcgotICAgICAgICAgICAgLy8g
dGhlIGRpZmZlcmVudCBkZXZpY2VzIHdvbid0IGFycml2ZSBhdCB0aGUgc2FtZSB0aW1lIHNvIGRl
bGF5IGEgYml0IHNvIHdlIGNhbiBjb2FsZXNjZSB0aGUgY2FsbGJhY2tzLgotICAgICAgICAgICAg
aWYgKCFtX2RlYm91bmNlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBtX2RlYm91
bmNlVGltZXIuc3RhcnRPbmVTaG90KGRldmljZUNoYW5nZURlYm91bmNlVGltZXJJbnRlcnZhbCk7
CisgICAgICAgICAgICB1cGRhdGVDYXB0dXJlRGV2aWNlcyhTaG91bGROb3RpZnk6Olllcyk7CiAg
ICAgICAgIH0pOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Vz
ZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmgKaW5kZXggMzkxOGQzOGI5MWUyNDE1NWZjNTUwNDkwNDUz
MGE5ZDc1MjRhNTQ1OS4uNmI5ODRkMTRmN2RjNjA2MDY3OWQzMTY2YTcwZTBmZjhlMzYzZjhmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUHJvY2Vzc01hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQcm9jZXNzTWFuYWdl
ci5oCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luTW9uaXRvcmluZ0Nh
cHR1cmVEZXZpY2VzKCk7CiAKIHByaXZhdGU6CisgICAgZW51bSBjbGFzcyBTaG91bGROb3RpZnkg
eyBZZXMsIE5vIH07CisgICAgdm9pZCB1cGRhdGVDYXB0dXJlRGV2aWNlcyhTaG91bGROb3RpZnkp
OwogICAgIHZvaWQgY2FwdHVyZURldmljZXNDaGFuZ2VkKCk7CiAKICAgICBWZWN0b3I8V2ViQ29y
ZTo6Q2FwdHVyZURldmljZT4gbV9jYXB0dXJlRGV2aWNlczsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5ODgxNmE1NTRiNmUy
YzEyZTZkMzBhNDFmMjE4YzE3YmNhZDVkZGUyLi4wZTU5Njc1N2I3MzU4YmJmN2JiZWM1NGNjZjZj
NmI0OGJkODUzMzE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDEtMTIgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBTdXBwb3J0IGtleSBy
b3RhdGlvbiB3aXRoIEhMUy1iYWNrZWQgZW5jcnlwdGVkIG1lZGlhIHN0cmVhbXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDQ5MworICAgICAgICA8
cmRhcjovLzY4MjI3NzA5PgorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisK
KyAgICAgICAgRml4IGEgYnJva2VuIGxheW91dCB0ZXN0OyB0aGUgdGVzdCBlbnVtZXJhdGVzIGRl
dmljZXMsIHRoZW4gdXNlcyB0aGUgZGV2aWNlSWRzIHJldHVybmVkIHRvIGdlbmVyYXRlCisgICAg
ICAgIGNvbnN0cmFpbnRzIGZvciBhIGNhbGwgdG8gZ2V0VXNlck1lZGlhKCkuIEhvd2V2ZXIsIGl0
IGFzc3VtZXMgYWxsIGRldmljZXMgd2lsbCBlaXRoZXIgYmUgb2Yga2luZAorICAgICAgICAnYXVk
aW9pbnB1dCcgb3IgJ3ZpZGVvaW5wdXQnLiBJZiBhbiAnYXVkaW9vdXRwdXQnIGRldmljZSBpcyBy
ZXR1cm5lZCAoYXMgdGhlIE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyCisgICAgICAgIGRv
ZXMpLCB0aGVuIHRoZSB0ZXN0IHR1cm5zIHRoYXQgaW50byBhIHZpZGVvIGNhcHR1cmUgY29uc3Ry
YWludCwgd2hpY2ggZmFpbHMuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2dldC11c2Vy
LW1lZGlhLWRldmljZS1pZC5odG1sOgorCiAyMDIwLTExLTA5ICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgogCiAgICAgICAgIE5vbi1mdWxsc2NyZWVuIHBhZ2UgY29udGVudHMgdmlz
aWJsZSB3aGVuIHJvdGF0aW5nIGRldmljZSBkdXJpbmcgZWxlbWVudCBmdWxsc2NyZWVuIHByZXNl
bnRhdGlvbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0LXVz
ZXItbWVkaWEtZGV2aWNlLWlkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dl
dC11c2VyLW1lZGlhLWRldmljZS1pZC5odG1sCmluZGV4IGI0ODdhZDVkYmRmOTAzZjJlMTk2ZTBh
Yzg1NWM5NmRlMzNhOTg2ODQuLjBkNDE2Yzc5MTA3ZTRiYzE5NmYyZGIwMGM3N2NlMjQ1ZWQwNTgw
YzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0LXVzZXItbWVk
aWEtZGV2aWNlLWlkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXQt
dXNlci1tZWRpYS1kZXZpY2UtaWQuaHRtbApAQCAtMjUsNiArMjUsOCBAQAogICAgICAgICAgICAg
ICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKTsKICAg
ICAgICAgICAgIH0pLnRoZW4oZGV2aWNlcyA9PiB7CiAgICAgICAgICAgICAgICAgZGV2aWNlcy5m
b3JFYWNoKChkZXZpY2UpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZS5raW5k
ID09ICJhdWRpb291dHB1dCIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgIGxldCBraW5kID0gZGV2aWNlLmtpbmQgPT0gImF1ZGlvaW5wdXQiID8g
ImF1ZGlvIiA6ICJ2aWRlbyI7CiAgICAgICAgICAgICAgICAgICAgIGRldmljZUlkcy5wdXNoKHsg
dHlwZToga2luZCwgaWQgOiBkZXZpY2UuZGV2aWNlSWR9KTsKICAgICAgICAgICAgICAgICB9KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>