<?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>171442</bug_id>
          
          <creation_ts>2017-04-28 12:09:23 -0700</creation_ts>
          <short_desc>Add notifications from CaptureDeviceManager (and subclasses) when device lists change</short_desc>
          <delta_ts>2017-05-01 10:06:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></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>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jeremyj-wk</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302700</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-04-28 12:09:23 -0700</bug_when>
    <thetext>Add notifications from CaptureDeviceManager (and subclasses) when device lists change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302702</commentid>
    <comment_count>1</comment_count>
      <attachid>308568</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-04-28 12:14:06 -0700</bug_when>
    <thetext>Created attachment 308568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302708</commentid>
    <comment_count>2</comment_count>
      <attachid>308568</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-28 12:26:41 -0700</bug_when>
    <thetext>Comment on attachment 308568
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        of devices changes.

Added support for enumerating AVAudioSession capture devices.

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:85
&gt; +    return m_devices.value();

If there are no observers, this list will get stale.

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:116
&gt; +    }

newAudioDevices.append(WTFMove(audioDevice));

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:135
&gt; +    }]);

Maybe we should always listen for device changes so that captureDevices() returns the correct list even if there are no observers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302717</commentid>
    <comment_count>3</comment_count>
      <attachid>308568</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-04-28 12:42:36 -0700</bug_when>
    <thetext>Comment on attachment 308568
Patch

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

&gt;&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:116
&gt;&gt; +    }
&gt; 
&gt; newAudioDevices.append(WTFMove(audioDevice));

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:135
&gt;&gt; +    }]);
&gt; 
&gt; Maybe we should always listen for device changes so that captureDevices() returns the correct list even if there are no observers.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302731</commentid>
    <comment_count>4</comment_count>
      <attachid>308583</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-04-28 12:58:55 -0700</bug_when>
    <thetext>Created attachment 308583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302741</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-04-28 13:12:15 -0700</bug_when>
    <thetext>Sounds good, just having a question related to the observer model and some nits.

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

&gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.cpp:138
&gt; +CaptureDeviceManager::ObserverToken CaptureDeviceManager::addCaptureDeviceChangedObserver(CaptureDeviceChangedCallback observer)

Should pass a CaptureDeviceChangedCallback&amp;&amp;.

&gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.h:40
&gt; +    virtual void removeCaptureDeviceChangedObserver(ObserverToken);

What are the pros and cons of this approach compared to a CaptureDeviceManager::Observer class in this particular context?
For instance, a CaptureDeviceManager::Observer destructor could ensure that it gets removed from m_observers. Is it useful in that context?
What about readability/searchability?

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

Unrelated, but can we change the signature to const Vector&lt;CaptureDevice&gt;&amp; captureDevices() const = 0;

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.h:39
&gt; +    static AVAudioSessionCaptureDevice create(AVAudioSessionPortDescription*);

Can the port be null? Should it be a ref?

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.h:45
&gt; +    RetainPtr&lt;AVAudioSessionPortDescription&gt; m_portDescription;

Wonder whether we could have a UniqueRef equivalent here?

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:42
&gt; +AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice(AVAudioSessionPortDescription* portDescription, const String&amp; persistentID, const String&amp; label)

Nit: use String&amp;&amp; for persistentID and label

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:47
&gt; +    Vector&lt;CaptureDevice&gt;&amp; captureDevices() final;

Move to private?

&gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:127
&gt; +    auto token = CaptureDeviceManager::addCaptureDeviceChangedObserver(observer);

Should move observer here.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:134
&gt; +    m_devices = Vector&lt;CaptureDevice&gt;();

Can we use reserveCapacity/uncheckedAppend?
Ditto for AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:139
&gt; +        m_devices.append(captureDevice);

Worth moving captureDevice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302750</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-04-28 13:26:42 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; Sounds good, just having a question related to the observer model and some
&gt; nits.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=308568&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.cpp:138
&gt; &gt; +CaptureDeviceManager::ObserverToken CaptureDeviceManager::addCaptureDeviceChangedObserver(CaptureDeviceChangedCallback observer)
&gt; 
&gt; Should pass a CaptureDeviceChangedCallback&amp;&amp;.
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.h:40
&gt; &gt; +    virtual void removeCaptureDeviceChangedObserver(ObserverToken);
&gt; 
&gt; What are the pros and cons of this approach compared to a
&gt; CaptureDeviceManager::Observer class in this particular context?

Doing an ::Observer approach requires clients to include this header in their own header. Doing a Token approach only requires clients to include this header in their implementation file. This, in the long term, will reduce header bloat.

&gt; For instance, a CaptureDeviceManager::Observer destructor could ensure that
&gt; it gets removed from m_observers. Is it useful in that context?

You&apos;d just do the same thing (a destructor-time unregister) for the Token approach.

&gt; What about readability/searchability?

Build-time optimization is more important, IMHO.

&gt; &gt; Source/WebCore/platform/mediastream/CaptureDeviceManager.h:42
&gt; &gt;      virtual Vector&lt;CaptureDevice&gt;&amp; captureDevices() = 0;
&gt; 
&gt; Unrelated, but can we change the signature to const Vector&lt;CaptureDevice&gt;&amp;
&gt; captureDevices() const = 0;

We could, but it would mean making the underlying devices ivar mutable, since it&apos;s lazily initialized.  Also, it wouldn&apos;t make sense to return a non-const reference from a const getter.

&gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.h:39
&gt; &gt; +    static AVAudioSessionCaptureDevice create(AVAudioSessionPortDescription*);
&gt; 
&gt; Can the port be null? Should it be a ref?

You can&apos;t really have a reference to an Obj-C object.

&gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.h:45
&gt; &gt; +    RetainPtr&lt;AVAudioSessionPortDescription&gt; m_portDescription;
&gt; 
&gt; Wonder whether we could have a UniqueRef equivalent here?

You can&apos;t have a UniqueRef to a Obj-C object.

&gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:42
&gt; &gt; +AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice(AVAudioSessionPortDescription* portDescription, const String&amp; persistentID, const String&amp; label)
&gt; 
&gt; Nit: use String&amp;&amp; for persistentID and label

No, we don&apos;t need to pass string by r-value ref.

&gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:47
&gt; &gt; +    Vector&lt;CaptureDevice&gt;&amp; captureDevices() final;
&gt; 
&gt; Move to private?

Sure.

&gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:127
&gt; &gt; +    auto token = CaptureDeviceManager::addCaptureDeviceChangedObserver(observer);
&gt; 
&gt; Should move observer here.

Sure.

&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:134
&gt; &gt; +    m_devices = Vector&lt;CaptureDevice&gt;();
&gt; 
&gt; Can we use reserveCapacity/uncheckedAppend?
&gt; Ditto for AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices

Sure.

&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:139
&gt; &gt; +        m_devices.append(captureDevice);
&gt; 
&gt; Worth moving captureDevice.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302781</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-04-28 14:10:49 -0700</bug_when>
    <thetext>&gt; &gt; What are the pros and cons of this approach compared to a
&gt; &gt; CaptureDeviceManager::Observer class in this particular context?
&gt; 
&gt; Doing an ::Observer approach requires clients to include this header in
&gt; their own header. Doing a Token approach only requires clients to include
&gt; this header in their implementation file. This, in the long term, will
&gt; reduce header bloat.

You could encapsulate the Observer in a std::function in the cpp file so as to reduce header bloat if that is important. 
Not sure how much this is a gain in that particular case.
Not sure about performance either.

&gt; &gt; For instance, a CaptureDeviceManager::Observer destructor could ensure that
&gt; &gt; it gets removed from m_observers. Is it useful in that context?
&gt; 
&gt; You&apos;d just do the same thing (a destructor-time unregister) for the Token
&gt; approach.

You would need to do that on each capturer class, while it would be isolated in the Observer destructor here.

&gt; &gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.h:45
&gt; &gt; &gt; +    RetainPtr&lt;AVAudioSessionPortDescription&gt; m_portDescription;
&gt; &gt; 
&gt; &gt; Wonder whether we could have a UniqueRef equivalent here?
&gt; 
&gt; You can&apos;t have a UniqueRef to a Obj-C object.

Wouldn&apos;t it be possible to assert at UniqueRef&lt;ObjC&gt; creation time that the ObjC pointer is not null?

&gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:42
&gt; &gt; &gt; +AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice(AVAudioSessionPortDescription* portDescription, const String&amp; persistentID, const String&amp; label)
&gt; &gt; 
&gt; &gt; Nit: use String&amp;&amp; for persistentID and label
&gt; 
&gt; No, we don&apos;t need to pass string by r-value ref.

Will it not cause unnecessary count churning like passing const RefPtr&lt;&gt;&amp; instead of RefPtr&lt;&gt;&amp;&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302796</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-04-28 14:36:25 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #7)
&gt; &gt; &gt; What are the pros and cons of this approach compared to a
&gt; &gt; &gt; CaptureDeviceManager::Observer class in this particular context?
&gt; &gt; 
&gt; &gt; Doing an ::Observer approach requires clients to include this header in
&gt; &gt; their own header. Doing a Token approach only requires clients to include
&gt; &gt; this header in their implementation file. This, in the long term, will
&gt; &gt; reduce header bloat.
&gt; 
&gt; You could encapsulate the Observer in a std::function in the cpp file so as
&gt; to reduce header bloat if that is important. 
&gt; Not sure how much this is a gain in that particular case.
&gt; Not sure about performance either.

I don&apos;t know what that buys you.

&gt; &gt; &gt; For instance, a CaptureDeviceManager::Observer destructor could ensure that
&gt; &gt; &gt; it gets removed from m_observers. Is it useful in that context?
&gt; &gt; 
&gt; &gt; You&apos;d just do the same thing (a destructor-time unregister) for the Token
&gt; &gt; approach.
&gt; 
&gt; You would need to do that on each capturer class, while it would be isolated
&gt; in the Observer destructor here.

The alternative would be for the Observer to have to have a back pointer to the capturer and to somehow track the capturer&apos;s lifetime.  So you&apos;re back to a tightly coupled notification system.

&gt; &gt; &gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.h:45
&gt; &gt; &gt; &gt; +    RetainPtr&lt;AVAudioSessionPortDescription&gt; m_portDescription;
&gt; &gt; &gt; 
&gt; &gt; &gt; Wonder whether we could have a UniqueRef equivalent here?
&gt; &gt; 
&gt; &gt; You can&apos;t have a UniqueRef to a Obj-C object.
&gt; 
&gt; Wouldn&apos;t it be possible to assert at UniqueRef&lt;ObjC&gt; creation time that the
&gt; ObjC pointer is not null?

There&apos;s no such thing as a UniqueRef&lt;ObjC&gt;, because you can&apos;t pass in an ObjC object by reference.  UniqueRef&lt;&gt; also doesn&apos;t do retain-release, so it&apos;s semantics don&apos;t make sense for something that&apos;s reference counted, like ObjC objects are.

&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:42
&gt; &gt; &gt; &gt; +AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice(AVAudioSessionPortDescription* portDescription, const String&amp; persistentID, const String&amp; label)
&gt; &gt; &gt; 
&gt; &gt; &gt; Nit: use String&amp;&amp; for persistentID and label
&gt; &gt; 
&gt; &gt; No, we don&apos;t need to pass string by r-value ref.
&gt; 
&gt; Will it not cause unnecessary count churning like passing const RefPtr&lt;&gt;&amp;
&gt; instead of RefPtr&lt;&gt;&amp;&amp;?

No.  And by mandating r-value input, you would create a bunch of String objects just for the sake of passing them in.  (E.g., you&apos;d need to copy a static constant string just so that you could pass it in as an r-value.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303271</commentid>
    <comment_count>9</comment_count>
      <attachid>308583</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-01 10:06:20 -0700</bug_when>
    <thetext>Comment on attachment 308583
Patch

Clearing flags on attachment: 308583

Committed r216016: &lt;http://trac.webkit.org/changeset/216016&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303272</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-01 10:06:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308568</attachid>
            <date>2017-04-28 12:14:06 -0700</date>
            <delta_ts>2017-04-28 12:58:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171442-20170428121405.patch</filename>
            <type>text/plain</type>
            <size>28592</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc0MzIwMzZiODM5Njhl
NzI0NzI4NTJhYmM1YTcxZjc3ZTA0YTc5Ni4uMGQ2MjU1N2QzOThjZjgwM2U2NjBjNTI4Njg5OTdl
MThmMjUzZTRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE3LTA0LTI4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBub3RpZmljYXRpb25z
IGZyb20gQ2FwdHVyZURldmljZU1hbmFnZXIgKGFuZCBzdWJjbGFzc2VzKSB3aGVuIGRldmljZSBs
aXN0cyBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MTQ0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhIG5ldyBjYWxsYmFjay1iYXNlZCBub3RpZmljYXRpb24gdG8gQ2FwdHVyZURldmlj
ZU1hbmFnZXIgd2hpY2ggZmlyZXMgd2hlbiB0aGUgdW5kZXJseWluZyBsaXN0CisgICAgICAgIG9m
IGRldmljZXMgY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFu
YWdlci5jcHA6CisgICAgICAgIChuZXh0T2JzZXJ2ZXJUb2tlbik6CisgICAgICAgIChDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6YWRkQ2FwdHVyZURldmljZUNoYW5nZWRPYnNlcnZlcik6CisgICAgICAg
IChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVtb3ZlQ2FwdHVyZURldmljZUNoYW5nZWRPYnNlcnZl
cik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9B
VkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlOjpBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bV2ViQVZBdWRpb1Nlc3Npb25BdmFpbGFibGVJbnB1dHNMaXN0ZW5lciBpbml0V2l0aENh
bGxiYWNrOl0pOgorICAgICAgICAoLVtXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xp
c3RlbmVyIGludmFsaWRhdGVdKToKKyAgICAgICAgKC1bV2ViQVZBdWRpb1Nlc3Npb25BdmFpbGFi
bGVJbnB1dHNMaXN0ZW5lciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOm9mT2JqZWN0OmNoYW5nZTpj
b250ZXh0Ol0pOgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFW
QXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmF1ZGlvU2Vzc2lvbkRldmljZVdpdGhVSUQpOgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6
YWRkQ2FwdHVyZURldmljZUNoYW5nZWRPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpBVkF1
ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZW1vdmVDYXB0dXJlRGV2aWNlQ2hhbmdl
ZE9ic2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJl
RGV2aWNlTWFuYWdlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmRldmljZUNvbm5lY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpkZXZpY2VEaXNjb25uZWN0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaEF1ZGlvQ2FwdHVyZURl
dmljZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6
OmRldmljZXNDaGFuZ2VkKToKKwogMjAxNy0wNC0yNyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgYXVkaW8gZGV2aWNlIGNoYW5nZSBub3RpZmljYXRpb25z
IHRvIEF1ZGlvU2Vzc2lvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjNGQ3NTE5ODJiNWFiMDNiZWRlOTUzNjNjNTZmMjA4NzIy
ZmEwZDg5Li5jZWM4OTZlM2IyZWVhZmMwN2I2NThlMTNiYjUxMmUxZmIyZWMyMTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02
MjE0LDYgKzYyMTQsMTAgQEAKIAkJQ0RCRUFFQUQxOUQ5MkI2QzAwQkVCQTg4IC8qIE1lZGlhU2Vs
ZWN0aW9uR3JvdXBBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREJFQUVBQjE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rpb25Hcm91
cEFWRk9iakMuaCAqLzsgfTsKIAkJQ0RDMjZCNDAxNjBBOENDNjAwMjY3NTdCIC8qIExlZ2FjeU1v
Y2tDRE0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RDMjZCM0MxNjBBNjJCMDAwMjY3NTdCIC8qIExlZ2FjeU1vY2tDRE0uY3BwICovOyB9OwogCQlD
REMyNkI0MTE2MEE4Q0NFMDAyNjc1N0IgLyogTGVnYWN5TW9ja0NETS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMjZCM0QxNjBBNjJCMDAwMjY3NTdC
IC8qIExlZ2FjeU1vY2tDRE0uaCAqLzsgfTsKKwkJQ0RDNjc1MjIxRUFFQTlCNzAwNzI3Qzg0IC8q
IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2NzUyMDFFQUVBOUI3MDA3MjdDODQgLyog
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbSAqLzsgfTsKKwkJQ0RDNjc1MjMx
RUFFQTlCNzAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY3NTIxMUVB
RUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87
IH07CisJCUNEQzY3NTI2MUVBRUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REM2NzUyNDFFQUVBOUQ0MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLm1t
ICovOyB9OworCQlDREM2NzUyNzFFQUVBOUQ0MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREM2NzUyNTFFQUVBOUQ0MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNl
LmggKi87IH07CiAJCUNEQzY5REQ2MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREM2OURENDE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5n
Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUNEQzY5REQ3MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlE
RDUxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gKi87
IH07CiAJCUNEQzY5RERBMTYzNzFGRDQwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNl
aG9sZGVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xk
ZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE0NzE4LDYgKzE0NzIyLDEwIEBACiAJCUNEQzFERDQxMTdDQzJDNDgwMDhDQjU1RCAvKiBt
ZWRpYUNvbnRyb2xzQXBwbGUuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzQXBwbGUuY3NzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMyNkIzQzE2MEE2MkIwMDAyNjc1N0IgLyog
TGVnYWN5TW9ja0NETS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lNb2NrQ0RNLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDMjZCM0QxNjBBNjJCMDAwMjY3NTdCIC8q
IExlZ2FjeU1vY2tDRE0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5TW9ja0NETS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREM2NzUyMDFFQUVBOUI3MDA3MjdDODQgLyogQVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFW
QXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNEQzY3NTIxMUVBRUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDNjc1MjQxRUFF
QTlENDAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDNjc1MjUxRUFFQTlENDAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDNjlERDQxNjMyMDI2QzAw
N0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREM2OURENTE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29y
ZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQzY5REQ4MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNj
cmVlblBsYWNlaG9sZGVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTYxMTIsNiArMTYxMjAsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk0MTU3NDc0MjFFMzg2OTgwMDBFOTE0RDggLyogbGlid2VicnRjICovLAor
CQkJCUNEQzY3NTFGMUVBRUE5OTYwMDcyN0M4NCAvKiBpb3MgKi8sCiAJCQkJMDcyOUIxNEQxN0NG
Q0NBMDAwNEYxRDYwIC8qIG1hYyAqLywKIAkJCQkwN0Q2QTRGNjFCRjIzMDdEMDAxNzQxNDYgLyog
QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oICovLAogCQkJCTA3QjcxMTZBMUQ4OTlFNjMw
MDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlLmggKi8sCkBAIC0yNDI2NSw2ICsyNDI3NCwxNyBAQAog
CQkJbmFtZSA9IE1lZGlhQ29udHJvbHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQlDREM2NzUxRjFFQUVBOTk2MDA3MjdDODQgLyogaW9zICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDREM2NzUyNDFFQUVBOUQ0MDA3MjdDODQgLyog
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLm1tICovLAorCQkJCUNEQzY3NTI1MUVBRUE5RDQw
MDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaCAqLywKKwkJCQlDREM2NzUy
MDFFQUVBOUI3MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5t
bSAqLywKKwkJCQlDREM2NzUyMTFFQUVBOUI3MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OwogCQlDREYyQjAwNTE4MjA1M0RGMDBGMkI0MjQgLyogbWVk
aWFzb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MjczNDIsNiArMjczNjIsNyBAQAogCQkJCUE4RUE3Q0I4MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1M
SGVhZGluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0FGMEExOTJCOUMwMEE4
RUY1RiAvKiBIVE1MSFJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxREUyNzBBMTUy
QUM4MDBCMTJBNjggLyogSFRNTEh0bWxFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREM2
NzUyNzFFQUVBOUQ0MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODcxREUyQTBBMTUyQUM4MDBCMTJBNjggLyogSFRNTElGcmFtZUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMkZBNjEyMUVBOTVBM0MwMEEwMzEwOCAvKiBS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3RDJE
MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAg
LTI4MzI4LDYgKzI4MzQ5LDcgQEAKIAkJCQkxQTc2MkM3QTBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRkUxRUIwRENBNUY2NDAwNzM5MjE5
IC8qIEpTWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNDQwQTQ0RUZD
NzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzY3NTIz
MUVBRUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ1OTE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2Rp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E2M0M1MUI3NDMxOEYwMEU3RENEQyAvKiBLZXll
ZERlY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTYzQzYxQjc0MzE5MjAwRTdEQ0RD
IC8qIEtleWVkRW5jb2RlckNGLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjM0LDYgKzMwNjU2LDcg
QEAKIAkJCQk0MTVDREFGNDFFNkI4Rjg3MDA0RjExRUUgLyogQ2FudmFzQ2FwdHVyZU1lZGlhU3Ry
ZWFtVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzExMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc0dyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ2NzFFMDY1MUQ2N0E1
OTYwMEM2QjQ5NyAvKiBDYW52YXNQYXRoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQzY3NTI2
MUVBRUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0OTQ4NEZDNDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlEQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDQTEwMkNGMjND
MDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMzI2NTksNiArMzI2ODIsNyBAQAogCQkJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQ
YWdlU2VyaWFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI4NEFFQTEwNDQ3REVFMDBF
QUVCNTIgLyogUGFnZVRyYW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUx
RUNDMjBDOTFDOTA0MDBEQzI1NUIgLyogUGFnZVVSTFJlY29yZC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDREM2NzUyMjFFQUVBOUI3MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2
aWNlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEEyMTJCMDI2RjcwMEMxQTM1
OSAvKiBQYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMTkxMkIwMjY3NjAwQzFB
MzU5IC8qIFBhbm5lck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4ODkwQUUxQUExM0Yy
NTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0
dXJlRGV2aWNlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKaW5kZXggYmFjMzM2MDFlY2I4ZTk5NzNlMmI3MGI1
ZWZiYzRkOTg4MDVlYTA0Zi4uYWZhNzdkZWYxZjUwOWEzZWU4ZmVhNmM2NzU5NjEzYTQzZWZkMjhj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcApAQCAtMTI5LDQgKzEyOSwyNCBAQCBzdGQ6Om9w
dGlvbmFsPENhcHR1cmVEZXZpY2U+IENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VXaXRoVUlE
KGNvbnN0IFN0cmluZyYgZAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKK3N0YXRpYyBD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6T2JzZXJ2ZXJUb2tlbiBuZXh0T2JzZXJ2ZXJUb2tlbigpCit7
CisgICAgc3RhdGljIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpPYnNlcnZlclRva2VuIG5leHRUb2tl
biA9IDA7CisgICAgcmV0dXJuICsrbmV4dFRva2VuOworfQorCitDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6T2JzZXJ2ZXJUb2tlbiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YWRkQ2FwdHVyZURldmljZUNo
YW5nZWRPYnNlcnZlcihDYXB0dXJlRGV2aWNlQ2hhbmdlZENhbGxiYWNrIG9ic2VydmVyKQorewor
ICAgIGF1dG8gdG9rZW4gPSBuZXh0T2JzZXJ2ZXJUb2tlbigpOworICAgIG1fb2JzZXJ2ZXJzLnNl
dCh0b2tlbiwgV1RGTW92ZShvYnNlcnZlcikpOworICAgIHJldHVybiB0b2tlbjsKK30KKwordm9p
ZCBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVtb3ZlQ2FwdHVyZURldmljZUNoYW5nZWRPYnNlcnZl
cihPYnNlcnZlclRva2VuIHRva2VuKQoreworICAgIEFTU0VSVChtX29ic2VydmVycy5jb250YWlu
cyh0b2tlbikpOworICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZSh0b2tlbik7Cit9CisKKwogI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIuaAppbmRleCA1ODEwZjQ5
ZDliN2UxMmI3ZjM1NjEzNDU3YzczY2QyYmJjZWI5Y2Q2Li5kZmYwMDIzNTkyZTRkMTU2YWI4MWNi
MzFiZThkMTVhZDg4ZWNhNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTM0LDYgKzM0LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURldmljZU1hbmFnZXIgewog
cHVibGljOgorICAgIHVzaW5nIENhcHR1cmVEZXZpY2VDaGFuZ2VkQ2FsbGJhY2sgPSBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT47CisgICAgdXNpbmcgT2JzZXJ2ZXJUb2tlbiA9IHVpbnQzMl90OworICAg
IHZpcnR1YWwgT2JzZXJ2ZXJUb2tlbiBhZGRDYXB0dXJlRGV2aWNlQ2hhbmdlZE9ic2VydmVyKENh
cHR1cmVEZXZpY2VDaGFuZ2VkQ2FsbGJhY2spOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDYXB0
dXJlRGV2aWNlQ2hhbmdlZE9ic2VydmVyKE9ic2VydmVyVG9rZW4pOworCiAgICAgdmlydHVhbCBW
ZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCByZWZyZXNoQ2FwdHVyZURldmljZXMoKSB7IH0KICAgICB2aXJ0dWFsIFZlY3RvcjxDYXB0
dXJlRGV2aWNlPiBnZXRBdWRpb1NvdXJjZXNJbmZvKCk7CkBAIC00Myw2ICs0OCw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5DYXB0dXJlRGV2aWNlTWFuYWdlcigpOwogICAg
IHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gY2FwdHVyZURldmljZUZyb21QZXJzaXN0ZW50
SUQoY29uc3QgU3RyaW5nJiBjYXB0dXJlRGV2aWNlSUQpOworICAgIEhhc2hNYXA8T2JzZXJ2ZXJU
b2tlbiwgQ2FwdHVyZURldmljZUNoYW5nZWRDYWxsYmFjaz4gbV9vYnNlcnZlcnM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2
aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmFmYzg3ZTMyNTNlZTg2YTY3ZWUyOTA2YjYxNWYxMzA0ZDMxOWM1
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaApAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFU
Rk9STShJT1MpCisKKyNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCitPQkpDX0NMQVNTIEFWQXVkaW9TZXNzaW9uUG9ydERlc2NyaXB0aW9uOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmlj
ZSA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQVZBdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlIGNyZWF0ZShBVkF1ZGlvU2Vzc2lvblBvcnREZXNjcmlwdGlvbiop
OworICAgIHZpcnR1YWwgfkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZSgpID0gZGVmYXVsdDsK
KworcHJpdmF0ZToKKyAgICBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UoQVZBdWRpb1Nlc3Np
b25Qb3J0RGVzY3JpcHRpb24qLCBjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRJRCwgY29uc3QgU3Ry
aW5nJiBsYWJlbCk7CisKKyAgICBSZXRhaW5QdHI8QVZBdWRpb1Nlc3Npb25Qb3J0RGVzY3JpcHRp
b24+IG1fcG9ydERlc2NyaXB0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lv
cy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA2M2RmNTlhNmRk
OWNhNjBmMTliOWVjYjM2NGQ5N2Q5MTFjYmM1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2UubW0KQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaCIKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgPEFWRm91bmRhdGlvbi9B
VkF1ZGlvU2Vzc2lvbi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FWQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZSBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U6OmNyZWF0ZShBVkF1ZGlv
U2Vzc2lvblBvcnREZXNjcmlwdGlvbiogcG9ydERlc2NyaXB0aW9uKQoreworICAgIFN0cmluZyBw
ZXJzaXN0ZW50SUQgPSBwb3J0RGVzY3JpcHRpb24uVUlEOworICAgIFN0cmluZyBsYWJlbCA9IHBv
cnREZXNjcmlwdGlvbi5wb3J0TmFtZTsKKyAgICByZXR1cm4gQVZBdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlKHBvcnREZXNjcmlwdGlvbiwgcGVyc2lzdGVudElELCBsYWJlbCk7Cit9CisKK0FWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlKEFWQXVk
aW9TZXNzaW9uUG9ydERlc2NyaXB0aW9uKiBwb3J0RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYg
cGVyc2lzdGVudElELCBjb25zdCBTdHJpbmcmIGxhYmVsKQorICAgIDogQ2FwdHVyZURldmljZShw
ZXJzaXN0ZW50SUQsIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkF1ZGlvLCBsYWJlbCkKKyAg
ICAsIG1fcG9ydERlc2NyaXB0aW9uKHBvcnREZXNjcmlwdGlvbikKK3sKK30KKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWEx
NDZlYzFhNWE5NjFhODZiZTdhZWQ2NTZjZjBiMjQ0YTU2MGFkMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSAiQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CitPQkpDX0NMQVNTIFdlYkFWQXVkaW9TZXNzaW9uQXZhaWxhYmxlSW5wdXRzTGlzdGVuZXI7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNl
OworY2xhc3MgQ2FwdHVyZURldmljZTsKKworY2xhc3MgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2
aWNlTWFuYWdlciBmaW5hbCA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CisgICAgZnJp
ZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFn
ZXI+OworcHVibGljOgorICAgIHN0YXRpYyBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5h
Z2VyJiBzaW5nbGV0b24oKTsKKworICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURl
dmljZXMoKSBmaW5hbDsKKworICAgIFZlY3RvcjxBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+
JiBhdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcygpOworICAgIHN0ZDo6b3B0aW9uYWw8QVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBhdWRpb1Nlc3Npb25EZXZpY2VXaXRoVUlEKGNvbnN0IFN0
cmluZyYpOworCitwcml2YXRlOgorICAgIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFn
ZXIoKSA9IGRlZmF1bHQ7CisgICAgfkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIo
KSA9IGRlZmF1bHQ7CisKKyAgICBPYnNlcnZlclRva2VuIGFkZENhcHR1cmVEZXZpY2VDaGFuZ2Vk
T2JzZXJ2ZXIoQ2FwdHVyZURldmljZUNoYW5nZWRDYWxsYmFjaykgZmluYWw7CisgICAgdm9pZCBy
ZW1vdmVDYXB0dXJlRGV2aWNlQ2hhbmdlZE9ic2VydmVyKE9ic2VydmVyVG9rZW4pIGZpbmFsOwor
CisgICAgdm9pZCByZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpOworCisgICAgc3RkOjpvcHRp
b25hbDxWZWN0b3I8Q2FwdHVyZURldmljZT4+IG1fZGV2aWNlczsKKyAgICBzdGQ6Om9wdGlvbmFs
PFZlY3RvcjxBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+PiBtX2F1ZGlvU2Vzc2lvbkNhcHR1
cmVEZXZpY2VzOworICAgIFJldGFpblB0cjxXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0
c0xpc3RlbmVyPiBtX2xpc3RlbmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25D
YXB0dXJlRGV2aWNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM3NGUyOGI2YWZmNDlkNTM4MTk2ZTVmMTUxY2FiNzE2YzMzMjAzYWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShJT1Mp
CisKKyNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJT
b2Z0TGlua2luZy5oIgorI2luY2x1ZGUgPEFWRm91bmRhdGlvbi9BVkF1ZGlvU2Vzc2lvbi5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRp
b24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbikKKyNkZWZp
bmUgQVZBdWRpb1Nlc3Npb24gZ2V0QVZBdWRpb1Nlc3Npb25DbGFzcygpCisKK3ZvaWQqIEF2YWls
YWJsZUlucHV0c0NvbnRleHQgPSAmQXZhaWxhYmxlSW5wdXRzQ29udGV4dDsKKworQGludGVyZmFj
ZSBXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xpc3RlbmVyIDogTlNPYmplY3Qgewor
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBfY2FsbGJhY2s7Cit9CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xpc3RlbmVyCistIChpZClp
bml0V2l0aENhbGxiYWNrOihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pY2FsbGJhY2sKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIF9jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWludmFsaWRhdGUKK3sKKyAgICBfY2FsbGJhY2sgPSBudWxscHRyOworfQorCistICh2b2lk
KW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQp
b2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5PE5TS2V5VmFsdWVDaGFuZ2VLZXksIGlkPiAqKWNo
YW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4dAoreworICAgIFVOVVNFRF9QQVJBTShrZXlQYXRo
KTsKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsK
KyAgICBpZiAoY29udGV4dCA9PSBBdmFpbGFibGVJbnB1dHNDb250ZXh0ICYmIF9jYWxsYmFjaykK
KyAgICAgICAgX2NhbGxiYWNrKCk7Cit9CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlciYgQVZBdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAgICByZXR1cm4g
bWFuYWdlcjsKK30KKworVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBBVkF1ZGlvU2Vzc2lvbkNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlcygpCit7CisgICAgaWYgKCFtX2RldmljZXMp
CisgICAgICAgIHJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2VzKCk7CisgICAgcmV0dXJuIG1fZGV2
aWNlcy52YWx1ZSgpOworfQorCitWZWN0b3I8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiYg
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6YXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZXMoKQoreworICAgIGlmICghbV9hdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcykKKyAgICAg
ICAgcmVmcmVzaEF1ZGlvQ2FwdHVyZURldmljZXMoKTsKKyAgICByZXR1cm4gbV9hdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlcy52YWx1ZSgpOworfQorCitzdGQ6Om9wdGlvbmFsPEFWQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZT4gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6YXVk
aW9TZXNzaW9uRGV2aWNlV2l0aFVJRChjb25zdCBTdHJpbmcmIGRldmljZUlEKQoreworICAgIGlm
ICghbV9hdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcykKKyAgICAgICAgcmVmcmVzaEF1ZGlvQ2Fw
dHVyZURldmljZXMoKTsKKworICAgIGZvciAoYXV0byYgZGV2aWNlIDogYXVkaW9TZXNzaW9uQ2Fw
dHVyZURldmljZXMoKSkgeworICAgICAgICBpZiAoZGV2aWNlLnBlcnNpc3RlbnRJZCgpID09IGRl
dmljZUlEKQorICAgICAgICAgICAgcmV0dXJuIGRldmljZTsKKyAgICB9CisgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKK30KKwordm9pZCBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpyZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpCit7CisgICAgVmVjdG9yPEFWQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZT4gbmV3QXVkaW9EZXZpY2VzOworICAgIFZlY3RvcjxDYXB0dXJlRGV2
aWNlPiBuZXdEZXZpY2VzOworCisgICAgZm9yIChBVkF1ZGlvU2Vzc2lvblBvcnREZXNjcmlwdGlv
biAqcG9ydERlc2NyaXB0aW9uIGluIFtBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0uYXZh
aWxhYmxlSW5wdXRzKSB7CisgICAgICAgIGF1dG8gYXVkaW9EZXZpY2UgPSBBVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2U6OmNyZWF0ZShwb3J0RGVzY3JpcHRpb24pOworICAgICAgICBuZXdEZXZp
Y2VzLmFwcGVuZCh7IGF1ZGlvRGV2aWNlLnBlcnNpc3RlbnRJZCgpLCBhdWRpb0RldmljZS50eXBl
KCksIGF1ZGlvRGV2aWNlLmxhYmVsKCksIGF1ZGlvRGV2aWNlLmdyb3VwSWQoKSB9KTsKKyAgICAg
ICAgbmV3RGV2aWNlcy5hcHBlbmQoV1RGTW92ZShhdWRpb0RldmljZSkpOworICAgIH0KKworICAg
IG1fYXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZXMgPSBXVEZNb3ZlKG5ld0F1ZGlvRGV2aWNlcyk7
CisgICAgbV9kZXZpY2VzID0gV1RGTW92ZShuZXdEZXZpY2VzKTsKKworICAgIGZvciAoYXV0byYg
b2JzZXJ2ZXIgOiBtX29ic2VydmVycy52YWx1ZXMoKSkKKyAgICAgICAgb2JzZXJ2ZXIoKTsKK30K
KworQ2FwdHVyZURldmljZU1hbmFnZXI6Ok9ic2VydmVyVG9rZW4gQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlcjo6YWRkQ2FwdHVyZURldmljZUNoYW5nZWRPYnNlcnZlcihDYXB0dXJl
RGV2aWNlQ2hhbmdlZENhbGxiYWNrIG9ic2VydmVyKQoreworICAgIGF1dG8gdG9rZW4gPSBDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6YWRkQ2FwdHVyZURldmljZUNoYW5nZWRPYnNlcnZlcihvYnNlcnZl
cik7CisKKyAgICBpZiAobV9vYnNlcnZlcnMuc2l6ZSgpICE9IDEpCisgICAgICAgIHJldHVybiB0
b2tlbjsKKworICAgIEFTU0VSVCghbV9saXN0ZW5lcik7CisgICAgbV9saXN0ZW5lciA9IGFkb3B0
TlMoW1tXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xpc3RlbmVyIGFsbG9jXSBpbml0
V2l0aENhbGxiYWNrOlt0aGlzXSB7CisgICAgICAgIHJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2Vz
KCk7CisgICAgfV0pOworICAgIFtbQVZBdWRpb1Nlc3Npb24gc2hhcmVkU2Vzc2lvbl0gYWRkT2Jz
ZXJ2ZXI6bV9saXN0ZW5lci5nZXQoKSBmb3JLZXlQYXRoOkAiYXZhaWxhYmxlSW5wdXRzIiBvcHRp
b25zOjAgY29udGV4dDpBdmFpbGFibGVJbnB1dHNDb250ZXh0XTsKKyAgICByZXR1cm4gdG9rZW47
Cit9CisKK3ZvaWQgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVtb3ZlQ2Fw
dHVyZURldmljZUNoYW5nZWRPYnNlcnZlcihPYnNlcnZlclRva2VuIHRva2VuKQoreworICAgIENh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpyZW1vdmVDYXB0dXJlRGV2aWNlQ2hhbmdlZE9ic2VydmVyKHRv
a2VuKTsKKworICAgIGlmICghbV9vYnNlcnZlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9saXN0ZW5lcik7CisgICAgW21fbGlzdGVuZXIgaW52YWxpZGF0ZV07
CisgICAgbV9saXN0ZW5lciA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0KaW5kZXggZjY0NzRkNjgxYmNmYmU5MjVlODAxZTA0
ODlhMGRhNDYzMTIzMDQ1Ni4uZmQ3NTllYWE4ZGVlOGVhNzIwM2YyMDZmZTNkM2FhM2EzNzM3NmM1
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
Q2FwdHVyZURldmljZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0KQEAgLTE5NCw2ICsxOTQsOSBA
QCB2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZ2lzdGVyRm9yRGV2aWNlTm90aWZpY2F0
aW9ucygpCiB2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZUNvbm5lY3RlZCgpCiB7
CiAgICAgcmVmcmVzaENhcHR1cmVEZXZpY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVy
IDogbV9vYnNlcnZlcnMudmFsdWVzKCkpCisgICAgICAgIG9ic2VydmVyKCk7CiB9CiAKIHZvaWQg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKEFWQ2FwdHVyZURldmlj
ZVR5cGVkZWYqIGRldmljZSkKQEAgLTIxMSw2ICsyMTQsOSBAQCB2b2lkIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OmRldmljZURpc2Nvbm5lY3RlZChBVkNhcHR1cmVEZXZpY2VUeXBlZGVmKiBkZXZp
Y2UpCiAgICAgICAgICAgICBkZXZpY2VzW2ldLnNldEVuYWJsZWQoZmFsc2UpOwogICAgICAgICB9
CiAgICAgfQorCisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzLnZhbHVlcygp
KQorICAgICAgICBvYnNlcnZlcigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlv
Q2FwdHVyZURldmljZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAppbmRleCA2ZGQzMjMz
MGYyNTQyYzA1ZDNmNWJlNzljOTQ4NzMzNTQ1NWVlMjI4Li44YzJjZTFiNmMzNTJiNjc4YjJiY2M3
MjQ0ZGUwY2IyOWUxNmE1MzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHAKQEAgLTEyOCwxOCArMTI4LDIyIEBAIHZvaWQgQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXI6OnJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2VzKCkKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChoYXZlRGV2aWNlQ2hhbmdlcykgewotICAgICAgICBtX2RldmljZXMg
PSBWZWN0b3I8Q2FwdHVyZURldmljZT4oKTsKKyAgICBpZiAoIWhhdmVEZXZpY2VDaGFuZ2VzKQor
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZm9yIChhdXRvICZkZXZpY2UgOiBtX2NvcmVBdWRp
b0NhcHR1cmVEZXZpY2VzKSB7Ci0gICAgICAgICAgICBDYXB0dXJlRGV2aWNlIGNhcHR1cmVEZXZp
Y2UoZGV2aWNlLnBlcnNpc3RlbnRJZCgpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpBdWRp
bywgZGV2aWNlLmxhYmVsKCkpOwotICAgICAgICAgICAgY2FwdHVyZURldmljZS5zZXRFbmFibGVk
KGRldmljZS5lbmFibGVkKCkpOwotICAgICAgICAgICAgbV9kZXZpY2VzLmFwcGVuZChjYXB0dXJl
RGV2aWNlKTsKLSAgICAgICAgfQorICAgIG1fZGV2aWNlcyA9IFZlY3RvcjxDYXB0dXJlRGV2aWNl
PigpOworCisgICAgZm9yIChhdXRvICZkZXZpY2UgOiBtX2NvcmVBdWRpb0NhcHR1cmVEZXZpY2Vz
KSB7CisgICAgICAgIENhcHR1cmVEZXZpY2UgY2FwdHVyZURldmljZShkZXZpY2UucGVyc2lzdGVu
dElkKCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkF1ZGlvLCBkZXZpY2UubGFiZWwoKSk7
CisgICAgICAgIGNhcHR1cmVEZXZpY2Uuc2V0RW5hYmxlZChkZXZpY2UuZW5hYmxlZCgpKTsKKyAg
ICAgICAgbV9kZXZpY2VzLmFwcGVuZChjYXB0dXJlRGV2aWNlKTsKICAgICB9CisKKyAgICBmb3Ig
KGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMudmFsdWVzKCkpCisgICAgICAgIG9ic2VydmVy
KCk7CiB9CiAKLU9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2Vz
Q2hhbmdlZChBdWRpb09iamVjdElELCBVSW50MzIsIGNvbnN0IEF1ZGlvT2JqZWN0UHJvcGVydHlB
ZGRyZXNzKiwgdm9pZCAqdXNlckRhdGEpCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlRGV2aWNl
TWFuYWdlcjo6ZGV2aWNlc0NoYW5nZWQoQXVkaW9PYmplY3RJRCwgVUludDMyLCBjb25zdCBBdWRp
b09iamVjdFByb3BlcnR5QWRkcmVzcyosIHZvaWQqIHVzZXJEYXRhKQogewogICAgIHN0YXRpY19j
YXN0PENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKj4odXNlckRhdGEpLT5yZWZyZXNoQXVk
aW9DYXB0dXJlRGV2aWNlcygpOwogICAgIHJldHVybiAwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308583</attachid>
            <date>2017-04-28 12:58:55 -0700</date>
            <delta_ts>2017-05-01 10:06:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171442-20170428125854.patch</filename>
            <type>text/plain</type>
            <size>27845</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc0MzIwMzZiODM5Njhl
NzI0NzI4NTJhYmM1YTcxZjc3ZTA0YTc5Ni4uMWViOTg1Y2YwZGE0M2M0NzY2NGE4YzIwMzg2Yzgx
MzViZjMwYTA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA0LTI4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBub3RpZmljYXRpb25z
IGZyb20gQ2FwdHVyZURldmljZU1hbmFnZXIgKGFuZCBzdWJjbGFzc2VzKSB3aGVuIGRldmljZSBs
aXN0cyBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MTQ0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhIG5ldyBjYWxsYmFjay1iYXNlZCBub3RpZmljYXRpb24gdG8gQ2FwdHVyZURldmlj
ZU1hbmFnZXIgd2hpY2ggZmlyZXMgd2hlbiB0aGUgdW5kZXJseWluZyBsaXN0CisgICAgICAgIG9m
IGRldmljZXMgY2hhbmdlcy4gQWRkIHN1cHBvcnQgZm9yIGVudW1lcmF0aW5nIEFWQXVkaW9TZXNz
aW9uIGNhcHR1cmUgZGV2aWNlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNl
TWFuYWdlci5jcHA6CisgICAgICAgIChuZXh0T2JzZXJ2ZXJUb2tlbik6CisgICAgICAgIChDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6YWRkQ2FwdHVyZURldmljZUNoYW5nZWRPYnNlcnZlcik6CisgICAg
ICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVtb3ZlQ2FwdHVyZURldmljZUNoYW5nZWRPYnNl
cnZlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFn
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25D
YXB0dXJlRGV2aWNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lv
cy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlOjpBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOiBBZGRlZC4KKyAg
ICAgICAgKC1bV2ViQVZBdWRpb1Nlc3Npb25BdmFpbGFibGVJbnB1dHNMaXN0ZW5lciBpbml0V2l0
aENhbGxiYWNrOl0pOgorICAgICAgICAoLVtXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0
c0xpc3RlbmVyIGludmFsaWRhdGVdKToKKyAgICAgICAgKC1bV2ViQVZBdWRpb1Nlc3Npb25BdmFp
bGFibGVJbnB1dHNMaXN0ZW5lciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOm9mT2JqZWN0OmNoYW5n
ZTpjb250ZXh0Ol0pOgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9u
Q2FwdHVyZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmF1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1h
bmFnZXI6OmF1ZGlvU2Vzc2lvbkRldmljZVdpdGhVSUQpOgorICAgICAgICAoV2ViQ29yZTo6QVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaEF1ZGlvQ2FwdHVyZURldmlj
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2
aWNlQ29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6
OmRldmljZURpc2Nvbm5lY3RlZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNl
c0NoYW5nZWQpOgorCiAyMDE3LTA0LTI3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBhdWRpbyBkZXZpY2UgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdG8gQXVk
aW9TZXNzaW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGM0ZDc1MTk4MmI1YWIwM2JlZGU5NTM2M2M1NmYyMDg3MjJmYTBkODku
LmNlYzg5NmUzYjJlZWFmYzA3YjY1OGUxM2JiNTEyZTFmYjJlYzIxODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYyMTQsNiAr
NjIxNCwxMCBAQAogCQlDREJFQUVBRDE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rpb25H
cm91cEFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQkVBRUFCMTlEOTJCNkMwMEJFQkE4OCAvKiBNZWRpYVNlbGVjdGlvbkdyb3VwQVZGT2Jq
Qy5oICovOyB9OwogCQlDREMyNkI0MDE2MEE4Q0M2MDAyNjc1N0IgLyogTGVnYWN5TW9ja0NETS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMyNkIz
QzE2MEE2MkIwMDAyNjc1N0IgLyogTGVnYWN5TW9ja0NETS5jcHAgKi87IH07CiAJCUNEQzI2QjQx
MTYwQThDQ0UwMDI2NzU3QiAvKiBMZWdhY3lNb2NrQ0RNLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMyNkIzRDE2MEE2MkIwMDAyNjc1N0IgLyogTGVn
YWN5TW9ja0NETS5oICovOyB9OworCQlDREM2NzUyMjFFQUVBOUI3MDA3MjdDODQgLyogQVZBdWRp
b1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY3NTIwMUVBRUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICovOyB9OworCQlDREM2NzUyMzFFQUVBOUI3
MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjc1MjExRUFFQTlCNzAw
NzI3Qzg0IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJ
Q0RDNjc1MjYxRUFFQTlENDAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY3NTI0
MUVBRUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UubW0gKi87IH07
CisJCUNEQzY3NTI3MUVBRUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY3
NTI1MUVBRUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaCAqLzsg
fTsKIAkJQ0RDNjlERDYxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2Fybmlu
Z1ZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QzY5REQ0MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RDNjlE
RDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURENTE2MzIw
MjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLzsgfTsKIAkJ
Q0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2
OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ3
MTgsNiArMTQ3MjIsMTAgQEAKIAkJQ0RDMURENDExN0NDMkM0ODAwOENCNTVEIC8qIG1lZGlhQ29u
dHJvbHNBcHBsZS5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IG1lZGlhQ29udHJvbHNBcHBsZS5jc3M7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzI2QjNDMTYwQTYyQjAwMDI2NzU3QiAvKiBMZWdhY3lN
b2NrQ0RNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeU1vY2tDRE0uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREMyNkIzRDE2MEE2MkIwMDAyNjc1N0IgLyogTGVnYWN5
TW9ja0NETS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lNb2NrQ0RNLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNEQzY3NTIwMUVBRUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQVZBdWRpb1Nl
c3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RDNjc1MjExRUFFQTlCNzAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmlj
ZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM2NzUyNDFFQUVBOUQ0MDA3
MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDREM2NzUyNTFFQUVBOUQ0MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM2OURENDE2MzIwMjZDMDA3QzM4REYg
LyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQzY5REQ1MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNj
cmVlbldhcm5pbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxh
Y2Vob2xkZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVG
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNjExMiw2ICsxNjEyMCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTQxNTc0NzQyMUUzODY5ODAwMEU5MTREOCAvKiBsaWJ3ZWJydGMgKi8sCisJCQkJQ0RD
Njc1MUYxRUFFQTk5NjAwNzI3Qzg0IC8qIGlvcyAqLywKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0
RjFENjAgLyogbWFjICovLAogCQkJCTA3RDZBNEY2MUJGMjMwN0QwMDE3NDE0NiAvKiBBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmggKi8sCiAJCQkJMDdCNzExNkExRDg5OUU2MzAwOUYwRkZC
IC8qIENhcHR1cmVEZXZpY2UuaCAqLywKQEAgLTI0MjY1LDYgKzI0Mjc0LDE3IEBACiAJCQluYW1l
ID0gTWVkaWFDb250cm9sczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUNE
QzY3NTFGMUVBRUE5OTYwMDcyN0M4NCAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUNEQzY3NTI0MUVBRUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2UubW0gKi8sCisJCQkJQ0RDNjc1MjUxRUFFQTlENDAwNzI3Qzg0
IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5oICovLAorCQkJCUNEQzY3NTIwMUVBRUE5
QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICovLAor
CQkJCUNEQzY3NTIxMUVBRUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCUNERjJCMDA1MTgyMDUzREYwMEYyQjQyNCAvKiBtZWRpYXNvdXJj
ZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNzM0Miw2
ICsyNzM2Miw3IEBACiAJCQkJQThFQTdDQjgwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxIZWFkaW5n
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdDQUYwQTE5MkI5QzAwQThFRjVGIC8q
IEhUTUxIUkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFERTI3MEExNTJBQzgwMEIx
MkE2OCAvKiBIVE1MSHRtbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzY3NTI3MUVB
RUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4NzFERTJBMEExNTJBQzgwMEIxMkE2OCAvKiBIVE1MSUZyYW1lRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0MyRkE2MTIxRUE5NUEzQzAwQTAzMTA4IC8qIFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdEMkQwQTE5Mzg1
NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzMjgs
NiArMjgzNDksNyBAQAogCQkJCTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVz
dWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VGRTFFQjBEQ0E1RjY0MDA3MzkyMTkgLyogSlNY
U0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUI0NDBBNDRFRkM3MDBGOTky
RTAgLyogS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RDNjc1MjMxRUFFQTlC
NzAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRTAwRDU5MTgyREFDOEQwMDA4N0RENyAvKiBLZXllZENvZGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVjb2Rl
ckNGLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMgLyogS2V5
ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLApAQCAtMzA2MzQsNiArMzA2NTYsNyBAQAogCQkJ
CTQxNUNEQUY0MUU2QjhGODcwMDRGMTFFRSAvKiBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDY3MUUwNjUxRDY3QTU5NjAwQzZC
NDk3IC8qIENhbnZhc1BhdGguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDNjc1MjYxRUFFQTlE
NDAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTQ5NDg0RkM0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5QzdCOURDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkNBMTAyQ0YyM0MwMDE4N0RE
MyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjY1
OSw2ICszMjY4Miw3IEBACiAJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJp
YWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjg0QUVBMTA0NDdERUUwMEVBRUI1MiAv
KiBQYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTFFQ0MyMEM5
MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
QzY3NTIyMUVBRUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwQTIxMkIwMjZGNzAwQzFBMzU5IC8qIFBh
bm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAxOTEyQjAyNjc2MDBDMUEzNTkgLyog
UGFubmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg4OTBBRTFBQTEzRjI1MDAyNkMz
MDEgLyogUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIubW0gaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1
cmVEZXZpY2VNYW5hZ2VyLmNwcAppbmRleCBiYWMzMzYwMWVjYjhlOTk3M2UyYjcwYjVlZmJjNGQ5
ODgwNWVhMDRmLi5hZmE3N2RlZjFmNTA5YTNlZThmZWE2YzY3NTk2MTNhNDNlZmQyOGM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNl
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2Fw
dHVyZURldmljZU1hbmFnZXIuY3BwCkBAIC0xMjksNCArMTI5LDI0IEBAIHN0ZDo6b3B0aW9uYWw8
Q2FwdHVyZURldmljZT4gQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZVdpdGhVSUQoY29uc3Qg
U3RyaW5nJiBkCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAorc3RhdGljIENhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpPYnNlcnZlclRva2VuIG5leHRPYnNlcnZlclRva2VuKCkKK3sKKyAgICBz
dGF0aWMgQ2FwdHVyZURldmljZU1hbmFnZXI6Ok9ic2VydmVyVG9rZW4gbmV4dFRva2VuID0gMDsK
KyAgICByZXR1cm4gKytuZXh0VG9rZW47Cit9CisKK0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpPYnNl
cnZlclRva2VuIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjphZGRDYXB0dXJlRGV2aWNlQ2hhbmdlZE9i
c2VydmVyKENhcHR1cmVEZXZpY2VDaGFuZ2VkQ2FsbGJhY2sgb2JzZXJ2ZXIpCit7CisgICAgYXV0
byB0b2tlbiA9IG5leHRPYnNlcnZlclRva2VuKCk7CisgICAgbV9vYnNlcnZlcnMuc2V0KHRva2Vu
LCBXVEZNb3ZlKG9ic2VydmVyKSk7CisgICAgcmV0dXJuIHRva2VuOworfQorCit2b2lkIENhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpyZW1vdmVDYXB0dXJlRGV2aWNlQ2hhbmdlZE9ic2VydmVyKE9ic2Vy
dmVyVG9rZW4gdG9rZW4pCit7CisgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmNvbnRhaW5zKHRva2Vu
KSk7CisgICAgbV9vYnNlcnZlcnMucmVtb3ZlKHRva2VuKTsKK30KKworCiAjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5oCmluZGV4IDU4MTBmNDlkOWI3ZTEy
YjdmMzU2MTM0NTdjNzNjZDJiYmNlYjljZDYuLmRmZjAwMjM1OTJlNGQxNTZhYjgxY2IzMWJlOGQx
NWFkODhlY2E2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIuaApAQCAtMzQsNiArMzQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CiBwdWJsaWM6
CisgICAgdXNpbmcgQ2FwdHVyZURldmljZUNoYW5nZWRDYWxsYmFjayA9IHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPjsKKyAgICB1c2luZyBPYnNlcnZlclRva2VuID0gdWludDMyX3Q7CisgICAgdmlydHVh
bCBPYnNlcnZlclRva2VuIGFkZENhcHR1cmVEZXZpY2VDaGFuZ2VkT2JzZXJ2ZXIoQ2FwdHVyZURl
dmljZUNoYW5nZWRDYWxsYmFjayk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNhcHR1cmVEZXZp
Y2VDaGFuZ2VkT2JzZXJ2ZXIoT2JzZXJ2ZXJUb2tlbik7CisKICAgICB2aXJ0dWFsIFZlY3RvcjxD
YXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZXMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJl
ZnJlc2hDYXB0dXJlRGV2aWNlcygpIHsgfQogICAgIHZpcnR1YWwgVmVjdG9yPENhcHR1cmVEZXZp
Y2U+IGdldEF1ZGlvU291cmNlc0luZm8oKTsKQEAgLTQzLDYgKzQ4LDcgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgfkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCk7CiAgICAgc3RkOjpv
cHRpb25hbDxDYXB0dXJlRGV2aWNlPiBjYXB0dXJlRGV2aWNlRnJvbVBlcnNpc3RlbnRJRChjb25z
dCBTdHJpbmcmIGNhcHR1cmVEZXZpY2VJRCk7CisgICAgSGFzaE1hcDxPYnNlcnZlclRva2VuLCBD
YXB0dXJlRGV2aWNlQ2hhbmdlZENhbGxiYWNrPiBtX29ic2VydmVyczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mYWZjODdlMzI1M2VlODZhNjdlZTI5MDZiNjE1ZjEzMDRkMzE5YzUzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FW
QXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKElP
UykKKworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisKK09CSkNfQ0xBU1MgQVZBdWRpb1Nlc3Npb25Qb3J0RGVzY3JpcHRpb247CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlIDogcHVi
bGljIENhcHR1cmVEZXZpY2UgeworcHVibGljOgorICAgIHN0YXRpYyBBVkF1ZGlvU2Vzc2lvbkNh
cHR1cmVEZXZpY2UgY3JlYXRlKEFWQXVkaW9TZXNzaW9uUG9ydERlc2NyaXB0aW9uKik7CisgICAg
dmlydHVhbCB+QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlKCkgPSBkZWZhdWx0OworCitwcml2
YXRlOgorICAgIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZShBVkF1ZGlvU2Vzc2lvblBvcnRE
ZXNjcmlwdGlvbiosIGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudElELCBjb25zdCBTdHJpbmcmIGxh
YmVsKTsKKworICAgIFJldGFpblB0cjxBVkF1ZGlvU2Vzc2lvblBvcnREZXNjcmlwdGlvbj4gbV9w
b3J0RGVzY3JpcHRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVk
aW9TZXNzaW9uQ2FwdHVyZURldmljZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDYzZGY1OWE2ZGQ5Y2E2MGYx
OWI5ZWNiMzY0ZDk3ZDkxMWNiYzUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5tbQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8QVZGb3VuZGF0aW9uL0FWQXVkaW9T
ZXNzaW9uLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVZBdWRpb1Nlc3Npb25DYXB0dXJl
RGV2aWNlIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZTo6Y3JlYXRlKEFWQXVkaW9TZXNzaW9u
UG9ydERlc2NyaXB0aW9uKiBwb3J0RGVzY3JpcHRpb24pCit7CisgICAgU3RyaW5nIHBlcnNpc3Rl
bnRJRCA9IHBvcnREZXNjcmlwdGlvbi5VSUQ7CisgICAgU3RyaW5nIGxhYmVsID0gcG9ydERlc2Ny
aXB0aW9uLnBvcnROYW1lOworICAgIHJldHVybiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2Uo
cG9ydERlc2NyaXB0aW9uLCBwZXJzaXN0ZW50SUQsIGxhYmVsKTsKK30KKworQVZBdWRpb1Nlc3Np
b25DYXB0dXJlRGV2aWNlOjpBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UoQVZBdWRpb1Nlc3Np
b25Qb3J0RGVzY3JpcHRpb24qIHBvcnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBwZXJzaXN0
ZW50SUQsIGNvbnN0IFN0cmluZyYgbGFiZWwpCisgICAgOiBDYXB0dXJlRGV2aWNlKHBlcnNpc3Rl
bnRJRCwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6QXVkaW8sIGxhYmVsKQorICAgICwgbV9w
b3J0RGVzY3JpcHRpb24ocG9ydERlc2NyaXB0aW9uKQoreworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2
aWNlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FW
QXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzZiOWY3Mzk2
MDBlMTU3Y2UwYzcyOWFiZGJjYjI2NjFlMjI4MDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZU1hbmFnZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRl
ICJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNf
Q0xBU1MgV2ViQVZBdWRpb1Nlc3Npb25BdmFpbGFibGVJbnB1dHNMaXN0ZW5lcjsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U7CitjbGFz
cyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5h
Z2VyIGZpbmFsIDogcHVibGljIENhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xh
c3MgTmV2ZXJEZXN0cm95ZWQ8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcj47Citw
dWJsaWM6CisgICAgc3RhdGljIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXImIHNp
bmdsZXRvbigpOworCisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlcygp
IGZpbmFsOworCisgICAgVmVjdG9yPEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZT4mIGF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2VzKCk7CisgICAgc3RkOjpvcHRpb25hbDxBVkF1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2U+IGF1ZGlvU2Vzc2lvbkRldmljZVdpdGhVSUQoY29uc3QgU3RyaW5nJik7
CisKK3ByaXZhdGU6CisgICAgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcigpID0g
ZGVmYXVsdDsKKyAgICB+QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcigpOworCisg
ICAgdm9pZCByZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpOworCisgICAgc3RkOjpvcHRpb25h
bDxWZWN0b3I8Q2FwdHVyZURldmljZT4+IG1fZGV2aWNlczsKKyAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2U+PiBtX2F1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2VzOworICAgIFJldGFpblB0cjxXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xp
c3RlbmVyPiBtX2xpc3RlbmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0
dXJlRGV2aWNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4
ZTc1MjQzNjA5MzgwNzU4NTc1NWUyMjE2YmVkOWUxYmFlMmQ5YWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25D
YXB0dXJlRGV2aWNlTWFuYWdlci5tbQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShJT1MpCisK
KyNpbmNsdWRlICJBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJTb2Z0
TGlua2luZy5oIgorI2luY2x1ZGUgPEFWRm91bmRhdGlvbi9BVkF1ZGlvU2Vzc2lvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24p
CitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbikKKyNkZWZpbmUg
QVZBdWRpb1Nlc3Npb24gZ2V0QVZBdWRpb1Nlc3Npb25DbGFzcygpCisKK3ZvaWQqIEF2YWlsYWJs
ZUlucHV0c0NvbnRleHQgPSAmQXZhaWxhYmxlSW5wdXRzQ29udGV4dDsKKworQGludGVyZmFjZSBX
ZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xpc3RlbmVyIDogTlNPYmplY3QgeworICAg
IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBfY2FsbGJhY2s7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xpc3RlbmVyCistIChpZClpbml0
V2l0aENhbGxiYWNrOihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pY2FsbGJhY2sKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIF9jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWludmFsaWRhdGUKK3sKKyAgICBfY2FsbGJhY2sgPSBudWxscHRyOworfQorCistICh2b2lkKW9i
c2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQpb2Jq
ZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5PE5TS2V5VmFsdWVDaGFuZ2VLZXksIGlkPiAqKWNoYW5n
ZSBjb250ZXh0Oih2b2lkICopY29udGV4dAoreworICAgIFVOVVNFRF9QQVJBTShrZXlQYXRoKTsK
KyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsKKyAg
ICBpZiAoY29udGV4dCA9PSBBdmFpbGFibGVJbnB1dHNDb250ZXh0ICYmIF9jYWxsYmFjaykKKyAg
ICAgICAgX2NhbGxiYWNrKCk7Cit9CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlciYgQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFu
YWdlcjsKK30KKworQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6fkFWQXVkaW9T
ZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIoKQoreworICAgIFttX2xpc3RlbmVyIGludmFsaWRh
dGVdOworICAgIG1fbGlzdGVuZXIgPSBudWxscHRyOworfQorCitWZWN0b3I8Q2FwdHVyZURldmlj
ZT4mIEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VzKCkK
K3sKKyAgICBpZiAoIW1fZGV2aWNlcykKKyAgICAgICAgcmVmcmVzaEF1ZGlvQ2FwdHVyZURldmlj
ZXMoKTsKKyAgICByZXR1cm4gbV9kZXZpY2VzLnZhbHVlKCk7Cit9CisKK1ZlY3RvcjxBVkF1ZGlv
U2Vzc2lvbkNhcHR1cmVEZXZpY2U+JiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjphdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcygpCit7CisgICAgaWYgKCFtX2F1ZGlvU2Vzc2lv
bkNhcHR1cmVEZXZpY2VzKQorICAgICAgICByZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpOwor
ICAgIHJldHVybiBtX2F1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzLnZhbHVlKCk7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBBVkF1ZGlvU2Vzc2lvbkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjphdWRpb1Nlc3Npb25EZXZpY2VXaXRoVUlEKGNvbnN0IFN0cmlu
ZyYgZGV2aWNlSUQpCit7CisgICAgaWYgKCFtX2F1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzKQor
ICAgICAgICByZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygpOworCisgICAgZm9yIChhdXRvJiBk
ZXZpY2UgOiBhdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlcygpKSB7CisgICAgICAgIGlmIChkZXZp
Y2UucGVyc2lzdGVudElkKCkgPT0gZGV2aWNlSUQpCisgICAgICAgICAgICByZXR1cm4gZGV2aWNl
OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit2b2lkIEFWQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2VzKCkKK3sK
KyAgICBpZiAoIW1fbGlzdGVuZXIpIHsKKyAgICAgICAgbV9saXN0ZW5lciA9IGFkb3B0TlMoW1tX
ZWJBVkF1ZGlvU2Vzc2lvbkF2YWlsYWJsZUlucHV0c0xpc3RlbmVyIGFsbG9jXSBpbml0V2l0aENh
bGxiYWNrOlt0aGlzXSB7CisgICAgICAgICAgICByZWZyZXNoQXVkaW9DYXB0dXJlRGV2aWNlcygp
OworICAgICAgICB9XSk7CisgICAgICAgIFtbQVZBdWRpb1Nlc3Npb24gc2hhcmVkU2Vzc2lvbl0g
YWRkT2JzZXJ2ZXI6bV9saXN0ZW5lci5nZXQoKSBmb3JLZXlQYXRoOkAiYXZhaWxhYmxlSW5wdXRz
IiBvcHRpb25zOjAgY29udGV4dDpBdmFpbGFibGVJbnB1dHNDb250ZXh0XTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlPiBuZXdBdWRpb0RldmljZXM7Cisg
ICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IG5ld0RldmljZXM7CisKKyAgICBmb3IgKEFWQXVkaW9T
ZXNzaW9uUG9ydERlc2NyaXB0aW9uICpwb3J0RGVzY3JpcHRpb24gaW4gW0FWQXVkaW9TZXNzaW9u
IHNoYXJlZEluc3RhbmNlXS5hdmFpbGFibGVJbnB1dHMpIHsKKyAgICAgICAgYXV0byBhdWRpb0Rl
dmljZSA9IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZTo6Y3JlYXRlKHBvcnREZXNjcmlwdGlv
bik7CisgICAgICAgIG5ld0RldmljZXMuYXBwZW5kKHsgYXVkaW9EZXZpY2UucGVyc2lzdGVudElk
KCksIGF1ZGlvRGV2aWNlLnR5cGUoKSwgYXVkaW9EZXZpY2UubGFiZWwoKSwgYXVkaW9EZXZpY2Uu
Z3JvdXBJZCgpIH0pOworICAgICAgICBuZXdBdWRpb0RldmljZXMuYXBwZW5kKFdURk1vdmUoYXVk
aW9EZXZpY2UpKTsKKyAgICB9CisKKyAgICBtX2F1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VzID0g
V1RGTW92ZShuZXdBdWRpb0RldmljZXMpOworICAgIG1fZGV2aWNlcyA9IFdURk1vdmUobmV3RGV2
aWNlcyk7CisKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMudmFsdWVzKCkp
CisgICAgICAgIG9ic2VydmVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2Fw
dHVyZURldmljZU1hbmFnZXIubW0KaW5kZXggZjY0NzRkNjgxYmNmYmU5MjVlODAxZTA0ODlhMGRh
NDYzMTIzMDQ1Ni4uZmQ3NTllYWE4ZGVlOGVhNzIwM2YyMDZmZTNkM2FhM2EzNzM3NmM1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVy
ZURldmljZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0KQEAgLTE5NCw2ICsxOTQsOSBAQCB2b2lk
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZ2lzdGVyRm9yRGV2aWNlTm90aWZpY2F0aW9ucygp
CiB2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZUNvbm5lY3RlZCgpCiB7CiAgICAg
cmVmcmVzaENhcHR1cmVEZXZpY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9v
YnNlcnZlcnMudmFsdWVzKCkpCisgICAgICAgIG9ic2VydmVyKCk7CiB9CiAKIHZvaWQgQVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKEFWQ2FwdHVyZURldmljZVR5cGVk
ZWYqIGRldmljZSkKQEAgLTIxMSw2ICsyMTQsOSBAQCB2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmRldmljZURpc2Nvbm5lY3RlZChBVkNhcHR1cmVEZXZpY2VUeXBlZGVmKiBkZXZpY2UpCiAg
ICAgICAgICAgICBkZXZpY2VzW2ldLnNldEVuYWJsZWQoZmFsc2UpOwogICAgICAgICB9CiAgICAg
fQorCisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzLnZhbHVlcygpKQorICAg
ICAgICBvYnNlcnZlcigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0NvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAppbmRleCA2ZGQzMjMzMGYyNTQy
YzA1ZDNmNWJlNzljOTQ4NzMzNTQ1NWVlMjI4Li44YzJjZTFiNmMzNTJiNjc4YjJiY2M3MjQ0ZGUw
Y2IyOWUxNmE1MzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlci5jcHAKQEAgLTEyOCwxOCArMTI4LDIyIEBAIHZvaWQgQ29yZUF1ZGlvQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnJlZnJlc2hBdWRpb0NhcHR1cmVEZXZpY2VzKCkKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChoYXZlRGV2aWNlQ2hhbmdlcykgewotICAgICAgICBtX2RldmljZXMgPSBWZWN0
b3I8Q2FwdHVyZURldmljZT4oKTsKKyAgICBpZiAoIWhhdmVEZXZpY2VDaGFuZ2VzKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgZm9yIChhdXRvICZkZXZpY2UgOiBtX2NvcmVBdWRpb0NhcHR1
cmVEZXZpY2VzKSB7Ci0gICAgICAgICAgICBDYXB0dXJlRGV2aWNlIGNhcHR1cmVEZXZpY2UoZGV2
aWNlLnBlcnNpc3RlbnRJZCgpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpBdWRpbywgZGV2
aWNlLmxhYmVsKCkpOwotICAgICAgICAgICAgY2FwdHVyZURldmljZS5zZXRFbmFibGVkKGRldmlj
ZS5lbmFibGVkKCkpOwotICAgICAgICAgICAgbV9kZXZpY2VzLmFwcGVuZChjYXB0dXJlRGV2aWNl
KTsKLSAgICAgICAgfQorICAgIG1fZGV2aWNlcyA9IFZlY3RvcjxDYXB0dXJlRGV2aWNlPigpOwor
CisgICAgZm9yIChhdXRvICZkZXZpY2UgOiBtX2NvcmVBdWRpb0NhcHR1cmVEZXZpY2VzKSB7Cisg
ICAgICAgIENhcHR1cmVEZXZpY2UgY2FwdHVyZURldmljZShkZXZpY2UucGVyc2lzdGVudElkKCks
IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkF1ZGlvLCBkZXZpY2UubGFiZWwoKSk7CisgICAg
ICAgIGNhcHR1cmVEZXZpY2Uuc2V0RW5hYmxlZChkZXZpY2UuZW5hYmxlZCgpKTsKKyAgICAgICAg
bV9kZXZpY2VzLmFwcGVuZChjYXB0dXJlRGV2aWNlKTsKICAgICB9CisKKyAgICBmb3IgKGF1dG8m
IG9ic2VydmVyIDogbV9vYnNlcnZlcnMudmFsdWVzKCkpCisgICAgICAgIG9ic2VydmVyKCk7CiB9
CiAKLU9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VzQ2hhbmdl
ZChBdWRpb09iamVjdElELCBVSW50MzIsIGNvbnN0IEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNz
Kiwgdm9pZCAqdXNlckRhdGEpCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdl
cjo6ZGV2aWNlc0NoYW5nZWQoQXVkaW9PYmplY3RJRCwgVUludDMyLCBjb25zdCBBdWRpb09iamVj
dFByb3BlcnR5QWRkcmVzcyosIHZvaWQqIHVzZXJEYXRhKQogewogICAgIHN0YXRpY19jYXN0PENv
cmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKj4odXNlckRhdGEpLT5yZWZyZXNoQXVkaW9DYXB0
dXJlRGV2aWNlcygpOwogICAgIHJldHVybiAwOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>