<?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>185761</bug_id>
          
          <creation_ts>2018-05-18 02:42:18 -0700</creation_ts>
          <short_desc>[GTK][WPE] Add mediaDevices.enumerateDevices support</short_desc>
          <delta_ts>2018-11-19 02:58:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>185787</dependson>
          <blocked>187064</blocked>
    
    <blocked>190466</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Alejandro G. Castro">alex</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>magomez</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pnormand</cc>
    
    <cc>tsaunier</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1425078</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-18 02:42:18 -0700</bug_when>
    <thetext>This is the next big patch adding the classes required to use libwebrtc backend support for the GTK and WPE ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425080</commentid>
    <comment_count>1</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-18 02:45:54 -0700</bug_when>
    <thetext>*** Bug 172269 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425615</commentid>
    <comment_count>2</comment_count>
      <attachid>340841</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-21 03:10:36 -0700</bug_when>
    <thetext>Created attachment 340841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425667</commentid>
    <comment_count>3</comment_count>
      <attachid>340841</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-05-21 09:20:50 -0700</bug_when>
    <thetext>Comment on attachment 340841
Patch

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

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:449
&gt; +        static int hashSaltSize = 128;
&gt; +        static int randomDataSize = hashSaltSize / 16;
&gt; +        uint64_t randomData[randomDataSize];
&gt; +        cryptographicallyRandomValues(reinterpret_cast&lt;unsigned char*&gt;(randomData), sizeof(randomData));
&gt; +
&gt; +        StringBuilder builder;
&gt; +        builder.reserveCapacity(128);
&gt; +        for (int i = 0; i &lt; randomDataSize; i++)
&gt; +            appendUnsigned64AsHex(randomData[0], builder);
&gt; +        priv-&gt;mediaIdentifierHashSalt = builder.toString();
&gt; +    }

What&apos;s the desired amount of random data you&apos;re after? Effectively you&apos;re getting 64 * 128 / 16 = 512 bits, but hashSaltSize doesn&apos;t help clarify that.

Assuming 512 bits, allow me to be nit-picky and recommend using std:array:
```
    static constexpr size_t hashSaltSize = 512;
    std::array&lt;uint64_t, hashSaltSize / sizeof(uint64_t)&gt; randomData;
    cryptographicallyRandomValues(reinterpret_cast&lt;void*&gt;(randomData.data()), randomData.size() * sizeof(uint64_t));

    StringBuilder builder;
    builder.reserveCapacity(randomData.size() * sizeof(uint64_t));
    for (auto val : randomData)
        appendUnsigned64AsHex(val, builder);
    priv-&gt;mediaIdentifierHashSalt = builder.toString();
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426086</commentid>
    <comment_count>4</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-22 03:05:25 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to Zan Dobersek from comment #3)
&gt; Comment on attachment 340841 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=340841&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:449
&gt; &gt; +        static int hashSaltSize = 128;
&gt; &gt; +        static int randomDataSize = hashSaltSize / 16;
&gt; &gt; +        uint64_t randomData[randomDataSize];
&gt; &gt; +        cryptographicallyRandomValues(reinterpret_cast&lt;unsigned char*&gt;(randomData), sizeof(randomData));
&gt; &gt; +
&gt; &gt; +        StringBuilder builder;
&gt; &gt; +        builder.reserveCapacity(128);
&gt; &gt; +        for (int i = 0; i &lt; randomDataSize; i++)
&gt; &gt; +            appendUnsigned64AsHex(randomData[0], builder);
&gt; &gt; +        priv-&gt;mediaIdentifierHashSalt = builder.toString();
&gt; &gt; +    }
&gt; 
&gt; What&apos;s the desired amount of random data you&apos;re after? Effectively you&apos;re
&gt; getting 64 * 128 / 16 = 512 bits, but hashSaltSize doesn&apos;t help clarify that.
&gt; 

Regarding the size, this is basically a default method we expect embedders to override and properly create a storage of hash salts per origin, which should be handled like cookies. My understanding is that the salt should be as big as to avoid to have many collisions per origin. But in this case we are storing one per webview because this is just the default testing method, it is just a matter of not having a fixed one and being able to even fingerprint this testing situation. I guess 128 is more than enough for this, that is why my goal was 128.

I think your calculation is not correct, basically the method chooses random hexadecimal values from a fixed array of size 16, that means 4 bits to choose a character per uint64_t number, so 16 hexadecimal characters per uint64_t, that is why we need 128 / 16 unint64_t elements to get 128 hexadecimal values.

&gt; Assuming 512 bits, allow me to be nit-picky and recommend using std:array:
&gt; ```
&gt;     static constexpr size_t hashSaltSize = 512;
&gt;     std::array&lt;uint64_t, hashSaltSize / sizeof(uint64_t)&gt; randomData;
&gt;    
&gt; cryptographicallyRandomValues(reinterpret_cast&lt;void*&gt;(randomData.data()),
&gt; randomData.size() * sizeof(uint64_t));
&gt; 
&gt;     StringBuilder builder;
&gt;     builder.reserveCapacity(randomData.size() * sizeof(uint64_t));
&gt;     for (auto val : randomData)
&gt;         appendUnsigned64AsHex(val, builder);
&gt;     priv-&gt;mediaIdentifierHashSalt = builder.toString();
&gt; ```

Looks great, I&apos;ll use the array thanks, I just need to replace the size part. Something like this:


        static constexpr size_t hashSaltSize = 128;
        std::array&lt;uint64_t, hashSaltSize / 16&gt; randomData;

        cryptographicallyRandomValues(reinterpret_cast&lt;void*&gt;(randomData.data()), randomData.size() * sizeof(uint64_t));

        StringBuilder builder;
        builder.reserveCapacity(hashSaltSize);
        for (auto val : randomData)
            appendUnsigned64AsHex(val, builder);
        priv-&gt;mediaIdentifierHashSalt = builder.toString();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426101</commentid>
    <comment_count>5</comment_count>
      <attachid>340841</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-05-22 04:32:15 -0700</bug_when>
    <thetext>Comment on attachment 340841
Patch

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

I did a first pass on the GStreamer bits.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:17
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR

Hum I don&apos;t think we want the Apple version of the header. For every new file please make sure to use the standard BSD header.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:135
&gt; +void GStreamerAudioCaptureSource::stopProducingData()

This should undo what startProducingData() does I think? Namely disconnect the new-sample signal.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:142
&gt; +    if (!m_capabilities) {

This could become an early return.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp:49
&gt; +    // FIXME Handle errors.

Please open a bug and mention it for every FIXME :)

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h:58
&gt; +        m_platformDescription = { PlatformDescription::GStreamerAudioStreamDescription, (AudioStreamBasicDescription*) &amp;m_info };

Please avoid C-style casts everywhere in C++ code. Use static_cast or reinterpret_cast.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h:83
&gt; +    double sampleRate() const final { return GST_AUDIO_INFO_RATE (&amp;m_info); }

No space before ( ... I wonder why check-webkit-style doesn&apos;t complain about that :/

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:141
&gt; +        ASSERT_NOT_REACHED();

This is enabled only for debug builds I think. You&apos;d need an early return for release builds.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:172
&gt; +            // Only accept raw video for now.
&gt; +            if (!gst_structure_has_name(str, &quot;video/x-raw&quot;))

Will be nice to support compressed formats too :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426137</commentid>
    <comment_count>6</comment_count>
      <attachid>340841</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-05-22 07:03:37 -0700</bug_when>
    <thetext>Comment on attachment 340841
Patch

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

Wow, huge patch detected.

You drew my attention because it adds new GTK/WPE API. ;) I have enough questions and concerns about the new API that I&apos;m going to use r-, even though it&apos;s a fairly small portion of the patch.

&gt; Source/WebKit/ChangeLog:21
&gt; +        webkit_permission_request_resolve_check API, adding the hash salt
&gt; +        and the decision about allowing access to the devices. Main point
&gt; +        of this API is to make sure that the user can control the webpages
&gt; +        and that they don&apos;t get smart trying to fingerprint the system. There is a

What exactly is the salt used for? What is being salted in the first place? How is the browser supposed to know what it&apos;s supposed to salt?

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:141
&gt;&gt; +    if (!gst_element_link_pads(m_tee.get(), &quot;src_%u&quot;, queue, &quot;sink&quot;))
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt;&gt; +
&gt;&gt; +    if (!gst_element_link(queue, newSink))
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; This is enabled only for debug builds I think. You&apos;d need an early return for release builds.

A minor point, but I would say the code is good and an early return should not be added, because the code should assume the assertion is never reached. That&apos;s the point of the asserts, after all. Unless GCC is giving -Wreturn-type or -Wswitch warnings, which shouldn&apos;t occur in this case. You wouldn&apos;t add an early return in GStreamerCapturer::play or GStreamerCapturer::stop, would you? Of course not! This isn&apos;t any different.

&gt; Source/WebKit/UIProcess/API/glib/WebKitPermissionRequest.cpp:92
&gt; + * We have to call this function to specify if a request is allowed
&gt; + * using the @allowed parameter. Also we add the random data that
&gt; + * would be used as a hash salt in case the user did not allow the
&gt; + * origin for this kind of requests, using the
&gt; + * @salt parameter.
&gt; + */

Since: 2.22

&gt; Source/WebKit/UIProcess/API/glib/WebKitPermissionRequest.cpp:93
&gt; +void webkit_permission_request_resolve_check(WebKitPermissionRequest *request, const gchar* mediaIdentifierHashSalt, gboolean allowed)

The mediaIdentifierHashSalt parameter is specific to WebKitUserMediaPermissionRequest. Surely it shouldn&apos;t be in any WebKitPermissionRequest functions? Why does it need to be part of the interface, instead of specific to WebKitUserMediaPermissionRequest?

This causes more problems below, that would probably be best avoided here.

&gt; Source/WebKit/UIProcess/API/glib/WebKitUserMediaPermissionRequest.cpp:57
&gt;  struct _WebKitUserMediaPermissionRequestPrivate {
&gt;      RefPtr&lt;UserMediaPermissionRequestProxy&gt; request;
&gt; +    RefPtr&lt;UserMediaPermissionCheckProxy&gt; checkRequest;

I think it would be a lot simpler to add a new WebKitUserMediaPermissionCheckRequest subclass instead, that could subclass WebKitUserMediaPermissionRequest, and then embedders would know not to actually prompt the user. But maybe Carlos Garcia will have a better idea.

&gt;&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:449
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; What&apos;s the desired amount of random data you&apos;re after? Effectively you&apos;re getting 64 * 128 / 16 = 512 bits, but hashSaltSize doesn&apos;t help clarify that.
&gt;&gt; 
&gt;&gt; Assuming 512 bits, allow me to be nit-picky and recommend using std:array:
&gt;&gt; ```
&gt;&gt;     static constexpr size_t hashSaltSize = 512;
&gt;&gt;     std::array&lt;uint64_t, hashSaltSize / sizeof(uint64_t)&gt; randomData;
&gt;&gt;     cryptographicallyRandomValues(reinterpret_cast&lt;void*&gt;(randomData.data()), randomData.size() * sizeof(uint64_t));
&gt;&gt; 
&gt;&gt;     StringBuilder builder;
&gt;&gt;     builder.reserveCapacity(randomData.size() * sizeof(uint64_t));
&gt;&gt;     for (auto val : randomData)
&gt;&gt;         appendUnsigned64AsHex(val, builder);
&gt;&gt;     priv-&gt;mediaIdentifierHashSalt = builder.toString();
&gt;&gt; ```
&gt; 
&gt; Regarding the size, this is basically a default method we expect embedders to override and properly create a storage of hash salts per origin, which should be handled like cookies. My understanding is that the salt should be as big as to avoid to have many collisions per origin. But in this case we are storing one per webview because this is just the default testing method, it is just a matter of not having a fixed one and being able to even fingerprint this testing situation. I guess 128 is more than enough for this, that is why my goal was 128.
&gt; 
&gt; I think your calculation is not correct, basically the method chooses random hexadecimal values from a fixed array of size 16, that means 4 bits to choose a character per uint64_t number, so 16 hexadecimal characters per uint64_t, that is why we need 128 / 16 unint64_t elements to get 128 hexadecimal values.

WebKitWebView is surely not an appropriate place for this code? This all comes down to the weird salt parameter in webkit_permission_request_resolve_check().

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1532
&gt; +     * This signal is emitted when WebKit wants to check the
&gt; +     * permissions already given to an origin by a user, such as
&gt; +     * allowing the browser to use the microphone or the
&gt; +     * camera. Usually the embedder does not ask the user to resolve
&gt; +     * the request but uses what the user answered previously, denying
&gt; +     * by default if the user did not give permissions specifically to
&gt; +     * this origin.

OK, I see what the motivation for adding this was, but I think it&apos;s a misunderstanding of how WebKitPermissionRequest works. The browser doesn&apos;t *have* to display a permission request to the user. E.g. for Epiphany we always check whether the user has already made a decision, and just return that if so. The difference is you want the browser to *never* display the permission request. That&apos;s simple enough, since browsers need to manually implement support for each new type of permission request: you can just document that your new permission request type is not intended to be displayed to the user. Right? Then we would not need WebKitWebView::permission-check at all?

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1550
&gt; +     *

Since: 2.22

&gt; Source/WebKit/UIProcess/API/gtk/WebKitPermissionRequest.h:47
&gt; +    void (* resolve_check)  (WebKitPermissionRequest *request,
&gt; +                             const gchar* salt,
&gt; +                             gboolean allowed);

You can&apos;t add new vfuncs without removing padding, and for some reason there&apos;s no padding. So it requires a soname bump (for both GTK and WPE). Wow. If we&apos;ve ever had to do this before, it was before I started contributing to WebKit. We&apos;ll need to discuss with Carlos Garcia, and take the opportunity to add a bunch of new padding to WebKitWebView as well.

But I&apos;m confused whether the salt is really an appropriate parameter to have here. Like I said above, I think it really belongs in WebKitUserMediaPermissionRequest, so we can probably avoid this.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebView.h:235
&gt; +    gboolean   (* permission_check)            (WebKitWebView               *web_view,
&gt; +                                                WebKitPermissionRequest     *permission_request);

As was mentioned on Matrix, you&apos;ll need to remove padding here too. Same for the WPE header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426138</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-05-22 07:05:17 -0700</bug_when>
    <thetext>(In reply to Alejandro G. Castro from comment #4)
&gt; Regarding the size, this is basically a default method we expect embedders
&gt; to override and properly create a storage of hash salts per origin, which
&gt; should be handled like cookies.

I already asked what exactly the purpose of these salts is for, since it affects the API. One more question: is this something that WebKit could be handling instead of the embedder?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426139</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-05-22 07:17:29 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; What exactly is the salt used for? What is being salted in the first place?
&gt; How is the browser supposed to know what it&apos;s supposed to salt?

Well, maybe I should have looked at the title of the bug. I assume each media device is represented as a hash that gets exposed to the web. How that&apos;s constructed, I&apos;m not sure, but you then salt it with some randomness. The randomness used is different for every origin and thus fingerprinting is avoided. Right?

&quot;How that&apos;s constructed, I&apos;m not sure&quot; is the problem there. Surely that should be done in WebKit, not by browsers. And then storing the result is another problem. Have you tried implementing this for Epiphany yet? It would require a lot of changes in EphyPermissionsManager to store strings instead of non-boolean values, right? Not sure about that.

We normally require either a client implementation somewhere before adding new API, usually either MiniBrowser or Epiphany. In this case, we probably should expect both, because we surely want the web API to work properly in MiniBrowser, but MiniBrowser not a good test case for the GTK/WPE API as it doesn&apos;t store permissions on disk. Seeing the implementations will help us understand whether we have the API right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426337</commentid>
    <comment_count>9</comment_count>
      <attachid>340841</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-05-22 14:57:41 -0700</bug_when>
    <thetext>Comment on attachment 340841
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebView.h:235
&gt;&gt; +                                                WebKitPermissionRequest     *permission_request);
&gt; 
&gt; As was mentioned on Matrix, you&apos;ll need to remove padding here too. Same for the WPE header.

Oh, also it needs to go on the bottom, otherwise it&apos;ll break applications. (Unless we do a soname bump.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426510</commentid>
    <comment_count>10</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-23 01:21:04 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to Philippe Normand from comment #5)
&gt; Comment on attachment 340841 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=340841&amp;action=review
&gt; 
&gt; I did a first pass on the GStreamer bits.
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:17
&gt; &gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
&gt; 
&gt; Hum I don&apos;t think we want the Apple version of the header. For every new
&gt; file please make sure to use the standard BSD header.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:135
&gt; &gt; +void GStreamerAudioCaptureSource::stopProducingData()
&gt; 
&gt; This should undo what startProducingData() does I think? Namely disconnect
&gt; the new-sample signal.
&gt;

Right, we have missed that one, I have doubts about the setupPipeline but it is true we have to check that situation more carefully.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:142
&gt; &gt; +    if (!m_capabilities) {
&gt; 
&gt; This could become an early return.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp:49
&gt; &gt; +    // FIXME Handle errors.
&gt; 
&gt; Please open a bug and mention it for every FIXME :)
&gt;

Right.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h:58
&gt; &gt; +        m_platformDescription = { PlatformDescription::GStreamerAudioStreamDescription, (AudioStreamBasicDescription*) &amp;m_info };
&gt; 
&gt; Please avoid C-style casts everywhere in C++ code. Use static_cast or
&gt; reinterpret_cast.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h:83
&gt; &gt; +    double sampleRate() const final { return GST_AUDIO_INFO_RATE (&amp;m_info); }
&gt; 
&gt; No space before ( ... I wonder why check-webkit-style doesn&apos;t complain about
&gt; that :/
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:141
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; This is enabled only for debug builds I think. You&apos;d need an early return
&gt; for release builds.
&gt;

Right, we missed the return.
 
&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:172
&gt; &gt; +            // Only accept raw video for now.
&gt; &gt; +            if (!gst_structure_has_name(str, &quot;video/x-raw&quot;))
&gt; 
&gt; Will be nice to support compressed formats too :)

Yep :-), we will work on that at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426512</commentid>
    <comment_count>11</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-23 01:54:43 -0700</bug_when>
    <thetext>Thanks for the review Michael, good points!

(In reply to Michael Catanzaro from comment #6)
&gt; Comment on attachment 340841 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=340841&amp;action=review
&gt; 
&gt; Wow, huge patch detected.
&gt; 
&gt; You drew my attention because it adds new GTK/WPE API. ;) I have enough
&gt; questions and concerns about the new API that I&apos;m going to use r-, even
&gt; though it&apos;s a fairly small portion of the patch.
&gt; 

Yep, that kind of patch ;-).

&gt; &gt; Source/WebKit/ChangeLog:21
&gt; &gt; +        webkit_permission_request_resolve_check API, adding the hash salt
&gt; &gt; +        and the decision about allowing access to the devices. Main point
&gt; &gt; +        of this API is to make sure that the user can control the webpages
&gt; &gt; +        and that they don&apos;t get smart trying to fingerprint the system. There is a
&gt; 
&gt; What exactly is the salt used for? What is being salted in the first place?
&gt; How is the browser supposed to know what it&apos;s supposed to salt?
&gt; 

Right, we will try to add some more information about it in the documentation. In summary we are trying to avoid fingerprinting using these calls. In case the user authorizes we have to warn them carefully and there are other options we can use but they are something we will address in the getUserMedia implementation. This salt controls the case where the user does not give authotization, in this case we have to avoid sending the same ID to every origin because it could be used to track the user, but they could be persistent to allow webpages to store previous configurations of the multimedia. The salt per origin allows the browser to support controlling the fingerprinting and using a persistent id to allow webpages to store preferences regarding the devices.

The salt is used to hash the device persistent ID int he system and generate an ID, this way we can have the same IDs for an origin storing the salt.

If you want to read more information check the spec here:

https://w3c.github.io/mediacapture-main/#enumerating-devices

And mainly the non-normative section about privacy and security considerations:

https://w3c.github.io/mediacapture-main/#privacy-and-security-considerations

&gt; &gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:141
&gt; &gt;&gt; +    if (!gst_element_link_pads(m_tee.get(), &quot;src_%u&quot;, queue, &quot;sink&quot;))
&gt; &gt;&gt; +        ASSERT_NOT_REACHED();
&gt; &gt;&gt; +
&gt; &gt;&gt; +    if (!gst_element_link(queue, newSink))
&gt; &gt;&gt; +        ASSERT_NOT_REACHED();
&gt; &gt; 
&gt; &gt; This is enabled only for debug builds I think. You&apos;d need an early return for release builds.
&gt; 
&gt; A minor point, but I would say the code is good and an early return should
&gt; not be added, because the code should assume the assertion is never reached.
&gt; That&apos;s the point of the asserts, after all. Unless GCC is giving
&gt; -Wreturn-type or -Wswitch warnings, which shouldn&apos;t occur in this case. You
&gt; wouldn&apos;t add an early return in GStreamerCapturer::play or
&gt; GStreamerCapturer::stop, would you? Of course not! This isn&apos;t any different.
&gt; 

Right, we missed the return.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitPermissionRequest.cpp:92
&gt; &gt; + * We have to call this function to specify if a request is allowed
&gt; &gt; + * using the @allowed parameter. Also we add the random data that
&gt; &gt; + * would be used as a hash salt in case the user did not allow the
&gt; &gt; + * origin for this kind of requests, using the
&gt; &gt; + * @salt parameter.
&gt; &gt; + */
&gt; 
&gt; Since: 2.22
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitPermissionRequest.cpp:93
&gt; &gt; +void webkit_permission_request_resolve_check(WebKitPermissionRequest *request, const gchar* mediaIdentifierHashSalt, gboolean allowed)
&gt; 
&gt; The mediaIdentifierHashSalt parameter is specific to
&gt; WebKitUserMediaPermissionRequest. Surely it shouldn&apos;t be in any
&gt; WebKitPermissionRequest functions? Why does it need to be part of the
&gt; interface, instead of specific to WebKitUserMediaPermissionRequest?
&gt; 
&gt; This causes more problems below, that would probably be best avoided here.
&gt; 

The browser needs to handle the salt per origin storage, like it does for the cookies, and being able to remove them at some point if the user wants.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitUserMediaPermissionRequest.cpp:57
&gt; &gt;  struct _WebKitUserMediaPermissionRequestPrivate {
&gt; &gt;      RefPtr&lt;UserMediaPermissionRequestProxy&gt; request;
&gt; &gt; +    RefPtr&lt;UserMediaPermissionCheckProxy&gt; checkRequest;
&gt; 
&gt; I think it would be a lot simpler to add a new
&gt; WebKitUserMediaPermissionCheckRequest subclass instead, that could subclass
&gt; WebKitUserMediaPermissionRequest, and then embedders would know not to
&gt; actually prompt the user. But maybe Carlos Garcia will have a better idea.
&gt; 

That was my preference initially but a couple of weeks ago after checking with Carlos he is more interested in reducing the changes to the API, so I decided to implement this option first. I still need to talk to him but he is even more interested in trying to add support for this without even the signal.

&gt; &gt;&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:449
&gt; &gt;&gt;&gt; +    }
&gt; &gt;&gt; 
&gt; &gt;&gt; What&apos;s the desired amount of random data you&apos;re after? Effectively you&apos;re getting 64 * 128 / 16 = 512 bits, but hashSaltSize doesn&apos;t help clarify that.
&gt; &gt;&gt; 
&gt; &gt;&gt; Assuming 512 bits, allow me to be nit-picky and recommend using std:array:
&gt; &gt;&gt; ```
&gt; &gt;&gt;     static constexpr size_t hashSaltSize = 512;
&gt; &gt;&gt;     std::array&lt;uint64_t, hashSaltSize / sizeof(uint64_t)&gt; randomData;
&gt; &gt;&gt;     cryptographicallyRandomValues(reinterpret_cast&lt;void*&gt;(randomData.data()), randomData.size() * sizeof(uint64_t));
&gt; &gt;&gt; 
&gt; &gt;&gt;     StringBuilder builder;
&gt; &gt;&gt;     builder.reserveCapacity(randomData.size() * sizeof(uint64_t));
&gt; &gt;&gt;     for (auto val : randomData)
&gt; &gt;&gt;         appendUnsigned64AsHex(val, builder);
&gt; &gt;&gt;     priv-&gt;mediaIdentifierHashSalt = builder.toString();
&gt; &gt;&gt; ```
&gt; &gt; 
&gt; &gt; Regarding the size, this is basically a default method we expect embedders to override and properly create a storage of hash salts per origin, which should be handled like cookies. My understanding is that the salt should be as big as to avoid to have many collisions per origin. But in this case we are storing one per webview because this is just the default testing method, it is just a matter of not having a fixed one and being able to even fingerprint this testing situation. I guess 128 is more than enough for this, that is why my goal was 128.
&gt; &gt; 
&gt; &gt; I think your calculation is not correct, basically the method chooses random hexadecimal values from a fixed array of size 16, that means 4 bits to choose a character per uint64_t number, so 16 hexadecimal characters per uint64_t, that is why we need 128 / 16 unint64_t elements to get 128 hexadecimal values.
&gt; 
&gt; WebKitWebView is surely not an appropriate place for this code? This all
&gt; comes down to the weird salt parameter in
&gt; webkit_permission_request_resolve_check().
&gt; 

Right, Carlos and me have a pending talk about this this week, we could use a parameter to the WebKitUserMediaPermissionRequest instead and try to reduce the modifications to the API.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1532
&gt; &gt; +     * This signal is emitted when WebKit wants to check the
&gt; &gt; +     * permissions already given to an origin by a user, such as
&gt; &gt; +     * allowing the browser to use the microphone or the
&gt; &gt; +     * camera. Usually the embedder does not ask the user to resolve
&gt; &gt; +     * the request but uses what the user answered previously, denying
&gt; &gt; +     * by default if the user did not give permissions specifically to
&gt; &gt; +     * this origin.
&gt; 
&gt; OK, I see what the motivation for adding this was, but I think it&apos;s a
&gt; misunderstanding of how WebKitPermissionRequest works. The browser doesn&apos;t
&gt; *have* to display a permission request to the user. E.g. for Epiphany we
&gt; always check whether the user has already made a decision, and just return
&gt; that if so. The difference is you want the browser to *never* display the
&gt; permission request. That&apos;s simple enough, since browsers need to manually
&gt; implement support for each new type of permission request: you can just
&gt; document that your new permission request type is not intended to be
&gt; displayed to the user. Right? Then we would not need
&gt; WebKitWebView::permission-check at all?
&gt;

Right, exactly, the user agent can decide about it because does not seem normative but chrome and safari are doing that, in the common case you don&apos;t want to ask the user and you want the webapps to try to use this call to get information about the system because of it. I guess you mean adding a new class, that is my preference too, I&apos;ll talk to Carlos about it and we will check if that solves all the issues.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1550
&gt; &gt; +     *
&gt; 
&gt; Since: 2.22
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitPermissionRequest.h:47
&gt; &gt; +    void (* resolve_check)  (WebKitPermissionRequest *request,
&gt; &gt; +                             const gchar* salt,
&gt; &gt; +                             gboolean allowed);
&gt; 
&gt; You can&apos;t add new vfuncs without removing padding, and for some reason
&gt; there&apos;s no padding. So it requires a soname bump (for both GTK and WPE).
&gt; Wow. If we&apos;ve ever had to do this before, it was before I started
&gt; contributing to WebKit. We&apos;ll need to discuss with Carlos Garcia, and take
&gt; the opportunity to add a bunch of new padding to WebKitWebView as well.
&gt; 

Right, I&apos;m talking to him about this, we did some weeks ago and this was kind of the first option but we have a pending talk this week.

&gt; But I&apos;m confused whether the salt is really an appropriate parameter to have
&gt; here. Like I said above, I think it really belongs in
&gt; WebKitUserMediaPermissionRequest, so we can probably avoid this.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebView.h:235
&gt; &gt; +    gboolean   (* permission_check)            (WebKitWebView               *web_view,
&gt; &gt; +                                                WebKitPermissionRequest     *permission_request);
&gt; 
&gt; As was mentioned on Matrix, you&apos;ll need to remove padding here too. Same for
&gt; the WPE header.

Right.

Thanks again for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426514</commentid>
    <comment_count>12</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-23 02:04:44 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #7)
&gt; (In reply to Alejandro G. Castro from comment #4)
&gt; &gt; Regarding the size, this is basically a default method we expect embedders
&gt; &gt; to override and properly create a storage of hash salts per origin, which
&gt; &gt; should be handled like cookies.
&gt; 
&gt; I already asked what exactly the purpose of these salts is for, since it
&gt; affects the API. One more question: is this something that WebKit could be
&gt; handling instead of the embedder?

AFAIK WebKit could be handling them if we provide API to control the storage, this is essentially a persistent cookie, I don&apos;t recall what are we currently doing about them. I guess we have the option to provide more code to handle this information, anyway the API could initially give the check permission class letting the embedder the responsibility and later add some new API object to handle its storage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426515</commentid>
    <comment_count>13</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-23 02:05:54 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #9)
&gt; Comment on attachment 340841 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=340841&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebView.h:235
&gt; &gt;&gt; +                                                WebKitPermissionRequest     *permission_request);
&gt; &gt; 
&gt; &gt; As was mentioned on Matrix, you&apos;ll need to remove padding here too. Same for the WPE header.
&gt; 
&gt; Oh, also it needs to go on the bottom, otherwise it&apos;ll break applications.
&gt; (Unless we do a soname bump.)

Right, I forgot about the class functions layout in gobject.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426516</commentid>
    <comment_count>14</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-23 02:09:23 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; (In reply to Michael Catanzaro from comment #6)
&gt; &gt; What exactly is the salt used for? What is being salted in the first place?
&gt; &gt; How is the browser supposed to know what it&apos;s supposed to salt?
&gt; 
&gt; Well, maybe I should have looked at the title of the bug. I assume each
&gt; media device is represented as a hash that gets exposed to the web. How
&gt; that&apos;s constructed, I&apos;m not sure, but you then salt it with some randomness.
&gt; The randomness used is different for every origin and thus fingerprinting is
&gt; avoided. Right?
&gt; 
&gt; &quot;How that&apos;s constructed, I&apos;m not sure&quot; is the problem there. Surely that
&gt; should be done in WebKit, not by browsers. And then storing the result is
&gt; another problem. Have you tried implementing this for Epiphany yet? It would
&gt; require a lot of changes in EphyPermissionsManager to store strings instead
&gt; of non-boolean values, right? Not sure about that.
&gt; 
&gt; We normally require either a client implementation somewhere before adding
&gt; new API, usually either MiniBrowser or Epiphany. In this case, we probably
&gt; should expect both, because we surely want the web API to work properly in
&gt; MiniBrowser, but MiniBrowser not a good test case for the GTK/WPE API as it
&gt; doesn&apos;t store permissions on disk. Seeing the implementations will help us
&gt; understand whether we have the API right.

Right, we will have to do that implementation, we could even remove all the default implementation (just send a fixed salt) and add it to the minibrowser as an example, now I doubt we care about the testing issues with fingerprinting.

Also regarding the information about this situation, I copied from the answer of your first comment:

Right, we will try to add some more information about it in the documentation. In summary we are trying to avoid fingerprinting using these calls. In case the user authorizes we have to warn them carefully and there are other options we can use but they are something we will address in the getUserMedia implementation. This salt controls the case where the user does not give authotization, in this case we have to avoid sending the same ID to every origin because it could be used to track the user, but they could be persistent to allow webpages to store previous configurations of the multimedia. The salt per origin allows the browser to support controlling the fingerprinting and using a persistent id to allow webpages to store preferences regarding the devices.

The salt is used to hash the device persistent ID int he system and generate an ID, this way we can have the same IDs for an origin storing the salt.

If you want to read more information check the spec here:

https://w3c.github.io/mediacapture-main/#enumerating-devices

And mainly the non-normative section about privacy and security considerations:

https://w3c.github.io/mediacapture-main/#privacy-and-security-considerations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426681</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-05-23 12:17:40 -0700</bug_when>
    <thetext>(In reply to Alejandro G. Castro from comment #14)
&gt; Right, we will have to do that implementation, we could even remove all the
&gt; default implementation (just send a fixed salt) and add it to the
&gt; minibrowser as an example, now I doubt we care about the testing issues with
&gt; fingerprinting.

Problem is the default implementation is not going to be used just for testing, it&apos;s going to be used for almost every application out there. Probably only Epiphany and a couple other apps like Eolie will take the time to override the default implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426852</commentid>
    <comment_count>16</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-05-23 21:06:32 -0700</bug_when>
    <thetext>I wonder whether there could be a way to split this patch in several pieces, for instance:
- Add enough support for mock capture to start running layout tests
- Add client API to allow/deny access to getUserMedia
- Add GStreamer capture

I also wonder whether the salt storage/deletion/management should not be made part of WebKit 2 code base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426884</commentid>
    <comment_count>17</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-24 00:53:25 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #16)
&gt; I wonder whether there could be a way to split this patch in several pieces,
&gt; for instance:
&gt; - Add enough support for mock capture to start running layout tests
&gt; - Add client API to allow/deny access to getUserMedia
&gt; - Add GStreamer capture
&gt; 

It is actually divided, this patch does not include getUserMedia support or API for allowing/denying access to getUserMedia, just the classes required for enumerateDevices.

We have two more patches almost ready: one for the getUserMedia support, adding the media source and test structure, etc. And the next one for the PeerConnection support.

The getUserMedia API to allow/deny is already upstream, because it was used in the previous webrtc implementation, this is just the check permissions part API used for the enumerate devices call.

&gt; I also wonder whether the salt storage/deletion/management should not be
&gt; made part of WebKit 2 code base.

Yep, that is something we are considering after the comments, it seems we could share part of the code and export the APIs. I&apos;ll ping you about that to agree about a solution in we think we should go in that direction.

Anyway, we will review the comments sent and have that meeting with Carlos about the API. After that we will check if we can move some parts of the patch to the getUserMedia patch to make it smaller.

Thanks for commenting!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426895</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-05-24 02:18:04 -0700</bug_when>
    <thetext>After reading the spec, I think it would be easier if we don&apos;t delegate the handling of the persistent permissions storage to the browser. It could be done by WebKit, as youenn suggested, similar to other persistent stroage handled by WebKit. We could have a manager that we can configure to set a patch where to store the cache, and a way to delete it (maybe this fits in WebsiteDataStore). Then, when a permission request is made we ask the manager for the permission for the given origin and use it without asking the user at all. If we don&apos;t have permissions stored we ask the user and store the result. I think this will be simpler, requires less API, and allows us to share more code among ports, but will also save a lot of code in the browser side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426966</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-05-24 10:14:22 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #18)
&gt; After reading the spec, I think it would be easier if we don&apos;t delegate the
&gt; handling of the persistent permissions storage to the browser. It could be
&gt; done by WebKit, as youenn suggested, similar to other persistent stroage
&gt; handled by WebKit. We could have a manager that we can configure to set a
&gt; patch where to store the cache, and a way to delete it (maybe this fits in
&gt; WebsiteDataStore). Then, when a permission request is made we ask the
&gt; manager for the permission for the given origin and use it without asking
&gt; the user at all. If we don&apos;t have permissions stored we ask the user and
&gt; store the result. I think this will be simpler, requires less API, and
&gt; allows us to share more code among ports, but will also save a lot of code
&gt; in the browser side.

I agree that we should store the salt and persistent permissions (if any) in WebsiteDataStore. This will allow us to remove UIClient.checkUserMediaPermissionForOrigin and simplify UserMediaPermissionRequestManagerProxy considerably.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426970</commentid>
    <comment_count>20</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-05-24 10:23:03 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #19)
&gt; (In reply to Carlos Garcia Campos from comment #18)
&gt; &gt; After reading the spec, I think it would be easier if we don&apos;t delegate the
&gt; &gt; handling of the persistent permissions storage to the browser. It could be
&gt; &gt; done by WebKit, as youenn suggested, similar to other persistent stroage
&gt; &gt; handled by WebKit. We could have a manager that we can configure to set a
&gt; &gt; patch where to store the cache, and a way to delete it (maybe this fits in
&gt; &gt; WebsiteDataStore). Then, when a permission request is made we ask the
&gt; &gt; manager for the permission for the given origin and use it without asking
&gt; &gt; the user at all. If we don&apos;t have permissions stored we ask the user and
&gt; &gt; store the result. I think this will be simpler, requires less API, and
&gt; &gt; allows us to share more code among ports, but will also save a lot of code
&gt; &gt; in the browser side.
&gt; 
&gt; I agree that we should store the salt and persistent permissions (if any) in
&gt; WebsiteDataStore. This will allow us to remove
&gt; UIClient.checkUserMediaPermissionForOrigin and simplify
&gt; UserMediaPermissionRequestManagerProxy considerably.

Thanks for the comments! I think we have an agreement about this. We will modify the patch accordingly to add the support WebKit.

We have also decided to rework the patchset, we are going to remove the capturers and realtimemediasource center from this patch as suggested by Youenn. That way we are not going to block in the enumerateDevices patch anymore to upload the getUserMedia patch implementation in a different patch.

This patch is going to depend on the other one, that way we can add more code in this patch just focused in the support of the salt and persistent permissions code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449250</commentid>
    <comment_count>21</comment_count>
      <attachid>346900</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-10 01:24:20 -0700</bug_when>
    <thetext>Created attachment 346900
WIP

This is WIP patch, we have landed the getUserMedia and the PeerConnection support in other patches to simplify this one, now it just includes the enumerateDevices implementation. After spending some time checking the options we have created this patch but we need help from Apple developers because we want to use multiport code and we don&apos;t know how Safari was using the API and what is more interesting to move forward with solution that we can share.

Main points about the patch:
   - The main idea for this patch is to create a PermissionManager that can handle the permissions in the engine, the data structures it uses tries to support the Permissions spec, it does not include any API implementation of that spec though, it could in future patches.

   - It implements the WebsiteDataStore API, the browser can list and delete the permissions using that API, so we are not adding new API to the engine. GTK Minibrowser allows to test that in the about:data. I wonder if this API would be enough if we want to use this at some point to handle other permissions in the engine, maybe we would need a more specific API because we want to handle removing just one of the permissions for one origin. But we can leave this for the future if we think we can use it.

   - It adds PermissionDescription because the MediaPermissionDescription adds the deviceID and we don&apos;t support requesting the permissions per device, not sure if Safari supports this.

   - It continues using the UIClient.checkUserMediaPermissionForOrigin for other ports (just GTK and WPE implement it) using an ifdef, that way we don&apos;t change the behaviour of other ports.

   - It handles the in-memory granted and denied requests cache in the UserMediaPermissionRequestManagerProxy with the PermissionManager instead of creating 2 vectors, this is for every port. It changes subtly the way it works for COCOA, before the 2 vectors cache was reset more frequently, even when reloading. Now it is more persistent and we don&apos;t check the FrameID, so any tab can use the permissions defined previously by the user. Is this ok for Safari?

   - It does not include disk persistence, should we add it directly in the engine? It has some security related information such as if the webpage can access the media devices, and probably we would have to change the schema in the future, maybe some API to let the browser to do job would be a better option? We could also leave this for future patches and make the change incremental.

Any review or opinion is welcome, we want to clarify these points for all the ports to make sure everyone is happy with the implementation or we should just be less ambitious and to go back to a port specific solution for this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449251</commentid>
    <comment_count>22</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-10 01:26:38 -0700</bug_when>
    <thetext>Adding alex to help with the definition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449260</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-10 06:12:24 -0700</bug_when>
    <thetext>(In reply to Alejandro G. Castro from comment #21)
&gt; Created attachment 346900 [details]
&gt; WIP
&gt; 
&gt; This is WIP patch, we have landed the getUserMedia and the PeerConnection
&gt; support in other patches to simplify this one, now it just includes the
&gt; enumerateDevices implementation. After spending some time checking the
&gt; options we have created this patch but we need help from Apple developers
&gt; because we want to use multiport code and we don&apos;t know how Safari was using
&gt; the API and what is more interesting to move forward with solution that we
&gt; can share.
&gt; 
&gt; Main points about the patch:
&gt;    - The main idea for this patch is to create a PermissionManager that can
&gt; handle the permissions in the engine, the data structures it uses tries to
&gt; support the Permissions spec, it does not include any API implementation of
&gt; that spec though, it could in future patches.
&gt; 
&gt;    - It implements the WebsiteDataStore API, the browser can list and delete
&gt; the permissions using that API, so we are not adding new API to the engine.
&gt; GTK Minibrowser allows to test that in the about:data. I wonder if this API
&gt; would be enough if we want to use this at some point to handle other
&gt; permissions in the engine, maybe we would need a more specific API because
&gt; we want to handle removing just one of the permissions for one origin. But
&gt; we can leave this for the future if we think we can use it.
&gt; 
&gt;    - It adds PermissionDescription because the MediaPermissionDescription
&gt; adds the deviceID and we don&apos;t support requesting the permissions per
&gt; device, not sure if Safari supports this.
&gt; 
  No, we don&apos;t store state per device ID.

&gt;    - It continues using the UIClient.checkUserMediaPermissionForOrigin for
&gt; other ports (just GTK and WPE implement it) using an ifdef, that way we
&gt; don&apos;t change the behaviour of other ports.
&gt; 
  Thanks!

&gt;    - It handles the in-memory granted and denied requests cache in the
&gt; UserMediaPermissionRequestManagerProxy with the PermissionManager instead of
&gt; creating 2 vectors, this is for every port. It changes subtly the way it
&gt; works for COCOA, before the 2 vectors cache was reset more frequently, even
&gt; when reloading. Now it is more persistent and we don&apos;t check the FrameID, so
&gt; any tab can use the permissions defined previously by the user. Is this ok
&gt; for Safari?
&gt; 
  I think this will be fine, but I will talk to Youenn about this when he is back in the office next week.

&gt;    - It does not include disk persistence, should we add it directly in the
&gt; engine? It has some security related information such as if the webpage can
&gt; access the media devices, and probably we would have to change the schema in
&gt; the future, maybe some API to let the browser to do job would be a better
&gt; option? We could also leave this for future patches and make the change
&gt; incremental.
&gt; 
  I agree that there are pros and cons, so let&apos;s leave it out for now at least.

&gt; Any review or opinion is welcome, we want to clarify these points for all
&gt; the ports to make sure everyone is happy with the implementation or we
&gt; should just be less ambitious and to go back to a port specific solution for
&gt; this case.
&gt;
  At a high level I think this is a good approach. I will take a closer look at the patch in the next day or so. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449669</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-13 10:14:44 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #23)
&gt; (In reply to Alejandro G. Castro from comment #21)
&gt; &gt; Created attachment 346900 [details]
&gt; &gt; WIP
&gt; &gt; 
&gt; &gt;    - It handles the in-memory granted and denied requests cache in the
&gt; &gt; UserMediaPermissionRequestManagerProxy with the PermissionManager instead of
&gt; &gt; creating 2 vectors, this is for every port. It changes subtly the way it
&gt; &gt; works for COCOA, before the 2 vectors cache was reset more frequently, even
&gt; &gt; when reloading. Now it is more persistent and we don&apos;t check the FrameID, so
&gt; &gt; any tab can use the permissions defined previously by the user. Is this ok
&gt; &gt; for Safari?
&gt; &gt; 
&gt;   I think this will be fine, but I will talk to Youenn about this when he is
&gt; back in the office next week.
&gt; 
  Youenn reminded me that we initially reset cached permission on reload but 
web developers complained about this during initial testing because it was 
confusing that users had to close the tab to reset state, so we definitely
*do* want to reset state on a page reload. 

  I agree that we don&apos;t need to check FrameID.

&gt; &gt;    - It does not include disk persistence, should we add it directly in the
&gt; &gt; engine? It has some security related information such as if the webpage can
&gt; &gt; access the media devices, and probably we would have to change the schema in
&gt; &gt; the future, maybe some API to let the browser to do job would be a better
&gt; &gt; option? We could also leave this for future patches and make the change
&gt; &gt; incremental.
&gt; &gt; 
&gt;   I agree that there are pros and cons, so let&apos;s leave it out for now at
&gt; least.
&gt; 
  After thinking about this, I do think that we want to be able to write user
media state to disk when appropriate. I don&apos;t *think* it poses more of a security
risk to have WebKit do this than to do it in the app. It will be fine to do this
in a followup patch.

&gt; &gt; Any review or opinion is welcome, we want to clarify these points for all
&gt; &gt; the ports to make sure everyone is happy with the implementation or we
&gt; &gt; should just be less ambitious and to go back to a port specific solution for
&gt; &gt; this case.
&gt; &gt;
&gt;   At a high level I think this is a good approach. I will take a closer look
&gt; at the patch in the next day or so. Thanks!
&gt;
 I have a few very minor nits, but I think this is a great improvement overall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449670</commentid>
    <comment_count>25</comment_count>
      <attachid>346900</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-13 10:15:03 -0700</bug_when>
    <thetext>Comment on attachment 346900
WIP

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:465
&gt; +    if (dataTypes.contains(WebsiteDataType::Permissions) &amp;&amp; m_permissionRequestManager) {

NIt: I would switch the order of comparisons here, it is much cheaper to null-check than to search the set.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:800
&gt; +    if (dataTypes.contains(WebsiteDataType::Permissions) &amp;&amp; m_permissionRequestManager) {

Ditto.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1094
&gt; +    if (dataTypes.contains(WebsiteDataType::Permissions) &amp;&amp; m_permissionRequestManager) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451551</commentid>
    <comment_count>26</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-20 01:20:40 -0700</bug_when>
    <thetext>
Thanks very much for the review!

(In reply to Eric Carlson from comment #24)
&gt; (In reply to Eric Carlson from comment #23)
&gt; &gt; (In reply to Alejandro G. Castro from comment #21)
&gt; &gt; &gt; Created attachment 346900 [details]
&gt; &gt; &gt; WIP
&gt; &gt; &gt; 
&gt; &gt; &gt;    - It handles the in-memory granted and denied requests cache in the
&gt; &gt; &gt; UserMediaPermissionRequestManagerProxy with the PermissionManager instead of
&gt; &gt; &gt; creating 2 vectors, this is for every port. It changes subtly the way it
&gt; &gt; &gt; works for COCOA, before the 2 vectors cache was reset more frequently, even
&gt; &gt; &gt; when reloading. Now it is more persistent and we don&apos;t check the FrameID, so
&gt; &gt; &gt; any tab can use the permissions defined previously by the user. Is this ok
&gt; &gt; &gt; for Safari?
&gt; &gt; &gt; 
&gt; &gt;   I think this will be fine, but I will talk to Youenn about this when he is
&gt; &gt; back in the office next week.
&gt; &gt; 
&gt;   Youenn reminded me that we initially reset cached permission on reload but 
&gt; web developers complained about this during initial testing because it was 
&gt; confusing that users had to close the tab to reset state, so we definitely
&gt; *do* want to reset state on a page reload. 
&gt; 
&gt;

Right, I understand, with this patch there is another option for developers to remove the permissions, namely using the WebsiteDataStore API, when testing the patch I was using about:data in the GTK Minibrowser which allows you to remove a permission for an origin or clear all of them. Anyway I&apos;ll add the reset on reload to avoid modifying the behaviour in that case.

Just one doubt, how does that reset when reloading work if the permissions are stored in the disk? Do you remove all the permissions in the disk when reloading or closing the browser?

&gt;   I agree that we don&apos;t need to check FrameID.
&gt; 
&gt; &gt; &gt;    - It does not include disk persistence, should we add it directly in the
&gt; &gt; &gt; engine? It has some security related information such as if the webpage can
&gt; &gt; &gt; access the media devices, and probably we would have to change the schema in
&gt; &gt; &gt; the future, maybe some API to let the browser to do job would be a better
&gt; &gt; &gt; option? We could also leave this for future patches and make the change
&gt; &gt; &gt; incremental.
&gt; &gt; &gt; 
&gt; &gt;   I agree that there are pros and cons, so let&apos;s leave it out for now at
&gt; &gt; least.
&gt; &gt; 
&gt;   After thinking about this, I do think that we want to be able to write user
&gt; media state to disk when appropriate. I don&apos;t *think* it poses more of a
&gt; security
&gt; risk to have WebKit do this than to do it in the app. It will be fine to do
&gt; this
&gt; in a followup patch.
&gt; 

Great, thanks for the comment, I agree, I&apos;ve checked other browsers use the general preferences json file in the home directory to store this. My main doubt here now is if we are stepping on browser&apos;s toes regarding how it wants to store the preferences in each system.

&gt; &gt; &gt; Any review or opinion is welcome, we want to clarify these points for all
&gt; &gt; &gt; the ports to make sure everyone is happy with the implementation or we
&gt; &gt; &gt; should just be less ambitious and to go back to a port specific solution for
&gt; &gt; &gt; this case.
&gt; &gt; &gt;
&gt; &gt;   At a high level I think this is a good approach. I will take a closer look
&gt; &gt; at the patch in the next day or so. Thanks!
&gt; &gt;
&gt;  I have a few very minor nits, but I think this is a great improvement
&gt; overall.

Thanks very much, I&apos;ll check the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451554</commentid>
    <comment_count>27</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-20 01:46:35 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #25)
&gt; Comment on attachment 346900 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346900&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:465
&gt; &gt; +    if (dataTypes.contains(WebsiteDataType::Permissions) &amp;&amp; m_permissionRequestManager) {
&gt; 
&gt; NIt: I would switch the order of comparisons here, it is much cheaper to
&gt; null-check than to search the set.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:800
&gt; &gt; +    if (dataTypes.contains(WebsiteDataType::Permissions) &amp;&amp; m_permissionRequestManager) {
&gt; 
&gt; Ditto.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1094
&gt; &gt; +    if (dataTypes.contains(WebsiteDataType::Permissions) &amp;&amp; m_permissionRequestManager) {
&gt; 
&gt; Ditto.

Right.

Thanks again for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451585</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-08-20 06:35:36 -0700</bug_when>
    <thetext>(In reply to Alejandro G. Castro from comment #26) 
&gt; Right, I understand, with this patch there is another option for developers
&gt; to remove the permissions, namely using the WebsiteDataStore API, when
&gt; testing the patch I was using about:data in the GTK Minibrowser which allows
&gt; you to remove a permission for an origin or clear all of them. Anyway I&apos;ll
&gt; add the reset on reload to avoid modifying the behaviour in that case.

Jumping into the middle of this discussion without the relevant background knowledge, so sorry if something I say here doesn&apos;t make sense:

I don&apos;t think we would want to expose this as WebsiteDataStore API, since that API is designed for storing website data, not permissions. To see example UI you can look at Epiphany -&gt; Preferences -&gt; Stored Data -&gt; Manage Personal Data. Not a good fit. Yes, it would be possible for clients to use it and construct an alternative UI for permission data types, but it&apos;s still just not a great fit.

For permissions, we would currently use a WebKitPolicyDecision, and delegate persistent storage of the permission to the browser. E.g. Epiphany will store the permissions in GSettings backed by GKeyfile storage. That doesn&apos;t mean it&apos;s what we have to do for WebRTC, but there should be a reason if we deviate from that pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451718</commentid>
    <comment_count>29</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-20 13:42:46 -0700</bug_when>
    <thetext>&gt; I don&apos;t think we would want to expose this as WebsiteDataStore API, since
&gt; that API is designed for storing website data, not permissions. To see
&gt; example UI you can look at Epiphany -&gt; Preferences -&gt; Stored Data -&gt; Manage
&gt; Personal Data. Not a good fit. Yes, it would be possible for clients to use
&gt; it and construct an alternative UI for permission data types, but it&apos;s still
&gt; just not a great fit.

WebsiteDataStore is currently the only way to tie user data with the concept of a browsing session, be it regular or ephemeral.
It is true that &quot;Epiphany -&gt; Preferences -&gt; Stored Data -&gt; Manage Personal Data&quot; might only want to expose some of the data types in WebsiteDataStore and some other UI would expose other kinds of WebsiteDataStore. That seems ok to me.

&gt; For permissions, we would currently use a WebKitPolicyDecision, and delegate
&gt; persistent storage of the permission to the browser. E.g. Epiphany will
&gt; store the permissions in GSettings backed by GKeyfile storage. That doesn&apos;t
&gt; mean it&apos;s what we have to do for WebRTC, but there should be a reason if we
&gt; deviate from that pattern.

Note that the plan is to store a per-origin UUID (to be used as a salt) if persistent access is granted.
Making the change would simplify apps as they would not need to duplicate code.
That might also help simplifying WebKit flow as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451734</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-20 14:19:45 -0700</bug_when>
    <thetext>@Michael - I agree with Youenn. The web API requires that device IDs must be unique per domain, and that they must persist across reloads when the user has persistent permission to use capture devices. 

If WebKit doesn&apos;t store the salt, we will require every application that uses WebKit will have store it and I fear that many will do it incorrectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451767</commentid>
    <comment_count>31</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-08-20 15:41:44 -0700</bug_when>
    <thetext>Apologies for the overly-long comment.

(In reply to Eric Carlson from comment #30)
&gt; @Michael - I agree with Youenn. The web API requires that device IDs must be
&gt; unique per domain, and that they must persist across reloads when the user
&gt; has persistent permission to use capture devices. 
&gt; 
&gt; If WebKit doesn&apos;t store the salt, we will require every application that
&gt; uses WebKit will have store it and I fear that many will do it incorrectly.

OK, that&apos;s what I was missing... now I understand the motivation for this. Hmmm. Well, it certainly makes sense to store the device ID in WebsiteDataStore, since it is website data.

I&apos;m not sure about storing permission to use it, though. Let&apos;s think about the existing API for permission requests.

 Question 1: If the browser has a user interface for managing permissions (Epiphany does not currently, but we ought to) then that interface should work the same for user media permissions as for other permissions, which seems important. E.g. say the browser sees a WebKitUserMediaPermissionRequest, prompts the user for permission, receives a &quot;yes&quot;, stores the result in the browser storage (that WebKit doesn&apos;t known about!) the same way it does for other permissions... and then the user opens the permissions dialog and changes the permission to deny. The browser author shouldn&apos;t need to know that special logic is required (open the WebsiteDataStore and delete a particular bit of WebsiteData... not very friendly). It should suffice to for the browser to just keep track of the changed permission, and respond with a No next time the permission request is requested.

 Question 2: If you use WebsiteDataStore to store the permission, how does the application implement the standard choice &quot;yes, grant the permission, but only this once, don&apos;t store it&quot;? The status quo when applications make permission decisions is that storage is handled by the application, so the simple use/ignore API of WebKitPermissionRequest is sufficient: WebKit never even knows whether the permission is stored or not, because the application handles that. So WebKit should still always create a permission request even if the device ID is stored, right? That way, browsers can reject the permission request even if it was previously accepted in the past. i.e. be sure that calling still webkit_permission_request_allow() means the request is allowed just once. The semantics of that should not change to allow future permission: that should require some new API.

So my first thought was: the presence of a device ID in the WebsiteDataStore should not imply permission to use it without first asking the client. That seems like it would solve all these issues. But then I looked at the patch... I see it adds a generic PermissionManager class to WebKit, and it looks like that was a lot of work to implement. Oh no! Well, having a PermissionManager in WebKit is not necessarily a bad thing, if it could obsolete existing browser permission managers. So I don&apos;t want to suggest that we absolutely cannot do this... but if we do, we should be careful. It should really totally obsolete the current browser-level permissions stores (e.g. EphyPermissionsManager), so we don&apos;t have separate permissions stores in the browser and in WebKit, and it should do this from the beginning so that we don&apos;t end up in a half-finished transition state:

 (a) It should handle all of WebKitGeolocationPermissionRequest, WebKitInstallMissingMediaPluginsPermissionRequest, and WebKitNotificationPermissionRequest, not just WebKitUserMediaPermissionRequest. 

 (b) What about permissions that WebKit itself does not know about? E.g. Epiphany needs to store whether credentials should be saved.  So the API would need to be designed such as to allow applications to store arbitrary types of permissions. (A time-tested solution is for the API to operate on strings, and define some constants for specific strings, while allowing the browser to create its own permissions by just using its own string.)
 
 (c) There should be some API for enumerating permissions, so might as well bite the bullet and add WebKitPermissionManager to the public API. The API is good enough if EphyPermissionManager can be replaced with it.

 (d) The WebKitPermissionRequest API ought to be extended to allow tri-state decisions (yes/no/never) or perhaps separate yes/no and remember/forget. (Current API users should not notice any difference, so nothing should be stored unless the application requests remember.) A simple solution would be to add webkit_permission_request_remember(), which if called would permit persistent storage.

I think with all of the above, it could replace browsers&apos; current permission stores. And without all of the above, we&apos;ll wind up with permissions in two different places, which would be quite undesirable.

We could also just as well throw up our hands and give up on the PermissionsManager, and just store the device IDs as website data while treating the permissions totally separately.

Alex, what do you think would be best...?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452088</commentid>
    <comment_count>32</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-21 07:26:29 -0700</bug_when>
    <thetext>Thanks for the extensive explanation Michael.

(In reply to Michael Catanzaro from comment #31)
&gt; Apologies for the overly-long comment.
&gt; 
&gt; (In reply to Eric Carlson from comment #30)
&gt; &gt; @Michael - I agree with Youenn. The web API requires that device IDs must be
&gt; &gt; unique per domain, and that they must persist across reloads when the user
&gt; &gt; has persistent permission to use capture devices. 
&gt; &gt; 
&gt; &gt; If WebKit doesn&apos;t store the salt, we will require every application that
&gt; &gt; uses WebKit will have store it and I fear that many will do it incorrectly.
&gt; 
&gt; OK, that&apos;s what I was missing... now I understand the motivation for this.
&gt; Hmmm. Well, it certainly makes sense to store the device ID in
&gt; WebsiteDataStore, since it is website data.
&gt; 
&gt; [...]
&gt; 
&gt; I think with all of the above, it could replace browsers&apos; current permission
&gt; stores. And without all of the above, we&apos;ll wind up with permissions in two
&gt; different places, which would be quite undesirable.
&gt; 
&gt; We could also just as well throw up our hands and give up on the
&gt; PermissionsManager, and just store the device IDs as website data while
&gt; treating the permissions totally separately.
&gt; 
&gt; Alex, what do you think would be best...?

When I said I was concerned about stepping on browsers toes with this patch I was basically talking about what you are explaining. I agree with your points and personally I would be less ambitious with the patch because it would mean a big refactor task even inside Epiphany, which could be great but we are currently focused in a different topic. I don&apos;t think spending time on replacing the whole permissions manager is something very interesting nowadays.

So my proposal considering what we have is: replace the PermissionManager with MediaPermissionCacheManager, that would refactor the cache we already have in the UserMediaPermissionRequestManagerProxy, which would make the code cleaner. That class would also handle the salt creation and management but will allow the browser to store it. That cache will be transient like the one we currently have there. Browser could check the PermissionCacheManager using the WebsiteDataStore, although reloading would be enough to remove the permissions/salt. Add the API to the GTK and WPE port for checking the permissions, that way the browser could decide to make it persistent and the engine would call that API if the PermissionCacheManager does not have the permission/salt for an origin, to check if the browser decided to store it in a previous session, if it doesn&apos;t it would generate it and deny access. I think Apple is currently doing this, they do not have the call for the enumerateDevices to the permissions cache but I think it is correct for all the ports to have it.

The check-permissions API would be a way to allow checking if the browser made the salt and permission persistent for that origin.

What do you think? Is this good enough for everyone?

   -</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452089</commentid>
    <comment_count>33</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-21 08:14:17 -0700</bug_when>
    <thetext>(In reply to Alejandro G. Castro from comment #32)
&gt; Thanks for the extensive explanation Michael.
&gt; 
&gt; (In reply to Michael Catanzaro from comment #31)
&gt; &gt; Apologies for the overly-long comment.
&gt; &gt; 
&gt; &gt; (In reply to Eric Carlson from comment #30)
&gt; &gt; &gt; @Michael - I agree with Youenn. The web API requires that device IDs must be
&gt; &gt; &gt; unique per domain, and that they must persist across reloads when the user
&gt; &gt; &gt; has persistent permission to use capture devices. 
&gt; &gt; &gt; 
&gt; &gt; &gt; If WebKit doesn&apos;t store the salt, we will require every application that
&gt; &gt; &gt; uses WebKit will have store it and I fear that many will do it incorrectly.
&gt; &gt; 
&gt; &gt; OK, that&apos;s what I was missing... now I understand the motivation for this.
&gt; &gt; Hmmm. Well, it certainly makes sense to store the device ID in
&gt; &gt; WebsiteDataStore, since it is website data.
&gt; &gt; 
&gt; &gt; [...]
&gt; &gt; 
&gt; &gt; I think with all of the above, it could replace browsers&apos; current permission
&gt; &gt; stores. And without all of the above, we&apos;ll wind up with permissions in two
&gt; &gt; different places, which would be quite undesirable.
&gt; &gt; 
&gt; &gt; We could also just as well throw up our hands and give up on the
&gt; &gt; PermissionsManager, and just store the device IDs as website data while
&gt; &gt; treating the permissions totally separately.
&gt; &gt; 
&gt; &gt; Alex, what do you think would be best...?
&gt; 
&gt; When I said I was concerned about stepping on browsers toes with this patch
&gt; I was basically talking about what you are explaining. I agree with your
&gt; points and personally I would be less ambitious with the patch because it
&gt; would mean a big refactor task even inside Epiphany, which could be great
&gt; but we are currently focused in a different topic. I don&apos;t think spending
&gt; time on replacing the whole permissions manager is something very
&gt; interesting nowadays.
&gt; 
  I agree with this, we aren&apos;t interested in replacing Safari&apos;s permission manager either.

&gt; So my proposal considering what we have is: replace the PermissionManager
&gt; with MediaPermissionCacheManager, that would refactor the cache we already
&gt; have in the UserMediaPermissionRequestManagerProxy, which would make the
&gt; code cleaner. That class would also handle the salt creation and management
&gt; but will allow the browser to store it. That cache will be transient like
&gt; the one we currently have there. 
&gt;
  I agree with this as well.

&gt; Browser could check the
&gt; PermissionCacheManager using the WebsiteDataStore, although reloading would
&gt; be enough to remove the permissions/salt. Add the API to the GTK and WPE
&gt; port for checking the permissions, that way the browser could decide to make
&gt; it persistent and the engine would call that API if the
&gt; PermissionCacheManager does not have the permission/salt for an origin, to
&gt; check if the browser decided to store it in a previous session, if it
&gt; doesn&apos;t it would generate it and deny access. 
&gt; 
  I was picturing something slightly different: 

  - when a page calls getUserMedia, WebKit *always* checks with the host application to see if it allows persistent access for the domain

  - if it does allow persistent access, WebKit looks for a stored salt in a cache file for that domain (in e.g.  WebsiteDataStore::resolvedMediaPermissionDirectory()). If there is no entry for that domain, it creates a salt and writes it to the cache file

  - if the host does not allow persistent access, it creates a new salt and deletes the cache file (if one exists)


&gt; I think Apple is currently
&gt; doing this, they do not have the call for the enumerateDevices to the
&gt; permissions cache but I think it is correct for all the ports to have it.
&gt; 
  We currently call Safari to check for persistent access and to get the salt. This requires Safari to always generate the salt, and to store the permission bit and the salt when the user grants/denies persistent access. I suspect that most non-browser host applications will either want to always prompt or never prompt, so I would rather have the logic for generating and optionally storing the salt in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452098</commentid>
    <comment_count>34</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-21 08:50:45 -0700</bug_when>
    <thetext>We talked with Eric about this morning.

We agreed we want to store the salt in WebSiteDataStore. Delegating the generation and storage to apps is not good since this is a getUserMedia implementation detail.
Also it should be handled like cookies, in particular removed when clearing cookies.

We need to store a boolean as well to remember the decision of persistent access.
Only storing the salt is not sufficient since we would clear the salt when clearing cookies.

Storing the boolean outside of WebsiteDataStore is consistent with other permission handling, that is probably the simple and easy path.
The downside is that apps that remove persistent access should also make sure to remove the salt at the same time and apps will probably forget to do that. We can probably live with that and find some mitigations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452131</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-21 09:48:24 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #34)
&gt; 
&gt; [...]
&gt; 
&gt; The downside is that apps that remove persistent access should also make
&gt; sure to remove the salt at the same time and apps will probably forget to do
&gt; that. We can probably live with that and find some mitigations.
&gt;
  If we *always* delete the salt for a domain when the user does not have persistent access as I suggest above, it won&apos;t matter much if an app doesn&apos;t remember to remove the salt when the permission changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452201</commentid>
    <comment_count>36</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-08-21 12:16:54 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #33)
&gt;   I was picturing something slightly different: 
&gt; 
&gt;   - when a page calls getUserMedia, WebKit *always* checks with the host
&gt; application to see if it allows persistent access for the domain
&gt; 
&gt;   - if it does allow persistent access, WebKit looks for a stored salt in a
&gt; cache file for that domain (in e.g. 
&gt; WebsiteDataStore::resolvedMediaPermissionDirectory()). If there is no entry
&gt; for that domain, it creates a salt and writes it to the cache file
&gt; 
&gt;   - if the host does not allow persistent access, it creates a new salt and
&gt; deletes the cache file (if one exists)

This seems like a good plan to me.

We would need a new API for the browser to hint to WebKit that the storage is persistent, since that&apos;s not currently possible via existing API (at least not for WPE/GTK). An example WPE/GTK API: webkit_permission_request_set_persistence_hint() or _set_is_persistent(). (We could add it to WebKitUserMediaPermissionRequest instead of WebKitPermissionRequest if we think it&apos;s not likely to be useful for other permission types -- probably not -- but it&apos;s so generic it&apos;s probably fine in the superclass?) We could avoid the need to add this new API if we instead always store the salt in the cache when permission is granted, and then only delete the cache file if permission is ever denied in the future. Either way would be OK.

(And just an implementation reminder: nothing should be written to disk in ephemeral mode.)

(In reply to Eric Carlson from comment #35)
&gt;   If we *always* delete the salt for a domain when the user does not have
&gt; persistent access as I suggest above, it won&apos;t matter much if an app doesn&apos;t
&gt; remember to remove the salt when the permission changes.

Because the salt will eventually be deleted when the user visits the website next and WebKit notices that permission is denied, right? So the salt can stick around indefinitely only so long as the user never visits the website again? That seems OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452237</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-21 13:36:48 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #36)
&gt; 
&gt; We would need a new API for the browser to hint to WebKit that the storage
&gt; is persistent, since that&apos;s not currently possible via existing API (at
&gt; least not for WPE/GTK). An example WPE/GTK API:
&gt; webkit_permission_request_set_persistence_hint() or _set_is_persistent().
&gt; (We could add it to WebKitUserMediaPermissionRequest instead of
&gt; WebKitPermissionRequest if we think it&apos;s not likely to be useful for other
&gt; permission types -- probably not -- but it&apos;s so generic it&apos;s probably fine
&gt; in the superclass?) 
&gt;
  We need the hash salt for enumerateDevices(), not getUserMedia(), so we need two requests. We currently have two on UIClient, decidePolicyForUserMediaPermissionRequest and checkUserMediaPermissionForOrigin, although both should be changed (decidePolicyForUserMediaPermissionRequest won&apos;t work for screen capture, and checkUserMediaPermissionForOrigin asks for the salt and the persistent access pref).


&gt; We could avoid the need to add this new API if we
&gt; instead always store the salt in the cache when permission is granted, and
&gt; then only delete the cache file if permission is ever denied in the future.
&gt; Either way would be OK.
&gt; 
  I would rather not add the new the API so there is one less thing the host app is required to get right.


&gt; (And just an implementation reminder: nothing should be written to disk in
&gt; ephemeral mode.)
&gt; 
  Absolutely!


&gt; (In reply to Eric Carlson from comment #35)
&gt; &gt;   If we *always* delete the salt for a domain when the user does not have
&gt; &gt; persistent access as I suggest above, it won&apos;t matter much if an app doesn&apos;t
&gt; &gt; remember to remove the salt when the permission changes.
&gt; 
&gt; Because the salt will eventually be deleted when the user visits the website
&gt; next and WebKit notices that permission is denied, right? So the salt can
&gt; stick around indefinitely only so long as the user never visits the website
&gt; again? 
&gt;
  Yes, exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453031</commentid>
    <comment_count>38</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-23 04:01:47 -0700</bug_when>
    <thetext>Thanks everyone for the proposals a comments! It has been very helpful.

(In reply to Eric Carlson from comment #33)
&gt;   I was picturing something slightly different: 
&gt; 
&gt;   - when a page calls getUserMedia, WebKit *always* checks with the host
&gt; application to see if it allows persistent access for the domain
&gt; 
&gt;   - if it does allow persistent access, WebKit looks for a stored salt in a
&gt; cache file for that domain (in e.g. 
&gt; WebsiteDataStore::resolvedMediaPermissionDirectory()). If there is no entry
&gt; for that domain, it creates a salt and writes it to the cache file
&gt; 
&gt;   - if the host does not allow persistent access, it creates a new salt and
&gt; deletes the cache file (if one exists)
&gt; 

I like this proposal from Eric for getUserMedia, this way we would leave the salt handling inside the engine, which makes a lot of sense because it is an implementation detail. Actually we could even not generate the salt until the enumerateDevices is called because we will be forced to check with the browser the permissions. The reason we need to always check with the browser for the enumerateDevices call is because the user could have changed the permission in the UI. Basically the call to enumerateDevices would be something like:

   - WebKit will *always* check with the host application for a call to enumerateDevices, actually we would have to remove the permissions cache vectors we have now in UserMediaPermissionRequestManagerProxy because there are situations where the user could have removed a permission in the UI of the browser but the vector we have is not updated, keeping a cache like this would mean adding API and I think the advantages are small. But checkUserMediaPermissionForOrigin would not request the salt to the browser, just the permission.
   - If the permission is granted get the salt from the salt storage or generate a new one if the user decided to remove it at some point.
   - If the permission is denied remove the salt from the storage if it is there and generate a new one, this way we don&apos;t even send the same list of device twice for the origins that do not have granted permissions.

All the steps are important because we could have a situation where the user granted the getUserMedia but reverted that in the UI of the browser, and later the same origin could request the enumerateDevices. In that case the engine would have a salt but must ask the browser to know the current permissions, and it would be ok to return different IDs considering the user did something to revert the permissions.

Also we will connect the cookies removal with the salt removal as proposed in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453073</commentid>
    <comment_count>39</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-23 08:58:36 -0700</bug_when>
    <thetext>IIUC, the proposed model allows implementing the Firefox/Chrome behavior, which is to expose devices and persist device IDs even if getUserMedia access is not persistently granted. While this behavior does not seem great to me, I can live with that, especially since the salt would be flushed with cookies.

The name of the callback should state its purpose which is to allow (or not) exposing capture devices by default to a given origin, not about persistent getUserMedia access. The choice for the app would be something like &apos;Always&apos; or &apos;AfterFirstCapture&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453427</commentid>
    <comment_count>40</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-24 04:28:32 -0700</bug_when>
    <thetext>Thanks for the comment!

(In reply to youenn fablet from comment #39)
&gt; IIUC, the proposed model allows implementing the Firefox/Chrome behavior,
&gt; which is to expose devices and persist device IDs even if getUserMedia
&gt; access is not persistently granted. While this behavior does not seem great
&gt; to me, I can live with that, especially since the salt would be flushed with
&gt; cookies.
&gt; 

It would not expose persistent IDs, using what Eric is proposing if the permission is not granted it would generate a new ID for every call to the enumerateDevices. And we will not send all the devices like we are doing right now, which if I understand correctly the spec I would say we should clarify it with the W3C working group or request a change because it says:

&quot; 2. If list-permission is not &quot;granted&quot;, let filteredList be a copy of resultList, and all its elements, where the label member is the empty string.&quot;

Not sure if there is a previous conversation about this but we are not sending all the elements. Anyway, this is out of the scope of this bug.

&gt; The name of the callback should state its purpose which is to allow (or not)
&gt; exposing capture devices by default to a given origin, not about persistent
&gt; getUserMedia access. The choice for the app would be something like &apos;Always&apos;
&gt; or &apos;AfterFirstCapture&apos;.

The summary of what I understand checking the spec in this situation is that we have to:
   1. If any of the local devices are attached to a live MediaStreamTrack we return granted without any other check.
   2. If there is no local device producing data check the device-info permission, defined in the permission spec. That device-info permission is basically updated when the user requests permission to use the media devices [1], and it says we have to revoke if we change the IDs which fits with the policy we are designing to reset the IDs when the user denies the access.

It does not say though we can not have a specific device-info value that the browser could update independently at any point, which I think it is the more flexible option, just that we have to update it when we have the permission granted for the media device. That means we can add API for deciding a policy for it, we could add something like:
   - decidePolicyForDeviceInfoPermissionForOrigin, which would request the browser permission manager that permission, the browser can decide to use the same or have a different value, or how to update it. Because we will always ask for it we just need a boolean because the next time we would ask and it is a browser call to create the UI to decide if it forever or just this time. This API will use a DeviceIDHashSaltStorage inside the engine and will just expose the WebsideDataStore API to check them and remove the hash salts.

Considering the browser controls the permission manager we can not ask for &apos;Always&apos; unless we would have a memory structure and API to reset it, and as I said I don&apos;t think we want to have a cache inside the engine for the permissions because it adds complexity and I don&apos;t see a clear advantage. If at some point we want to move the permission manager to the engine we would need a more complex plan checking all the implementations or creating a completely new API and objects, but I think it is out of the scope of what we want to do now with this bug.

[1] &quot;If result is &quot;granted&quot;, the UA MUST set the &quot;device-info&quot; permission to &quot;granted&quot; for this realm.&quot; Permissions spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453485</commentid>
    <comment_count>41</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-08-24 10:43:21 -0700</bug_when>
    <thetext>(In reply to Alejandro G. Castro from comment #40)
&gt; Thanks for the comment!
&gt; 
&gt; It would not expose persistent IDs, using what Eric is proposing if the
&gt; permission is not granted it would generate a new ID for every call to the
&gt; enumerateDevices. And we will not send all the devices like we are doing
&gt; right now, which if I understand correctly the spec I would say we should
&gt; clarify it with the W3C working group or request a change because it says:
&gt; 
  I agree that we don’t want device IDs to persist unless the user has given the domain persistent (“no prompt) access to capture devices. 

&gt; &quot; 2. If list-permission is not &quot;granted&quot;, let filteredList be a copy of
&gt; resultList, and all its elements, where the label member is the empty
&gt; string.&quot;
&gt; 
&gt; Not sure if there is a previous conversation about this but we are not
&gt; sending all the elements. Anyway, this is out of the scope of this bug.
&gt; 
  Yes, the pages does not have an active MediaStream or persistent access we don’t include device labels, but we also filter the list of devices to only include the number of capture devices that a “stock” machine has to avoid adding additional bits of fingerprinting. I talked with other browser engineers about this at the WebRTF face to face in Stockholm earlier this summer and some said they were considering adopting this behavior, but I am fine with making this a compile time option if other WebKit ports do not want to do this.


&gt; &gt; The name of the callback should state its purpose which is to allow (or not)
&gt; &gt; exposing capture devices by default to a given origin, not about persistent
&gt; &gt; getUserMedia access. The choice for the app would be something like &apos;Always&apos;
&gt; &gt; or &apos;AfterFirstCapture&apos;.
&gt; 
&gt; The summary of what I understand checking the spec in this situation is that
&gt; we have to:
&gt;    1. If any of the local devices are attached to a live MediaStreamTrack we
&gt; return granted without any other check.
&gt;
  We *always* have to ask the host application if the user has granted persistent access, because that will cause us to return persistent device IDs. I’m not sure that what you say conflicts with this, just adding it for clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453493</commentid>
    <comment_count>42</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 11:08:41 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #41)
&gt; (In reply to Alejandro G. Castro from comment #40)
&gt; &gt; Thanks for the comment!
&gt; &gt; 
&gt; &gt; It would not expose persistent IDs, using what Eric is proposing if the
&gt; &gt; permission is not granted it would generate a new ID for every call to the
&gt; &gt; enumerateDevices. And we will not send all the devices like we are doing
&gt; &gt; right now, which if I understand correctly the spec I would say we should
&gt; &gt; clarify it with the W3C working group or request a change because it says:

What I was meaning is that, since we are not tying the enumerateDevice decision to getUserMedia, an application could do:
- Always return true to persisting enumerateDevice info
- Prompt user for getUserMedia
In such a case, we would end up persisting IDs as long as a page is not being denied access to getUserMedia.
A potential countermeasure could be that the salt is made persistent only when a getUserMedia call actually succeeds for that origin.

In the same vein, we might want to ensure that third-party iframes do not get enumerateDevices information too easily. It makes sense to me to restrict full enumerateDevices access to iframes that are allowed to call successfully getUserMedia.

If origin A and origin B both have persistent access, an iframe B inside a top level page A cannot do a successful getUserMedia call except if page A allows getUserMedia on iframe B using feature policy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453823</commentid>
    <comment_count>43</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-27 01:22:45 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #41)
&gt; 
&gt; &gt; &gt; The name of the callback should state its purpose which is to allow (or not)
&gt; &gt; &gt; exposing capture devices by default to a given origin, not about persistent
&gt; &gt; &gt; getUserMedia access. The choice for the app would be something like &apos;Always&apos;
&gt; &gt; &gt; or &apos;AfterFirstCapture&apos;.
&gt; &gt; 
&gt; &gt; The summary of what I understand checking the spec in this situation is that
&gt; &gt; we have to:
&gt; &gt;    1. If any of the local devices are attached to a live MediaStreamTrack we
&gt; &gt; return granted without any other check.
&gt; &gt;
&gt;   We *always* have to ask the host application if the user has granted
&gt; persistent access, because that will cause us to return persistent device
&gt; IDs. I’m not sure that what you say conflicts with this, just adding it for
&gt; clarity.

Ok, I&apos;ll do that, I was understanding the spec added this situation where the engine does not ask because a live MediaStreamTrack means the user allowed and it is active, but it is true the user could have denied the device information. Maybe we can also tell W3C why they did add this.

Thanks for the comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453828</commentid>
    <comment_count>44</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-08-27 01:46:16 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #42)
&gt; (In reply to Eric Carlson from comment #41)
&gt; &gt; (In reply to Alejandro G. Castro from comment #40)
&gt; &gt; &gt; Thanks for the comment!
&gt; &gt; &gt; 
&gt; &gt; &gt; It would not expose persistent IDs, using what Eric is proposing if the
&gt; &gt; &gt; permission is not granted it would generate a new ID for every call to the
&gt; &gt; &gt; enumerateDevices. And we will not send all the devices like we are doing
&gt; &gt; &gt; right now, which if I understand correctly the spec I would say we should
&gt; &gt; &gt; clarify it with the W3C working group or request a change because it says:
&gt; 
&gt; What I was meaning is that, since we are not tying the enumerateDevice
&gt; decision to getUserMedia, an application could do:
&gt; - Always return true to persisting enumerateDevice info
&gt; - Prompt user for getUserMedia
&gt; In such a case, we would end up persisting IDs as long as a page is not
&gt; being denied access to getUserMedia.
&gt; A potential countermeasure could be that the salt is made persistent only
&gt; when a getUserMedia call actually succeeds for that origin.
&gt; 

I understand. We will consider how to control this situation.

&gt; In the same vein, we might want to ensure that third-party iframes do not
&gt; get enumerateDevices information too easily. It makes sense to me to
&gt; restrict full enumerateDevices access to iframes that are allowed to call
&gt; successfully getUserMedia.
&gt; 
&gt; If origin A and origin B both have persistent access, an iframe B inside a
&gt; top level page A cannot do a successful getUserMedia call except if page A
&gt; allows getUserMedia on iframe B using feature policy.

I agree, we added a vector of origins allowed inside the top level origin. On the other hand we have to check if some of this code should be in the permission manager, or we can control it inside the engine with the information we have.

Thanks again for the comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464389</commentid>
    <comment_count>45</comment_count>
      <attachid>351077</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-09-28 08:52:33 -0700</bug_when>
    <thetext>Created attachment 351077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464396</commentid>
    <comment_count>46</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-09-28 09:02:47 -0700</bug_when>
    <thetext>After the discussion we had I&apos;ve reworked the solution, this patch basically does not change anything regarding permissions, as we discussed the permission managers in the browsers control that. It does not change the behavior for COCOA, it is basically just for GTK+/WPE but adds code that could be used in the future by other ports to handle internally the hash salt as we have discussed. It also avoids adding new API for permissions, but adds a new type or permission request for glib. It adds API to control the directory where we store the hash salts, I want something with experience on that kind of API to review that part.

It adds a new class DeviceIdHashSaltStorage that generates and stores the device ids hash salts per origin. The hash salts are persistent when the webpage is not ephemeral, they use a new directory where a file is stored with the SecurityOrigin id as the name of the file and the hash salt as the content of the file.

The patch also adds a new type of data for the WebsiteDataStore. That way the users can call the WebsiteDataStore to show what origins have hash salt generated and remove them at some point. The DeviceHashSaltStorage class reads the information in disk when it is created and updates the disk storage when some modification is detected. It is also used as the delegate of the WebsiteDataStore API to remove the stored hash salts.

For the moment just GTK+ and WPE ports are using this class to generate the hash salts, other ports compile the storage but they do not use it because the change should be synchronized with the current solution in the browser if you have it. For GTK+ and WPE the patch adds code to the checkUserMediaPermissionForOrigin API implementation, it was empty until now for these ports, we did not need to add a new one because this API did not require the salt already. In this function we create an instance of a new class WebKitDeviceInfoPermissionRequest that implements the WebKitPermissionRequestIface interface, that allows the ports to use the current permission managers implemented in the embedders to handle this new kind of request the way they like it. The default implementation is deny.

The class WebKitDeviceInfoPermissionRequest takes care of contacting the DeviceIdHashSaltStorage and request/regenerate the hash salts accordingly. There is one addition to the general API to handle the location of the directory where the files are stored to make the hash salt persistent.

Thanks everyone for the comments and help!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464399</commentid>
    <comment_count>47</comment_count>
      <attachid>351080</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-09-28 09:06:15 -0700</bug_when>
    <thetext>Created attachment 351080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464401</commentid>
    <comment_count>48</comment_count>
      <attachid>351081</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-09-28 09:20:14 -0700</bug_when>
    <thetext>Created attachment 351081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464648</commentid>
    <comment_count>49</comment_count>
      <attachid>351081</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-28 17:51:35 -0700</bug_when>
    <thetext>Comment on attachment 351081
Patch

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

I&apos;ve just done a brief review of the new public API, and it looks sane to me. Finally I think this project is close to landing. ;)

Note the EWS are sad.

&gt; Source/WebKit/UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:79
&gt; +    return websiteDataDirectoryFileSystemRepresentation(BASE_DIRECTORY G_DIR_SEPARATOR_S &quot;deviceidhashsalts&quot;);

That&apos;s not the easiest to read.

&quot;devices&quot;?

&quot;deviceids&quot;?

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:114
&gt; +    // FIXME: store SecurityOrigins and made them available to the embedder.
&gt; +    UNUSED_PARAM(userMediaDocumentOrigin);
&gt; +    UNUSED_PARAM(topLevelDocumentOrigin);

Should be easy, we already have a WebKitSecurityOrigin type in the public API, so you can just make them properties of the WebKitDeviceInfoPermissionRequest, and add getter functions for convenience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464859</commentid>
    <comment_count>50</comment_count>
      <attachid>351081</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-09-30 09:34:17 -0700</bug_when>
    <thetext>Comment on attachment 351081
Patch

Patch looks to go in a good direction.
Some comments/questions below.

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

&gt; Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp:61
&gt; +    configuration-&gt;m_deviceIdHashSaltsStorageDirectory = legacyConfiguration.deviceIdHashSaltsStorageDirectory;

There should be no need for this field.
The WebsiteDataStore should be configured directly to set the path.
C API could be added to WKWebsiteDataStoreRef.

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:51
&gt; +    RefPtr&lt;DeviceIdHashSaltStorage&gt; deviceIdHashSaltStorage;

Can they be Ref&lt;&gt; or do we need to allow copy constructor?

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:108
&gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(UserMediaPermissionCheckProxy&amp; request, API::SecurityOrigin&amp; userMediaDocumentOrigin, API::SecurityOrigin&amp; topLevelDocumentOrigin, DeviceIdHashSaltStorage* deviceIdHashSaltStorage)

We probably only need topLevelDocumentOrigin here.
userMediaDocumentOrigin should either be equal to topLevelDocumentOrigin or be allowed using feature policy on behalf of the top level origin.

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:14
&gt; + *  You shpould have received a copy of the GNU Lesser General Public

s/shpould/should

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:42
&gt; +Ref&lt;DeviceIdHashSaltStorage&gt; DeviceIdHashSaltStorage::create(const String&amp; deviceIdHashSaltStorageDirectory, bool isPersistent)

String&amp;&amp;

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:52
&gt; +    , m_deviceIdHashSaltStorageDirectory(deviceIdHashSaltStorageDirectory)

WTFMove(...)
Maybe it should be made a const String so that it is left unchanged (we use it in different threads).

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:67
&gt; +        Vector&lt;String&gt; originPaths = FileSystem::listDirectory(m_deviceIdHashSaltStorageDirectory, &quot;*&quot;);

Use auto there.
We should also probably not use origins as filenames as it might easily leak origins in logging.
Instead, the file could have a random name and content would be origin+hashsalt, or use the deviceIdHashSalt as filename and origin as content.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:83
&gt; +            auto handle = FileSystem::openAndLockFile(originPath, FileSystem::FileOpenMode::Read);

This seems like code that is very similar to ResourceLoadStatisticsPersistentStorage code.
Maybe this code should be shared.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:108
&gt; +void DeviceIdHashSaltStorage::storeHashSaltToDisk(HashSaltForOrigin* hashSaltForOrigin)

HashSaltForOrigin&amp;

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:115
&gt; +        FileSystem::PlatformFileHandle handle = FileSystem::openFile(fileFullPath, FileSystem::FileOpenMode::Write);

Why do we lock above and not here?

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:119
&gt; +        int64_t writtenBytes = FileSystem::writeToFile(handle, hashSaltForOrigin-&gt;deviceIdentifierHashSaltForOrigin.utf8().data(), hashSaltForOrigin-&gt;deviceIdentifierHashSaltForOrigin.utf8().length());

s/int64_t/auto/
Maybe hashSaltForOrigin-&gt;deviceIdentifierHashSaltForOrigin.utf8().length() should be safe casted to an int to remove below static_cast.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:127
&gt; +String DeviceIdHashSaltStorage::getDeviceIdentifierHashSaltForOrigin(UserMediaPermissionCheckProxy* request)

UserMediaPermissionCheckProxy&amp; and below.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:140
&gt; +    m_deviceIdHashSaltforOrigin.removeIf([topLevelDocumentSecurityOriginData](auto&amp; keyAndValue) {

[&amp;topLevelDocumentSecurityOriginData]

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:179
&gt; +    if (deviceIdHashSaltforOrigin) {

if (auto device..) or better use HashMap::ensure and set deviceIdentifierHashSaltForOrigin/lastTimeUsed.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:205
&gt; +bool DeviceIdHashSaltStorage::deleteHashSaltFromDiskIfNeeded(HashSaltForOrigin* hashSaltForOrigin, bool needsRemoval)

HashSaltForOrigin&amp;.
I do not really understand the goal of needsRemoval.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:226
&gt; +        m_deviceIdHashSaltforOrigin.removeIf([this, copiedOrigins](auto&amp; keyAndValue) {

&amp;copiedOrigins

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:31
&gt; +#include &lt;WebCore/SecurityOriginHash.h&gt;

Probably do not need all these 3

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:48
&gt; +    HashSaltForOrigin(WebCore::SecurityOrigin&amp; securityOrigin, String&amp; deviceIdentifierHashSaltForOrigin)

Use SecurityOrigin&amp;&amp; and needs an indent.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:49
&gt; +        : topLevelDocumentSecurityOrigin(securityOrigin)

Could probably be renamed to securityOrigin since we only care about topLevel document security origins and should remove the other origin from UI process code.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:54
&gt; +        ~HashSaltForOrigin() = default;

Not needed.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:495
&gt; +    if (m_deviceIdHashSaltStorage &amp;&amp; dataTypes.contains(WebsiteDataType::DeviceIdHashSalt)) {

Nice to see all these.
API tests would be great.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1105
&gt; +    if (m_deviceIdHashSaltStorage &amp;&amp; dataTypes.contains(WebsiteDataType::DeviceIdHashSalt)) {

We also want to enforce that device id hash salts are removed if cookies are removed.
It could be let to applications but I feel like they will forget.
Adding an additional check here should do the trick.
It would be interesting to add a test also.
That could be let to a follow-up patch.

&gt; LayoutTests/ChangeLog:17
&gt; +        http/tests/media/media-stream/resources/enumerate-devices-source-id-frame.html

Nice to see that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465015</commentid>
    <comment_count>51</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-01 08:33:18 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #49)
&gt; Comment on attachment 351081 [details]
&gt; Patch
&gt;
&gt; [...]
&gt;
&gt; &gt; Source/WebKit/UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp:79
&gt; &gt; +    return websiteDataDirectoryFileSystemRepresentation(BASE_DIRECTORY G_DIR_SEPARATOR_S &quot;deviceidhashsalts&quot;);
&gt; 
&gt; That&apos;s not the easiest to read.
&gt; 
&gt; &quot;devices&quot;?
&gt; 
&gt; &quot;deviceids&quot;?
&gt; 

It could be hashsalts but maybe there could be other kind we would like to store in the future?

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:114
&gt; &gt; +    // FIXME: store SecurityOrigins and made them available to the embedder.
&gt; &gt; +    UNUSED_PARAM(userMediaDocumentOrigin);
&gt; &gt; +    UNUSED_PARAM(topLevelDocumentOrigin);
&gt; 
&gt; Should be easy, we already have a WebKitSecurityOrigin type in the public
&gt; API, so you can just make them properties of the
&gt; WebKitDeviceInfoPermissionRequest, and add getter functions for convenience.

Yeah, and we don&apos;t need the userMedia. I can try to remove that.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465659</commentid>
    <comment_count>52</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-02 10:28:09 -0700</bug_when>
    <thetext>
Thanks for the review!

(In reply to youenn fablet from comment #50)
&gt; Comment on attachment 351081 [details]
&gt; Patch
&gt; 
&gt; Patch looks to go in a good direction.
&gt; Some comments/questions below.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351081&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp:61
&gt; &gt; +    configuration-&gt;m_deviceIdHashSaltsStorageDirectory = legacyConfiguration.deviceIdHashSaltsStorageDirectory;
&gt; 
&gt; There should be no need for this field.
&gt; The WebsiteDataStore should be configured directly to set the path.
&gt; C API could be added to WKWebsiteDataStoreRef.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:51
&gt; &gt; +    RefPtr&lt;DeviceIdHashSaltStorage&gt; deviceIdHashSaltStorage;
&gt; 
&gt; Can they be Ref&lt;&gt; or do we need to allow copy constructor?
&gt; 

We can&apos;t because we need and empty value when instantiating the class.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:108
&gt; &gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(UserMediaPermissionCheckProxy&amp; request, API::SecurityOrigin&amp; userMediaDocumentOrigin, API::SecurityOrigin&amp; topLevelDocumentOrigin, DeviceIdHashSaltStorage* deviceIdHashSaltStorage)
&gt; 
&gt; We probably only need topLevelDocumentOrigin here.
&gt; userMediaDocumentOrigin should either be equal to topLevelDocumentOrigin or
&gt; be allowed using feature policy on behalf of the top level origin.
&gt; 

Right, and actually they are both in the proxy so we don&apos;t need them.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:14
&gt; &gt; + *  You shpould have received a copy of the GNU Lesser General Public
&gt; 
&gt; s/shpould/should
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:42
&gt; &gt; +Ref&lt;DeviceIdHashSaltStorage&gt; DeviceIdHashSaltStorage::create(const String&amp; deviceIdHashSaltStorageDirectory, bool isPersistent)
&gt; 
&gt; String&amp;&amp;
&gt; 

In this case the directory String is owned by the WebsiteDataStore and we want to keep it like that. That is why we pass a reference explaining we don&apos;t want to own that String, later the object makes a copy of the value in an attribute.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:52
&gt; &gt; +    , m_deviceIdHashSaltStorageDirectory(deviceIdHashSaltStorageDirectory)
&gt; 
&gt; WTFMove(...)

Ditto.

&gt; Maybe it should be made a const String so that it is left unchanged (we use
&gt; it in different threads).
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:67
&gt; &gt; +        Vector&lt;String&gt; originPaths = FileSystem::listDirectory(m_deviceIdHashSaltStorageDirectory, &quot;*&quot;);
&gt; 
&gt; Use auto there.

Right.

&gt; We should also probably not use origins as filenames as it might easily leak
&gt; origins in logging.
&gt; Instead, the file could have a random name and content would be
&gt; origin+hashsalt, or use the deviceIdHashSalt as filename and origin as
&gt; content.
&gt; 

Good point, I&apos;ll try to use the salt.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:83
&gt; &gt; +            auto handle = FileSystem::openAndLockFile(originPath, FileSystem::FileOpenMode::Read);
&gt; 
&gt; This seems like code that is very similar to
&gt; ResourceLoadStatisticsPersistentStorage code.
&gt; Maybe this code should be shared.
&gt; 

I&apos;ll check if we can share some code, both open files and read them but it seems in a different way.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:108
&gt; &gt; +void DeviceIdHashSaltStorage::storeHashSaltToDisk(HashSaltForOrigin* hashSaltForOrigin)
&gt; 
&gt; HashSaltForOrigin&amp;
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:115
&gt; &gt; +        FileSystem::PlatformFileHandle handle = FileSystem::openFile(fileFullPath, FileSystem::FileOpenMode::Write);
&gt; 
&gt; Why do we lock above and not here?
&gt; 

Initially I thought it was not necessary but I think we can do it in both places.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:119
&gt; &gt; +        int64_t writtenBytes = FileSystem::writeToFile(handle, hashSaltForOrigin-&gt;deviceIdentifierHashSaltForOrigin.utf8().data(), hashSaltForOrigin-&gt;deviceIdentifierHashSaltForOrigin.utf8().length());
&gt; 
&gt; s/int64_t/auto/
&gt; Maybe hashSaltForOrigin-&gt;deviceIdentifierHashSaltForOrigin.utf8().length()
&gt; should be safe casted to an int to remove below static_cast.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:127
&gt; &gt; +String DeviceIdHashSaltStorage::getDeviceIdentifierHashSaltForOrigin(UserMediaPermissionCheckProxy* request)
&gt; 
&gt; UserMediaPermissionCheckProxy&amp; and below.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:140
&gt; &gt; +    m_deviceIdHashSaltforOrigin.removeIf([topLevelDocumentSecurityOriginData](auto&amp; keyAndValue) {
&gt; 
&gt; [&amp;topLevelDocumentSecurityOriginData]
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:179
&gt; &gt; +    if (deviceIdHashSaltforOrigin) {
&gt; 
&gt; if (auto device..) or better use HashMap::ensure and set
&gt; deviceIdentifierHashSaltForOrigin/lastTimeUsed.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:205
&gt; &gt; +bool DeviceIdHashSaltStorage::deleteHashSaltFromDiskIfNeeded(HashSaltForOrigin* hashSaltForOrigin, bool needsRemoval)
&gt; 
&gt; HashSaltForOrigin&amp;.

Right

&gt; I do not really understand the goal of needsRemoval.
&gt; 

It is a way to use the initial condition for 2 things the check inside the function and returning a value for the lambda.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:226
&gt; &gt; +        m_deviceIdHashSaltforOrigin.removeIf([this, copiedOrigins](auto&amp; keyAndValue) {
&gt; 
&gt; &amp;copiedOrigins
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:31
&gt; &gt; +#include &lt;WebCore/SecurityOriginHash.h&gt;
&gt; 
&gt; Probably do not need all these 3
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:48
&gt; &gt; +    HashSaltForOrigin(WebCore::SecurityOrigin&amp; securityOrigin, String&amp; deviceIdentifierHashSaltForOrigin)
&gt; 
&gt; Use SecurityOrigin&amp;&amp; and needs an indent.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:49
&gt; &gt; +        : topLevelDocumentSecurityOrigin(securityOrigin)
&gt; 
&gt; Could probably be renamed to securityOrigin since we only care about
&gt; topLevel document security origins and should remove the other origin from
&gt; UI process code.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:54
&gt; &gt; +        ~HashSaltForOrigin() = default;
&gt; 
&gt; Not needed.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:495
&gt; &gt; +    if (m_deviceIdHashSaltStorage &amp;&amp; dataTypes.contains(WebsiteDataType::DeviceIdHashSalt)) {
&gt; 
&gt; Nice to see all these.
&gt; API tests would be great.
&gt; 

Yep.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1105
&gt; &gt; +    if (m_deviceIdHashSaltStorage &amp;&amp; dataTypes.contains(WebsiteDataType::DeviceIdHashSalt)) {
&gt; 
&gt; We also want to enforce that device id hash salts are removed if cookies are
&gt; removed.
&gt; It could be let to applications but I feel like they will forget.
&gt; Adding an additional check here should do the trick.
&gt; It would be interesting to add a test also.
&gt; That could be let to a follow-up patch.
&gt; 

Right, I&apos;ll add an or clause to make sure the cookies also remove the hash salts.

&gt; &gt; LayoutTests/ChangeLog:17
&gt; &gt; +        http/tests/media/media-stream/resources/enumerate-devices-source-id-frame.html
&gt; 
&gt; Nice to see that.

Yep.

Thanks again for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466083</commentid>
    <comment_count>53</comment_count>
      <attachid>351526</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-03 09:03:17 -0700</bug_when>
    <thetext>Created attachment 351526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466101</commentid>
    <comment_count>54</comment_count>
      <attachid>351531</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-03 10:19:33 -0700</bug_when>
    <thetext>Created attachment 351531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466104</commentid>
    <comment_count>55</comment_count>
      <attachid>351533</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-03 10:25:34 -0700</bug_when>
    <thetext>Created attachment 351533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466106</commentid>
    <comment_count>56</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-03 10:29:42 -0700</bug_when>
    <thetext>(In reply to Alejandro G. Castro from comment #55)
&gt; Created attachment 351533 [details]
&gt; Patch

We found it is important to store the modification time in disk for the persistency, which is an addition to the last patch. To allow adding support for other platforms and avoid delaying more the patch and making it bigger, I have uploaded this last patch without persitency and we will add the persistency later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466343</commentid>
    <comment_count>57</comment_count>
      <attachid>351591</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-04 01:56:42 -0700</bug_when>
    <thetext>Created attachment 351591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466421</commentid>
    <comment_count>58</comment_count>
      <attachid>351591</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-10-04 11:28:25 -0700</bug_when>
    <thetext>Comment on attachment 351591
Patch

Some style nits and questions below.

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

&gt; Source/WebCore/Modules/mediastream/MediaDevicesRequest.cpp:84
&gt; +#if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)

We might be able to remove all these #if since this is protected by MEDIA_STREAM compile flag.

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:63
&gt; +    WebKitDeviceInfoPermissionRequestPrivate* priv = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(request)-&gt;priv;

auto* and maybe auto&amp;?

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:70
&gt; +    auto salt = priv-&gt;deviceIdHashSaltStorage-&gt;getDeviceIdentifierHashSaltForOrigin(*priv-&gt;request.get());

s/.get()//
It would be nice to make _WebKitDeviceInfoPermissionRequestPrivate take Ref&lt;&gt;.
I do not see where priv is allocated/initialized, maybe this is a limitation of G API as you seem to point in your answer to my previous feedback.

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:85
&gt; +    auto salt = priv-&gt;deviceIdHashSaltStorage-&gt;regenerateDeviceIdentifierHashSaltForOrigin(*priv-&gt;request.get());

s/.get()//
In case of deny, should we have to regenerate the hash salt?
Should we instead just remove one if any and pass an empty salt?

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:108
&gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(UserMediaPermissionCheckProxy&amp; request, DeviceIdHashSaltStorage* deviceIdHashSaltStorage)

Can deviceIdHashSaltStorage be null? Can we pass a reference?

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:110
&gt; +    WebKitDeviceInfoPermissionRequest* deviceInfoPermissionRequest = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(g_object_new(WEBKIT_TYPE_DEVICE_INFO_PERMISSION_REQUEST, nullptr));

auto?

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:113
&gt; +    deviceInfoPermissionRequest-&gt;priv-&gt;deviceIdHashSaltStorage = deviceIdHashSaltStorage;

I am not sure how priv is created there but it would be nice to use Ref&lt;&gt;

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:23
&gt; +#include &quot;WebKitDeviceInfoPermissionRequest.h&quot;

Can we forward declare classes and remove these includes?

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:25
&gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(WebKit::UserMediaPermissionCheckProxy&amp;, WebKit::DeviceIdHashSaltStorage*);

Should it return a reference?

&gt; Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp:196
&gt; +        GRefPtr&lt;WebKitDeviceInfoPermissionRequest&gt; deviceInfoPermissionRequest = adoptGRef(webkitDeviceInfoPermissionRequestCreate(permissionRequest, page.websiteDataStore().deviceIdHashSaltStorage()));

auto

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:48
&gt; +    return deviceIdHashSaltStorage;

Change to one-liner.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:52
&gt; +    : m_queue(WorkQueue::create(&quot;com.apple.WebKit.DeviceIdHashSaltStorage&quot;))

The queue is probably not needed right now and will be useful when implementing the persistency?

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:56
&gt; +DeviceIdHashSaltStorage::~DeviceIdHashSaltStorage()

Use = default; ?

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:65
&gt; +String DeviceIdHashSaltStorage::regenerateDeviceIdentifierHashSaltForOrigin(UserMediaPermissionCheckProxy&amp; request)

I am not totally clear whether we need this one and below or not.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:80
&gt; +String DeviceIdHashSaltStorage::getDeviceIdentifierHashSaltForOrigin(SecurityOrigin&amp; documentOrigin)

We might need to make this async in the future as this might require loading data from the filesystem to initialize the map.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:95
&gt; +        return newHashSaltForOrigin;

or return std::make_unique...

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:96
&gt; +    });

s/});/}).iterator-&gt;value/ to simplify below calls.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:112
&gt; +        deviceIdHashSaltForOrigin.iterator-&gt;value-&gt;deviceIdentifierHashSaltForOrigin = WTFMove(deviceIdentifierHashSalt);

We can probably directly call m_deviceIdHashSaltforOrigin.set here instead of ensure.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:115
&gt; +void DeviceIdHashSaltStorage::getDeviceIdHashSaltOrigins(Function&lt;void(HashSet&lt;SecurityOriginData&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler)

s/Function/CompletionHandler/ here and below.
CompletionHandler asserts that it will be called at some point which is handy to catch errors.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:117
&gt; +    m_queue-&gt;dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {

I would simplify for now.
We can probably update m_deviceIdHashSaltforOrigin in the main thread and do file access from a background thread.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:135
&gt; +        copiedOrigins.uncheckedAppend(origin.isolatedCopy());

Might be able to write it as
copiedOrigins = origins.isolatedCopy() directly in the lambda

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:44
&gt; +        HashSaltForOrigin(WebCore::SecurityOrigin&amp; securityOrigin, String&amp;&amp; deviceIdentifierHashSaltForOrigin)

SecurityOrigin&amp;&amp;

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:58
&gt; +    void getDeviceIdHashSaltOrigins(Function&lt;void(HashSet&lt;WebCore::SecurityOriginData&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler);

s/ completionHandler// here and below

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:63
&gt; +    explicit DeviceIdHashSaltStorage();

No more need for explicit

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:65
&gt; +    String getDeviceIdentifierHashSaltForOrigin(WebCore::SecurityOrigin&amp; documentOrigin);

s/ documentOrigin//

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:99
&gt; +    , m_deviceIdHashSaltStorage(DeviceIdHashSaltStorage::create())

Do we need m_deviceIdHashSaltStorage to be ref-counted?
Can it be a simple DeviceIdHashSaltStorage or optional&lt;DeviceIdHashSaltStorage&gt;?

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:177
&gt; +        m_resolvedConfiguration.deviceIdHashSaltsStorageDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.deviceIdHashSaltsStorageDirectory);

Not needed right now, this might be left to the patch doing persistency.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:495
&gt; +        m_deviceIdHashSaltStorage-&gt;getDeviceIdHashSaltOrigins([callbackAggregator](HashSet&lt;WebCore::SecurityOriginData&gt;&amp;&amp; origins) {

Could use auto&amp;&amp; although this is debatable probably.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:820
&gt; +    if (m_deviceIdHashSaltStorage &amp;&amp; (dataTypes.contains(WebsiteDataType::DeviceIdHashSalt) || (dataTypes.contains(WebsiteDataType::Cookies)))) {

Nice!
An  API test would be nice if possible. Could be added later.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:166
&gt; +    DeviceIdHashSaltStorage* deviceIdHashSaltStorage() { return m_deviceIdHashSaltStorage.get(); }

Should ideally be a DeviceIdHashSaltStorage&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467687</commentid>
    <comment_count>59</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-10 04:32:20 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to youenn fablet from comment #58)
&gt; Comment on attachment 351591 [details]
&gt; Patch
&gt; 
&gt; Some style nits and questions below.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351591&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaDevicesRequest.cpp:84
&gt; &gt; +#if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)
&gt; 
&gt; We might be able to remove all these #if since this is protected by
&gt; MEDIA_STREAM compile flag.
&gt; 

Right, I&apos;ll try to do it.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:63
&gt; &gt; +    WebKitDeviceInfoPermissionRequestPrivate* priv = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(request)-&gt;priv;
&gt; 
&gt; auto* and maybe auto&amp;?
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:70
&gt; &gt; +    auto salt = priv-&gt;deviceIdHashSaltStorage-&gt;getDeviceIdentifierHashSaltForOrigin(*priv-&gt;request.get());
&gt; 
&gt; s/.get()//
&gt; It would be nice to make _WebKitDeviceInfoPermissionRequestPrivate take
&gt; Ref&lt;&gt;.
&gt; I do not see where priv is allocated/initialized, maybe this is a limitation
&gt; of G API as you seem to point in your answer to my previous feedback.
&gt; 


Right, yep, the gobject definition requests an empty value because the object is instantiated without it.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:85
&gt; &gt; +    auto salt = priv-&gt;deviceIdHashSaltStorage-&gt;regenerateDeviceIdentifierHashSaltForOrigin(*priv-&gt;request.get());
&gt; 
&gt; s/.get()//
&gt; In case of deny, should we have to regenerate the hash salt?
&gt; Should we instead just remove one if any and pass an empty salt?
&gt; 

Right, regenerate removes the current salt and creates a new one. We need a non-empty random salt or the result would be empty, if we change the spec to allow empty result we could do it. Anyway, it is regenerated every time when denied so it is just a random value, not useful for fingerprinting.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:108
&gt; &gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(UserMediaPermissionCheckProxy&amp; request, DeviceIdHashSaltStorage* deviceIdHashSaltStorage)
&gt; 
&gt; Can deviceIdHashSaltStorage be null? Can we pass a reference?
&gt; 

It can be null because the WebsiteDataStore can be created without configuration, not sure what situation is that. I&apos;ll make sure we control the situation in this class.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:110
&gt; &gt; +    WebKitDeviceInfoPermissionRequest* deviceInfoPermissionRequest = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(g_object_new(WEBKIT_TYPE_DEVICE_INFO_PERMISSION_REQUEST, nullptr));
&gt; 
&gt; auto?
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:113
&gt; &gt; +    deviceInfoPermissionRequest-&gt;priv-&gt;deviceIdHashSaltStorage = deviceIdHashSaltStorage;
&gt; 
&gt; I am not sure how priv is created there but it would be nice to use Ref&lt;&gt;
&gt; 

I tried already, we can&apos;t do it because the gobject first creates the object with null values, we would need an empty value for instantiating gobjects to use Refs.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:23
&gt; &gt; +#include &quot;WebKitDeviceInfoPermissionRequest.h&quot;
&gt; 
&gt; Can we forward declare classes and remove these includes?
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:25
&gt; &gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(WebKit::UserMediaPermissionCheckProxy&amp;, WebKit::DeviceIdHashSaltStorage*);
&gt; 
&gt; Should it return a reference?
&gt; 

AFAIK for the gobject types I don&apos;t think we can do it, probably we should do it for all the code in the project if we try this kind of refactors.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp:196
&gt; &gt; +        GRefPtr&lt;WebKitDeviceInfoPermissionRequest&gt; deviceInfoPermissionRequest = adoptGRef(webkitDeviceInfoPermissionRequestCreate(permissionRequest, page.websiteDataStore().deviceIdHashSaltStorage()));
&gt; 
&gt; auto
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:48
&gt; &gt; +    return deviceIdHashSaltStorage;
&gt; 
&gt; Change to one-liner.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:52
&gt; &gt; +    : m_queue(WorkQueue::create(&quot;com.apple.WebKit.DeviceIdHashSaltStorage&quot;))
&gt; 
&gt; The queue is probably not needed right now and will be useful when
&gt; implementing the persistency?
&gt; 

Right, we can add the code handling the queue later.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:56
&gt; &gt; +DeviceIdHashSaltStorage::~DeviceIdHashSaltStorage()
&gt; 
&gt; Use = default; ?
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:65
&gt; &gt; +String DeviceIdHashSaltStorage::regenerateDeviceIdentifierHashSaltForOrigin(UserMediaPermissionCheckProxy&amp; request)
&gt; 
&gt; I am not totally clear whether we need this one and below or not.
&gt; 

Right, it is an addition to structure the code but we can use just one.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:80
&gt; &gt; +String DeviceIdHashSaltStorage::getDeviceIdentifierHashSaltForOrigin(SecurityOrigin&amp; documentOrigin)
&gt; 
&gt; We might need to make this async in the future as this might require loading
&gt; data from the filesystem to initialize the map.
&gt; 

Right, we will add it in the persistency patch.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:95
&gt; &gt; +        return newHashSaltForOrigin;
&gt; 
&gt; or return std::make_unique...
&gt; 

Right, this code and other situations like this is divided because the persistency code was in the middle.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:96
&gt; &gt; +    });
&gt; 
&gt; s/});/}).iterator-&gt;value/ to simplify below calls.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:112
&gt; &gt; +        deviceIdHashSaltForOrigin.iterator-&gt;value-&gt;deviceIdentifierHashSaltForOrigin = WTFMove(deviceIdentifierHashSalt);
&gt; 
&gt; We can probably directly call m_deviceIdHashSaltforOrigin.set here instead
&gt; of ensure.
&gt; 

Right, actually this was part of the persistency code, so we can remove it now and add it later.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:115
&gt; &gt; +void DeviceIdHashSaltStorage::getDeviceIdHashSaltOrigins(Function&lt;void(HashSet&lt;SecurityOriginData&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler)
&gt; 
&gt; s/Function/CompletionHandler/ here and below.
&gt; CompletionHandler asserts that it will be called at some point which is
&gt; handy to catch errors.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:117
&gt; &gt; +    m_queue-&gt;dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
&gt; 
&gt; I would simplify for now.
&gt; We can probably update m_deviceIdHashSaltforOrigin in the main thread and do
&gt; file access from a background thread.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:135
&gt; &gt; +        copiedOrigins.uncheckedAppend(origin.isolatedCopy());
&gt; 
&gt; Might be able to write it as
&gt; copiedOrigins = origins.isolatedCopy() directly in the lambda
&gt; 

Right, actually we don&apos;t need this if we remove the queue.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:44
&gt; &gt; +        HashSaltForOrigin(WebCore::SecurityOrigin&amp; securityOrigin, String&amp;&amp; deviceIdentifierHashSaltForOrigin)
&gt; 
&gt; SecurityOrigin&amp;&amp;
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:58
&gt; &gt; +    void getDeviceIdHashSaltOrigins(Function&lt;void(HashSet&lt;WebCore::SecurityOriginData&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler);
&gt; 
&gt; s/ completionHandler// here and below
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:63
&gt; &gt; +    explicit DeviceIdHashSaltStorage();
&gt; 
&gt; No more need for explicit
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:65
&gt; &gt; +    String getDeviceIdentifierHashSaltForOrigin(WebCore::SecurityOrigin&amp; documentOrigin);
&gt; 
&gt; s/ documentOrigin//
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:99
&gt; &gt; +    , m_deviceIdHashSaltStorage(DeviceIdHashSaltStorage::create())
&gt; 
&gt; Do we need m_deviceIdHashSaltStorage to be ref-counted?
&gt; Can it be a simple DeviceIdHashSaltStorage or
&gt; optional&lt;DeviceIdHashSaltStorage&gt;?
&gt; 

It can&apos;t because WebsiteDataStore returns references to the DeviceIdHashSaltStorage, the reference is stored in the request until it is used to generate the hash salts.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:177
&gt; &gt; +        m_resolvedConfiguration.deviceIdHashSaltsStorageDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.deviceIdHashSaltsStorageDirectory);
&gt; 
&gt; Not needed right now, this might be left to the patch doing persistency.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:495
&gt; &gt; +        m_deviceIdHashSaltStorage-&gt;getDeviceIdHashSaltOrigins([callbackAggregator](HashSet&lt;WebCore::SecurityOriginData&gt;&amp;&amp; origins) {
&gt; 
&gt; Could use auto&amp;&amp; although this is debatable probably.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:820
&gt; &gt; +    if (m_deviceIdHashSaltStorage &amp;&amp; (dataTypes.contains(WebsiteDataType::DeviceIdHashSalt) || (dataTypes.contains(WebsiteDataType::Cookies)))) {
&gt; 
&gt; Nice!
&gt; An  API test would be nice if possible. Could be added later.
&gt; 

Right, I&apos;ll add a new case in the API test I already added.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:166
&gt; &gt; +    DeviceIdHashSaltStorage* deviceIdHashSaltStorage() { return m_deviceIdHashSaltStorage.get(); }
&gt; 
&gt; Should ideally be a DeviceIdHashSaltStorage&amp;

I agree, but like in the case of the storageManager we need to send references to other classes and it can be null in some situations, that makes RefPtr the best option.

Thanks again for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467692</commentid>
    <comment_count>60</comment_count>
      <attachid>351952</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-10 04:41:51 -0700</bug_when>
    <thetext>Created attachment 351952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467724</commentid>
    <comment_count>61</comment_count>
      <attachid>351952</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-10-10 08:44:57 -0700</bug_when>
    <thetext>Comment on attachment 351952
Patch

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

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:35
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Some of these includes are not needed right now.
WTFString.h is probably already included in FileSystem.h or StrginBuilder.h

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:50
&gt; +String DeviceIdHashSaltStorage::getDeviceIdHashSaltForOrigin(UserMediaPermissionCheckProxy&amp; request)

s/getDeviceIdHashSaltForOrigin/deviceIdHashSaltForOrigin/
Ditto below.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:67
&gt; +String DeviceIdHashSaltStorage::getDeviceIdHashSaltForOrigin(SecurityOrigin&amp; documentOrigin)

can it return a const String&amp;

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:95
&gt; +    RunLoop::main().dispatch([origins = WTFMove(origins), completionHandler = WTFMove(completionHandler)]() mutable {

For now, we are only main thread based, so we can directly call completionHandler.
If we start do these things in a background thread, we might need to isolate copy origins.

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:106
&gt; +    RunLoop::main().dispatch(WTFMove(completionHandler));

completionHandler() for now?

&gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:65
&gt; +    String getDeviceIdHashSaltForOrigin(WebCore::SecurityOrigin&amp;);

I wonder whether we should not expose directly this one and not the one taking a UserMediaPermissionCheckProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467725</commentid>
    <comment_count>62</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-10-10 08:48:41 -0700</bug_when>
    <thetext>v&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:108
&gt; &gt; &gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(UserMediaPermissionCheckProxy&amp; request, DeviceIdHashSaltStorage* deviceIdHashSaltStorage)
&gt; &gt; 
&gt; &gt; Can deviceIdHashSaltStorage be null? Can we pass a reference?
&gt; &gt; 

&gt; It can be null because the WebsiteDataStore can be created without configuration, not
&gt; sure what situation is that. I&apos;ll make sure we control the situation in this class.

I wonder whether in that case we could not create a default DeviceIdHashSaltStorage that would not store persistently the hashes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467985</commentid>
    <comment_count>63</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-11 02:36:44 -0700</bug_when>
    <thetext>
Thanks for the review!

(In reply to youenn fablet from comment #61)
&gt; Comment on attachment 351952 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351952&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:35
&gt; &gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Some of these includes are not needed right now.
&gt; WTFString.h is probably already included in FileSystem.h or StrginBuilder.h
&gt; 

Right, leftovers from the persistence part of the patch.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:50
&gt; &gt; +String DeviceIdHashSaltStorage::getDeviceIdHashSaltForOrigin(UserMediaPermissionCheckProxy&amp; request)
&gt; 
&gt; s/getDeviceIdHashSaltForOrigin/deviceIdHashSaltForOrigin/
&gt; Ditto below.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:67
&gt; &gt; +String DeviceIdHashSaltStorage::getDeviceIdHashSaltForOrigin(SecurityOrigin&amp; documentOrigin)
&gt; 
&gt; can it return a const String&amp;
&gt; 

I&apos;ll try it, setUserMediaAccessInfo does not add the const but maybe compiler can solve it.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:95
&gt; &gt; +    RunLoop::main().dispatch([origins = WTFMove(origins), completionHandler = WTFMove(completionHandler)]() mutable {
&gt; 
&gt; For now, we are only main thread based, so we can directly call
&gt; completionHandler.
&gt; If we start do these things in a background thread, we might need to isolate
&gt; copy origins.
&gt; 

Unfourtunately we can&apos;t, the WebsiteDataStore call aggregator is thread sensitive code and we have to make sure it runs in the main one. Every class implementing it is doing it, even if we don&apos;t use the queue. I did a small test and we get inmediate crashes.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.cpp:106
&gt; &gt; +    RunLoop::main().dispatch(WTFMove(completionHandler));
&gt; 
&gt; completionHandler() for now?
&gt; 

Ditto.

&gt; &gt; Source/WebKit/UIProcess/DeviceIdHashSaltStorage.h:65
&gt; &gt; +    String getDeviceIdHashSaltForOrigin(WebCore::SecurityOrigin&amp;);
&gt; 
&gt; I wonder whether we should not expose directly this one and not the one
&gt; taking a UserMediaPermissionCheckProxy.


Right, we can remove the other one and force the caller to get the SecurityOrigin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467986</commentid>
    <comment_count>64</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-11 02:38:55 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #62)
&gt; v&gt; &gt;
&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:108
&gt; &gt; &gt; &gt; +WebKitDeviceInfoPermissionRequest* webkitDeviceInfoPermissionRequestCreate(UserMediaPermissionCheckProxy&amp; request, DeviceIdHashSaltStorage* deviceIdHashSaltStorage)
&gt; &gt; &gt; 
&gt; &gt; &gt; Can deviceIdHashSaltStorage be null? Can we pass a reference?
&gt; &gt; &gt; 
&gt; 
&gt; &gt; It can be null because the WebsiteDataStore can be created without configuration, not
&gt; &gt; sure what situation is that. I&apos;ll make sure we control the situation in this class.
&gt; 
&gt; I wonder whether in that case we could not create a default
&gt; DeviceIdHashSaltStorage that would not store persistently the hashes?

This could be a good option to try to avoid the pointers, I can try this in a follow-up patch.

Thanks the suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467988</commentid>
    <comment_count>65</comment_count>
      <attachid>352030</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-10-11 02:47:24 -0700</bug_when>
    <thetext>Created attachment 352030
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467992</commentid>
    <comment_count>66</comment_count>
      <attachid>352030</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-11 03:26:59 -0700</bug_when>
    <thetext>Comment on attachment 352030
Patch for landing

Clearing flags on attachment: 352030

Committed r237031: &lt;https://trac.webkit.org/changeset/237031&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467993</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-11 03:27:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467994</commentid>
    <comment_count>68</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-11 03:28:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/45189218&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480166</commentid>
    <comment_count>69</comment_count>
      <attachid>352030</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-11-19 01:07:53 -0800</bug_when>
    <thetext>Comment on attachment 352030
Patch for landing

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

I&apos;m sorry to be late here, but I have a few comments. All the new API here was added without updating the documentation files and without adding new heqaders to the main one. Please remember https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:45
&gt; + * Since: 2.22

2.24

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:64
&gt; +    auto&amp; priv = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(request)-&gt;priv;

auto*

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:84
&gt; +    auto&amp; priv = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(request)-&gt;priv;

auto*

&gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:27
&gt; +typedef struct _WebKitDeviceInfoPermissionRequest WebKitDeviceInfoPermissionRequest;
&gt; +
&gt; +namespace WebKit {
&gt; +class DeviceIdHashSaltStorage;
&gt; +};

We normally just include the required headers in API private headers.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:740
&gt; +        // We have to remove the hash salts when cookies are removed.
&gt; +        auto dataTypes = webkit_website_data_get_types(data);
&gt; +        if (dataTypes &amp; WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT)
&gt; +            dataTypes = static_cast&lt;WebKitWebsiteDataTypes&gt;(dataTypes | WEBKIT_WEBSITE_DATA_COOKIES);

I think this should be done by WebsiteDataStore in cross-platform code.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitDeviceInfoPermissionRequest.h:59
&gt; +webkit_device_info_permission_request_get_type    (void);

Extra spaces between function name and (

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebsiteData.h:47
&gt; + * @WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT: Hash salt used to generate the device ids used by webpages.

Since 2.24

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebsiteData.h:47
&gt; + * @WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT: Hash salt used to generate the device ids used by webpages.

Since 2.24

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:66
&gt; +        const char* enumerateDevicesHTML = &quot;&lt;html&gt;&lt;body onload=\&quot;navigator.mediaDevices.enumerateDevices().then(function(devices) { document.title = &apos;Finished&apos;; })\&quot;&gt;&lt;/body&gt;&lt;/html&gt;&quot;;

static

&gt; Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:53
&gt; +    WebKitSettings* webkitSettings = webkit_settings_new();
&gt; +    webkit_settings_set_enable_media_stream(webkitSettings, TRUE);

Do we really want this for all the tests? I think tests needing this should enable this setting themselves.

&gt; Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:59
&gt; +        &quot;settings&quot;, webkitSettings,

Settings are leaked, you should unref after g_object_new.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480171</commentid>
    <comment_count>70</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-11-19 01:16:49 -0800</bug_when>
    <thetext>Committed r238371: &lt;https://trac.webkit.org/changeset/238371&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480180</commentid>
    <comment_count>71</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2018-11-19 02:58:41 -0800</bug_when>
    <thetext>Thanks for the comments Carlos! I&apos;ll fix them in a follow-up pach.

(In reply to Carlos Garcia Campos from comment #69)
&gt; Comment on attachment 352030 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=352030&amp;action=review
&gt; 
&gt; I&apos;m sorry to be late here, but I have a few comments. All the new API here
&gt; was added without updating the documentation files and without adding new
&gt; heqaders to the main one. Please remember
&gt; https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:45
&gt; &gt; + * Since: 2.22
&gt; 
&gt; 2.24
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:64
&gt; &gt; +    auto&amp; priv = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(request)-&gt;priv;
&gt; 
&gt; auto*
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:84
&gt; &gt; +    auto&amp; priv = WEBKIT_DEVICE_INFO_PERMISSION_REQUEST(request)-&gt;priv;
&gt; 
&gt; auto*
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequestPrivate.h:27
&gt; &gt; +typedef struct _WebKitDeviceInfoPermissionRequest WebKitDeviceInfoPermissionRequest;
&gt; &gt; +
&gt; &gt; +namespace WebKit {
&gt; &gt; +class DeviceIdHashSaltStorage;
&gt; &gt; +};
&gt; 
&gt; We normally just include the required headers in API private headers.
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:740
&gt; &gt; +        // We have to remove the hash salts when cookies are removed.
&gt; &gt; +        auto dataTypes = webkit_website_data_get_types(data);
&gt; &gt; +        if (dataTypes &amp; WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT)
&gt; &gt; +            dataTypes = static_cast&lt;WebKitWebsiteDataTypes&gt;(dataTypes | WEBKIT_WEBSITE_DATA_COOKIES);
&gt; 
&gt; I think this should be done by WebsiteDataStore in cross-platform code.
&gt; 

Unfortunately we can&apos;t because in this method we are doing a filtering before calling inside the websiteDataStore. We could try to analyze if there is a better way to do all the method in general.

&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitDeviceInfoPermissionRequest.h:59
&gt; &gt; +webkit_device_info_permission_request_get_type    (void);
&gt; 
&gt; Extra spaces between function name and (
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebsiteData.h:47
&gt; &gt; + * @WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT: Hash salt used to generate the device ids used by webpages.
&gt; 
&gt; Since 2.24
&gt; 

Right.

&gt; &gt; Source/WebKit/UIProcess/API/wpe/WebKitWebsiteData.h:47
&gt; &gt; + * @WEBKIT_WEBSITE_DATA_DEVICE_ID_HASH_SALT: Hash salt used to generate the device ids used by webpages.
&gt; 
&gt; Since 2.24
&gt; 

Right.


&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:66
&gt; &gt; +        const char* enumerateDevicesHTML = &quot;&lt;html&gt;&lt;body onload=\&quot;navigator.mediaDevices.enumerateDevices().then(function(devices) { document.title = &apos;Finished&apos;; })\&quot;&gt;&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; 
&gt; static
&gt; 

Right.

&gt; &gt; Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:53
&gt; &gt; +    WebKitSettings* webkitSettings = webkit_settings_new();
&gt; &gt; +    webkit_settings_set_enable_media_stream(webkitSettings, TRUE);
&gt; 
&gt; Do we really want this for all the tests? I think tests needing this should
&gt; enable this setting themselves.
&gt; 

Right.

&gt; &gt; Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:59
&gt; &gt; +        &quot;settings&quot;, webkitSettings,
&gt; 
&gt; Settings are leaked, you should unref after g_object_new.

This was already fixed here:

https://trac.webkit.org/changeset/237795/webkit

Thanks again for the review!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340841</attachid>
            <date>2018-05-21 03:10:36 -0700</date>
            <delta_ts>2018-08-10 01:24:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20180521121034.patch</filename>
            <type>text/plain</type>
            <size>119632</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzg1ZGQ2MWFiNzU1YTVk
MDQ5YjMzM2JjYjJjZTlmMGIzNTlhOTc2NC4uNGNjYjRmNDNjNzU2MzZjOTVmOWViZGU5ZWY2ZGIz
MGE3ZTliNDYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDE4LTA1LTE4ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPiBhbmQgVGhpYmF1bHQgU2F1bmllciAg
PHRzYXVuaWVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBBZGQgbWVkaWFEZXZp
Y2VzLmVudW1lcmF0ZURldmljZXMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1NzYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2UgYXJlIGFkZGluZyBhbGwgdGhlIHJlcXVpcmVkIGNsYXNz
ZXMgdG8gbWFrZSB0aGUKKyAgICAgICAgZW51bWVyYXRlRGV2aWNlcyB3b3JrLCB0aGF0IG1lYW5z
IG91ciBvd24KKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyBmb3Ig
dGhlIHBsYXRmb3JtLCB0aGUKKyAgICAgICAgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIs
IHRoZSBhdWRpby92aWRlbyBjYXB0dXJlcnMgYW5kIHRoZWlyCisgICAgICAgIHJlc3BlY3RpdmUg
YXVkaW8vdmlkZW8gc291cmNlcy4gV2UgYXJlIHVzaW5nIHRoZSBHc3REZXZpY2VNb25pdG9yCisg
ICAgICAgIG1vbml0b3IgdG8gcmVxdWVzdCB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3lzdGVt
LgorCisgICAgICAgIFVuc2tpcHBlZCB0aGUgcmVsZXZhbnQgdGVzdHMgZm9yIHRoZSBlbnVtZXJh
dGVEZXZpY2VzLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNS
ZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRl
ckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBmb3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZv
cm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMgaWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lz
dGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2U6IEFkZGVkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIGNvbXBpbGF0aW9uLgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDogQWRkZWQgbmV3IEdTdHJl
YW1lciB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmg6
IEFkZGVkIG5ldyBHU3RyZWFtZXIgdHlwZSBmb3IKKyAgICAgICAgdGhlIEdTdHJlYW1lckF1ZGlv
RGF0YSBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFj
ayk6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBuZXh0CisgICAgICAgIG9uZSBoZWxwIHVzIGNvbm5l
Y3QgYSBidXMgbWVzc2FnZSBjYWxsYmFjayB0byBhIHBpcGVsaW5lIGZvcgorICAgICAgICBkZWJ1
Z2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNr
KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXI6OnNpbmdsZXRvbik6IFJlbW92ZSB0aGUgY29kZQorICAgICAgICB1c2VkIGZv
ciBjb21waWxhdGlvbiBmb3IgdGhlIHBsYXRmb3JtIHdoZW4gd2UgZG8gbm90IGhhdmUgYQorICAg
ICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLiBOb3cgd2UgcmV0dXJuIHRo
ZSBwcm9wZXIgY2xhc3MKKyAgICAgICAgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNw
cDoKKyAgICAgICAgQWRkZWQgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSBSZWFsdGltZU1lZGlhU291
cmNlIGZvciB0aGUgQXVkaW8KKyAgICAgICAgd2l0aCBHU3RyZWFtZXIuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5o
OgorICAgICAgICBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHA6IEFkZGVkCisgICAgICAgIHRoaXMgY2xhc3Mg
dGhhdCByZXByZXNlbnRzIHRoZSBHU3RyZWFtZXIgcGlwZWxpbmUgdGhhdCBjYXB0dXJlcworICAg
ICAgICBhdWRpbyBmcm9tIHRoZSBzeXN0ZW0gZGV2aWNlcywgaXQgaW5oZXJpdHMgZnJvbSBHU3Ry
ZWFtZXJDYXB0dXJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oOiBEaXRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaDogQWRkZWQgdGhpcworICAgICAg
ICBjbGFzcyBpbXBsZW1lbnRpbmcgUGxhdGZvcm1BdWRpb0RhdGEgZm9yIHRoZSBHU3RyZWFtZXIg
cGxhdGZvcm0sCisgICAgICAgIHVzZWQgdG8gcGFzcyB0aGUgc2FtcGxlcyBpbmZvcm1hdGlvbi4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oOgorICAgICAgICBBZGRlZCB0aGlzIGNsYXNzIGltcGxlbWVudGlu
ZyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvIGV4cG9ydCB0aGUKKyAgICAgICAgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGF1ZGlvIHN0cmVhbSB0byBsaWJ3ZWJydGMuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2UuaDogQWRkZWQK
KyAgICAgICAgdGhpcyBiYXNlIGNsYXNzIGZvciB0aGUgYXVkaW8gYW5kIHZpZGVvIGNhcHR1cmlu
ZyBkZXZpY2VzLCBpdAorICAgICAgICBpbXBsZW1lbnRzIGdlbmVyYWwgV2ViS2l0IENhcHR1cmVE
ZXZpY2UgY2xhc3MuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgQWRkZWQgdGhpcyBjbGFz
cyB0aGF0IGltcGxlbWVudHMgdGhlIHN5c3RlbSBtb25pdG9yIHRvIGdldCB0aGUKKyAgICAgICAg
bGlzdCBvZiBhdmFpbGFibGUgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLiBJdCB1c2VzIEdzdERldmlj
ZU1vbml0b3IKKyAgICAgICAgdG8gaGFuZGxlIHRoZSBvcGVyYXRpb24uIEl0IHVzZXMgdHdvIHNp
bmdsZXRvbiBkZXZpY2UgbWFuYWdlcnMgb25lCisgICAgICAgIGZvciBhdWRpbyBhbmQgYW5vdGhl
ciBvbmUgZm9yIHZpZGVvLCB0aGUgZGVzaWduIHJlcXVpcmVkIGJ5IHRoZQorICAgICAgICBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwOiBB
ZGRlZCB0aGlzCisgICAgICAgIGJhc2UgY2xhc3MgcmVwcmVzZW50aW5nIGhvdyBHU3RyZWFtZXIg
Y2FwdHVyZXMgdGhlIG1lZGlhIGZyb20gdGhlCisgICAgICAgIGlucHV0IGRldmljZXMgaW4gdGhl
IHN5c3RlbS4gVHdvIGNsYXNzZXMgaW5oZXJpdCBmcm9tIHRoaXMgb25lIHRvCisgICAgICAgIGNh
cHR1cmUgYXVkaW8gYW5kIHZpZGVvLiBJdCBzZXR1cHMgdGhlIEdTdHJlYW1lciBwaXBlbGluZSBh
bmQgYWRkcworICAgICAgICBmdW5jdGlvbnMgdG8gY29udHJvbCBpdC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaDogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZS5jcHA6CisgICAgICAgIEFkZGVkIHRoaXMgUmVhbHRpbWVNZWRpYVNvdXJjZSBy
ZXByZXNlbnRpbmcgdGhlIHNvdXJjZSBvZiB0aGUKKyAgICAgICAgdmlkZW8gZGF0YSBmb3IgdGhl
IEdTdHJlYW1lciBwbGF0Zm9ybS4gSXQgaGFuZGxlcyB0aGUgc2V0dGluZ3MgYW5kCisgICAgICAg
IGNhcGFiaWxpdGllcyBvZiB0aGUgc291cmNlIGFuZCBjcmVhdGVzIHRoZSBjYXB0dXJlciB1c2Vk
IHRvCisgICAgICAgIGNvbnRyb2wgdGhlIG9wZXJhdGlvbiBvZiB0aGUgc3RyZWFtLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVT
b3VyY2UuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwOiBBZGRlZAorICAgICAgICB0aGlzIGNsYXNzIHRo
YXQgaW5oZXJpdHMgZnJvbSB0aGUgR1N0cmVhbWVyQ2FwdHVyZXIgYW5kIGNvbnRyb2xzCisgICAg
ICAgIHRoZSBHU3RyZWFtZXIgcGlwZWxpbmVzIG9mIHRoZSB2aWRlbyBzdHJlYW1zIG9mIHRoZSBz
eXN0ZW0uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvQ2FwdHVyZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwOgorICAgICAg
ICBBZGRlZCB0aGlzIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUga2V5IFJlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIKKyAgICAgICAgZnVuY3Rpb25zIHRvIGNvbmZpZ3VyZSB0aGUgYmFzZSBjbGFz
cyBmb3IgdGhlIHBsYXRmb3JtLCB1c2luZyB0aGUKKyAgICAgICAgb3RoZXIgR1N0cmVhbWVyIGNs
YXNzZXMuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuaDogRGl0dG8KKwogMjAxOC0wNS0xNyAgRGF2aWQg
S2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIExhemlseSBjcmVhdGUgV2Vi
Q29yZTo6VGltZXIgZm9yIFdlYkNvcmU6OkltYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE1NDcxZTkzOWQwZTA5
OTEwOGVlOTJhZWFiYjEwNWUyMmI3NGNlNTQuLjNmNjFmYjY1YmY3YzU2Y2ZjMjAwZmMxNjk3ZjRm
ZjY2NTQ0Y2Q0MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTgtMDUtMTggIEFsZWph
bmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+IGFuZCBUaGliYXVsdCBTYXVuaWVyICA8
dHNhdW5pZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURldmlj
ZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIGNoZWNrVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbgorICAgICAgICBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3
aGVuIHRoZSB3ZWJwYWdlIHdhbnRzIHRvIGVudW1lcmF0ZSB0aGUKKyAgICAgICAgbGlzdCBvZiBk
ZXZpY2VzIGluIHRoZSBzeXN0ZW0gd2UgYWRkZWQgc29tZSBuZXcgQVBJcyBmb3IgdGhlIEdUSwor
ICAgICAgICBhbmQgV1BFIHBvcnRzLiBXZSBoYXZlIGV4dGVuZGVkIHRoZQorICAgICAgICBXZWJL
aXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdCBjbGFzcyB0byBzdXBwb3J0IGEgbmV3IGtpbmQg
b2YKKyAgICAgICAgcmVxdWVzdCwgdGhlIGNoZWNrUmVxdWVzdC4gV2l0aCB0aGlzIGFkZGl0aW9u
IFdlYktpdCBjYW4KKyAgICAgICAgY3JlYXRlIGEgV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3Qgd2l0aCBhIHBlcm1pc3Npb24gY2hlY2sKKyAgICAgICAgcHJveHksIGlmIHRoYXQgaXMg
dGhlIGNhc2UgdGhlIFdlYktpdFdlYlZpZXcgd2lkZ2V0IGxhdW5jaGVzCisgICAgICAgIFdlYktp
dFdlYlZpZXc6OnBlcm1pc3Npb24tY2hlY2sgc2lnbmFsIGFuZCB0aGUgYnJvd3NlciBjYW4KKyAg
ICAgICAgY29ubm5lY3QgdG8gaXQgdG8gcmVzb2x2ZSBpdCB3aXRoIHRoZSBuZXcKKyAgICAgICAg
d2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9yZXNvbHZlX2NoZWNrIEFQSSwgYWRkaW5nIHRoZSBo
YXNoIHNhbHQKKyAgICAgICAgYW5kIHRoZSBkZWNpc2lvbiBhYm91dCBhbGxvd2luZyBhY2Nlc3Mg
dG8gdGhlIGRldmljZXMuIE1haW4gcG9pbnQKKyAgICAgICAgb2YgdGhpcyBBUEkgaXMgdG8gbWFr
ZSBzdXJlIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRyb2wgdGhlIHdlYnBhZ2VzCisgICAgICAgIGFu
ZCB0aGF0IHRoZXkgZG9uJ3QgZ2V0IHNtYXJ0IHRyeWluZyB0byBmaW5nZXJwcmludCB0aGUgc3lz
dGVtLiBUaGVyZSBpcyBhCisgICAgICAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaW4gdGhlIHdp
ZGdldCB0aGF0IGJhc2ljYWxseSBhbHdheXMKKyAgICAgICAgZGVuaWVzIGFjY2VzcyBhbmQgZ2Vu
ZXJhdGVzIGEgcmFuZG9tIGhhc2hzYWx0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmNwcDoKKyAgICAgICAgKHdlYmtpdF9wZXJtaXNzaW9u
X3JlcXVlc3RfcmVzb2x2ZV9jaGVjayk6IEFkZGVkIHRoZSBBUEkgdG8KKyAgICAgICAgcmVzb2x2
ZSB0aGUgcGVybWlzc2lvbi1jaGVjayByZXF1ZXN0ZWQgYnkgdGhlIGVuZ2luZS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwOgorICAgICAgICAoY2hlY2tV
c2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKTogQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIGZv
cgorICAgICAgICB0aGUgcGxhdGZvcm0gdXNlZCB3aGVuIHRoZSB3ZWJwYWdlIGNhbGxzIHRoZSBl
bnVtZXJhdGVEZXZpY2VzIEFQSS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QuY3BwOgorICAgICAgICAod2Via2l0VXNlck1lZGlh
UGVybWlzc2lvblJlc29sdmVDaGVjayk6IEFkZGVkIHRoZSBmdW5jdGlvbiB0aGF0CisgICAgICAg
IHJlc29sdmVzIHRoZSBwZXJtaXNzaW9uIGNoZWNrIHBhc3NpbmcgdGhlIGhhc2ggc2FsdCBhbmQg
dGhlCisgICAgICAgIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgb3BlcmF0aW9uIGlzIGFsbG93
ZWQgdG8gdGhlIGNvbXBsZXRpb24KKyAgICAgICAgaGFuZGxlciBpbiB0aGUgcmVxdWVzdC4KKyAg
ICAgICAgKHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQpOiBBZGRlZCB0
aGUgbmV3IGNsYXNzCisgICAgICAgIGZ1bmN0aW9uLgorICAgICAgICAod2Via2l0VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3REaXNwb3NlKTogTWFrZSBzdXJlIHdlIGRpc3Bvc2UKKyAgICAgICAg
Y29ycmVjdGx5IG5vdyB0aGF0IHdlIGhhdmUgYSBuZXcgY2hlY2tSZXF1ZXN0LCBpbiB0aGF0IHNp
dHVhdGlvbgorICAgICAgICByZXF1ZXN0IGlzIG51bGwuCisgICAgICAgICh3ZWJraXRfdXNlcl9t
ZWRpYV9wZXJtaXNzaW9uX2lzX2Zvcl9hdWRpb19kZXZpY2UpOiBDb250cm9sIHRoZQorICAgICAg
ICBicm93c2VyIGRvZXMgbm90IGNhbGwgdGhpcyBBUEkgd2hlbiB3ZSBhcmUgZG9pbmcgYSBwZXJt
aXNzaW9uIGNoZWNrLgorICAgICAgICAod2Via2l0X3VzZXJfbWVkaWFfcGVybWlzc2lvbl9pc19m
b3JfdmlkZW9fZGV2aWNlKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tDcmVhdGUpOiBBZGRlZCBuZXcgYnVpbGRlciBmb3IgdGhlCisgICAgICAgIFdlYktp
dFBlcm1pc3Npb25SZXF1ZXN0IGNsYXNzIHVzaW5nIGEgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNr
UHJveHkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0UHJpdmF0ZS5oOgorICAgICAgICBBZGRlZCB0aGUgbmV3IEFQSSBmb3IgdGhl
IGVuZ2luZSB0byBjcmVhdGUgYSBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC4KKyAgICAgICAgKHdl
YmtpdFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja0NyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld1Blcm1p
c3Npb25DaGVjayk6IEFkZGVkIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yCisgICAgICAgIHRo
ZSBzaWduYWwgY2FsbGJhY2suCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6
IFNldCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgdGhlIHBlcm1pc3Np
b24tY2hlY2sgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uQ2hl
Y2spOiBBZGRlZCBuZXcgQVBJIHRvIGxhdW5jaCBhc2sKKyAgICAgICAgZm9yIHBlcm1pc3Npb24g
Y2hlY2ssIHRoaXMgaXMgcHJpdmF0ZSBhbmQgdXNlZCBieSB0aGUgZW5naW5lLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOiBEZWZpbmUgdGhlIG5l
dworICAgICAgICBwcml2YXRlIEFQSSB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25DaGVjay4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oOiBB
ZGRlZCB0aGUgbmV3IEFQSQorICAgICAgICB0byByZXNvbHZlIHRoZSBwZXJtaXNzaW9uIGNoZWNr
IGluIHRoZSBlbmdpbmUuIFR3byBtaW5vciBzdHlsZQorICAgICAgICBtb2RpZmljYXRpb25zLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDogQWRkZWQgdGhlIG5l
dyBjbGFzcyBmdW5jdGlvbgorICAgICAgICBmb3IgdGhlIHBlcm1pc3Npb24tY2hlY2sgc2lnbmFs
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlv
bnMudHh0OiBBZGRlZCB0aGUKKyAgICAgICAgbmV3IHN5bWJvbCB0byB0aGUgZG9jdW1lbnRhdGlv
bjoKKyAgICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9yZXNvbHZlX2NoZWNrLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0Lmg6IEFkZGVk
IHRoZSBuZXcgQVBJCisgICAgICAgIHRvIHJlc29sdmUgdGhlIHBlcm1pc3Npb24gY2hlY2sgaW4g
dGhlIGVuZ2luZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3Lmg6
IEFkZGVkIHRoZSBuZXcgY2xhc3MgZnVuY3Rpb24KKyAgICAgICAgZm9yIHRoZSBwZXJtaXNzaW9u
LWNoZWNrIHNpZ25hbC4KKwogMjAxOC0wNS0xOCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5G
dWppaUBzb255LmNvbT4KIAogICAgICAgICBbQ3VybF0gUmVtb3ZlIHVudXNlZCBTeXN0ZW1Qcm94
eVdpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmluZGV4IDEyNDAwZGNmMmRlZWQ4ZmJjMjVlMWJm
YTQyMzk4ODIyMzI2ZjQxODMuLjRiYjA2MjZjMjA1ZjQ0NTY2ZTY5MzEyMjg1YjIxZGEyNWI4ZDk5
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFE
ZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAtODEsOSArODEsNyBAQCB2b2lkIE1lZGlhRGV2
aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQoKQogCiB2b2lkIE1lZGlhRGV2aWNlc1JlcXVl
c3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+PiYgZGV2aWNl
cykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgVU5VU0VEX1BBUkFNKGRldmljZXMpOwot
I2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
UEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2Ft
ZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAgQEAgdm9pZCBNZWRpYURldmljZXNSZXF1ZXN0
OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZvPj4mIGRldmljZXMK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291
bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAg
c3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOworI2VuZGlmCisKICAgICBz
dGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwogCiAgICAgaW50IGNh
bWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUsOCBAQCB2b2lkIE1lZGlhRGV2aWNlc1JlcXVl
c3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+PiYgZGV2aWNl
cwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQorI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVh
bWVyLmNtYWtlCmluZGV4IDNkNWE2ZTAwMjVhNTJiYjdiN2E2ZjcxZDM0NzE5ZjJiZGMyYzhlNWQu
LmQwODdiZTc1NDJhOTk3NGQ1ZWI4NDkxN2MxZGIwYjQxZWU1OWYwZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAgLTMzLDYgKzMzLDE5IEBAIGlmIChFTkFCTEVf
VklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFt
ZXIuY3BwCisKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwCisKKyAgICAgICAg
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKKyAgICAgICAgcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKaW5kZXggZTQ0MGRj
OTBhM2U4NGRmZDNiOWVkNTg3NjA0NmRiYTcxYzk3ZmUzYi4uMmJhNTg1YzljMDU2NzExMWQ3NTcw
OWQ4OTdjZDdjYjk4MDM2MzI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApAQCAtMzUsNiArMzUsNyBAQCBzdHJ1
Y3QgUGxhdGZvcm1EZXNjcmlwdGlvbiB7CiAgICAgZW51bSB7CiAgICAgICAgIE5vbmUsCiAgICAg
ICAgIENBQXVkaW9TdHJlYW1CYXNpY1R5cGUsCisgICAgICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24sCiAgICAgfSB0eXBlOwogICAgIFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIGNv
bnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+IGRlc2NyaXB0aW9uOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QbGF0Zm9ybUF1ZGlvRGF0YS5oCmluZGV4
IGU0NTQ0ZjYzMjU0YTg3ODc2ZDk5ZDhjMzA2MTIwM2FhODE2NzlkOTguLmNkYTcyZThhYjNjNGNk
YzBhODY4ZmFhYzRmMDVjZTYxYzQ0NDAyZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vUGxhdGZvcm1BdWRpb0RhdGEuaApAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6
CiAgICAgZW51bSBjbGFzcyBLaW5kIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgV2ViQXVkaW9C
dWZmZXJMaXN0LAorICAgICAgICBHU3RyZWFtZXJBdWRpb0RhdGEsCiAgICAgfTsKIAogICAgIHZp
cnR1YWwgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gS2luZDo6Tm9uZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyQ29tbW9uLmNwcAppbmRleCBlNTE0ZmUzNDI4ZGU1Mjg5OGQ0YTA3ZjZiYzY4YTBjMWQ5
NmVkZTM2Li40MzUwNTdhOWVmYmFmMmFlMjY4ODhlNmJiYmU2OTY4NWU5ZmM4NDZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPG11dGV4
PgogI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5
Lmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQog
I2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQpAQCAtMzIwLDYgKzMyMSw0NiBAQCBib29sIGdz
dFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3Rvcmllcywg
Y29uc3QgY2hhciogY2FwcwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIHNp
bXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBHc3RC
aW4qIHBpcGVsaW5lKQoreworICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkg
eworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
cGlwZWxpbmUsICJHb3QgbWVzc2FnZTogJSIgR1NUX1BUUl9GT1JNQVQsIG1lc3NhZ2UpOworICAg
ICAgICB7CisgICAgICAgICAgICBXVEY6OlN0cmluZyBkb3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9y
bWF0KCIlc19lcnJvciIsIEdTVF9PQkpFQ1RfTkFNRShwaXBlbGluZSkpOworICAgICAgICAgICAg
R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKHBpcGVsaW5lLCBHU1RfREVCVUdfR1JB
UEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDoKKyAgICAgICAg
aWYgKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA9PSBHU1RfT0JKRUNUKHBpcGVsaW5lKSkgewor
ICAgICAgICAgICAgR3N0U3RhdGUgb2xkU3RhdGUsIG5ld1N0YXRlLCBwZW5kaW5nOworICAgICAg
ICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZChtZXNzYWdlLCAmb2xkU3RhdGUs
ICZuZXdTdGF0ZSwgJnBlbmRpbmcpOworCisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlw
ZWxpbmUsICJTdGF0ZSBjaGFuZ2VkIChvbGQ6ICVzLCBuZXc6ICVzLCBwZW5kaW5nOiAlcykiLAor
ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG9sZFN0YXRlKSwKKyAg
ICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSksCisgICAg
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworCisgICAg
ICAgICAgICBXVEY6OlN0cmluZyBkb3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCIlc18lc18l
cyIsCisgICAgICAgICAgICAgICAgR1NUX09CSkVDVF9OQU1FKHBpcGVsaW5lKSwKKyAgICAgICAg
ICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShvbGRTdGF0ZSksCisgICAgICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKTsKKworICAgICAgICAg
ICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4ocGlwZWxpbmUpLCBH
U1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwordm9pZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQg
KnBpcGVsaW5lKQoreworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3Bp
cGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKHBpcGVsaW5lKSkpOworICAgIGdzdF9idXNfYWRk
X3NpZ25hbF93YXRjaF9mdWxsKGJ1cy5nZXQoKSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpSdW5M
b29wRGlzcGF0Y2hlcik7CisgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJtZXNzYWdl
IiwgR19DQUxMQkFDSyhzaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2spLCBwaXBlbGluZSk7Cit9CisK
IH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKaW5k
ZXggMjU5MjU1ZTc0MWU0MTVhMzE0YTEyM2QzNGQwMTg4YWQ0NjkwZTY0ZC4uM2IyNTg1ODZmZTRh
MWFkZDg4OGMwYmIxY2U0NWVkYzE5NzBhYmRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApA
QCAtODIsNiArODIsOCBAQCBpbmxpbmUgR3N0Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0
IE1lZGlhVGltZSAmbWVkaWFUaW1lKQogfQogCiBib29sIGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZv
ck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3RvcmllcywgY29uc3QgY2hhciogY2Fwc1N0cmlu
Zyk7Cit2b2lkIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCAqcGlw
ZWxpbmUpOworCiB9CiAKICNpZm5kZWYgR1NUX0JVRkZFUl9EVFNfT1JfUFRTCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIuY3BwCmluZGV4IDJlZmI4MmQxZTU4YzcxZDlkYTk4ZWJjYTQwMmRi
ODFkMjU0YmVmNDUuLjM4ODZmZjg3NWNlODlmNWMxMDhjNDM3YmI5Y2FhMmY0ZDdmMTYwMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCkBAIC02NCwxNCArNjQsNyBAQCBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0
b24oKQogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIqIG92ZXJyaWRlID0gbWVkaWFTdHJl
YW1DZW50ZXJPdmVycmlkZSgpOwogICAgIGlmIChvdmVycmlkZSkKICAgICAgICAgcmV0dXJuICpv
dmVycmlkZTsKLSNpZiBQTEFURk9STShHVEspCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBSZXR1cm4gTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXIgdG8gYXZvaWQgY3Jhc2guCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1vY2tSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyPiBjZW50ZXI7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLSNlbHNl
CiAgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXRTaGFyZWRT
dHJlYW1DZW50ZXJPdmVycmlkZShSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyKiBjZW50ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk3YWE4N2EyNjA5M2MwNTJkZjdhNjEyOGYwMjFiYWJlZDhhYzE5MWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNF
KEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvRGF0YS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFu
YWdlci5oIgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8Z3N0
L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NvbnN0IHN0YXRpYyBDYXBhYmlsaXR5VmFsdWVPclJhbmdlIGRlZmF1bHRWb2x1
bWVDYXBhYmlsaXR5ID0gQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSgwLjAsIDEuMCk7Citjb25zdCBz
dGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6RWNob0NhbmNlbGxhdGlvbiBk
ZWZhdWx0RWNob0NhbmNlbGxhdGlvbkNhcGFiaWxpdHkgPSBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uOjpSZWFkV3JpdGU7CisKK0dTVF9ERUJVR19DQVRF
R09SWSh3ZWJraXRfYXVkaW9fY2FwdHVyZV9zb3VyY2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FU
X0RFRkFVTFQgd2Via2l0X2F1ZGlvX2NhcHR1cmVfc291cmNlX2RlYnVnCisKK3N0YXRpYyB2b2lk
IGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGRlYnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVk
RmxhZywgW10geworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfYXVkaW9f
Y2FwdHVyZV9zb3VyY2VfZGVidWcsICJ3ZWJraXRhdWRpb2NhcHR1cmVzb3VyY2UiLCAwLCAiV2Vi
S2l0IEF1ZGlvIENhcHR1cmUgU291cmNlLiIpOworICAgIH0pOworfQorCitjbGFzcyBHU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5IDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OkF1ZGlvQ2FwdHVyZUZhY3RvcnkgeworcHVibGljOgorICAgIENhcHR1cmVTb3VyY2VPckVycm9y
IGNyZWF0ZUF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2UsIGNv
bnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKSBmaW5hbAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0
ZW50SWQoKSwgY29uc3RyYWludHMpOworICAgIH0KK307CisKK3N0YXRpYyBHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2VGYWN0b3J5JiBsaWJXZWJSVENBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlRmFjdG9yeT4gZmFjdG9yeTsKKyAgICByZXR1cm4gZmFjdG9yeS5nZXQoKTsKK30KKworQ2Fw
dHVyZVNvdXJjZU9yRXJyb3IgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMp
Cit7CisgICAgYXV0byBkZXZpY2UgPSBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5nc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGRldmljZUlEKTsKKyAgICBpZiAo
IWRldmljZSkgeworICAgICAgICBhdXRvIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJH
U3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZSgpOiBHU3RyZWFtZXIgZGlkIG5vdCBm
aW5kIHRoZSBkZXZpY2U6ICVzLiIsIGRldmljZUlELnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShlcnJvck1lc3NhZ2UpKTsKKyAgICB9
CisKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlKGRldmljZS52YWx1ZSgpKSk7CisKKyAgICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsK
KyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52
YWx1ZSgpLmZpcnN0KTsKKyAgICB9CisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdU
Rk1vdmUoc291cmNlKSk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZh
Y3RvcnkmIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCit7CisgICAgcmV0
dXJuIGxpYldlYlJUQ0F1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKTsKK30KKworR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoR1N0cmVhbWVy
Q2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGRldmljZS5w
ZXJzaXN0ZW50SWQoKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIGRldmljZS5s
YWJlbCgpKQorICAgICwgbV9jYXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZXI+KGRldmljZSkpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9
CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IFJl
YWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1
ZGlvLCBuYW1lKQorICAgICwgbV9jYXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lckF1
ZGlvQ2FwdHVyZXI+KCkpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9CisK
K0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJj
ZSgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpzdGFydFByb2R1
Y2luZ0RhdGEoKQoreworICAgIG1fY2FwdHVyZXItPnNldHVwUGlwZWxpbmUoKTsKKyAgICBtX2Nh
cHR1cmVyLT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUoKSk7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX2NhcHR1cmVyLT5zaW5rKCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdTYW1wbGVD
YWxsYmFjayksIHRoaXMpOworICAgIG1fY2FwdHVyZXItPnBsYXkoKTsKK30KKworR3N0Rmxvd1Jl
dHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6Om5ld1NhbXBsZUNhbGxiYWNrKEdzdEVs
ZW1lbnQqIHNpbmssIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSogc291cmNlKQoreworICAg
IGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQ
X1NJTksoc2luaykpKTsKKworICAgIC8vIEZJWE1FIC0gZmlndXJlIG91dCBhIHdheSB0byBhdm9p
ZCBjb3B5aW5nIChvbiB3cml0ZSkgdGhlIGRhdGEuCisgICAgR3N0QnVmZmVyKiBidWYgPSBnc3Rf
c2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKTsKKyAgICBhdXRvIGZyYW1lcyhzdGQ6OnVu
aXF1ZV9wdHI8R1N0cmVhbWVyQXVkaW9EYXRhPihuZXcgR1N0cmVhbWVyQXVkaW9EYXRhKFdURk1v
dmUoc2FtcGxlKSkpKTsKKyAgICBhdXRvIHN0cmVhbURlc2Moc3RkOjp1bmlxdWVfcHRyPEdTdHJl
YW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KG5ldyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKGZyYW1lcy0+Z2V0QXVkaW9JbmZvKCkpKSk7CisKKyAgICBzb3VyY2UtPmF1ZGlvU2Ft
cGxlc0F2YWlsYWJsZSgKKyAgICAgICAgTWVkaWFUaW1lKEdTVF9USU1FX0FTX1VTRUNPTkRTKEdT
VF9CVUZGRVJfUFRTKGJ1ZikpLCBHX1VTRUNfUEVSX1NFQyksCisgICAgICAgICpmcmFtZXMsICpz
dHJlYW1EZXNjLCBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZikgLyBmcmFtZXMtPmdldEF1ZGlvSW5m
bygpLmJwZik7CisKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgbV9jYXB0dXJl
ci0+c3RvcCgpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBH
U3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2NhcGFiaWxpdGllcykgeworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBt
X2NhcHR1cmVyLT5jYXBzKCk7CisgICAgICAgIGludCBtaW5TYW1wbGVSYXRlID0gMCwgbWF4U2Ft
cGxlUmF0ZSA9IDA7CisgICAgICAgIHVpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
Z3N0X2NhcHNfZ2V0X3NpemUoY2Fwcy5nZXQoKSk7IGkrKykgeworICAgICAgICAgICAgaW50IGNh
cGFiaWxpdHlNaW5TYW1wbGVSYXRlID0gMCwgY2FwYWJpbGl0eU1heFNhbXBsZVJhdGUgPSAwOwor
ICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNh
cHMuZ2V0KCksIGkpOworCisgICAgICAgICAgICAvLyBPbmx5IGFjY2VwdCByYXcgYXVkaW8gZm9y
IG5vdy4KKyAgICAgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHIsICJhdWRp
by94LXJhdyIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBnc3Rf
c3RydWN0dXJlX2dldChzdHIsICJyYXRlIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAmY2FwYWJpbGl0
eU1pblNhbXBsZVJhdGUsICZjYXBhYmlsaXR5TWF4U2FtcGxlUmF0ZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICBtaW5TYW1wbGVSYXRlID0gc3Rk
OjptaW4obWluU2FtcGxlUmF0ZSwgY2FwYWJpbGl0eU1pblNhbXBsZVJhdGUpOworICAgICAgICAg
ICAgICAgIG1heFNhbXBsZVJhdGUgPSBzdGQ6Om1heChtYXhTYW1wbGVSYXRlLCBjYXBhYmlsaXR5
TWF4U2FtcGxlUmF0ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1p
blNhbXBsZVJhdGUgPSBjYXBhYmlsaXR5TWluU2FtcGxlUmF0ZTsKKyAgICAgICAgICAgICAgICBt
YXhTYW1wbGVSYXRlID0gY2FwYWJpbGl0eU1heFNhbXBsZVJhdGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzIGNhcGFi
aWxpdGllcyhzZXR0aW5ncygpLnN1cHBvcnRlZENvbnN0cmFpbnRzKCkpOworICAgICAgICBjYXBh
YmlsaXRpZXMuc2V0RGV2aWNlSWQoaWQoKSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRFY2hv
Q2FuY2VsbGF0aW9uKGRlZmF1bHRFY2hvQ2FuY2VsbGF0aW9uQ2FwYWJpbGl0eSk7CisgICAgICAg
IGNhcGFiaWxpdGllcy5zZXRWb2x1bWUoZGVmYXVsdFZvbHVtZUNhcGFiaWxpdHkpOworICAgICAg
ICBjYXBhYmlsaXRpZXMuc2V0U2FtcGxlUmF0ZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pblNh
bXBsZVJhdGUsIG1heFNhbXBsZVJhdGUpKTsKKyAgICAgICAgbV9jYXBhYmlsaXRpZXMgPSBXVEZN
b3ZlKGNhcGFiaWxpdGllcyk7CisgICAgfQorICAgIHJldHVybiBtX2NhcGFiaWxpdGllcy52YWx1
ZSgpOworfQorCitib29sIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlTYW1wbGVS
YXRlKGludCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiBtX2NhcHR1cmVyLT5zZXRTYW1wbGVS
YXRlKHNhbXBsZVJhdGUpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIGlm
ICghbV9jdXJyZW50U2V0dGluZ3MpIHsKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzIHNldHRpbmdzOworICAgICAgICBzZXR0aW5ncy5zZXREZXZpY2VJZChpZCgpKTsKKworICAg
ICAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgc3VwcG9ydGVkQ29u
c3RyYWludHM7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNl
SWQodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRWNob0Nh
bmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9y
dHNWb2x1bWUodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
U2FtcGxlUmF0ZSh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWlu
dHMoc3VwcG9ydGVkQ29uc3RyYWludHMpOworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0g
V1RGTW92ZShzZXR0aW5ncyk7CisgICAgfQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFZv
bHVtZSh2b2x1bWUoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFNhbXBsZVJhdGUoc2Ft
cGxlUmF0ZSgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0RWNob0NhbmNlbGxhdGlvbihl
Y2hvQ2FuY2VsbGF0aW9uKCkpOworCisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVl
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY5
Mjk2NjNhYmM3OTFjZDgyZDYwYmYxNmJjOTRmNjJlNjE0ZDQwMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJB
dWRpb0NhcHR1cmVTb3VyY2UuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAi
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZp
Y2UuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0
aW1lTWVkaWFTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJv
ciBjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyop
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBBdWRpb0NhcHR1cmVGYWN0b3J5JiBmYWN0b3J5
KCk7CisKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmls
aXRpZXMoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyQXVk
aW9DYXB0dXJlU291cmNlKEdTdHJlYW1lckNhcHR1cmVEZXZpY2UpOworICAgIEdTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5h
bWUpOworICAgIHZpcnR1YWwgfkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSgpOworCisgICAg
Ym9vbCBhcHBseVNhbXBsZVJhdGUoaW50KSBmaW5hbDsKKyAgICBib29sIGlzQ2FwdHVyZVNvdXJj
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5n
RGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBi
b29sIGFwcGx5Vm9sdW1lKGRvdWJsZSkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI+IG1fY2FwdHVyZXI7CisKKyAgICBz
dGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiwgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlKik7CisgICAgdm9pZCB0cmlnZ2VyU2FtcGxlQXZhaWxhYmxl
KEdzdFNhbXBsZSopOworCisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOworICAgIG11dGFibGUgc3RkOjpvcHRp
b25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0Nh
cHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjg2MDczNmVjNjFkYzc2
MzQzMDZhMWQ2ZjdmMjZlZjBhMjQ5ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIu
Y3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFt
ZXJBdWRpb0NhcHR1cmVyLmgiCisKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb0Zvcm1hdC5oIgor
CisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcihHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKKyAgICA6IEdTdHJlYW1lckNhcHR1cmVyKGRldmljZSwg
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZ
UEVfSU5ULCBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZSwgbnVsbHB0cikpKQorewor
fQorCitHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKCkKKyAg
ICA6IEdTdHJlYW1lckNhcHR1cmVyKCJhdWRpb3Rlc3RzcmMiLCBhZG9wdEdSZWYoZ3N0X2NhcHNf
bmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIExpYldlYlJUQ0F1
ZGlvRm9ybWF0OjpzYW1wbGVSYXRlLCBudWxscHRyKSkpCit7Cit9CisKK0dzdEVsZW1lbnQqIEdT
dHJlYW1lckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcigpCit7CisgICAgLy8gRklYTUUg
SGFuZGxlIGVycm9ycy4KKyAgICByZXR1cm4gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9u
KCJhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlIiwgVFJVRSwgbnVsbHB0cik7Cit9CisKK2Jv
b2wgR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkK
K3sKKworICAgIGlmIChzYW1wbGVSYXRlID4gMCkgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIlNldHRpbmcgU2FtcGxlUmF0ZSAlZCIsIHNhbXBsZVJhdGUpOwor
ICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1y
YXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIHNhbXBsZVJhdGUsIG51bGxwdHIpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5vdCBmb3Jj
aW5nIHNhbXBsZSByYXRlIik7CisgICAgICAgIG1fY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19u
ZXdfZW1wdHlfc2ltcGxlKCJhdWRpby94LXJhdyIpKTsKKyAgICB9CisKKyAgICBpZiAoIW1fY2Fw
c2ZpbHRlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0
KG1fY2Fwc2ZpbHRlci5nZXQoKSwgImNhcHMiLCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MmRlNDQ0YTg4M2Y0YjYwNjNjYzAyMDE3NWUxYmY5ZTZkZGQ5NGFlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZXIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUg
IkdTdHJlYW1lckNhcHR1cmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0
cmVhbWVyQXVkaW9DYXB0dXJlciA6IHB1YmxpYyBHU3RyZWFtZXJDYXB0dXJlciB7CitwdWJsaWM6
CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAg
ICBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKCk7CisKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVDb252
ZXJ0ZXIoKSBmaW5hbDsKKyAgICBjb25zdCBjaGFyKiBuYW1lKCkgZmluYWwgeyByZXR1cm4gIkF1
ZGlvIjsgfQorCisgICAgYm9vbCBzZXRTYW1wbGVSYXRlKGludCk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElC
V0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0
YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcwNmQ0NDhhYTYzNDdkYWIwNDEyMmZkNGUyMWYzZmRmZmMzMDcwN2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRhLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQXVkaW9EYXRhLmgiCisK
KyNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgR1N0cmVhbWVyQXVkaW9EYXRhIDogcHVibGljIFBsYXRmb3JtQXVkaW9EYXRhIHsKK3B1Ymxp
YzoKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEoR1JlZlB0cjxHc3RTYW1wbGU+JiYgc2FtcGxlLCBH
c3RBdWRpb0luZm8gaW5mbykKKyAgICAgICAgOiBtX3NhbXBsZShXVEZNb3ZlKHNhbXBsZSkpCisg
ICAgICAgICwgbV9hdWRpb0luZm8oaW5mbykKKyAgICB7CisgICAgfQorCisgICAgR1N0cmVhbWVy
QXVkaW9EYXRhKEdSZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSkKKyAgICAgICAgOiBtX3NhbXBs
ZShXVEZNb3ZlKHNhbXBsZSkpCisgICAgeworICAgICAgICBnc3RfYXVkaW9faW5mb19mcm9tX2Nh
cHMoJm1fYXVkaW9JbmZvLCBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKSk7Cisg
ICAgfQorCisgICAgR3N0U2FtcGxlKiBnZXRTYW1wbGUoKSB7IHJldHVybiBtX3NhbXBsZS5nZXQo
KTsgfQorICAgIEdzdEF1ZGlvSW5mbyBnZXRBdWRpb0luZm8oKSB7cmV0dXJuIG1fYXVkaW9JbmZv
OyB9CisKK3ByaXZhdGU6CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gS2luZDo6R1N0
cmVhbWVyQXVkaW9EYXRhOyB9CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOworICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gbV9jYXBzOworCisgICAgR3N0QXVkaW9JbmZvIG1fYXVkaW9JbmZv
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFhZmY0NDkyMzQ1NGMxOGM5ZDc2Y2NmYjU2NjBmZjdhZDUzZTA3NmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1F
UikKKworI2luY2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlIDxnc3Qv
YXVkaW8vYXVkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFsOiBwdWJsaWMgQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRp
b0luZm8gaW5mbykKKyAgICAgICAgOiBtX2luZm8oaW5mbykKKyAgICAgICAgLCBtX2NhcHMoYWRv
cHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQorICAgIHsKKyAgICB9CisK
KyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyAqaW5mbykK
KyAgICAgICAgOiBtX2luZm8oKmluZm8pCisgICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3Rf
YXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkKKyAgICB7CisgICAgfQorCisgICAgR1N0cmVh
bWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigpCisgICAgeworICAgICAgICBnc3RfYXVkaW9faW5m
b19pbml0KCZtX2luZm8pOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIH5HU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKCkgeyB9OworCisgICAgY29uc3QgUGxhdGZvcm1EZXNjcmlw
dGlvbiYgcGxhdGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24gPSB7IFBsYXRmb3JtRGVzY3JpcHRpb246OkdTdHJlYW1lckF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24sIChBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qKSAmbV9pbmZvIH07
CisKKyAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBQQ01Gb3JtYXQgZm9ybWF0KCkgY29uc3QgZmluYWwgeworICAgICAgICBz
d2l0Y2ggKEdTVF9BVURJT19JTkZPX0ZPUk1BVCgmbV9pbmZvKSkgeworICAgICAgICBjYXNlIEdT
VF9BVURJT19GT1JNQVRfUzE2TEU6CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTZC
RToKKyAgICAgICAgICAgIHJldHVybiBJbnQxNjsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9S
TUFUX1MzMkxFOgorICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzMyQkU6CisgICAgICAg
ICAgICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GMzJMRToK
KyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX0YzMkJFOgorICAgICAgICAgICAgcmV0dXJu
IEZsb2F0MzI7CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GNjRMRToKKyAgICAgICAg
Y2FzZSBHU1RfQVVESU9fRk9STUFUX0Y2NEJFOgorICAgICAgICAgICAgcmV0dXJuIEZsb2F0NjQ7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gTm9uZTsKKyAgICB9CisKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX1JBVEUgKCZtX2luZm8pOyB9CisgICAgYm9vbCBp
c1BDTSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZvcm1hdCgpICE9IE5vbmU7IH0KKyAgICBib29s
IGlzSW50ZXJsZWF2ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9fSU5GT19MQVlP
VVQgKCZtX2luZm8pID09IEdTVF9BVURJT19MQVlPVVRfSU5URVJMRUFWRUQ7IH0KKyAgICBib29s
IGlzU2lnbmVkSW50ZWdlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0lT
X0lOVEVHRVIgKCZtX2luZm8pOyB9CisgICAgYm9vbCBpc05hdGl2ZUVuZGlhbigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0VORElBTk5FU1MgKCZtX2luZm8pID09IEdfQllU
RV9PUkRFUjsgfQorICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9B
VURJT19JTkZPX0lTX0ZMT0FUICgmbV9pbmZvKTsgfQorCisgICAgdWludDMyX3QgbnVtYmVyT2ZJ
bnRlcmxlYXZlZENoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNJbnRlcmxlYXZlZCgp
ID8gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZtX2luZm8pIDogVFJVRTsgfQorICAgIHVpbnQz
Ml90IG51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVE
SU9fSU5GT19DSEFOTkVMUyAoJm1faW5mbyk7IH0KKyAgICB1aW50MzJfdCBudW1iZXJPZkNoYW5u
ZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZtX2lu
Zm8pOyB9CisgICAgdWludDMyX3Qgc2FtcGxlV29yZFNpemUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBHU1RfQVVESU9fSU5GT19CUFMgKCZtX2luZm8pOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuIGdz
dF9hdWRpb19pbmZvX2lzX2VxdWFsICgmbV9pbmZvLCAmb3RoZXIubV9pbmZvKTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhl
cikgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KKworICAgIEdzdENhcHMqIGNhcHMo
KSB7IHJldHVybiBtX2NhcHMuZ2V0KCk7IH0KKyAgICBHc3RBdWRpb0luZm8qIGdldEluZm8oKSB7
IHJldHVybiAmbV9pbmZvOyB9CisKK3ByaXZhdGU6CisgICAgR3N0QXVkaW9JbmZvIG1faW5mbzsK
KyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY2FwczsKKyAgICBtdXRhYmxlIFBsYXRmb3JtRGVzY3Jp
cHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworfTsKKworfSAvLyBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVB
TUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTQxOGFlYWQ3M2Y5NzBiNmI4ZGY0NjhmZWU4MGQzNjMxMjNkODc0YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2UuaCIKKyNpbmNs
dWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyQ2FwdHVyZURldmljZSA6IHB1YmxpYyBD
YXB0dXJlRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKEdSZWZQ
dHI8R3N0RGV2aWNlPiYmIGRldmljZSwgY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50SWQsIERldmlj
ZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBncm91cElkID0g
ZW1wdHlTdHJpbmcoKSkKKyAgICAgICAgOiBDYXB0dXJlRGV2aWNlKHBlcnNpc3RlbnRJZCwgdHlw
ZSwgbGFiZWwsIGdyb3VwSWQpCisgICAgICAgICwgbV9kZXZpY2UoZGV2aWNlKQorICAgIHsKKyAg
ICB9CisKKyAgICBHc3RDYXBzKiBjYXBzKCkgY29uc3QgeyByZXR1cm4gZ3N0X2RldmljZV9nZXRf
Y2FwcyhtX2RldmljZS5nZXQoKSk7IH0KKyAgICBHc3REZXZpY2UgKiBkZXZpY2UoKSB7IHJldHVy
biBtX2RldmljZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RGV2aWNlPiBt
X2RldmljZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICAmJiBV
U0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
RGV2aWNlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYyNmI2NDdkYjc1NjliOWZmOWI1MDgwZjkz
YTI3ODhhZWI3OTExNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAK
QEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworR1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlciYgR1N0cmVhbWVyQXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8R1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAgICBy
ZXR1cm4gbWFuYWdlcjsKK30KKworR1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlciYg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcj4g
bWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKworR1N0cmVhbWVyRGlzcGxheUNhcHR1
cmVEZXZpY2VNYW5hZ2VyJiBHU3RyZWFtZXJEaXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXI6OnNp
bmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdTdHJlYW1lckRpc3BsYXlD
YXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKwor
c3RkOjpvcHRpb25hbDxHU3RyZWFtZXJDYXB0dXJlRGV2aWNlPiBHU3RyZWFtZXJDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6Z3N0cmVhbWVyRGV2aWNlV2l0aFVJRChjb25zdCBTdHJpbmcmIGRldmljZUlE
KQoreworICAgIGNhcHR1cmVEZXZpY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIGRldmljZSA6IG1f
Z3N0cmVhbWVyRGV2aWNlcykgeworICAgICAgICBpZiAoZGV2aWNlLnBlcnNpc3RlbnRJZCgpID09
IGRldmljZUlEKQorICAgICAgICAgICAgcmV0dXJuIGRldmljZTsKKyAgICB9CisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKworY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y2FwdHVyZURldmljZXMoKQoreworICAgIGluaXRpYWxp
emVHU3RyZWFtZXIoKTsKKyAgICBpZiAobV9kZXZpY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVm
cmVzaENhcHR1cmVEZXZpY2VzKCk7CisKKyAgICByZXR1cm4gbV9kZXZpY2VzOworfQorCit2b2lk
IEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VBZGRlZChHUmVmUHRyPEdzdERl
dmljZT4mJiBkZXZpY2UpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHByb3BlcnRp
ZXMoZ3N0X2RldmljZV9nZXRfcHJvcGVydGllcyhkZXZpY2UuZ2V0KCkpKTsKKyAgICBjb25zdCBj
aGFyKiBrbGFzcyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhwcm9wZXJ0aWVzLmdldCgpLCAi
ZGV2aWNlLmNsYXNzIik7CisKKyAgICBpZiAoa2xhc3MgJiYgIWdfc3RyY21wMChrbGFzcywgIm1v
bml0b3IiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlw
ZSB0eXBlID0gZGV2aWNlVHlwZSgpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGV2aWNlQ2xhc3ND
aGFyKGdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzcyhkZXZpY2UuZ2V0KCkpKTsKKyAgICBTdHJp
bmcgZGV2aWNlQ2xhc3MoU3RyaW5nKGRldmljZUNsYXNzQ2hhci5nZXQoKSkpOworICAgIGlmICh0
eXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUgJiYgIWRldmljZUNs
YXNzLnN0YXJ0c1dpdGgoIkF1ZGlvIikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodHlwZSA9
PSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgIWRldmljZUNsYXNzLnN0YXJ0
c1dpdGgoIlZpZGVvIikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgaXNuJ3QgcmVh
bGx5IGEgVUlEIGJ1dCBzaG91bGQgYmUgZ29vZCBlbm91Z2ggKGxpYndlYnJ0YworICAgIC8vIGl0
c2VsZiBkb2VzIHRoYXQgYXQgbGVhc3QgZm9yIHB1bHNlYXVkaW8gZGV2aWNlcykuCisgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBkZXZpY2VOYW1lKGdzdF9kZXZpY2VfZ2V0X2Rpc3BsYXlfbmFtZShkZXZp
Y2UuZ2V0KCkpKTsKKyAgICBTdHJpbmcgaWRlbnRpZmllciA9IFN0cmluZzo6ZnJvbVVURjgoZGV2
aWNlTmFtZS5nZXQoKSk7CisKKyAgICBhdXRvIGdzdENhcHR1cmVEZXZpY2UgPSBHU3RyZWFtZXJD
YXB0dXJlRGV2aWNlKFdURk1vdmUoZGV2aWNlKSwgaWRlbnRpZmllciwgdHlwZSwgaWRlbnRpZmll
cik7CisgICAgZ3N0Q2FwdHVyZURldmljZS5zZXRFbmFibGVkKHRydWUpOworICAgIG1fZ3N0cmVh
bWVyRGV2aWNlcy5hcHBlbmQoV1RGTW92ZShnc3RDYXB0dXJlRGV2aWNlKSk7CisgICAgLy8gRklY
TUU6IFdlIG5lZWQgYSBDYXB0dXJlRGV2aWNlIGNvcHkgaW4gb3RoZXIgdmVjdG9yIGp1c3QgZm9y
IGNhcHR1cmVEZXZpY2VzIEFQSS4KKyAgICBhdXRvIGNhcHR1cmVEZXZpY2UgPSBDYXB0dXJlRGV2
aWNlKGlkZW50aWZpZXIsIHR5cGUsIGlkZW50aWZpZXIpOworICAgIGNhcHR1cmVEZXZpY2Uuc2V0
RW5hYmxlZCh0cnVlKTsKKyAgICBtX2RldmljZXMuYXBwZW5kKFdURk1vdmUoY2FwdHVyZURldmlj
ZSkpOworfQorCit2b2lkIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZWZyZXNoQ2Fw
dHVyZURldmljZXMoKQoreworICAgIGlmICghbV9kZXZpY2VNb25pdG9yKSB7CisgICAgICAgIG1f
ZGV2aWNlTW9uaXRvciA9IGFkb3B0R1JlZihnc3RfZGV2aWNlX21vbml0b3JfbmV3KCkpOworCisg
ICAgICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgdHlwZSA9IGRldmljZVR5cGUoKTsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhKSB7Cisg
ICAgICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X2VtcHR5X3NpbXBsZSgidmlkZW8veC1yYXciKSk7CisgICAgICAgICAgICBnc3RfZGV2aWNlX21v
bml0b3JfYWRkX2ZpbHRlcihtX2RldmljZU1vbml0b3IuZ2V0KCksICJWaWRlby9Tb3VyY2UiLCBj
YXBzLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6Ok1pY3JvcGhvbmUpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2Fw
cyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJhdWRpby94LXJhdyIpKTsK
KyAgICAgICAgICAgIGdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyKG1fZGV2aWNlTW9uaXRv
ci5nZXQoKSwgIkF1ZGlvL1NvdXJjZSIsIGNhcHMuZ2V0KCkpOworICAgICAgICB9CisgICAgICAg
IC8vIEZJWE1FOiBBZGQgbW9uaXRvciBmb3IgYWRkZWQvcmVtb3ZlZCBtZXNzYWdlcyBvbiB0aGUg
YnVzLgorICAgIH0KKworICAgIGlmICghZ3N0X2RldmljZV9tb25pdG9yX3N0YXJ0KG1fZGV2aWNl
TW9uaXRvci5nZXQoKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fZGV2aWNlTW9u
aXRvci5nZXQoKSwgIkNvdWxkIG5vdCBzdGFydCBkZXZpY2UgbW9uaXRvciIpOworICAgICAgICBt
X2RldmljZU1vbml0b3IgPSBudWxscHRyOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBHTGlzdCogZGV2aWNlcyA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlcyhtX2Rldmlj
ZU1vbml0b3IuZ2V0KCkpOworICAgIHdoaWxlIChkZXZpY2VzKSB7CisgICAgICAgIEdSZWZQdHI8
R3N0RGV2aWNlPiBkZXZpY2UgPSBhZG9wdEdSZWYoR1NUX0RFVklDRV9DQVNUKGRldmljZXMtPmRh
dGEpKTsKKyAgICAgICAgZGV2aWNlQWRkZWQoV1RGTW92ZShkZXZpY2UpKTsKKyAgICAgICAgZGV2
aWNlcyA9IGdfbGlzdF9kZWxldGVfbGluayhkZXZpY2VzLCBkZXZpY2VzKTsKKyAgICB9CisKKyAg
ICBnc3RfZGV2aWNlX21vbml0b3Jfc3RvcChtX2RldmljZU1vbml0b3IuZ2V0KCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVy
ZURldmljZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTg1ZWQ3ZTUwYzE1YTFkMjUxMjhkMzE4ZGI0
YjFhNWQwMDRjZTZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKwor
I2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlciA6IHB1Ymxp
YyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RkOjpvcHRpb25hbDxHU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlPiBnc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYp
OworCisgICAgdm9pZCByZWZyZXNoQ2FwdHVyZURldmljZXMoKSBmaW5hbDsKKyAgICBjb25zdCBW
ZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7CisgICAgdmlydHVh
bCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSA9IDA7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBkZXZpY2VBZGRlZChHUmVmUHRyPEdzdERldmljZT4mJik7CisKKyAgICBHUmVm
UHRyPEdzdERldmljZU1vbml0b3I+IG1fZGV2aWNlTW9uaXRvcjsKKyAgICBWZWN0b3I8R1N0cmVh
bWVyQ2FwdHVyZURldmljZT4gbV9nc3RyZWFtZXJEZXZpY2VzOworICAgIFZlY3RvcjxDYXB0dXJl
RGV2aWNlPiBtX2RldmljZXM7Cit9OworCitjbGFzcyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyIHsK
KyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXImIHNpbmdsZXRvbigpOworICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUg
ZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1p
Y3JvcGhvbmU7IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlcigpID0gZGVmYXVsdDsKKyAgICB+R1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdl
cigpID0gZGVmYXVsdDsKK307CisKK2NsYXNzIEdTdHJlYW1lclZpZGVvQ2FwdHVyZURldmljZU1h
bmFnZXIgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIgeworICAg
IGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNl
TWFuYWdlciYgc2luZ2xldG9uKCk7CisgICAgc3RhdGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZp
ZGVvQ2FwdHVyZUZhY3RvcnkmIHZpZGVvRmFjdG9yeSgpOworICAgIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGUgZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6OkNhbWVyYTsgfQorcHJpdmF0ZToKKyAgICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyKCkgPSBkZWZhdWx0OworfTsKKworY2xhc3MgR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVE
ZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2Vy
IHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyRGlzcGxheUNhcHR1
cmVEZXZpY2VNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVhbWVyRGlzcGxheUNh
cHR1cmVEZXZpY2VNYW5hZ2VyJiBzaW5nbGV0b24oKTsKKyAgICBDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlIGRldmljZVR5cGUoKSBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2aWNlOjpEZXZpY2VU
eXBlOjpTY3JlZW47IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZp
Y2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJEaXNwbGF5Q2FwdHVyZURldmlj
ZU1hbmFnZXIoKSA9IGRlZmF1bHQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKSAgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVy
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjljYTUyYjUxMTgwZjdiMWFjYTAwZWFiZjg2NTg1ZDUzODdhMDI4
MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVT
RShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZXIuaCIKKworI2luY2x1ZGUg
PGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHdlYnJ0
Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtp
dF9jYXB0dXJlcl9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfY2FwdHVy
ZXJfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBpbml0aWFsaXpl
R1N0cmVhbWVyQW5kRGVidWcoKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXIoKTsKKworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVH
T1JZX0lOSVQod2Via2l0X2NhcHR1cmVyX2RlYnVnLCAid2Via2l0Y2FwdHVyZXIiLCAwLCAiV2Vi
S2l0IENhcHR1cmVyIik7CisgICAgfSk7Cit9CisKK0dTdHJlYW1lckNhcHR1cmVyOjpHU3RyZWFt
ZXJDYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSwgR1JlZlB0cjxHc3RDYXBz
PiBjYXBzKQorICAgIDogbV9kZXZpY2UoZGV2aWNlLmRldmljZSgpKQorICAgICwgbV9jYXBzKGNh
cHMpCisgICAgLCBtX3NvdXJjZUZhY3RvcnkobnVsbHB0cikKK3sKKyAgICBpbml0aWFsaXplR1N0
cmVhbWVyQW5kRGVidWcoKTsKK30KKworR1N0cmVhbWVyQ2FwdHVyZXI6OkdTdHJlYW1lckNhcHR1
cmVyKGNvbnN0IGNoYXIqIHNvdXJjZUZhY3RvcnksIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcykKKyAg
ICA6IG1fZGV2aWNlKG51bGxwdHIpCisgICAgLCBtX2NhcHMoY2FwcykKKyAgICAsIG1fc291cmNl
RmFjdG9yeShzb3VyY2VGYWN0b3J5KQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmREZWJ1
ZygpOworfQorCitHc3RFbGVtZW50KiBHU3RyZWFtZXJDYXB0dXJlcjo6Y3JlYXRlU291cmNlKCkK
K3sKKyAgICBpZiAobV9zb3VyY2VGYWN0b3J5KSB7CisgICAgICAgIG1fc3JjID0gYWRvcHRHUmVm
KG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSkpOworICAgICAgICBBU1NFUlQobV9zcmMpOwor
CisgICAgICAgIHJldHVybiBtX3NyYy5nZXQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9kZXZp
Y2UpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlTmFtZShnX3N0cmR1cF9wcmludGYoIiVz
XyVwIiwgbmFtZSgpLCB0aGlzKSk7CisgICAgbV9zcmMgPSBnc3RfZGV2aWNlX2NyZWF0ZV9lbGVt
ZW50KG1fZGV2aWNlLmdldCgpLCBzb3VyY2VOYW1lLmdldCgpKTsKKyAgICBBU1NFUlQobV9zcmMp
OworCisgICAgcmV0dXJuIG1fc3JjLmdldCgpOworfQorCitHc3RDYXBzKiBHU3RyZWFtZXJDYXB0
dXJlcjo6Y2FwcygpCit7CisgICAgaWYgKG1fc291cmNlRmFjdG9yeSkgeworICAgICAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IGVsZW1lbnQgPSBtYWtlRWxlbWVudChtX3NvdXJjZUZhY3RvcnkpOwor
ICAgICAgICBhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChl
bGVtZW50LmdldCgpLCAic3JjIikpOworCisgICAgICAgIHJldHVybiBnc3RfcGFkX3F1ZXJ5X2Nh
cHMocGFkLmdldCgpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9kZXZpY2UpOwor
ICAgIHJldHVybiBnc3RfZGV2aWNlX2dldF9jYXBzKG1fZGV2aWNlLmdldCgpKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJDYXB0dXJlcjo6c2V0dXBQaXBlbGluZSgpCit7CisgICAgbV9waXBlbGluZSA9
IG1ha2VFbGVtZW50KCJwaXBlbGluZSIpOworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzb3Vy
Y2UgPSBjcmVhdGVTb3VyY2UoKTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGNvbnZlcnRlciA9
IGNyZWF0ZUNvbnZlcnRlcigpOworCisgICAgbV9jYXBzZmlsdGVyID0gbWFrZUVsZW1lbnQoImNh
cHNmaWx0ZXIiKTsKKyAgICBtX3RlZSA9IG1ha2VFbGVtZW50KCJ0ZWUiKTsKKyAgICBtX3Npbmsg
PSBtYWtlRWxlbWVudCgiYXBwc2luayIpOworCisgICAgZ3N0X2FwcF9zaW5rX3NldF9lbWl0X3Np
Z25hbHMoR1NUX0FQUF9TSU5LKG1fc2luay5nZXQoKSksIFRSVUUpOworICAgIGdfb2JqZWN0X3Nl
dChtX2NhcHNmaWx0ZXIuZ2V0KCksICJjYXBzIiwgbV9jYXBzLmdldCgpLCBudWxscHRyKTsKKwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgc291cmNlLmdl
dCgpLCBjb252ZXJ0ZXIuZ2V0KCksIG1fY2Fwc2ZpbHRlci5nZXQoKSwgbV90ZWUuZ2V0KCksIG51
bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShzb3VyY2UuZ2V0KCksIGNvbnZlcnRl
ci5nZXQoKSwgbV9jYXBzZmlsdGVyLmdldCgpLCBtX3RlZS5nZXQoKSwgTlVMTCk7CisKKyAgICBh
ZGRTaW5rKG1fc2luay5nZXQoKSk7CisKKyAgICBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxi
YWNrKHBpcGVsaW5lKCkpOworfQorCitHc3RFbGVtZW50KiBHU3RyZWFtZXJDYXB0dXJlcjo6bWFr
ZUVsZW1lbnQoY29uc3QgY2hhciogZmFjdG9yeU5hbWUpCit7CisgICAgYXV0byBlbGVtZW50ID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGZhY3RvcnlOYW1lLCBudWxscHRyKTsKKyAgICBHVW5p
cXVlUHRyPGNoYXI+IGNhcHR1cmVyTmFtZShnX3N0cmR1cF9wcmludGYoIiVzX2NhcHR1cmVyXyVz
XyVwIiwgbmFtZSgpLCBHU1RfT0JKRUNUX05BTUUoZWxlbWVudCksIHRoaXMpKTsKKyAgICBnc3Rf
b2JqZWN0X3NldF9uYW1lKEdTVF9PQkpFQ1QoZWxlbWVudCksIGNhcHR1cmVyTmFtZS5nZXQoKSk7
CisKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6YWRk
U2luayhHc3RFbGVtZW50ICpuZXdTaW5rKQoreworICAgIGlmICghbV9waXBlbGluZSB8fCAhbV90
ZWUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcXVldWUgPSBtYWtlRWxlbWVudCgicXVl
dWUiKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4ocGlwZWxpbmUoKSksIHF1ZXVlLCBu
ZXdTaW5rLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50
KHF1ZXVlKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG5ld1Npbmsp
OworCisgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHMobV90ZWUuZ2V0KCksICJzcmNfJXUi
LCBxdWV1ZSwgInNpbmsiKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBp
ZiAoIWdzdF9lbGVtZW50X2xpbmsocXVldWUsIG5ld1NpbmspKQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKworICAgIGlmIChuZXdTaW5rID09IHNpbmsoKSkgeworICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgcXVldWUgYXMgbGVha3kgdXBzdHJlYW0i
LAorICAgICAgICAgICAgIiBzbyB0aGF0IHRoZSBwbGF5ZXIgY2FuIHNldCB0aGUgc2luayBhcyB0
byBQQVVTRUQgd2l0aG91dCAiCisgICAgICAgICAgICAiIHNldHRpbmcgdGhlIHdob2xlIGNhcHR1
cmVyIHRvIFBBVVNFRCIpOworICAgICAgICBnX29iamVjdF9zZXQocXVldWUsICJsZWFreSIsIDIg
LyogdXBzdHJlYW0gKi8sIG51bGxwdHIpOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiQWRkaW5nIHNpbms6ICUiIEdTVF9QVFJfRk9STUFULCBuZXdTaW5rKTsKKwor
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gZHVtcE5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc19zaW5rXyVz
X2FkZGVkIiwgR1NUX09CSkVDVF9OQU1FKHBpcGVsaW5lKCkpLCBHU1RfT0JKRUNUX05BTUUobmV3
U2luaykpKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihw
aXBlbGluZSgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkdW1wTmFtZS5nZXQoKSk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZXI6OnBsYXkoKQoreworICAgIEFTU0VSVChtX3BpcGVs
aW5lKTsKKworICAgIEdTVF9JTkZPX09CSkVDVCgoZ3BvaW50ZXIpIHBpcGVsaW5lKCksICJHb2lu
ZyB0byBQTEFZSU5HISIpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHBpcGVsaW5lKCks
IEdTVF9TVEFURV9QTEFZSU5HKTsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6c3RvcCgp
Cit7CisgICAgQVNTRVJUKG1fcGlwZWxpbmUpOworCisgICAgR1NUX0lORk9fT0JKRUNUKChncG9p
bnRlcikgcGlwZWxpbmUoKSwgIlRlYXJpbmcgZG93biEiKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0
byByZW1vdmUgc3luYyBoYW5kbGVyIGJlZm9yZSB0ZWFyaW5nIGRvd24sIGF2b2lkaW5nCisgICAg
Ly8gcG9zc2libGUgZGVhZGxvY2tzLgorICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdS
ZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKHBpcGVsaW5lKCkpKSk7CisgICAg
Z3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUocGlwZWxpbmUoKSwgR1NUX1NUQVRF
X05VTEwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckNhcHR1cmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzM0YjgxZDFiODNhZTA4OThk
ZmZjZjgxMTJmZDNlMTg1YjYzN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmgKQEAgLTAs
MCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJS
VEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKwor
I2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUgImdzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lckNhcHR1cmVyIHsKK3B1
YmxpYzoKKyAgICBHU3RyZWFtZXJDYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLCBHUmVm
UHRyPEdzdENhcHM+KTsKKyAgICBHU3RyZWFtZXJDYXB0dXJlcihjb25zdCBjaGFyKiBzb3VyY2VG
YWN0b3J5LCBHUmVmUHRyPEdzdENhcHM+KTsKKworICAgIHZvaWQgc2V0dXBQaXBlbGluZSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBwbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKyAgICBH
c3RDYXBzKiBjYXBzKCk7CisgICAgdm9pZCBhZGRTaW5rKEdzdEVsZW1lbnQgKm5ld1NpbmspOwor
ICAgIEdzdEVsZW1lbnQqIG1ha2VFbGVtZW50KGNvbnN0IGNoYXIqIGZhY3RvcnlOYW1lKTsKKyAg
ICBHc3RFbGVtZW50KiBjcmVhdGVTb3VyY2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5h
bWUoKSA9IDA7CisKKyAgICBHc3RFbGVtZW50KiBzaW5rKCkgY29uc3QgeyByZXR1cm4gbV9zaW5r
LmdldCgpOyB9CisgICAgdm9pZCBzZXRTaW5rKEdzdEVsZW1lbnQqIHNpbmspIHsgbV9zaW5rID0g
YWRvcHRHUmVmKHNpbmspOyB9OworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7
IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CisgICAgdmlydHVhbCBHc3RFbGVtZW50KiBjcmVh
dGVDb252ZXJ0ZXIoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fc2luazsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc3JjOworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV90ZWU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2NhcHNmaWx0ZXI7Cisg
ICAgR1JlZlB0cjxHc3REZXZpY2U+IG1fZGV2aWNlOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9j
YXBzOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKworcHJpdmF0ZToKKyAg
ICBjb25zdCBjaGFyKiBtX3NvdXJjZUZhY3Rvcnk7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMp
ICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZDc1ODFhMmU0NzUzZmQ3ZjAwY2M5MGJk
ZmY2MGY4Y2NkNjM2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApA
QCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdz
dC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRl
cmZhY2UuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYXBpL3BlZXJjb25uZWN0aW9uaW50ZXJmYWNlLmg+
CisjaW5jbHVkZSA8d2VicnRjL21lZGlhL2Jhc2UvdmlkZW9jb21tb24uaD4KKyNpbmNsdWRlIDx3
ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0Y3ZpZGVvY2FwdHVyZXIuaD4KKyNpbmNsdWRlIDx3ZWJy
dGMvbWVkaWEvZW5naW5lL3dlYnJ0Y3ZpZGVvY2FwdHVyZXJmYWN0b3J5Lmg+CisjaW5jbHVkZSA8
d2VicnRjL21vZHVsZXMvdmlkZW9fY2FwdHVyZS92aWRlb19jYXB0dXJlX2RlZmluZXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBzdGF0aWMgaW50IGRlZmF1bHRXaWR0aCA9IDY0
MDsKK2NvbnN0IHN0YXRpYyBpbnQgZGVmYXVsdEhlaWdodCA9IDQ4MDsKKworR1NUX0RFQlVHX0NB
VEVHT1JZKHdlYmtpdF92aWRlb19jYXB0dXJlX3NvdXJjZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9D
QVRfREVGQVVMVCB3ZWJraXRfdmlkZW9fY2FwdHVyZV9zb3VyY2VfZGVidWcKKworc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgZGVidWdSZWdpc3RlcmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVy
ZWRGbGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF92aWRl
b19jYXB0dXJlX3NvdXJjZV9kZWJ1ZywgIndlYmtpdHZpZGVvY2FwdHVyZXNvdXJjZSIsIDAsCisg
ICAgICAgICAgICAiV2ViS2l0IFZpZGVvIENhcHR1cmUgU291cmNlLiIpOworICAgIH0pOworfQor
CitjbGFzcyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2VGYWN0b3J5IGZpbmFsIDogcHVibGlj
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkgeworcHVibGljOgorICAg
IENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZVZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBDYXB0
dXJlRGV2aWNlJiBkZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKSBm
aW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6
Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3RyYWludHMpOworICAgIH0KK307CisK
K1JlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIGxpYldlYlJUQ1ZpZGVv
Q2FwdHVyZVNvdXJjZUZhY3RvcnkoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2VGYWN0b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0
b3J5LmdldCgpOworfQorCitDYXB0dXJlU291cmNlT3JFcnJvciBHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0
cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBhdXRvIGRldmljZSA9IEdTdHJlYW1lclZpZGVv
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmdzdHJlYW1lckRldmljZVdpdGhVSUQo
ZGV2aWNlSUQpOworICAgIGlmICghZGV2aWNlKSB7CisgICAgICAgIGF1dG8gZXJyb3JNZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKCk6
IEdTdHJlYW1lciBkaWQgbm90IGZpbmQgdGhlIGRldmljZTogJXMuIiwgZGV2aWNlSUQudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKGVy
cm9yTWVzc2FnZSkpOworICAgIH0KKworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoZGV2aWNlLnZhbHVlKCkpKTsKKworICAgIGlmIChj
b25zdHJhaW50cykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlDb25zdHJh
aW50cygqY29uc3RyYWludHMpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0LnZhbHVlKCkuZmlyc3QpOworICAgIH0KKyAgICByZXR1cm4gQ2Fw
dHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShzb3VyY2UpKTsKK30KKworUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpm
YWN0b3J5KCkKK3sKKyAgICByZXR1cm4gbGliV2ViUlRDVmlkZW9DYXB0dXJlU291cmNlRmFjdG9y
eSgpOworfQorCitHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OkdTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IGdjaGFyICpzb3VyY2VfZmFjdG9yeSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2
aWNlSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBuYW1lKQorICAgICwgbV9j
YXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI+KHNvdXJjZV9m
YWN0b3J5KSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyRGVidWcoKTsKK30KKworR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoR1N0cmVh
bWVyQ2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGRldmlj
ZS5wZXJzaXN0ZW50SWQoKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8sIGRldmlj
ZS5sYWJlbCgpKQorICAgICwgbV9jYXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZXI+KGRldmljZSkpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7
Cit9CisKK0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6fkdTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZSgpCit7Cit9CisKK2Jvb2wgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBs
eVNpemUoY29uc3QgSW50U2l6ZSAmc2l6ZSkKK3sKKyAgICBtX2NhcHR1cmVyLT5zZXRTaXplKHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5RnJhbWVSYXRlKGRvdWJsZSBmcmFt
ZXJhdGUpCit7CisgICAgbV9jYXB0dXJlci0+c2V0RnJhbWVSYXRlKGZyYW1lcmF0ZSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0
YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgbV9jYXB0dXJlci0+c2V0dXBQaXBlbGluZSgpOwor
ICAgIG1fY2FwdHVyZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7
CisgICAgbV9jYXB0dXJlci0+c2V0RnJhbWVSYXRlKGZyYW1lUmF0ZSgpKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fY2FwdHVyZXItPnNpbmsoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5l
d1NhbXBsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgbV9jYXB0dXJlci0+cGxheSgpOworfQorCitH
c3RGbG93UmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6bmV3U2FtcGxlQ2FsbGJh
Y2soR3N0RWxlbWVudCogc2luaywgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKiBzb3VyY2Up
Cit7CisgICAgYXV0byBnc3RTYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2Ft
cGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNh
bXBsZUdTdHJlYW1lcjo6Y3JlYXRlKFdURk1vdmUoZ3N0U2FtcGxlKSwgV2ViQ29yZTo6RmxvYXRT
aXplKCksIFN0cmluZygpKTsKKworICAgIC8vIEZJWE1FIC0gQ2hlY2sgaG93IHByZXNlbnRhdGlv
blNpemUgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBoZXJlLgorICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCpzb3VyY2UpLCBtZWRpYVNhbXBsZSA9IFdURk1vdmUo
bWVkaWFTYW1wbGUpXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnZpZGVvU2FtcGxlQXZhaWxh
YmxlKG1lZGlhU2FtcGxlLmdldCgpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBHU1RfRkxPV19P
SzsKK30KKwordm9pZCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdE
YXRhKCkKK3sKKyAgICBtX2NhcHR1cmVyLT5zdG9wKCk7CisKKyAgICBHU1RfSU5GTygiUmVzZXQg
aGVpZ2h0IGFuZCB3aWR0aCBhZnRlciBzdG9wcGluZyBzb3VyY2UiKTsKKyAgICBzZXRIZWlnaHQo
ZGVmYXVsdEhlaWdodCk7CisgICAgc2V0V2lkdGgoZGVmYXVsdFdpZHRoKTsKK30KKworY29uc3Qg
UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIGlmICghbV9jYXBhYmlsaXRpZXMpIHsK
KyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMoc2V0
dGluZ3MoKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpKTsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBz
PiBjYXBzID0gYWRvcHRHUmVmKG1fY2FwdHVyZXItPmNhcHMoKSk7CisgICAgICAgIGludDMyX3Qg
bWluV2lkdGggPSBHX01BWElOVDMyLCBtaW5IZWlnaHQgPSBHX01BWElOVDMyLCBtaW5GcmFtZXJh
dGUgPSBHX01BWElOVDMyOworICAgICAgICBpbnQzMl90IG1heFdpZHRoID0gR19NSU5JTlQzMiwg
bWF4SGVpZ2h0ID0gR19NSU5JTlQzMiwgbWF4RnJhbWVyYXRlID0gR19NSU5JTlQzMjsKKworICAg
ICAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUoY2Fwcy5nZXQoKSk7
IGkrKykgeworICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBzdHIgPSBnc3RfY2Fwc19nZXRfc3Ry
dWN0dXJlKGNhcHMuZ2V0KCksIGkpOworCisgICAgICAgICAgICAvLyBPbmx5IGFjY2VwdCByYXcg
dmlkZW8gZm9yIG5vdy4KKyAgICAgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHIsICJ2aWRlby94LXJhdyIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBpbnQzMl90IHRtcE1pbldpZHRoLCB0bXBNaW5IZWlnaHQsIHRtcE1pbkZQU051bWVyYXRv
ciwgdG1wTWluRlBTRGVub21pbmF0b3IsIHRtcE1pbkZyYW1lcmF0ZTsKKyAgICAgICAgICAgIGlu
dDMyX3QgdG1wTWF4V2lkdGgsIHRtcE1heEhlaWdodCwgdG1wTWF4RlBTTnVtZXJhdG9yLCB0bXBN
YXhGUFNEZW5vbWluYXRvciwgdG1wTWF4RnJhbWVyYXRlOworCisgICAgICAgICAgICBpZiAoIWdz
dF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgIndpZHRoIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAmdG1wTWlu
V2lkdGgsICZ0bXBNYXhXaWR0aCwgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgJnRtcE1p
bkhlaWdodCwgJnRtcE1heEhlaWdodCwgbnVsbHB0cikpIHsKKworICAgICAgICAgICAgICAgIGdf
YXNzZXJ0KGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgIndpZHRoIiwgR19UWVBFX0lOVCwgJnRtcE1p
bldpZHRoLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgJnRtcE1pbkhlaWdodCwgbnVsbHB0cikpOwor
ICAgICAgICAgICAgICAgIHRtcE1heFdpZHRoID0gdG1wTWluV2lkdGg7CisgICAgICAgICAgICAg
ICAgdG1wTWF4SGVpZ2h0ID0gdG1wTWluSGVpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXQoc3RyLCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJB
Q1RJT05fUkFOR0UsICZ0bXBNaW5GUFNOdW1lcmF0b3IsICZ0bXBNaW5GUFNEZW5vbWluYXRvciwg
JnRtcE1heEZQU051bWVyYXRvciwgJnRtcE1heEZQU0Rlbm9taW5hdG9yLCBudWxscHRyKSkgewor
ICAgICAgICAgICAgICAgIHRtcE1pbkZyYW1lcmF0ZSA9IChpbnQpKHRtcE1pbkZQU051bWVyYXRv
ciAvIHRtcE1pbkZQU0Rlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICB0bXBNYXhGcmFtZXJh
dGUgPSAoaW50KSh0bXBNYXhGUFNOdW1lcmF0b3IgLyB0bXBNYXhGUFNEZW5vbWluYXRvcik7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwKKyAgICAgICAgICAg
ICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sICZ0bXBNaW5GUFNOdW1lcmF0b3Is
ICZ0bXBNaW5GUFNEZW5vbWluYXRvciwgbnVsbHB0cikpIHsKKyAgICAgICAgICAgICAgICB0bXBN
YXhGUFNOdW1lcmF0b3IgPSB0bXBNaW5GUFNOdW1lcmF0b3I7CisgICAgICAgICAgICAgICAgdG1w
TWF4RlBTRGVub21pbmF0b3IgPSB0bXBNaW5GUFNEZW5vbWluYXRvcjsKKyAgICAgICAgICAgICAg
ICB0bXBNaW5GcmFtZXJhdGUgPSAoaW50KSh0bXBNaW5GUFNOdW1lcmF0b3IgLyB0bXBNaW5GUFNE
ZW5vbWluYXRvcik7CisgICAgICAgICAgICAgICAgdG1wTWF4RnJhbWVyYXRlID0gKGludCkodG1w
TWF4RlBTTnVtZXJhdG9yIC8gdG1wTWF4RlBTRGVub21pbmF0b3IpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUqIGZyYW1lUmF0ZXMoZ3N0X3N0cnVj
dHVyZV9nZXRfdmFsdWUoc3RyLCAiZnJhbWVyYXRlIikpOworICAgICAgICAgICAgICAgIHRtcE1p
bkZyYW1lcmF0ZSA9IEdfTUFYSU5UOworICAgICAgICAgICAgICAgIHRtcE1heEZyYW1lcmF0ZSA9
IDA7CisKKyAgICAgICAgICAgICAgICBndWludCBmcmFtZVJhdGVzTGVuZ3RoID0gc3RhdGljX2Nh
c3Q8Z3VpbnQ+KGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGZyYW1lUmF0ZXMpKSAtIDE7CisKKyAg
ICAgICAgICAgICAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgZnJhbWVSYXRlc0xlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsID0gZ3N0X3ZhbHVlX2xp
c3RfZ2V0X3ZhbHVlKGZyYW1lUmF0ZXMsIGkpOworCisgICAgICAgICAgICAgICAgICAgIGdfYXNz
ZXJ0KEdfVkFMVUVfVFlQRSh2YWwpID09IEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ2ludCBmcmFtZXJhdGUgPSAoaW50KShnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251
bWVyYXRvcih2YWwpIC8gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcih2YWwpKTsK
KworICAgICAgICAgICAgICAgICAgICB0bXBNaW5GcmFtZXJhdGUgPSBzdGQ6Om1pbih0bXBNaW5G
cmFtZXJhdGUsIGZyYW1lcmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHRtcE1heEZyYW1lcmF0
ZSA9IHN0ZDo6bWF4KHRtcE1heEZyYW1lcmF0ZSwgZnJhbWVyYXRlKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
bWluV2lkdGggPSBzdGQ6Om1pbih0bXBNaW5XaWR0aCwgbWluV2lkdGgpOworICAgICAgICAgICAg
ICAgICAgICBtaW5IZWlnaHQgPSBzdGQ6Om1pbih0bXBNaW5IZWlnaHQsIG1pbkhlaWdodCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1pbkZyYW1lcmF0ZSA9IHN0ZDo6bWluKHRtcE1pbkZyYW1lcmF0
ZSwgbWluRnJhbWVyYXRlKTsKKworICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IHN0ZDo6
bWF4KHRtcE1heFdpZHRoLCBtYXhXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgIG1heEhlaWdo
dCA9IHN0ZDo6bWF4KHRtcE1heEhlaWdodCwgbWF4SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAg
ICAgbWF4RnJhbWVyYXRlID0gc3RkOjptYXgodG1wTWF4RnJhbWVyYXRlLCBtYXhGcmFtZXJhdGUp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1pbldpZHRo
ID0gdG1wTWluV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9IHRtcE1pbkhl
aWdodDsKKyAgICAgICAgICAgICAgICAgICAgbWluRnJhbWVyYXRlID0gdG1wTWluRnJhbWVyYXRl
OworCisgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoID0gdG1wTWF4V2lkdGg7CisgICAgICAg
ICAgICAgICAgICAgIG1heEhlaWdodCA9IHRtcE1heEhlaWdodDsKKyAgICAgICAgICAgICAgICAg
ICAgbWF4RnJhbWVyYXRlID0gdG1wTWF4RnJhbWVyYXRlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldERldmljZUlkKGlkKCkp
OworICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldFdpZHRoKENhcGFiaWxpdHlWYWx1ZU9yUmFu
Z2UobWluV2lkdGgsIG1heFdpZHRoKSk7CisgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0SGVp
Z2h0KENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UobWluSGVpZ2h0LCBtYXhIZWlnaHQpKTsKKyAgICAg
ICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSht
aW5GcmFtZXJhdGUsIG1heEZyYW1lcmF0ZSkpOworICAgICAgICAgICAgbV9jYXBhYmlsaXRpZXMg
PSBXVEZNb3ZlKGNhcGFiaWxpdGllcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
bV9jYXBhYmlsaXRpZXMudmFsdWUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fY3VycmVudFNldHRpbmdzKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7
CisKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBv
cnRlZENvbnN0cmFpbnRzOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0RldmljZUlkKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0ZhY2luZ01vZGUodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBv
cnRzV2lkdGgodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
SGVpZ2h0KHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Fz
cGVjdFJhdGlvKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0ZyYW1lUmF0ZSh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWlu
dHMoc3VwcG9ydGVkQ29uc3RyYWludHMpOworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0g
V1RGTW92ZShzZXR0aW5ncyk7CisgICAgfQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFdp
ZHRoKHNpemUoKS53aWR0aCgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0SGVpZ2h0KHNp
emUoKS5oZWlnaHQoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldEZyYW1lUmF0ZShmcmFt
ZVJhdGUoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldEFzcGVjdFJhdGlvKGFzcGVjdFJh
dGlvKCkpOworICAgIG1fY3VycmVudFNldHRpbmdzLT5zZXRGYWNpbmdNb2RlKGZhY2luZ01vZGUo
KSk7CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShM
SUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGZhZTYzYTY5NmQwMzI1NjExN2U5ZWI5YjFkNDVlMjk2MTQxYmUx
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShH
U1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oIgorI2luY2x1ZGUg
IlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZShjb25zdCBT
dHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKik7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFZpZGVvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsKKworICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZp
bmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uo
Y29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBnY2hhciAq
IHNvdXJjZV9mYWN0b3J5KTsKKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3Vy
Y2UoKTsKKworICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShHU3RyZWFtZXJDYXB0dXJl
RGV2aWNlKTsKKworICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1NhbXBsZUNhbGxiYWNrKEdz
dEVsZW1lbnQqLCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UqKTsKKworICAgIHZvaWQgc3Rh
cnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZp
bmFsOworCisgICAgYm9vbCBpc0NhcHR1cmVTb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CisgICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOworICAgIGJv
b2wgYXBwbHlGcmFtZVJhdGUoZG91YmxlKSBmaW5hbDsKKyAgICBib29sIGFwcGx5QXNwZWN0UmF0
aW8oZG91YmxlKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBtdXRhYmxlIHN0ZDo6b3B0
aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7Cisg
ICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9j
dXJyZW50U2V0dGluZ3M7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclZpZGVvQ2FwdHVy
ZXI+IG1fY2FwdHVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEzZWRlNWJhYWY4M2YyMzZmZDMzMmVkYjFmMWJhMWYxZmY1Y2Y3MGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1F
UikKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmgiCisKKyNpbmNsdWRlIDxnc3Qv
YXBwL2dzdGFwcHNpbmsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJWaWRl
b0NhcHR1cmVyOjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVyKEdTdHJlYW1lckNhcHR1cmVEZXZpY2Ug
ZGV2aWNlKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoZGV2aWNlLCBhZG9wdEdSZWYoZ3N0X2Nh
cHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC1yYXciKSkpCit7Cit9CisKK0dTdHJlYW1lclZp
ZGVvQ2FwdHVyZXI6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIoY29uc3QgY2hhciogc291cmNlRmFj
dG9yeSkKKyAgICA6IEdTdHJlYW1lckNhcHR1cmVyKHNvdXJjZUZhY3RvcnksIGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKSkKK3sKK30KKworR3N0RWxl
bWVudCogR1N0cmVhbWVyVmlkZW9DYXB0dXJlcjo6Y3JlYXRlQ29udmVydGVyKCkKK3sKKyAgICAv
LyBGSVhNRSBIYW5kbGUgZXJyb3JzLgorICAgIHJldHVybiBnc3RfcGFyc2VfYmluX2Zyb21fZGVz
Y3JpcHRpb24oInZpZGVvc2NhbGUgISB2aWRlb2NvbnZlcnQgISB2aWRlb3JhdGUiLCBUUlVFLCBu
dWxscHRyKTsKK30KKworR3N0VmlkZW9JbmZvIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OmdldEJl
c3RGb3JtYXQoKQoreworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3Rf
Y2Fwc19maXhhdGUoZ3N0X2RldmljZV9nZXRfY2FwcyhtX2RldmljZS5nZXQoKSkpKTsKKyAgICBH
c3RWaWRlb0luZm8gaW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJmluZm8sIGNh
cHMuZ2V0KCkpOworCisgICAgcmV0dXJuIGluZm87Cit9CisKK2Jvb2wgR1N0cmVhbWVyVmlkZW9D
YXB0dXJlcjo6c2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKCF3aWR0
aCB8fCAhaGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2NhcHMgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfY29weShtX2NhcHMuZ2V0KCkpKTsKKyAgICBnc3RfY2Fwc19zZXRfc2lt
cGxlKG1fY2Fwcy5nZXQoKSwgIndpZHRoIiwgR19UWVBFX0lOVCwgd2lkdGgsICJoZWlnaHQiLCBH
X1RZUEVfSU5ULCBoZWlnaHQsIG51bGxwdHIpOworCisgICAgaWYgKCFtX2NhcHNmaWx0ZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdfb2JqZWN0X3NldChtX2NhcHNmaWx0ZXIuZ2V0
KCksICJjYXBzIiwgbV9jYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OnNldEZyYW1lUmF0ZShkb3VibGUgZnJh
bWVSYXRlKQoreworICAgIGludCBudW1lcmF0b3IsIGRlbm9taW5hdG9yOworCisgICAgZ3N0X3V0
aWxfZG91YmxlX3RvX2ZyYWN0aW9uKGZyYW1lUmF0ZSwgJm51bWVyYXRvciwgJmRlbm9taW5hdG9y
KTsKKworICAgIGlmIChudW1lcmF0b3IgPCAtR19NQVhJTlQpIHsKKyAgICAgICAgR1NUX0lORk9f
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJGcmFtZXJhdGUgJWYgbm90IGFsbG93ZWQiLCBmcmFt
ZVJhdGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFudW1lcmF0
b3IpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRG8gbm90
IGZvcmNlIHZhcmlhYmxlIGZyYW1lcmF0ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkobV9jYXBzLmdldCgpKSk7
CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NhcHMuZ2V0KCksICJmcmFtZXJhdGUiLCBHU1Rf
VFlQRV9GUkFDVElPTiwgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgbnVsbHB0cik7CisKKyAgICBp
ZiAoIW1fY2Fwc2ZpbHRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rf
c2V0KG1fY2Fwc2ZpbHRlci5nZXQoKSwgImNhcHMiLCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFN
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yNDc1YWMwMTdlOWM4YzUxZWQ3ZjkyYzc3ZWQ4Yjc3MWI4ODlmMjliCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclZpZGVvQ2FwdHVyZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1
ZGUgIkdTdHJlYW1lckNhcHR1cmVyLmgiCisKKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyIDog
cHVibGljIEdTdHJlYW1lckNhcHR1cmVyIHsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVyKEdTdHJlYW1lckNhcHR1cmVEZXZpY2UpOworICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVy
ZXIoY29uc3QgY2hhciogc291cmNlX2ZhY3RvcnkpOworCisgICAgR3N0RWxlbWVudCogY3JlYXRl
Q29udmVydGVyKCkgZmluYWw7CisgICAgY29uc3QgY2hhciogbmFtZSgpIGZpbmFsIHsgcmV0dXJu
ICJWaWRlbyI7IH0KKworICAgIGJvb2wgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwor
ICAgIGJvb2wgc2V0RnJhbWVSYXRlKGRvdWJsZSk7CisgICAgR3N0VmlkZW9JbmZvIGdldEJlc3RG
b3JtYXQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJS
VEMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU5ZGU5MTJjNTE1MDVhMjllNTIzYTAzYTY2YWQxYjRiOWU2YmZi
ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKQEAgLTAs
MCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJU
QykKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmgiCisKKyNp
bmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lTWVk
aWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJM
aWJXZWJSVEM6OmF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKQoreworICAgIHJldHVybiBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjpzaW5nbGV0b24oKS5hdWRpb0ZhY3Rvcnko
KTsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyYgUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckxpYldlYlJUQzo6c2luZ2xldG9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTGliV2ViUlRDPiBjZW50ZXI7CisgICAgcmV0dXJuIGNlbnRlcjsKK30KKworUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6cGxhdGZvcm1D
ZW50ZXIoKQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRD
OjpzaW5nbGV0b24oKTsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQygpCisgICAgOiBtX2xpYldlYlJUQ1By
b3ZpZGVyKExpYldlYlJUQ1Byb3ZpZGVyOjpjcmVhdGUoKSkKK3sKK30KKworUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckxpYldlYlJUQzo6flJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJS
VEMoKQoreworfQorCitSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjphdWRpb0ZhY3RvcnkoKQoreworICAg
IGlmIChtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlKQorICAgICAgICByZXR1cm4gKm1fYXVkaW9GYWN0
b3J5T3ZlcnJpZGU7CisKKyAgICByZXR1cm4gR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpm
YWN0b3J5KCk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3Rvcnkm
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OnZpZGVvRmFjdG9yeSgpCit7Cisg
ICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpOworfQorCitD
YXB0dXJlRGV2aWNlTWFuYWdlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6
YXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpOworfQorCitDYXB0dXJlRGV2aWNlTWFu
YWdlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6dmlkZW9DYXB0dXJlRGV2
aWNlTWFuYWdlcigpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNpbmdsZXRvbigpOworfQorCitDYXB0dXJlRGV2aWNlTWFuYWdlciYgUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6ZGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkK
K3sKKyAgICByZXR1cm4gR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5n
bGV0b24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRi
MjJkODNjMTYyYjQ1MzhlMzQ1Y2RjYzM4ZmJiNzgwYzU5ZWE4ODIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAg
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiTGliV2ViUlRDUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5o
IgorCisjaW5jbHVkZSA8d2VicnRjL2FwaS9wZWVyY29ubmVjdGlvbmludGVyZmFjZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGli
V2ViUlRDIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIgeworcHVibGlj
OgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGli
V2ViUlRDJiBzaW5nbGV0b24oKTsKKworICAgIHdlYnJ0Yzo6UGVlckNvbm5lY3Rpb25GYWN0b3J5
SW50ZXJmYWNlKiBmYWN0b3J5KCkgeyByZXR1cm4gbV9saWJXZWJSVENQcm92aWRlci0+ZmFjdG9y
eSgpOyB9CisKKyAgICBzdGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFj
dG9yeSYgdmlkZW9DYXB0dXJlU291cmNlRmFjdG9yeSgpOworICAgIHN0YXRpYyBSZWFsdGltZU1l
ZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBhdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5
KCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM+OworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJMaWJXZWJSVEMoKTsKKyAgICB+UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQygp
OworCisgICAgdm9pZCBzZXRBdWRpb0ZhY3RvcnkoUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9D
YXB0dXJlRmFjdG9yeSYgZmFjdG9yeSkgZmluYWwgeyBtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlID0g
JmZhY3Rvcnk7IH0KKyAgICB2b2lkIHVuc2V0QXVkaW9GYWN0b3J5KFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmKSBmaW5hbCB7IG1fYXVkaW9GYWN0b3J5T3ZlcnJpZGUg
PSBudWxscHRyOyB9CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0
b3J5JiBhdWRpb0ZhY3RvcnkoKSBmaW5hbDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRl
b0NhcHR1cmVGYWN0b3J5JiB2aWRlb0ZhY3RvcnkoKSBmaW5hbDsKKworICAgIENhcHR1cmVEZXZp
Y2VNYW5hZ2VyJiBhdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWw7CisgICAgQ2FwdHVy
ZURldmljZU1hbmFnZXImIHZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXIoKSBmaW5hbDsKKyAgICBD
YXB0dXJlRGV2aWNlTWFuYWdlciYgZGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWw7
CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5KiBtX2F1ZGlv
RmFjdG9yeU92ZXJyaWRlIHsgbnVsbHB0ciB9OworICAgIFVuaXF1ZVJlZjxMaWJXZWJSVENQcm92
aWRlcj4gbV9saWJXZWJSVENQcm92aWRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFBlcm1pc3Np
b25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFBl
cm1pc3Npb25SZXF1ZXN0LmNwcAppbmRleCA5MjIzNWNlZjE3ZTU2M2EzMGI0ZDNjMTQ2ZDZjNDU3
OWU5ODYwMjUwLi5lZDIwNTYwYjcyMDdiYjQyODk4YmU1ODZlM2FkNjY1OWQxYTgwNjRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRQZXJtaXNzaW9u
UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
UGVybWlzc2lvblJlcXVlc3QuY3BwCkBAIC03MCwzICs3MCwzMSBAQCB2b2lkIHdlYmtpdF9wZXJt
aXNzaW9uX3JlcXVlc3RfZGVueShXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVzdCkKICAg
ICBpZiAoaWZhY2UtPmRlbnkpCiAgICAgICAgIGlmYWNlLT5kZW55KHJlcXVlc3QpOwogfQorCisv
KioKKyAqIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfcmVzb2x2ZV9jaGVjazoKKyAqIEByZXF1
ZXN0OiBhICNXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCByZXByZXNlbnRpbmcgYSBzaXR1YXRpb24g
d2hlcmUKKyAqIHRoZSBlbmdpbmUgbmVlZHMgdG8gY2hlY2sgaWYgdGhlIHVzZXIgZ2F2ZSBwZXJt
aXNzaW9uIHRvIGRvIGNlcnRhaW4KKyAqIHR5cGUgb2Ygb3BlcmF0aW9ucyBmb3IgYW4gb3JpZ2lu
LgorICogQHNhbHQ6IHJhbmRvbSBkYXRhIGdlbmVyYXRlZCBieSB0aGUgZW1iZWRkZXIKKyAqIHRo
YXQgdGhlIGVuZ2luZSB3aWxsIHVzZSB0byBoYXNoIGRhdGEgaW4gY2FzZSB0aGUgdXNlciBkb2Vz
IG5vdAorICogYWxsb3cgdGhlIG9yaWdpbiB0byBhY2Nlc3MgY2VydGFpbiBpbmZvcm1hdGlvbi4K
KyAqIEBhbGxvd2VkOiBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgdXNlciBhbGxvd3MgdGhl
IHJlcXVlc3RlZAorICogb3BlcmF0aW9uLCBpZiBpdCBkb2VzIHRoZSBlbmdpbmUgd2lsbCBzZW5k
IG1vcmUgaW5mb3JtYXRpb24gdG8gdGhlCisgKiBvcmlnaW4sIGlmIGl0IGRvZXNuJ3QgaXQgd2ls
bCB1c2UgdGhlIHNhbHQgdG8gaGFzaCB0aGUgaW5mb3JtYXRpb24KKyAqIHRvIGdlbmVyYXRlCisg
KgorICogV2UgaGF2ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gc3BlY2lmeSBpZiBhIHJlcXVl
c3QgaXMgYWxsb3dlZAorICogdXNpbmcgdGhlIEBhbGxvd2VkIHBhcmFtZXRlci4gQWxzbyB3ZSBh
ZGQgdGhlIHJhbmRvbSBkYXRhIHRoYXQKKyAqIHdvdWxkIGJlIHVzZWQgYXMgYSBoYXNoIHNhbHQg
aW4gY2FzZSB0aGUgdXNlciBkaWQgbm90IGFsbG93IHRoZQorICogb3JpZ2luIGZvciB0aGlzIGtp
bmQgb2YgcmVxdWVzdHMsIHVzaW5nIHRoZQorICogQHNhbHQgcGFyYW1ldGVyLgorICovCit2b2lk
IHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfcmVzb2x2ZV9jaGVjayhXZWJLaXRQZXJtaXNzaW9u
UmVxdWVzdCAqcmVxdWVzdCwgY29uc3QgZ2NoYXIqIG1lZGlhSWRlbnRpZmllckhhc2hTYWx0LCBn
Ym9vbGVhbiBhbGxvd2VkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BFUk1J
U1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElm
YWNlKiBpZmFjZSA9IFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1RfR0VUX0lGQUNFKHJlcXVlc3Qp
OworICAgIGlmIChpZmFjZS0+cmVzb2x2ZV9jaGVjaykKKyAgICAgICAgaWZhY2UtPnJlc29sdmVf
Y2hlY2socmVxdWVzdCwgbWVkaWFJZGVudGlmaWVySGFzaFNhbHQsIGFsbG93ZWQpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3Bw
CmluZGV4IDQyYmZhOWZmMDVmZTkwMjdlODU0ZjdkYjQ1ZjE0MzM1MmI0NjdkNWEuLmVlOTk4ZTg3
MzlhMWEyMmNhOGNjOTY3OGU4MjJjYWM5ZWFiOGMwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTE5MSw2ICsxOTEs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9vbCBj
aGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQ
cm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBBUEk6
OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tQcm94eSYgcGVybWlzc2lvblJlcXVlc3QpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBHUmVmUHRyPFdlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0PiB1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tD
cmVhdGUocGVybWlzc2lvblJlcXVlc3QsIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCB0b3BMZXZl
bERvY3VtZW50T3JpZ2luKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvbkNo
ZWNrKG1fd2ViVmlldywgV0VCS0lUX1BFUk1JU1NJT05fUkVRVUVTVCh1c2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdC5nZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICB2
b2lkIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQ
cm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXROb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdD4gbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QgPSBh
ZG9wdEdSZWYod2Via2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3Q6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSkucHRyKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0LmNwcAppbmRl
eCBmMDhiZmMxMTBmOGEwODcxNjFmZTJhZjkyMTgxMGQxOTgxYjg0ZTU1Li43MjhhODFiMGNkY2Fk
YmRhOTE1NDQ1NDA3MDc4OWIyMDUxYThiYjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3QuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QuaCIKIAorI2luY2x1ZGUg
IlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdFBlcm1pc3Npb25SZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgi
CkBAIC01Myw2ICs1NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3Rf
aW50ZXJmYWNlX2luaXQoV2ViS2l0UGVybWlzc2lvblJlcXVlc3RJZmFjCiAKIHN0cnVjdCBfV2Vi
S2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcml2YXRlIHsKICAgICBSZWZQdHI8VXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eT4gcmVxdWVzdDsKKyAgICBSZWZQdHI8VXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrUHJveHk+IGNoZWNrUmVxdWVzdDsKICAgICBib29sIG1hZGVEZWNpc2lv
bjsKIH07CiAKQEAgLTk1LDE2ICs5NywyOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdERlbnkoV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlcwogICAg
IHByaXYtPnJlcXVlc3QtPmRlbnkoVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eTo6VXNl
ck1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpQZXJtaXNzaW9uRGVuaWVkKTsKIH0KIAorc3RhdGlj
IHZvaWQgd2Via2l0VXNlck1lZGlhUGVybWlzc2lvblJlc29sdmVDaGVjayhXZWJLaXRQZXJtaXNz
aW9uUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIHNhbHQsIGdib29sZWFuIGFsbG93ZWQp
Cit7CisgICAgQVNTRVJUKFdFQktJVF9JU19VU0VSX01FRElBX1BFUk1JU1NJT05fUkVRVUVTVChy
ZXF1ZXN0KSk7CisKKyAgICBXZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfVVNFUl9NRURJQV9QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCktPnBy
aXY7CisKKyAgICBwcml2LT5jaGVja1JlcXVlc3QtPnNldFVzZXJNZWRpYUFjY2Vzc0luZm8oU3Ry
aW5nOjpmcm9tVVRGOChzYWx0KSwgYWxsb3dlZCk7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9w
ZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0UGVybWlzc2lvblJlcXVlc3RJ
ZmFjZSogaWZhY2UpCiB7CiAgICAgaWZhY2UtPmFsbG93ID0gd2Via2l0VXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RBbGxvdzsKICAgICBpZmFjZS0+ZGVueSA9IHdlYmtpdFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0RGVueTsKKyAgICBpZmFjZS0+cmVzb2x2ZV9jaGVjayA9IHdlYmtpdFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXNvbHZlQ2hlY2s7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgLy8g
RGVmYXVsdCBiZWhhdmlvdXIgd2hlbiBubyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlIGlzIGRlbnlp
bmcgdGhlIHJlcXVlc3QuCi0gICAgd2Via2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3REZW55
KFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1Qob2JqZWN0KSk7CisgICAgV2ViS2l0VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX1VTRVJfTUVESUFfUEVSTUlT
U0lPTl9SRVFVRVNUKG9iamVjdCktPnByaXY7CisgICAgaWYgKHByaXYtPnJlcXVlc3QpCisgICAg
ICAgIHdlYmtpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0RGVueShXRUJLSVRfUEVSTUlTU0lP
Tl9SRVFVRVNUKG9iamVjdCkpOwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF91c2VyX21lZGlh
X3Blcm1pc3Npb25fcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7CiB9CiAK
QEAgLTExOCw3ICsxMzIsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICovCiBnYm9vbGVhbiB3ZWJraXRfdXNl
cl9tZWRpYV9wZXJtaXNzaW9uX2lzX2Zvcl9hdWRpb19kZXZpY2UoV2ViS2l0VXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVx
dWVzdC0+cHJpdi0+cmVxdWVzdCwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJl
cXVlc3QtPnByaXYtPnJlcXVlc3QgfHwgcmVxdWVzdC0+cHJpdi0+Y2hlY2tSZXF1ZXN0LCBGQUxT
RSk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPmNoZWNrUmVxdWVzdCkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOwogICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5yZXF1ZXN0LT5yZXF1aXJlc0F1ZGlv
Q2FwdHVyZSgpOwogfQogCkBAIC0xMzIsNyArMTQ4LDkgQEAgZ2Jvb2xlYW4gd2Via2l0X3VzZXJf
bWVkaWFfcGVybWlzc2lvbl9pc19mb3JfYXVkaW9fZGV2aWNlKFdlYktpdFVzZXJNZWRpYVBlcm1p
c3MKICAqLwogZ2Jvb2xlYW4gd2Via2l0X3VzZXJfbWVkaWFfcGVybWlzc2lvbl9pc19mb3Jfdmlk
ZW9fZGV2aWNlKFdlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0KQogewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QtPnByaXYtPnJlcXVlc3QsIEZBTFNFKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LT5wcml2LT5yZXF1ZXN0IHx8IHJlcXVl
c3QtPnByaXYtPmNoZWNrUmVxdWVzdCwgRkFMU0UpOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5j
aGVja1JlcXVlc3QpCisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICByZXR1cm4gcmVxdWVzdC0+
cHJpdi0+cmVxdWVzdC0+cmVxdWlyZXNWaWRlb0NhcHR1cmUoKTsKIH0KIApAQCAtMTk2LDMgKzIx
NCwxNCBAQCBXZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdCogd2Via2l0VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RDcmVhdGUoVXNlck1lZAogICAgIHVzZXJtZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0LT5wcml2LT5yZXF1ZXN0ID0gJnJlcXVlc3Q7CiAgICAgcmV0dXJuIHVzZXJtZWRpYVBl
cm1pc3Npb25SZXF1ZXN0OwogfQorCitXZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdCog
d2Via2l0VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrQ3JlYXRlKFVzZXJNZWRpYVBlcm1pc3Npb25D
aGVja1Byb3h5JiByZXF1ZXN0LCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVu
dE9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbikKK3sK
KyAgICBXZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdCogdXNlcm1lZGlhUGVybWlzc2lv
blJlcXVlc3QgPSBXRUJLSVRfVVNFUl9NRURJQV9QRVJNSVNTSU9OX1JFUVVFU1QoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX1VTRVJfTUVESUFfUEVSTUlTU0lPTl9SRVFVRVNULCBudWxscHRyKSk7
CisKKyAgICBVTlVTRURfUEFSQU0odXNlck1lZGlhRG9jdW1lbnRPcmlnaW4pOworICAgIFVOVVNF
RF9QQVJBTSh0b3BMZXZlbERvY3VtZW50T3JpZ2luKTsKKworICAgIHVzZXJtZWRpYVBlcm1pc3Np
b25SZXF1ZXN0LT5wcml2LT5jaGVja1JlcXVlc3QgPSAmcmVxdWVzdDsKKyAgICByZXR1cm4gdXNl
cm1lZGlhUGVybWlzc2lvblJlcXVlc3Q7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0UHJpdmF0ZS5oCmluZGV4IDkwNGExNWJlNzZlZTc1ZjZjOTY4NWU5N2NiNjVj
M2I5NjlkYzE4NmMuLjI5OTc3MjY4ZDQyNGZiYjE0N2I4MzNmYTFlYTMxODUzOTkwNTllNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0y
MiwzICsyMiw0IEBACiAjaW5jbHVkZSAiV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3Qu
aCIKIAogV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QqIHdlYmtpdFVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQ
cm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJik7CitXZWJL
aXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdCogd2Via2l0VXNlck1lZGlhUGVybWlzc2lvbkNo
ZWNrQ3JlYXRlKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmLCBBUEk6OlNl
Y3VyaXR5T3JpZ2luJiwgQVBJOjpTZWN1cml0eU9yaWdpbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCAzYjdmMjg3MTUy
MGI2MzRiOGY5N2I3MDY4YjFiNzczNzA1YTUzNmYwLi5lZDY3MDQ3OWNiZWYwN2NmODBhMTc0ZDNl
NTBlOGQ2ODMzNDQxYzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtNjksNiArNjksOCBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPGds
aWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVt
YmVyLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JT
Y29wZS5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ2xp
Yi9XVEZHVHlwZS5oPgpAQCAtMTI0LDYgKzEyNiw3IEBAIGVudW0gewogCiAgICAgREVDSURFX1BP
TElDWSwKICAgICBQRVJNSVNTSU9OX1JFUVVFU1QsCisgICAgUEVSTUlTU0lPTl9DSEVDSywKIAog
ICAgIE1PVVNFX1RBUkdFVF9DSEFOR0VELAogCkBAIC0yMTIsNiArMjE1LDcgQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgQ1N0cmluZyB0aXRsZTsKICAgICBDU3RyaW5nIGN1
c3RvbVRleHRFbmNvZGluZzsKICAgICBDU3RyaW5nIGFjdGl2ZVVSSTsKKyAgICBTdHJpbmcgbWVk
aWFJZGVudGlmaWVySGFzaFNhbHQ7CiAgICAgYm9vbCBpc0xvYWRpbmc7CiAgICAgYm9vbCBpc0Vw
aGVtZXJhbDsKICAgICBib29sIGlzQ29udHJvbGxlZEJ5QXV0b21hdGlvbjsKQEAgLTQyOCw2ICs0
MzIsMjYgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdChX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblIKICAgICByZXR1cm4gVFJVRTsKIH0KIAor
c3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdQZXJtaXNzaW9uQ2hlY2soV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgV2Vi
S2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGlmIChwcml2LT5t
ZWRpYUlkZW50aWZpZXJIYXNoU2FsdC5pc051bGwoKSkgeworICAgICAgICBzdGF0aWMgaW50IGhh
c2hTYWx0U2l6ZSA9IDEyODsKKyAgICAgICAgc3RhdGljIGludCByYW5kb21EYXRhU2l6ZSA9IGhh
c2hTYWx0U2l6ZSAvIDE2OworICAgICAgICB1aW50NjRfdCByYW5kb21EYXRhW3JhbmRvbURhdGFT
aXplXTsKKyAgICAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ocmFuZG9tRGF0YSksIHNpemVvZihyYW5kb21EYXRhKSk7CisK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLnJlc2VydmVD
YXBhY2l0eSgxMjgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhbmRvbURhdGFTaXpl
OyBpKyspCisgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZDY0QXNIZXgocmFuZG9tRGF0YVswXSwg
YnVpbGRlcik7CisgICAgICAgIHByaXYtPm1lZGlhSWRlbnRpZmllckhhc2hTYWx0ID0gYnVpbGRl
ci50b1N0cmluZygpOworICAgIH0KKworICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfcmVz
b2x2ZV9jaGVjayhyZXF1ZXN0LCBwcml2LT5tZWRpYUlkZW50aWZpZXJIYXNoU2FsdC51dGY4KCku
ZGF0YSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIGFsbG93
TW9kYWxEaWFsb2dzQ2hhbmdlZChXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MsIEdQYXJhbVNwZWMq
LCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdldFBhZ2Uod2ViVmlldykuc2V0Q2Fu
UnVuTW9kYWwod2Via2l0X3NldHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdz
KSk7CkBAIC04MzUsNiArODU5LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNz
LT5zY3JpcHRfZGlhbG9nID0gd2Via2l0V2ViVmlld1NjcmlwdERpYWxvZzsKICAgICB3ZWJWaWV3
Q2xhc3MtPmRlY2lkZV9wb2xpY3kgPSB3ZWJraXRXZWJWaWV3RGVjaWRlUG9saWN5OwogICAgIHdl
YlZpZXdDbGFzcy0+cGVybWlzc2lvbl9yZXF1ZXN0ID0gd2Via2l0V2ViVmlld1Blcm1pc3Npb25S
ZXF1ZXN0OworICAgIHdlYlZpZXdDbGFzcy0+cGVybWlzc2lvbl9jaGVjayA9IHdlYmtpdFdlYlZp
ZXdQZXJtaXNzaW9uQ2hlY2s7CiAgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2VyID0g
d2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyOwogICAgIHdlYlZpZXdDbGFzcy0+YXV0aGVudGlj
YXRlID0gd2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZTsKICAgICB3ZWJWaWV3Q2xhc3MtPnNob3df
bm90aWZpY2F0aW9uID0gd2Via2l0V2ViVmlld1Nob3dOb3RpZmljYXRpb247CkBAIC0xNDkyLDYg
KzE1MTcsNDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9n
ZW5lcmljLAogICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyogbnVtYmVyIG9mIHBhcmFtZXRl
cnMgKi8KICAgICAgICAgV0VCS0lUX1RZUEVfUEVSTUlTU0lPTl9SRVFVRVNUKTsKKworICAgIC8q
KgorICAgICAqIFdlYktpdFdlYlZpZXc6OnBlcm1pc3Npb24tY2hlY2s6CisgICAgICogQHdlYl92
aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisg
ICAgICogQHJlcXVlc3Q6IHRoZSAjV2ViS2l0UGVybWlzc2lvblJlcXVlc3QKKyAgICAgKgorICAg
ICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBXZWJLaXQgd2FudHMgdG8gY2hlY2sgdGhl
CisgICAgICogcGVybWlzc2lvbnMgYWxyZWFkeSBnaXZlbiB0byBhbiBvcmlnaW4gYnkgYSB1c2Vy
LCBzdWNoIGFzCisgICAgICogYWxsb3dpbmcgdGhlIGJyb3dzZXIgdG8gdXNlIHRoZSBtaWNyb3Bo
b25lIG9yIHRoZQorICAgICAqIGNhbWVyYS4gVXN1YWxseSB0aGUgZW1iZWRkZXIgZG9lcyBub3Qg
YXNrIHRoZSB1c2VyIHRvIHJlc29sdmUKKyAgICAgKiB0aGUgcmVxdWVzdCBidXQgdXNlcyB3aGF0
IHRoZSB1c2VyIGFuc3dlcmVkIHByZXZpb3VzbHksIGRlbnlpbmcKKyAgICAgKiBieSBkZWZhdWx0
IGlmIHRoZSB1c2VyIGRpZCBub3QgZ2l2ZSBwZXJtaXNzaW9ucyBzcGVjaWZpY2FsbHkgdG8KKyAg
ICAgKiB0aGlzIG9yaWdpbi4KKyAgICAgKgorICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFi
b3V0IGhvdyB0byB1c2UgdGhlIEByZXF1ZXN0IGNoZWNrCisgICAgICogcGVybWlzc2lvbi1yZXF1
ZXN0IHNpZ25hbCBkb2N1bWVudGF0aW9uLgorICAgICAqCisgICAgICogSWYgdGhlIHNpZ25hbCBp
cyBub3QgaGFuZGxlZCwgdGhlIEByZXF1ZXN0IHdpbGwgYmUgZGVuaWVkIGFuZCBhCisgICAgICog
cmFuZG9tIGhhc2ggc2FsdCB3aWxsIGJlIGdlbmVyYXRlZC4gVXN1YWxseSBhIGVtYmVkZGVyIHdh
bnRzIHRvCisgICAgICogY29ubmVjdCB0byB0aGUgc2lnbmFsIGFuZCBjYWxsCisgICAgICogd2Vi
a2l0X3Blcm1pc3Npb25fcmVxdWVzdF9yZXNvbHZlX2NoZWNrKCkgYW5zd2VyaW5nIGJhc2VkIG9u
CisgICAgICogd2hhdCB0aGUgdXNlciBhbHJlYWR5IGRlY2lkZWQgYWJvdXQgc29tZSBwcmV2aW91
cworICAgICAqICNXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCwgdGhhdCBtZWFucyBzdG9yaW5nIHRo
ZSBwcmV2aW91cworICAgICAqIGRlY2lzaW9ucyBvZiB0aGUgdXNlciBhYm91dCBlYWNoIG9yaWdp
bi4gSXQgYWxzbyBzaG91bGQgdXNlIGEKKyAgICAgKiByYW5kb20gc2FsdCB0aGF0IG11c3QgYmUg
c3RvcmVkIGZvciBlYWNoIG9yaWdpbiB0byBtYWtlIHN1cmUKKyAgICAgKiB0aGUgd2VicGFnZSBh
bHdheXMgZ2V0cyB0aGUgc2FtZSBJRCBmb3IgdGhlIGRldmljZXMsIG9yIHNvbWUKKyAgICAgKiBh
cHBsaWNhdGlvbnMgY291bGQgbm90IHdvcmsgcHJvcGVybHkuCisgICAgICoKKyAgICAgKiBSZXR1
cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3Ig
dGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhl
ci4KKyAgICAgKgorICAgICAqLworICAgIHNpZ25hbHNbUEVSTUlTU0lPTl9DSEVDS10gPSBnX3Np
Z25hbF9uZXcoCisgICAgICAgICJwZXJtaXNzaW9uLWNoZWNrIiwKKyAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHBlcm1pc3Npb25fY2hlY2sp
LAorICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIG51bGxwdHIgLyog
YWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMs
CisgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLwor
ICAgICAgICBXRUJLSVRfVFlQRV9QRVJNSVNTSU9OX1JFUVVFU1QpOworCiAgICAgLyoqCiAgICAg
ICogV2ViS2l0V2ViVmlldzo6bW91c2UtdGFyZ2V0LWNoYW5nZWQ6CiAgICAgICogQHdlYl92aWV3
OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCkBAIC0y
MjAwLDYgKzIyNjcsMTIgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBlcm1pc3Npb24KICAgICBnX3NpZ25hbF9l
bWl0KHdlYlZpZXcsIHNpZ25hbHNbUEVSTUlTU0lPTl9SRVFVRVNUXSwgMCwgcmVxdWVzdCwgJnJl
dHVyblZhbHVlKTsKIH0KIAordm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25DaGVjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcs
IHNpZ25hbHNbUEVSTUlTU0lPTl9DSEVDS10sIDAsIHJlcXVlc3QsICZyZXR1cm5WYWx1ZSk7Cit9
CisKIHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdCwgV2ViRXZl
bnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMpCiB7CiAjaWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRl
LmgKaW5kZXggMzYwNWE5MTVlZDUwMTA4NjZmNTkyYTU1NDMyNWUyZjY1ZGUwYmY1NS4uY2M0NTZm
YWU4YmMxNzMxN2QwNWQzMDdiOWY5NWQyOWZlZTE0ZTEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC02
Myw2ICs2Myw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0FjY2VwdEN1cnJlbnRTY3JpcHREaWFsb2co
V2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJraXRXZWJWaWV3RGlzbWlzc0N1cnJlbnRTY3JpcHRE
aWFsb2coV2ViS2l0V2ViVmlldyopOwogc3RkOjpvcHRpb25hbDxXZWJLaXRTY3JpcHREaWFsb2dU
eXBlPiB3ZWJraXRXZWJWaWV3R2V0Q3VycmVudFNjcmlwdERpYWxvZ1R5cGUoV2ViS2l0V2ViVmll
dyopOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCopOwordm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBl
cm1pc3Npb25DaGVjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqKTsK
IHZvaWQgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRXZWJWaWV3KiwgV2Vi
S2l0UG9saWN5RGVjaXNpb25UeXBlLCBXZWJLaXRQb2xpY3lEZWNpc2lvbiopOwogdm9pZCB3ZWJr
aXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBjb25zdCBXZWJLaXQ6
OldlYkhpdFRlc3RSZXN1bHREYXRhJiwgV2ViS2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzKTsKIHZv
aWQgd2Via2l0V2ViVmlld0hhbmRsZURvd25sb2FkUmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2Vi
S2l0OjpEb3dubG9hZFByb3h5Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmgKaW5kZXggYTYyZjFmMWE1YjZk
NzA2MjUzYjMwN2UyNmY0M2FmYTI5NDg5MWQ4Ni4uMWJkYWVhYjI2ZDM0NWVkNTNjZjNiODIwY2Ri
YTY3N2Q4YzdjNDA3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaApAQCAtNDIsMTYgKzQyLDI0IEBAIHN0
cnVjdCBfV2ViS2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSB7CiAKICAgICB2b2lkICgqIGFsbG93
KSAoV2ViS2l0UGVybWlzc2lvblJlcXVlc3QgKnJlcXVlc3QpOwogICAgIHZvaWQgKCogZGVueSkg
IChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCk7CisgICAgdm9pZCAoKiByZXNvbHZl
X2NoZWNrKSAgKFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogc2FsdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2Jvb2xlYW4gYWxsb3dlZCk7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCiB3ZWJr
aXRfcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBlICh2b2lkKTsKIAogV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2FsbG93ICAgIChXZWJLaXRQZXJtaXNzaW9uUmVx
dWVzdCAqcmVxdWVzdCk7Cit3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2FsbG93ICAgICAgICAo
V2ViS2l0UGVybWlzc2lvblJlcXVlc3QgKnJlcXVlc3QpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVueSAgICAgKFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0
ICpyZXF1ZXN0KTsKK3dlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVueSAgICAgICAgIChXZWJL
aXRQZXJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X3Blcm1pc3Npb25fcmVxdWVzdF9yZXNvbHZlX2NoZWNrIChXZWJLaXRQZXJtaXNzaW9uUmVxdWVz
dCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIqIHNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuIGFsbG93ZWQpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDAzZGZlYTUzOGJmMTc5ZWI0
NWRiMTkyNTFjZjRmNTRkZmUxODM3MjEuLjEwN2VlM2ZhNzY1MmMxNGVkZTVjZGE5Y2NlZGIwZmUy
MzY2M2I0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5oCkBAIC0yMzEsNiArMjMxLDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3Mg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
UG9saWN5RGVjaXNpb25UeXBlICAgICB0eXBlKTsKICAgICBnYm9vbGVhbiAgICgqIHBlcm1pc3Np
b25fcmVxdWVzdCkgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRQZXJtaXNzaW9uUmVxdWVzdCAgICAgKnBlcm1pc3Npb25fcmVxdWVzdCk7CisgICAgZ2Jvb2xl
YW4gICAoKiBwZXJtaXNzaW9uX2NoZWNrKSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QgICAgICpwZXJtaXNzaW9uX3JlcXVl
c3QpOwogICAgIHZvaWQgICAgICAgKCogbW91c2VfdGFyZ2V0X2NoYW5nZWQpICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgICAgICAgICAq
aGl0X3Rlc3RfcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4w
LXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggOGFjMDQyMDA3ODYwZDYwNDVlMzVhN2Q1MDQ4
N2UxNjUyNDgwZjliMC4uYmYyYjhjMmMxNWE2Y2QwNTNmNzUyZDJlMGM1NjQ0Y2NhODdlZDkzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CkBAIC01OTYsNiArNTk2LDcgQEAgd2Vi
a2l0X2Rvd25sb2FkX2dldF90eXBlCiBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdAogd2Via2l0X3Bl
cm1pc3Npb25fcmVxdWVzdF9hbGxvdwogd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9kZW55Cit3
ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X3Jlc29sdmVfY2hlY2sKIAogPFNVQlNFQ1RJT04gU3Rh
bmRhcmQ+CiBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmgKaW5k
ZXggOGFlNzU5OGUyZWM4NmM1NDhmMTAzOTE5OTNjYjZjMDNkODQxNGMwYy4uNjYwOWJlZWVmYTRi
ZmU1Y2Q4Zjg4MDZkNWRmNWJmMTY3ZjhhODk5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaApAQCAtNDIs
NiArNDIsOSBAQCBzdHJ1Y3QgX1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0SWZhY2UgewogCiAgICAg
dm9pZCAoKiBhbGxvdykgKFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0ICpyZXF1ZXN0KTsKICAgICB2
b2lkICgqIGRlbnkpICAoV2ViS2l0UGVybWlzc2lvblJlcXVlc3QgKnJlcXVlc3QpOworICAgIHZv
aWQgKCogcmVzb2x2ZV9jaGVjaykgIChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIHNhbHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGFsbG93ZWQpOwogfTsKIAogV0VCS0lUX0FQ
SSBHVHlwZQpAQCAtNTMsNiArNTYsMTEgQEAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9hbGxv
dyAgICAoV2ViS2l0UGVybWlzc2lvblJlcXVlc3QgKnJlcXVlc3QpOwogV0VCS0lUX0FQSSB2b2lk
CiB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2RlbnkgICAgIChXZWJLaXRQZXJtaXNzaW9uUmVx
dWVzdCAqcmVxdWVzdCk7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3Blcm1pc3Npb25fcmVx
dWVzdF9yZXNvbHZlX2NoZWNrIChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCAqcmVxdWVzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIHNhbHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGFsbG93
ZWQpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgKaW5kZXggM2MwMmYwZDkwNzMyNzI5NTMxNGZlMmYw
MDljNWIyMGUwNWJmOTcxMC4uYTNmYzNhNDdiZmI5YWQ1ZmMxMTJjZTNiNjA1Yjg2ODIxYTY5N2M5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJW
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3
LmgKQEAgLTE5Nyw2ICsxOTcsOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9s
aWN5RGVjaXNpb25UeXBlICAgICB0eXBlKTsKICAgICBnYm9vbGVhbiAgICAgICAoKiBwZXJtaXNz
aW9uX3JlcXVlc3QpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92
aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0ICAgICAqcGVybWlzc2lvbl9yZXF1ZXN0KTsKKyAgICBn
Ym9vbGVhbiAgICAgICAoKiBwZXJtaXNzaW9uX2NoZWNrKSAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0ICAgICAqcGVy
bWlzc2lvbl9yZXF1ZXN0KTsKICAgICB2b2lkICAgICAgICAgICAoKiBtb3VzZV90YXJnZXRfY2hh
bmdlZCkgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhp
dFRlc3RSZXN1bHQgICAgICAgICAqaGl0X3Rlc3RfcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAg
ICAgICAgbW9kaWZpZXJzKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA3ZjI5M2RjZWZlMzM1MzY3YWNlMjBiMmViY2YyNmE2N2I1MGE2MjVhLi44
NWI4MTgxM2U0ZDExNmEwYTVhNmU2ZWRmMjRiYjc5OGNhMGM0ZTI3IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTgt
MDUtMTggIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+IGFuZCBUaGliYXVs
dCBTYXVuaWVyICA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFk
ZCBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQVBJIHRlc3QgZm9yIHRo
ZSBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlczoKKyAgICAgICAgdXNlcm1lZGlhLWVudW1l
cmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjay4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwOgorICAgICAgICAocGVybWlzc2lvbkNo
ZWNrKTogSW1wbGVtZW50ZWQgdGhlIHBlcm1pc3Npb24gY2hlY2sgcmVzb2x1dGlvbi4KKyAgICAg
ICAgKHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25DaGVjayk6
IEFkZGVkIHRoZQorICAgICAgICBuZXcgdGVzdCBjaGVja2luZyB0aGUgZW51bWVyYXRlRGV2aWNl
cyBBUEkgd2hlbiBwZXJtaXNzaW9uIGlzCisgICAgICAgIGRlbmllZCBhbmQgd2hlbiBwZXJtaXNz
aW9uIGlzIGFsbG93ZWQgZm9yIHRoZSBvcmlnaW4uCisgICAgICAgIChiZWZvcmVBbGwpOiBEZWZp
bmVkIHRoZSBuZXcgdGVzdC4KKwogMjAxOC0wNS0xNyAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFYOiBbbWFjT1NdIEV4cG9zZSB0aGUgcHJpbWFyeSBzY3JlZW4gaGVp
Z2h0IHRocm91Z2ggQVggQVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwCmluZGV4IDY5MzkxMDJmZDMxOGRmYmU0MGU0OTNi
ZTNjN2EzNzVlN2NkNWNjNDkuLmNmYTI1NGYyNGQzMmUzY2MzYTZiNmNiODYwMGE4NmZkZDM2MDk5
ZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
VUlDbGllbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0VUlDbGllbnQuY3BwCkBAIC0yMzEsNiArMjMxLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFRSVUU7CiAgICAgfQogCisgICAgc3RhdGljIGdib29sZWFuIHBlcm1pc3Npb25DaGVjayhX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIFVJQ2xpZW50
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QRVJNSVNTSU9O
X1JFUVVFU1QocmVxdWVzdCkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKworICAgICAgICBpZiAodGVzdC0+
bV92ZXJpZnlNZWRpYVR5cGVzICYmIFdFQktJVF9JU19VU0VSX01FRElBX1BFUk1JU1NJT05fUkVR
VUVTVChyZXF1ZXN0KSkgeworICAgICAgICAgICAgV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3QqIHVzZXJNZWRpYVJlcXVlc3QgPSBXRUJLSVRfVVNFUl9NRURJQV9QRVJNSVNTSU9OX1JF
UVVFU1QocmVxdWVzdCk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3VzZXJfbWVkaWFf
cGVybWlzc2lvbl9pc19mb3JfYXVkaW9fZGV2aWNlKHVzZXJNZWRpYVJlcXVlc3QpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfdXNlcl9tZWRpYV9wZXJtaXNzaW9uX2lzX2Zvcl92aWRl
b19kZXZpY2UodXNlck1lZGlhUmVxdWVzdCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRl
c3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMpCisgICAgICAgICAgICB3ZWJraXRfcGVybWlz
c2lvbl9yZXF1ZXN0X3Jlc29sdmVfY2hlY2socmVxdWVzdCwgInJhbmRvbUhhc2hTYWx0IiwgdHJ1
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3Rf
cmVzb2x2ZV9jaGVjayhyZXF1ZXN0LCAicmFuZG9tSGFzaFNhbHQiLCBmYWxzZSk7CisKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgc3RhdGljIHZvaWQgcGVybWlzc2lvblJlc3Vs
dE1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKFdlYktpdFVzZXJDb250ZW50TWFuYWdlciogdXNlckNv
bnRlbnRNYW5hZ2VyLCBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0LCBV
SUNsaWVudFRlc3QqIHRlc3QpCiAgICAgewogICAgICAgICB0ZXN0LT5tX3Blcm1pc3Npb25SZXN1
bHQucmVzZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlw
dFJlc3VsdCkpOwpAQCAtMjUxLDYgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFs
b2cpLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJtb3VzZS10
YXJnZXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobW91c2VUYXJnZXRDaGFuZ2VkKSwgdGhpcyk7CiAg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicGVybWlzc2lvbi1yZXF1ZXN0Iiwg
R19DQUxMQkFDSyhwZXJtaXNzaW9uUmVxdWVzdGVkKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAicGVybWlzc2lvbi1jaGVjayIsIEdfQ0FMTEJBQ0socGVybWlz
c2lvbkNoZWNrKSwgdGhpcyk7CiAgICAgICAgIHdlYmtpdF91c2VyX2NvbnRlbnRfbWFuYWdlcl9y
ZWdpc3Rlcl9zY3JpcHRfbWVzc2FnZV9oYW5kbGVyKG1fdXNlckNvbnRlbnRNYW5hZ2VyLmdldCgp
LCAicGVybWlzc2lvbiIpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fdXNlckNvbnRlbnRN
YW5hZ2VyLmdldCgpLCAic2NyaXB0LW1lc3NhZ2UtcmVjZWl2ZWQ6OnBlcm1pc3Npb24iLCBHX0NB
TExCQUNLKHBlcm1pc3Npb25SZXN1bHRNZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayksIHRoaXMpOwog
ICAgIH0KQEAgLTgxOCw2ICs4MzgsNDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHAKICNlbmRp
ZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdVc2VyTWVkaWFFbnVtZXJhdGVEZXZpY2VzUGVybWlzc2lvbkNo
ZWNrKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0
aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2Vi
Vmlldyk7CisgICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X21lZGlhX3N0cmVhbShzZXR0aW5ncyk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
bWVkaWFfc3RyZWFtKHNldHRpbmdzLCBUUlVFKTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICB0
ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyNlbmRpZgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB1c2VyTWVkaWFSZXF1ZXN0SFRNTCA9CisgICAgICAgICI8aHRtbD4iCisg
ICAgICAgICIgIDxzY3JpcHQ+IgorICAgICAgICAiICBmdW5jdGlvbiBydW5UZXN0KCkiCisgICAg
ICAgICIgIHsiCisgICAgICAgICIgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVE
ZXZpY2VzKCkudGhlbigiCisgICAgICAgICIgICAgICAgIGZ1bmN0aW9uKGRldmljZXMpIHsgIgor
ICAgICAgICAiICAgICAgICAgICAgZGV2aWNlcy5mb3JFYWNoKGZ1bmN0aW9uKGRldmljZSkgeyIK
KyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZS5sYWJl
bCkgZG9jdW1lbnQudGl0bGUgPSBcIk9LXCI7IgorICAgICAgICAiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBkb2N1bWVudC50aXRsZSA9IFwiUGVybWlz
c2lvbiBkZW5pZWRcIjsiCisgICAgICAgICIgICAgICAgICAgICB9KSIKKyAgICAgICAgIiAgICB9
KSIKKyAgICAgICAgIiAgfSIKKyAgICAgICAgIiAgPC9zY3JpcHQ+IgorICAgICAgICAiICA8Ym9k
eSBvbmxvYWQ9J3J1blRlc3QoKTsnPjwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IjsKKworICAg
IHRlc3QtPm1fdmVyaWZ5TWVkaWFUeXBlcyA9IFRSVUU7CisKKyAgICAvLyBUZXN0IGRlbnlpbmcg
YSBwZXJtaXNzaW9uIHJlcXVlc3QuCisgICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0
cyA9IGZhbHNlOworICAgIHRlc3QtPmxvYWRIdG1sKHVzZXJNZWRpYVJlcXVlc3RIVE1MLCBudWxs
cHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWRUbygiUGVybWlzc2lvbiBkZW5p
ZWQiKTsKKworICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCisgICAg
dGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRydWU7CisgICAgdGVzdC0+bG9hZEh0
bWwodXNlck1lZGlhUmVxdWVzdEhUTUwsIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbFRp
dGxlQ2hhbmdlZFRvKCJPSyIpOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfbWVk
aWFfc3RyZWFtKHNldHRpbmdzLCBlbmFibGVkKTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdHMoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQogewogICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKQEAgLTExNDAsNiArMTIwMSw3IEBAIHZv
aWQgYmVmb3JlQWxsKCkKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJn
ZW9sb2NhdGlvbi1wZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0cyk7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAg
IFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInVzZXJtZWRpYS1lbnVtZXJhdGVk
ZXZpY2VzLXBlcm1pc3Npb24tY2hlY2siLCB0ZXN0V2ViVmlld1VzZXJNZWRpYUVudW1lcmF0ZURl
dmljZXNQZXJtaXNzaW9uQ2hlY2spOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgInVzZXJtZWRpYS1wZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdHMpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImF1ZGlvLXVzZXJtZWRpYS1wZXJtaXNzaW9uLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0F1
ZGlvT25seVVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyOWNh
YzZhNmNhMDQ4NTUzZmE0MTlhYjdhYWQ3ZTA5MzlhMDYwOWIyLi4zNDMxMGQ2MjBkOGNmMDkyMzZi
NGZjZGJmNTk0NzM5Y2Q4NzRkZjY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTgtMDUtMTgg
IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+IGFuZCBUaGliYXVsdCBTYXVu
aWVyICA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRp
YURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIEZhaWx1cmUgZXhwZWN0YXRpb24g
Zm9yIHRoZSB0ZXN0CisgICAgICAgIG1lZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmljZXMuaHRt
bC4gSnVzdCBmb3IgdGhlIHJlY29yZCB3ZSBoYXZlCisgICAgICAgIGFsc28gc29sdmVkIHRoZSBm
b2xsb3dpbmcgdGVzdHMsIGJ1dCB3ZSBhcmUgbm90IHJlbW92aW5nIHRoZQorICAgICAgICBnZW5l
cmFsIHNraXAgb2YgdGhlIG1lZGlhc3RyZWFtIGRpcmVjdG9yeSB1bnRpbCB0aGUgbmV4dCBwYXRj
aDoKKworICAgICAgICBmYXN0L21lZGlhc3RyZWFtL21lZGlhLWRldmljZXMtZW51bWVyYXRlLWRl
dmljZXMuaHRtbAorICAgICAgICBmYXN0L21lZGlhc3RyZWFtL3Jlc291cmNlcy9lbnVtZXJhdGUt
ZGV2aWNlcy1mcmFtZS5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFt
L2VudW1lcmF0ZS1kZXZpY2VzLXNvdXJjZS1pZC5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVk
aWEvbWVkaWEtc3RyZWFtL2VudW1lcmF0ZS1kZXZpY2VzLXNvdXJjZS1pZC1wZXJzaXN0ZW50Lmh0
bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0vcmVzb3VyY2VzL2VudW1l
cmF0ZS1kZXZpY2VzLXNvdXJjZS1pZC1mcmFtZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxOC0wNS0xNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fi
b2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBkb24ndCB0aHJvdyBTeW50YXhFcnJvcnMgZm9y
IHJ1bnRpbWUgZ2VuZXJhdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0aCBlcnJvcnMKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOGM2MmYyYzhmZTk4NzUy
ZDQxZThhOWUwMWUyODA1Y2E0YjgxMjM0My4uYjc4MThhOGU0OWFjYjc5MjcxNzE4MzAwYjRmNTRk
OGMzYjg5MmU1OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTYzNiw3ICs2MzYsNiBAQCB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cgogd2Via2l0Lm9yZy9i
LzE1MTM0NCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1lbmRlZC10cmFja3MuaHRt
bCBbIFRpbWVvdXQgXQogIyBDcmFzaCBpcyBidWcgIzE3NjgwMQogd2Via2l0Lm9yZy9iLzE2MDk5
NiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQtdmlkZW8tdHJhY2tz
LWRpc2FibGVkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8x
NzIyNjkgZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0
bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNzMyNTcgZmFzdC9tZWRpYXN0cmVhbS9nZXRV
c2VyTWVkaWEtZ3JhbnQtcGVyc2lzdGVuY3kzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiAjIENh
bnZhcyBjYXB0dXJlU3RyZWFtIHN1cHBvcnQgaXMgbm90IGltcGxlbWVudGVkCg==
</data>
<flag name="review"
          id="359064"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346900</attachid>
            <date>2018-08-10 01:24:20 -0700</date>
            <delta_ts>2018-09-28 08:52:27 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>WIP.patch</filename>
            <type>text/plain</type>
            <size>47007</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMzU0OGI2NjVk
MWYuLjUzNjVkMWUwMzc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtNjM1LDcgKzYzNSw2IEBAIHdlYmtpdC5vcmcvYi83OTIwMyBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhY2FwdHVyZS1zdHJlYW1zL01lZGlhU3RyCiB3ZWJraXQu
b3JnL2IvMTUxMzQ0IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRkLWVuZGVkLXRyYWNr
cy5odG1sIFsgVGltZW91dCBdCiAjIENyYXNoIGlzIGJ1ZyAjMTc2ODAxCiB3ZWJraXQub3JnL2Iv
MTYwOTk2IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10
cmFja3MtZGlzYWJsZWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgQ3Jhc2ggXQotd2Via2l0Lm9y
Zy9iLzE3MjI2OSBmYXN0L21lZGlhc3RyZWFtL21lZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmlj
ZXMuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE3MzI1NyBmYXN0L21lZGlhc3RyZWFt
L2dldFVzZXJNZWRpYS1ncmFudC1wZXJzaXN0ZW5jeTMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiB3
ZWJraXQub3JnL2IvMTc2ODAxIGZhc3QvbWVkaWFzdHJlYW0vYXJndW1lbnQtdHlwZXMuaHRtbCBb
IENyYXNoIFBhc3MgXQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcAppbmRleCBlMmM1YmY3MGEyNi4uYmM2
OWE0NTQ1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAtODEsOSArODEsNyBAQCB2b2lkIE1l
ZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQoKQogCiB2b2lkIE1lZGlhRGV2aWNl
c1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+PiYg
ZGV2aWNlcykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgVU5VU0VEX1BBUkFNKGRldmlj
ZXMpOwotI2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXUEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0Q2FtZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAgQEAgdm9pZCBNZWRpYURldmljZXNS
ZXF1ZXN0OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZvPj4mIGRl
dmljZXMKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2Ft
ZXJhQ291bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUp
CisgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOworI2VuZGlmCisK
ICAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwogCiAgICAg
aW50IGNhbWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUsOCBAQCB2b2lkIE1lZGlhRGV2aWNl
c1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+PiYg
ZGV2aWNlcwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NmFiMjRlMmM0ODIuLjY3OWE0ZjQ4MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTMwNSw2ICsz
MDUsNyBAQCBzZXQoV2ViS2l0X1NPVVJDRVMKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNw
cAorICAgIFVJUHJvY2Vzcy9QZXJtaXNzaW9uTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvUHJv
Y2Vzc0Fzc2VydGlvbi5jcHAKICAgICBVSVByb2Nlc3MvUHJvY2Vzc1Rocm90dGxlci5jcHAKICAg
ICBVSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oCmluZGV4IDlkNTAzNjFl
ODFhLi42Yzc5NjA3YWVmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgZW51bSBjbGFzcyBXZWJz
aXRlRGF0YVR5cGUgewogICAgIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zID0gMSA8PCAxNCwK
ICNlbmRpZgogICAgIERPTUNhY2hlID0gMSA8PCAxNSwKKyAgICBQZXJtaXNzaW9ucyA9IDEgPDwg
MTYsCiB9OwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IGY1ZGFiMWU5YTc1Li4zYzJjODBhNmJiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNw
cApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAKICNpbmNs
dWRlICJBUElVSUNsaWVudC5oIgorI2luY2x1ZGUgIlBlcm1pc3Npb25NYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktp
dEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
TmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaCIKQEAgLTMxLDYgKzMyLDcgQEAKICNpbmNsdWRlICJX
ZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmUuaCIKICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKICNpZiBQTEFURk9STShHVEsp
CkBAIC0xOTEsNiArMTkzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAorICAgIGJvb2wgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRp
YURvY3VtZW50T3JpZ2luLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3Jp
Z2luLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYgcGVybWlzc2lvblJlcXVlc3QpIG92
ZXJyaWRlCisgICAgeworICAgICAgICAvKiBGSVhNRTogR2V0IHJpZCBvZiB0aGlzIGNhbGwgbW92
aW5nIGFsbCB0aGUgcG9ydHMgdG8gYSBjb3JlIHNvbHV0aW9uLiAqLworICAgICAgICBhdXRvIHNh
bHQgPSBwYWdlLndlYnNpdGVEYXRhU3RvcmUoKS5wZXJtaXNzaW9uTWFuYWdlcigpLT5nZXREZXZp
Y2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocGVybWlzc2lvblJlcXVlc3QpOworICAgICAg
ICBwZXJtaXNzaW9uUmVxdWVzdC5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKFdURk1vdmUoc2FsdCks
IGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgdm9pZCBkZWNpZGVQ
b2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJQYWdlUHJveHkmLCBBUEk6
OlNlY3VyaXR5T3JpZ2luJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikgZmluYWwKICAgICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3Q+IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdl
YmtpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpLnB0cigpKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJz
aXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJz
aXRlRGF0YS5jcHAKaW5kZXggYmQ3ZDQxMjcwNWMuLjllZDAyY2ZhNzJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGEuY3Bw
CkBAIC0xMDQsNiArMTA0LDggQEAgc3RhdGljIFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdG9XZWJL
aXRXZWJzaXRlRGF0YVR5cGVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGUKICNlbmRpZgogICAg
IGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKQogICAgICAgICBy
ZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVM7CisgICAgaWYgKHR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UGVybWlzc2lvbnMpKQorICAgICAgICByZXR1cm5W
YWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX1BFUk1JU1NJT05TOwogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihyZXR1cm5WYWx1ZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IDMwMjBlY2JiMjRlLi43ODgxZThhNmQ3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC02NDksNiArNjQ5LDggQEAgc3RhdGljIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5
cGVzIHR5cGUKICNlbmRpZgogICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09P
S0lFUykKICAgICAgICAgcmV0dXJuVmFsdWUgfD0gV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzOwor
ICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfUEVSTUlTU0lPTlMpCisgICAgICAg
IHJldHVyblZhbHVlIHw9IFdlYnNpdGVEYXRhVHlwZTo6UGVybWlzc2lvbnM7CiAgICAgcmV0dXJu
IHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYnNpdGVEYXRhLmgKaW5kZXggMDY1MDQ3ZmUxN2MuLjVlMzJlNzY2ZTJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVE
YXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRl
RGF0YS5oCkBAIC00NCw2ICs0NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0
YSBXZWJLaXRXZWJzaXRlRGF0YTsKICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9E
QVRBQkFTRVM6IEluZGV4ZWREQiBkYXRhYmFzZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9Q
TFVHSU5fREFUQTogUGx1Z2lucyBkYXRhLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lF
UzogQ29va2llcy4KKyAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX1BFUk1JU1NJT05TOiBQZXJtaXNz
aW9ucy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTDogQWxsIHR5cGVzLgogICoKICAqIEVu
dW0gdmFsdWVzIHdpdGggZmxhZ3MgcmVwcmVzZW50aW5nIHR5cGVzIG9mIFdlYnNpdGUgZGF0YS4K
QEAgLTYwLDcgKzYxLDggQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfV0VCU0lURV9EQVRB
X0lOREVYRUREQl9EQVRBQkFTRVMgICAgICAgPSAxIDw8IDYsCiAgICAgV0VCS0lUX1dFQlNJVEVf
REFUQV9QTFVHSU5fREFUQSAgICAgICAgICAgICAgID0gMSA8PCA3LAogICAgIFdFQktJVF9XRUJT
SVRFX0RBVEFfQ09PS0lFUyAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKLSAgICBXRUJLSVRf
V0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCA5KSAtIDEKKyAg
ICBXRUJLSVRfV0VCU0lURV9EQVRBX1BFUk1JU1NJT05TICAgICAgICAgICAgICAgPSAxIDw8IDks
CisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAgICAgID0gKDEg
PDwgMTApIC0gMQogfSBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzOwogCiBXRUJLSVRfQVBJIEdUeXBl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNp
dGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVE
YXRhLmgKaW5kZXggM2E0NjJhYWZmOWIuLmU4OWU2YTBlYzQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJzaXRlRGF0YS5oCkBAIC00NCw2ICs0
NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YSBXZWJLaXRXZWJzaXRlRGF0
YTsKICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVM6IEluZGV4ZWRE
QiBkYXRhYmFzZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQTogUGx1Z2lu
cyBkYXRhLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzogQ29va2llcy4KKyAqIEBX
RUJLSVRfV0VCU0lURV9EQVRBX1BFUk1JU1NJT05TOiBQZXJtaXNzaW9ucy4KICAqIEBXRUJLSVRf
V0VCU0lURV9EQVRBX0FMTDogQWxsIHR5cGVzLgogICoKICAqIEVudW0gdmFsdWVzIHdpdGggZmxh
Z3MgcmVwcmVzZW50aW5nIHR5cGVzIG9mIFdlYnNpdGUgZGF0YS4KQEAgLTYwLDcgKzYxLDggQEAg
dHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFT
RVMgICAgICAgPSAxIDw8IDYsCiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQSAg
ICAgICAgICAgICAgID0gMSA8PCA3LAogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUyAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKLSAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAg
ICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCA5KSAtIDEKKyAgICBXRUJLSVRfV0VCU0lURV9E
QVRBX1BFUk1JU1NJT05TICAgICAgICAgICAgICAgPSAxIDw8IDksCisgICAgV0VCS0lUX1dFQlNJ
VEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAgICAgID0gKDEgPDwgMTApIC0gMQogfSBXZWJL
aXRXZWJzaXRlRGF0YVR5cGVzOwogCiBXRUJLSVRfQVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJtaXNzaW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9QZXJtaXNzaW9uTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjdkMTY4ZWJiNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUGVybWlzc2lvbk1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQZXJtaXNzaW9uTWFu
YWdlci5oIgorCisjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+
CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IGludCBoYXNo
U2FsdFNpemUgPSA1MDsKK3N0YXRpYyBjb25zdCBpbnQgcmFuZG9tRGF0YVNpemUgPSBoYXNoU2Fs
dFNpemUgLyAxNjsKKworUmVmPFBlcm1pc3Npb25NYW5hZ2VyPiBQZXJtaXNzaW9uTWFuYWdlcjo6
Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQZXJtaXNzaW9uTWFuYWdlcigp
KTsKK30KKworUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25NYW5hZ2VyKCkKK3sKK30KKwor
UGVybWlzc2lvbk1hbmFnZXI6On5QZXJtaXNzaW9uTWFuYWdlcigpCit7Cit9CisKK1N0cmluZyBQ
ZXJtaXNzaW9uTWFuYWdlcjo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFVz
ZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0KQoreworICAgIHJldHVybiBnZXRE
ZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVzdC51c2VyTWVkaWFEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKCksIHJlcXVlc3QudG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkpOworfQorCitTdHJpbmcgUGVybWlzc2lvbk1hbmFnZXI6OmdldERldmljZUlkZW50aWZpZXJI
YXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1l
bnRTZWN1cml0eU9yaWdpbikKK3sKKyAgICBhdXRvIHBlcm1pc3Npb25zRm9yT3JpZ2luID0gbV9w
ZXJtaXNzaW9uc0xpc3RGb3JPcmlnaW4uZ2V0KHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdp
bi50b1Jhd1N0cmluZygpKTsKKyAgICBpZiAocGVybWlzc2lvbnNGb3JPcmlnaW4pIHsKKyAgICAg
ICAgcGVybWlzc2lvbnNGb3JPcmlnaW4tPnVzZXJNZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW5z
LmFkZCh1c2VyTWVkaWFEb2N1bWVudFNlY3VyaXR5T3JpZ2luLmRhdGEoKSk7CisgICAgICAgIHBl
cm1pc3Npb25zRm9yT3JpZ2luLT5sYXN0VGltZVVzZWQgPSBXYWxsVGltZTo6bm93KCk7CisgICAg
ICAgIHJldHVybiBwZXJtaXNzaW9uc0Zvck9yaWdpbi0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0
Rm9yT3JpZ2luOworICAgIH0KKworICAgIHVpbnQ2NF90IHJhbmRvbURhdGFbcmFuZG9tRGF0YVNp
emVdOworICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgY2hhcio+KHJhbmRvbURhdGEpLCBzaXplb2YocmFuZG9tRGF0YSkpOworCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGhhc2hT
YWx0U2l6ZSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5kb21EYXRhU2l6ZTsgaSsrKQor
ICAgICAgICBhcHBlbmRVbnNpZ25lZDY0QXNIZXgocmFuZG9tRGF0YVswXSwgYnVpbGRlcik7CisK
KyAgICBTdHJpbmcgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luID0gYnVpbGRlci50
b1N0cmluZygpOworCisgICAgYXV0byBuZXdQZXJtaXNzaW9uc0Zvck9yaWdpbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8UGVybWlzc2lvbnNGb3JPcmlnaW4+KHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKTsKKyAgICBuZXdQZXJtaXNz
aW9uc0Zvck9yaWdpbi0+dXNlck1lZGlhRG9jdW1lbnRTZWN1cml0eU9yaWdpbnMuYWRkKHVzZXJN
ZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW4uZGF0YSgpKTsKKyAgICBuZXdQZXJtaXNzaW9uc0Zv
ck9yaWdpbi0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworCisgICAgbV9wZXJtaXNz
aW9uc0xpc3RGb3JPcmlnaW4uYWRkKHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbi50b1Jh
d1N0cmluZygpLCBXVEZNb3ZlKG5ld1Blcm1pc3Npb25zRm9yT3JpZ2luKSk7CisKKyAgICByZXR1
cm4gZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luOworfQorCit2b2lkIFBlcm1pc3Np
b25NYW5hZ2VyOjpzZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW4sIFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4sIFN0cmluZyYm
IGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbikKK3sKKyAgICBhdXRvIHBlcm1pc3Np
b25zRm9yT3JpZ2luID0gbV9wZXJtaXNzaW9uc0xpc3RGb3JPcmlnaW4uZ2V0KHRvcExldmVsRG9j
dW1lbnRTZWN1cml0eU9yaWdpbi50b1Jhd1N0cmluZygpKTsKKyAgICBpZiAocGVybWlzc2lvbnNG
b3JPcmlnaW4pIHsKKyAgICAgICAgcGVybWlzc2lvbnNGb3JPcmlnaW4tPmRldmljZUlkZW50aWZp
ZXJIYXNoU2FsdEZvck9yaWdpbiA9IGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsK
KyAgICAgICAgcGVybWlzc2lvbnNGb3JPcmlnaW4tPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpu
b3coKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbmV3UGVybWlzc2lvbnNG
b3JPcmlnaW4gPSBzdGQ6Om1ha2VfdW5pcXVlPFBlcm1pc3Npb25zRm9yT3JpZ2luPih0b3BMZXZl
bERvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdp
bik7CisgICAgbmV3UGVybWlzc2lvbnNGb3JPcmlnaW4tPnVzZXJNZWRpYURvY3VtZW50U2VjdXJp
dHlPcmlnaW5zLmFkZCh1c2VyTWVkaWFEb2N1bWVudFNlY3VyaXR5T3JpZ2luLmRhdGEoKSk7Cisg
ICAgbmV3UGVybWlzc2lvbnNGb3JPcmlnaW4tPmRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbiA9IGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsKKyAgICBuZXdQZXJtaXNz
aW9uc0Zvck9yaWdpbi0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworICAgIG1fcGVy
bWlzc2lvbnNMaXN0Rm9yT3JpZ2luLmFkZCh0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4u
dG9SYXdTdHJpbmcoKSwgV1RGTW92ZShuZXdQZXJtaXNzaW9uc0Zvck9yaWdpbikpOworfQorCit2
b2lkIFBlcm1pc3Npb25NYW5hZ2VyOjpnZXRQZXJtaXNzaW9uUmVxdWVzdE9yaWdpbnMoRnVuY3Rp
b248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IG9yaWdpbnM7CisKKyAgICBmb3IgKGF1dG8mIHBlcm1pc3Npb25Gb3JPcmlnaW4gOiBtX3Blcm1p
c3Npb25zTGlzdEZvck9yaWdpbikKKyAgICAgICAgb3JpZ2lucy5hZGQocGVybWlzc2lvbkZvck9y
aWdpbi52YWx1ZS0+dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLT5kYXRhKCkpOworCisg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5zKSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgUGVybWlzc2lvbk1hbmFnZXI6OmRlbGV0ZVBlcm1pc3Npb25SZXF1ZXN0Rm9y
T3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lu
cywgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcGVybWlz
c2lvbnNMaXN0Rm9yT3JpZ2luLnJlbW92ZUlmKFtvcmlnaW5zXShhdXRvJiBrZXlBbmRWYWx1ZSkg
eworICAgICAgICByZXR1cm4gb3JpZ2lucy5jb250YWlucyhrZXlBbmRWYWx1ZS52YWx1ZS0+dG9w
TGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLT5kYXRhKCkpOworICAgIH0pOworCisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwor
dm9pZCBQZXJtaXNzaW9uTWFuYWdlcjo6ZGVsZXRlUGVybWlzc2lvblJlcXVlc3RPcmlnaW5zTW9k
aWZpZWRTaW5jZShXYWxsVGltZSB0aW1lLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgbV9wZXJtaXNzaW9uc0xpc3RGb3JPcmlnaW4ucmVtb3ZlSWYoW3RpbWVd
KGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgIHJldHVybiBrZXlBbmRWYWx1ZS52YWx1ZS0+
bGFzdFRpbWVVc2VkID4gdGltZTsKKyAgICB9KTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgUGVybWlzc2lvbk1h
bmFnZXI6OnNldE1lZGlhUGVybWlzc2lvbkZvckV4aXN0aW5nT3JpZ2luKFJlZjxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbj4mJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgUmVmPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPiYmIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIFBlcm1pc3Npb25OYW1lIG5h
bWUsIFBlcm1pc3Npb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBhdXRvIHBlcm1pc3Npb25zRm9yT3Jp
Z2luID0gbV9wZXJtaXNzaW9uc0xpc3RGb3JPcmlnaW4uZ2V0KHRvcExldmVsRG9jdW1lbnRPcmln
aW4tPnRvUmF3U3RyaW5nKCkpOworCisgICAgQVNTRVJUKHBlcm1pc3Npb25zRm9yT3JpZ2luKTsK
KworICAgIHBlcm1pc3Npb25zRm9yT3JpZ2luLT51c2VyTWVkaWFEb2N1bWVudFNlY3VyaXR5T3Jp
Z2lucy5hZGQodXNlck1lZGlhRG9jdW1lbnRPcmlnaW4tPmRhdGEoKSk7CisgICAgcGVybWlzc2lv
bnNGb3JPcmlnaW4tPnBlcm1pc3Npb25zLmFkZChuYW1lLCBzdGQ6Om1ha2VfdW5pcXVlPFBlcm1p
c3Npb25EZXNjcmlwdG9yPihuYW1lLCBzdGF0ZSkpOworCisgICAgaWYgKGF1dG8gZGV2aWNlSW5m
b1Blcm1pc3Npb25EZXNjcmlwdG9yID0gcGVybWlzc2lvbnNGb3JPcmlnaW4tPnBlcm1pc3Npb25z
LmdldChQZXJtaXNzaW9uTmFtZTo6RGV2aWNlSW5mbykpIHsKKyAgICAgICAgZGV2aWNlSW5mb1Bl
cm1pc3Npb25EZXNjcmlwdG9yLT5zdGF0ZSA9IHN0YXRlOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgcGVybWlzc2lvbnNGb3JPcmlnaW4tPnBlcm1pc3Npb25zLmFkZChQZXJtaXNzaW9u
TmFtZTo6RGV2aWNlSW5mbywgc3RkOjptYWtlX3VuaXF1ZTxQZXJtaXNzaW9uRGVzY3JpcHRvcj4o
UGVybWlzc2lvbk5hbWU6OkRldmljZUluZm8sIHN0YXRlKSk7CisgICAgcGVybWlzc2lvbnNGb3JP
cmlnaW4tPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKK30KKworUGVybWlzc2lvbk1h
bmFnZXI6OlBlcm1pc3Npb25TdGF0ZSBQZXJtaXNzaW9uTWFuYWdlcjo6Z2V0TWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9y
aWdpbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIFBl
cm1pc3Npb25OYW1lIG5hbWUpCit7CisgICAgYXV0byBwZXJtaXNzaW9uc0Zvck9yaWdpbiA9IG1f
cGVybWlzc2lvbnNMaXN0Rm9yT3JpZ2luLmdldCh0b3BMZXZlbERvY3VtZW50T3JpZ2luLnRvUmF3
U3RyaW5nKCkpOworICAgIGlmICghcGVybWlzc2lvbnNGb3JPcmlnaW4pCisgICAgICAgIHJldHVy
biBQZXJtaXNzaW9uU3RhdGU6OlByb21wdDsKKworICAgIGlmICghcGVybWlzc2lvbnNGb3JPcmln
aW4tPnVzZXJNZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW5zLmNvbnRhaW5zKHVzZXJNZWRpYURv
Y3VtZW50T3JpZ2luLmRhdGEoKSkpCisgICAgICAgIHJldHVybiBQZXJtaXNzaW9uU3RhdGU6OlBy
b21wdDsKKworICAgIGF1dG8gcGVybWlzc2lvbkRlc2NyaXB0aW9uRm9yTmFtZSA9IHBlcm1pc3Np
b25zRm9yT3JpZ2luLT5wZXJtaXNzaW9ucy5nZXQobmFtZSk7CisgICAgaWYgKCFwZXJtaXNzaW9u
RGVzY3JpcHRpb25Gb3JOYW1lKQorICAgICAgICByZXR1cm4gUGVybWlzc2lvblN0YXRlOjpQcm9t
cHQ7CisKKyAgICBwZXJtaXNzaW9uc0Zvck9yaWdpbi0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6
Om5vdygpOworCisgICAgcmV0dXJuIHBlcm1pc3Npb25EZXNjcmlwdGlvbkZvck5hbWUtPnN0YXRl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Blcm1pc3Npb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
ZXJtaXNzaW9uTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li41MTJmZDg4MDM1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Blcm1pc3Npb25NYW5hZ2VyLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5IYXNo
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBlcm1pc3Npb25NYW5hZ2VyIDogcHVi
bGljIFJlZkNvdW50ZWQ8UGVybWlzc2lvbk1hbmFnZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFBlcm1pc3Npb25NYW5hZ2VyPiBjcmVhdGUoKTsKKyAgICB+UGVybWlzc2lvbk1hbmFnZXIo
KTsKKworICAgIGVudW0gY2xhc3MgUGVybWlzc2lvbk5hbWUgeworICAgICAgICBOb25lLAorICAg
ICAgICBDYW1lcmEsCisgICAgICAgIE1pY3JvcGhvbmUsCisgICAgICAgIERldmljZUluZm8KKyAg
ICB9OworCisgICAgZW51bSBjbGFzcyBQZXJtaXNzaW9uU3RhdGUgeworICAgICAgICBHcmFudGVk
LAorICAgICAgICBEZW5pZWQsCisgICAgICAgIFByb21wdAorICAgIH07CisKKyAgICBzdHJ1Y3Qg
UGVybWlzc2lvbkRlc2NyaXB0b3IgeworICAgICAgICBQZXJtaXNzaW9uRGVzY3JpcHRvcigpCisg
ICAgICAgICAgICA6IG5hbWUoUGVybWlzc2lvbk5hbWU6Ok5vbmUpCisgICAgICAgICAgICAsIHN0
YXRlKFBlcm1pc3Npb25TdGF0ZTo6UHJvbXB0KQorICAgICAgICAgICAgLCBhbGxvd2VkSW5Ob3RT
ZWN1cmVDb250ZXh0cyhmYWxzZSkKKyAgICAgICAgeyB9OworCisgICAgICAgIFBlcm1pc3Npb25E
ZXNjcmlwdG9yKFBlcm1pc3Npb25OYW1lIG5hbWUsIFBlcm1pc3Npb25TdGF0ZSBzdGF0ZSkKKyAg
ICAgICAgICAgIDogbmFtZShuYW1lKQorICAgICAgICAgICAgLCBzdGF0ZShzdGF0ZSkKKyAgICAg
ICAgeyB9OworCisgICAgICAgIFBlcm1pc3Npb25OYW1lIG5hbWU7CisgICAgICAgIFBlcm1pc3Np
b25TdGF0ZSBzdGF0ZTsKKyAgICAgICAgYm9vbCBhbGxvd2VkSW5Ob3RTZWN1cmVDb250ZXh0czsK
KyAgICB9OworCisgICAgc3RydWN0IFBlcm1pc3Npb25zRm9yT3JpZ2luIHsKKyAgICBQZXJtaXNz
aW9uc0Zvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIFN0
cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKQorICAgICAgICA6IHRvcExl
dmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKKyAgICAgICAgLCBkZXZp
Y2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9y
T3JpZ2luKQorICAgICAgICB7IH07CisKKyAgICAgICAgflBlcm1pc3Npb25zRm9yT3JpZ2luKCkg
PSBkZWZhdWx0OworICAgICAgICBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IHRvcExldmVs
RG9jdW1lbnRTZWN1cml0eU9yaWdpbjsKKyAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGE+IHVzZXJNZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW5zOworICAgICAgICBI
YXNoTWFwPFBlcm1pc3Npb25OYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8UGVybWlzc2lvbkRlc2NyaXB0
b3I+LCBXVEY6OkludEhhc2g8UGVybWlzc2lvbk5hbWU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzPFBlcm1pc3Npb25OYW1lPj4gcGVybWlzc2lvbnM7CisgICAgICAgIFN0cmluZyBkZXZpY2VJ
ZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW47CisgICAgICAgIFdhbGxUaW1lIGxhc3RUaW1lVXNl
ZDsKKyAgICB9OworCisgICAgU3RyaW5nIGdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYpOworICAgIFN0cmluZyBnZXREZXZp
Y2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHVz
ZXJNZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW4sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0
b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIHZvaWQgc2V0RGV2aWNlSWRlbnRp
Zmllckhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRG
b3JPcmlnaW4pOworICAgIHZvaWQgc2V0TWVkaWFQZXJtaXNzaW9uRm9yRXhpc3RpbmdPcmlnaW4o
UmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBS
ZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgUGVy
bWlzc2lvbk5hbWUsIFBlcm1pc3Npb25TdGF0ZSk7CisgICAgUGVybWlzc2lvblN0YXRlIGdldE1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlh
RG9jdW1lbnRPcmlnaW4sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50
T3JpZ2luLCBQZXJtaXNzaW9uTmFtZSk7CisKKyAgICB2b2lkIGdldFBlcm1pc3Npb25SZXF1ZXN0
T3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBkZWxldGVQZXJtaXNzaW9uUmVx
dWVzdEZvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
LCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZGVsZXRl
UGVybWlzc2lvblJlcXVlc3RPcmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQ
ZXJtaXNzaW9uTWFuYWdlcigpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxQZXJtaXNzaW9uc0Zvck9yaWdpbj4+IG1fcGVybWlzc2lvbnNMaXN0Rm9yT3JpZ2luOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaAppbmRleCBmMzdiZTdhYjIxZi4u
ZmJjYzRjZmVlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRp
YVBlcm1pc3Npb25DaGVja1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaApAQCAtMzYsOCArMzYsNiBAQCBjbGFzcyBTZWN1
cml0eU9yaWdpbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OwotCiBjbGFzcyBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlVzZXJN
ZWRpYVBlcm1pc3Npb25DaGVjaz4gewogcHVibGljOgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eS5jcHAKaW5kZXggM2MwNzI5NWYxMDUuLmMxNWE3YjIxZDA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC0yMiwxMiArMjIsMTQgQEAKIAogI2luY2x1ZGUg
IkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKKyNpbmNsdWRl
ICJQZXJtaXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiV2ViQXV0b21hdGlvblNlc3Npb24uaCIKICNpbmNsdWRlICJXZWJQYWdl
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYnNp
dGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhQ29uc3RyYWludHMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlLmg+CkBAIC0xMjMsOCArMTI1LDE4IEBAIHZv
aWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnVzZXJNZWRpYUFjY2Vz
c1dhc0RlbmllZCh1aW50NjRfdCB1CiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAocmVhc29uID09IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6OlVz
ZXJNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbjo6UGVybWlzc2lvbkRlbmllZCkKLSAgICAgICAgbV9k
ZW5pZWRSZXF1ZXN0cy5hcHBlbmQoRGVuaWVkUmVxdWVzdCB7IHJlcXVlc3QtPm1haW5GcmFtZUlE
KCksIHJlcXVlc3QtPnVzZXJNZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSwgcmVxdWVzdC0+
dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCksIHJlcXVlc3QtPnJlcXVpcmVzQXVkaW9D
YXB0dXJlKCksIHJlcXVlc3QtPnJlcXVpcmVzVmlkZW9DYXB0dXJlKCkgfSk7CisgICAgaWYgKHJl
YXNvbiA9PSBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nlc3NE
ZW5pYWxSZWFzb246OlBlcm1pc3Npb25EZW5pZWQpIHsKKyAgICAgICAgaWYgKHJlcXVlc3QtPnJl
cXVpcmVzVmlkZW9DYXB0dXJlKCkpIHsKKyAgICAgICAgICAgIG1fcGFnZS53ZWJzaXRlRGF0YVN0
b3JlKCkucGVybWlzc2lvbk1hbmFnZXIoKS0+c2V0TWVkaWFQZXJtaXNzaW9uRm9yRXhpc3RpbmdP
cmlnaW4ocmVxdWVzdC0+dXNlck1lZGlhRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpLmlzb2xhdGVk
Q29weSgpLCByZXF1ZXN0LT50b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4oKS5pc29sYXRl
ZENvcHkoKSwKKyAgICAgICAgICAgICAgICBQZXJtaXNzaW9uTWFuYWdlcjo6UGVybWlzc2lvbk5h
bWU6OkNhbWVyYSwgUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25TdGF0ZTo6RGVuaWVkKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXF1ZXN0LT5yZXF1aXJlc0F1ZGlvQ2FwdHVyZSgp
KSB7CisgICAgICAgICAgICBtX3BhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpLnBlcm1pc3Npb25NYW5h
Z2VyKCktPnNldE1lZGlhUGVybWlzc2lvbkZvckV4aXN0aW5nT3JpZ2luKHJlcXVlc3QtPnVzZXJN
ZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW4oKS5pc29sYXRlZENvcHkoKSwgcmVxdWVzdC0+dG9w
TGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkuaXNvbGF0ZWRDb3B5KCksCisgICAgICAgICAg
ICAgICAgUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25OYW1lOjpNaWNyb3Bob25lLCBQZXJt
aXNzaW9uTWFuYWdlcjo6UGVybWlzc2lvblN0YXRlOjpEZW5pZWQpOworICAgICAgICB9CisKKyAg
ICB9CiAKICAgICBkZW55UmVxdWVzdCh1c2VyTWVkaWFJRCwgcmVhc29uLCBlbXB0eVN0cmluZygp
KTsKIH0KQEAgLTE1Myw4ICsxNjUsMTcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eTo6dXNlck1lZGlhQWNjZXNzV2FzR3JhbnRlZCh1aW50NjRfdAogICAgIGlm
ICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGdyYW50QWNjZXNzKHVzZXJN
ZWRpYUlELCBXVEZNb3ZlKGF1ZGlvRGV2aWNlKSwgV1RGTW92ZSh2aWRlb0RldmljZSksIHJlcXVl
c3QtPmRldmljZUlkZW50aWZpZXJIYXNoU2FsdCgpKSkKLSAgICAgICAgbV9ncmFudGVkUmVxdWVz
dHMuYXBwZW5kKHJlcXVlc3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKGdyYW50QWNjZXNz
KHVzZXJNZWRpYUlELCBXVEZNb3ZlKGF1ZGlvRGV2aWNlKSwgV1RGTW92ZSh2aWRlb0RldmljZSks
IHJlcXVlc3QtPmRldmljZUlkZW50aWZpZXJIYXNoU2FsdCgpKSkgeworICAgICAgICBpZiAocmVx
dWVzdC0+cmVxdWlyZXNWaWRlb0NhcHR1cmUoKSkgeworICAgICAgICAgICAgbV9wYWdlLndlYnNp
dGVEYXRhU3RvcmUoKS5wZXJtaXNzaW9uTWFuYWdlcigpLT5zZXRNZWRpYVBlcm1pc3Npb25Gb3JF
eGlzdGluZ09yaWdpbihyZXF1ZXN0LT51c2VyTWVkaWFEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCku
aXNvbGF0ZWRDb3B5KCksIHJlcXVlc3QtPnRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbigp
Lmlzb2xhdGVkQ29weSgpLAorICAgICAgICAgICAgICAgIFBlcm1pc3Npb25NYW5hZ2VyOjpQZXJt
aXNzaW9uTmFtZTo6Q2FtZXJhLCBQZXJtaXNzaW9uTWFuYWdlcjo6UGVybWlzc2lvblN0YXRlOjpH
cmFudGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXF1ZXN0LT5yZXF1aXJlc0F1ZGlv
Q2FwdHVyZSgpKSB7CisgICAgICAgICAgICBtX3BhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpLnBlcm1p
c3Npb25NYW5hZ2VyKCktPnNldE1lZGlhUGVybWlzc2lvbkZvckV4aXN0aW5nT3JpZ2luKHJlcXVl
c3QtPnVzZXJNZWRpYURvY3VtZW50U2VjdXJpdHlPcmlnaW4oKS5pc29sYXRlZENvcHkoKSwgcmVx
dWVzdC0+dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkuaXNvbGF0ZWRDb3B5KCksCisg
ICAgICAgICAgICAgICAgUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25OYW1lOjpNaWNyb3Bo
b25lLCBQZXJtaXNzaW9uTWFuYWdlcjo6UGVybWlzc2lvblN0YXRlOjpHcmFudGVkKTsKKyAgICAg
ICAgfQorICAgIH0KIAogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odXNlck1lZGlhSUQpOwpAQCAt
MTY2LDU5ICsxODcsNyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5Ojp1c2VyTWVkaWFBY2Nlc3NXYXNHcmFudGVkKHVpbnQ2NF90CiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnJl
c2V0QWNjZXNzKHVpbnQ2NF90IGZyYW1lSUQpCiB7Ci0gICAgbV9ncmFudGVkUmVxdWVzdHMucmVt
b3ZlQWxsTWF0Y2hpbmcoW2ZyYW1lSURdKGNvbnN0IGF1dG8mIGdyYW50ZWRSZXF1ZXN0KSB7Ci0g
ICAgICAgIHJldHVybiBncmFudGVkUmVxdWVzdC0+bWFpbkZyYW1lSUQoKSA9PSBmcmFtZUlEOwot
ICAgIH0pOwogICAgIG1fcHJlZ3JhbnRlZFJlcXVlc3RzLmNsZWFyKCk7Ci0gICAgbV9kZW5pZWRS
ZXF1ZXN0cy5jbGVhcigpOwotfQotCi1jb25zdCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFBy
b3h5KiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6c2VhcmNoRm9yR3Jh
bnRlZFJlcXVlc3QodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIHVzZXJN
ZWRpYURvY3VtZW50T3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVu
dE9yaWdpbiwgYm9vbCBuZWVkc0F1ZGlvLCBib29sIG5lZWRzVmlkZW8pIGNvbnN0Ci17Ci0gICAg
aWYgKG1fcGFnZS5pc01lZGlhU3RyZWFtQ2FwdHVyZU11dGVkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYm9vbCBjaGVja0ZvckF1ZGlvID0gbmVlZHNBdWRpbzsKLSAgICBib29s
IGNoZWNrRm9yVmlkZW8gPSBuZWVkc1ZpZGVvOwotICAgIGZvciAoY29uc3QgYXV0byYgZ3JhbnRl
ZFJlcXVlc3QgOiBtX2dyYW50ZWRSZXF1ZXN0cykgewotICAgICAgICBpZiAoZ3JhbnRlZFJlcXVl
c3QtPnJlcXVpcmVzRGlzcGxheUNhcHR1cmUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoIWdyYW50ZWRSZXF1ZXN0LT51c2VyTWVkaWFEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkuaXNTYW1lU2NoZW1lSG9zdFBvcnQodXNlck1lZGlhRG9jdW1lbnRPcmlnaW4pKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZ3JhbnRlZFJlcXVlc3QtPnRvcExldmVsRG9j
dW1lbnRTZWN1cml0eU9yaWdpbigpLmlzU2FtZVNjaGVtZUhvc3RQb3J0KHRvcExldmVsRG9jdW1l
bnRPcmlnaW4pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChncmFudGVkUmVx
dWVzdC0+ZnJhbWVJRCgpICE9IGZyYW1lSUQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBpZiAoZ3JhbnRlZFJlcXVlc3QtPnJlcXVpcmVzVmlkZW9DYXB0dXJlKCkpCi0gICAgICAg
ICAgICBjaGVja0ZvclZpZGVvID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGdyYW50ZWRSZXF1ZXN0
LT5yZXF1aXJlc0F1ZGlvQ2FwdHVyZSgpKQotICAgICAgICAgICAgY2hlY2tGb3JBdWRpbyA9IGZh
bHNlOwotCi0gICAgICAgIGlmIChjaGVja0ZvclZpZGVvIHx8IGNoZWNrRm9yQXVkaW8pCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICByZXR1cm4gZ3JhbnRlZFJlcXVlc3QucHRyKCk7
Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5Ojp3YXNSZXF1ZXN0RGVuaWVkKHVpbnQ2NF90IG1haW5GcmFt
ZUlELCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIGNvbnN0
IFNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBib29sIG5lZWRzQXVkaW8s
IGJvb2wgbmVlZHNWaWRlbykKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGRlbmllZFJlcXVlc3Qg
OiBtX2RlbmllZFJlcXVlc3RzKSB7Ci0gICAgICAgIGlmICghZGVuaWVkUmVxdWVzdC51c2VyTWVk
aWFEb2N1bWVudE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodXNlck1lZGlhRG9jdW1lbnRP
cmlnaW4pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZGVuaWVkUmVxdWVz
dC50b3BMZXZlbERvY3VtZW50T3JpZ2luLT5pc1NhbWVTY2hlbWVIb3N0UG9ydCh0b3BMZXZlbERv
Y3VtZW50T3JpZ2luKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZGVuaWVk
UmVxdWVzdC5tYWluRnJhbWVJRCAhPSBtYWluRnJhbWVJRCkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoZGVuaWVkUmVxdWVzdC5pc0F1ZGlvRGVuaWVkICYmIG5lZWRzQXVkaW8p
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGRlbmllZFJlcXVlc3QuaXNW
aWRlb0RlbmllZCAmJiBuZWVkc1ZpZGVvKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eTo6Z3JhbnRBY2Nlc3ModWludDY0X3QgdXNlck1lZGlhSUQsIGNvbnN0IENh
cHR1cmVEZXZpY2UgYXVkaW9EZXZpY2UsIGNvbnN0IENhcHR1cmVEZXZpY2UgdmlkZW9EZXZpY2Us
IGNvbnN0IFN0cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KQpAQCAtMjcwLDI5ICsyMzks
NDYgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6cmVxdWVz
dFVzZXJNZWRpYVBlcm1pc3Npb25Gb3JGcmFtZSgKICAgICAgICAgaWYgKCFtX3BhZ2UuaXNWYWxp
ZCgpIHx8ICFtX3BhZ2UubWFpbkZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAg
ICAgLy8gRklYTUU6IFdlIGNvdWxkIHJlbW92ZSB0aGlzIHdoZW4gYWxsIHRoZSBwb3J0cyB1c2Ug
dGhlIFBlcm1pc3Npb25SZXF1ZXN0IE1hbmFnZXIgdG8gZ2VuZXJhdGUgdGhlIGhhc2ggc2FsdHMu
CisgICAgICAgIG1fcGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkucGVybWlzc2lvbk1hbmFnZXIoKS0+
c2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHVzZXJNZWRpYURvY3VtZW50T3Jp
Z2luLmdldCgpLCB0b3BMZXZlbERvY3VtZW50T3JpZ2luLmdldCgpLCBTdHJpbmcoZGV2aWNlSWRl
bnRpZmllckhhc2hTYWx0KSk7CisKICAgICAgICAgaWYgKHZpZGVvRGV2aWNlcy5pc0VtcHR5KCkg
JiYgYXVkaW9EZXZpY2VzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGVueVJlcXVlc3QodXNl
ck1lZGlhSUQsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6OlVzZXJNZWRpYUFjY2Vz
c0RlbmlhbFJlYXNvbjo6Tm9Db25zdHJhaW50cywgZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2FzUmVxdWVzdERlbmllZChtX3Bh
Z2UubWFpbkZyYW1lKCktPmZyYW1lSUQoKSwgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4uZ2V0KCks
IHRvcExldmVsRG9jdW1lbnRPcmlnaW4uZ2V0KCksICFhdWRpb0RldmljZXMuaXNFbXB0eSgpLCAh
dmlkZW9EZXZpY2VzLmlzRW1wdHkoKSkpIHsKKyAgICAgICAgUGVybWlzc2lvbk1hbmFnZXI6OlBl
cm1pc3Npb25TdGF0ZSBhdWRpb1N0YXRlID0gUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25T
dGF0ZTo6UHJvbXB0OworICAgICAgICBpZiAoIWF1ZGlvRGV2aWNlcy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBhdWRpb1N0YXRlID0gbV9wYWdlLndlYnNpdGVEYXRhU3RvcmUoKS5wZXJtaXNzaW9u
TWFuYWdlcigpLT5nZXRNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4odXNlck1lZGlhRG9jdW1lbnRP
cmlnaW4uZ2V0KCksIHRvcExldmVsRG9jdW1lbnRPcmlnaW4uZ2V0KCksIFBlcm1pc3Npb25NYW5h
Z2VyOjpQZXJtaXNzaW9uTmFtZTo6TWljcm9waG9uZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGF1ZGlvU3RhdGUgPSBQZXJtaXNzaW9uTWFuYWdlcjo6UGVybWlzc2lvblN0YXRlOjpHcmFu
dGVkOworCisgICAgICAgIFBlcm1pc3Npb25NYW5hZ2VyOjpQZXJtaXNzaW9uU3RhdGUgdmlkZW9T
dGF0ZSA9IFBlcm1pc3Npb25NYW5hZ2VyOjpQZXJtaXNzaW9uU3RhdGU6OlByb21wdDsKKyAgICAg
ICAgaWYgKCF2aWRlb0RldmljZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgdmlkZW9TdGF0ZSA9
IG1fcGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkucGVybWlzc2lvbk1hbmFnZXIoKS0+Z2V0TWVkaWFQ
ZXJtaXNzaW9uRm9yT3JpZ2luKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLmdldCgpLCB0b3BMZXZl
bERvY3VtZW50T3JpZ2luLmdldCgpLCBQZXJtaXNzaW9uTWFuYWdlcjo6UGVybWlzc2lvbk5hbWU6
OkNhbWVyYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZpZGVvU3RhdGUgPSBQZXJtaXNz
aW9uTWFuYWdlcjo6UGVybWlzc2lvblN0YXRlOjpHcmFudGVkOworCisKKyAgICAgICAgaWYgKGF1
ZGlvU3RhdGUgPT0gUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25TdGF0ZTo6RGVuaWVkIHx8
IHZpZGVvU3RhdGUgPT0gUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25TdGF0ZTo6RGVuaWVk
KSB7CiAgICAgICAgICAgICBkZW55UmVxdWVzdCh1c2VyTWVkaWFJRCwgVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RQcm94eTo6VXNlck1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpQZXJtaXNzaW9u
RGVuaWVkLCBlbXB0eVN0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIGF1dG8qIGdyYW50ZWRSZXF1ZXN0ID0gc2VhcmNoRm9yR3JhbnRlZFJlcXVlc3Qo
ZnJhbWVJRCwgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4uZ2V0KCksIHRvcExldmVsRG9jdW1lbnRP
cmlnaW4uZ2V0KCksICFhdWRpb0RldmljZXMuaXNFbXB0eSgpLCAhdmlkZW9EZXZpY2VzLmlzRW1w
dHkoKSk7Ci0gICAgICAgIGlmIChncmFudGVkUmVxdWVzdCkgeworICAgICAgICBpZiAoYXVkaW9T
dGF0ZSA9PSBQZXJtaXNzaW9uTWFuYWdlcjo6UGVybWlzc2lvblN0YXRlOjpHcmFudGVkICYmIHZp
ZGVvU3RhdGUgPT0gUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25TdGF0ZTo6R3JhbnRlZCkg
eworICAgICAgICAgICAgYXV0byBncmFudGVkUmVxdWVzdERldmljZUlkZW50aWZpZXJIYXNoU2Fs
dCA9IG1fcGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkucGVybWlzc2lvbk1hbmFnZXIoKS0+Z2V0RGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLmdl
dCgpLCB0b3BMZXZlbERvY3VtZW50T3JpZ2luLmdldCgpKTsKICAgICAgICAgICAgIGlmIChtX3Bh
Z2UuaXNWaWV3VmlzaWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBXZSBzZWxlY3QgdGhlIGZpcnN0
IGF2YWlsYWJsZSBkZXZpY2VzLCBidXQgdGhlIGN1cnJlbnQgY2xpZW50IEFQSSBhbGxvd3MgY2xp
ZW50IHRvIHNlbGVjdCB3aGljaCBkZXZpY2UgdG8gcGljay4KICAgICAgICAgICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhlIHBvc3NpYmxpdHkgZm9yIHRoZSBjbGllbnQgdG8gZG8gdGhlIGRldmljZSBz
ZWxlY3Rpb24uCiAgICAgICAgICAgICAgICAgYXV0byBhdWRpb0RldmljZSA9ICFhdWRpb0Rldmlj
ZXMuaXNFbXB0eSgpID8gYXVkaW9EZXZpY2VzWzBdIDogQ2FwdHVyZURldmljZSgpOwogICAgICAg
ICAgICAgICAgIGF1dG8gdmlkZW9EZXZpY2UgPSAhdmlkZW9EZXZpY2VzLmlzRW1wdHkoKSA/IHZp
ZGVvRGV2aWNlc1swXSA6IENhcHR1cmVEZXZpY2UoKTsKLSAgICAgICAgICAgICAgICBncmFudEFj
Y2Vzcyh1c2VyTWVkaWFJRCwgV1RGTW92ZShhdWRpb0RldmljZSksIFdURk1vdmUodmlkZW9EZXZp
Y2UpLCBncmFudGVkUmVxdWVzdC0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KCkpOworICAgICAg
ICAgICAgICAgIGdyYW50QWNjZXNzKHVzZXJNZWRpYUlELCBXVEZNb3ZlKGF1ZGlvRGV2aWNlKSwg
V1RGTW92ZSh2aWRlb0RldmljZSksIGdyYW50ZWRSZXF1ZXN0RGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0KTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fcHJlZ3JhbnRlZFJl
cXVlc3RzLmFwcGVuZChjcmVhdGVQZXJtaXNzaW9uUmVxdWVzdCh1c2VyTWVkaWFJRCwgbV9wYWdl
Lm1haW5GcmFtZSgpLT5mcmFtZUlEKCksIGZyYW1lSUQsIFdURk1vdmUodXNlck1lZGlhRG9jdW1l
bnRPcmlnaW4pLCBXVEZNb3ZlKHRvcExldmVsRG9jdW1lbnRPcmlnaW4pLCBXVEZNb3ZlKGF1ZGlv
RGV2aWNlcyksIFdURk1vdmUodmlkZW9EZXZpY2VzKSwgU3RyaW5nKGdyYW50ZWRSZXF1ZXN0LT5k
ZXZpY2VJZGVudGlmaWVySGFzaFNhbHQoKSksIFdURk1vdmUobG9jYWxVc2VyUmVxdWVzdCkpKTsK
KyAgICAgICAgICAgICAgICBtX3ByZWdyYW50ZWRSZXF1ZXN0cy5hcHBlbmQoY3JlYXRlUGVybWlz
c2lvblJlcXVlc3QodXNlck1lZGlhSUQsIG1fcGFnZS5tYWluRnJhbWUoKS0+ZnJhbWVJRCgpLCBm
cmFtZUlELCBXVEZNb3ZlKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luKSwgV1RGTW92ZSh0b3BMZXZl
bERvY3VtZW50T3JpZ2luKSwgV1RGTW92ZShhdWRpb0RldmljZXMpLCBXVEZNb3ZlKHZpZGVvRGV2
aWNlcyksIFdURk1vdmUoZ3JhbnRlZFJlcXVlc3REZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpLCBX
VEZNb3ZlKGxvY2FsVXNlclJlcXVlc3QpKSk7CiAKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorCiAgICAgICAgIGF1dG8gdXNlck1lZGlhT3JpZ2luID0gQVBJOjpTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLmdldCgpKTsKICAgICAgICAgYXV0byB0
b3BMZXZlbE9yaWdpbiA9IEFQSTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh0b3BMZXZlbERvY3Vt
ZW50T3JpZ2luLmdldCgpKTsKIApAQCAtMzU2LDcgKzM0Miw3IEBAIHZvaWQgVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmdldFVzZXJNZWRpYVBlcm1pc3Npb25JbmZvKHVp
bnQ2NF90CiAKICAgICBpZiAoIW1fcGFnZS51aUNsaWVudCgpLmNoZWNrVXNlck1lZGlhUGVybWlz
c2lvbkZvck9yaWdpbihtX3BhZ2UsICptX3BhZ2UucHJvY2VzcygpLndlYkZyYW1lKGZyYW1lSUQp
LCB1c2VyTWVkaWFPcmlnaW4uZ2V0KCksIHRvcExldmVsT3JpZ2luLmdldCgpLCByZXF1ZXN0Lmdl
dCgpKSkKICAgICAgICAgcmVxdWVzdC0+Y29tcGxldGlvbkhhbmRsZXIoKSh1c2VyTWVkaWFJRCwg
U3RyaW5nKCksIGZhbHNlKTsKLX0gCit9CiAjZW5kaWYKIAogdm9pZCBVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6ZW51bWVyYXRlTWVkaWFEZXZpY2VzRm9yRnJhbWUodWlu
dDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFJlZjxTZWN1cml0eU9yaWdpbj4m
JiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmIHRvcExldmVs
RG9jdW1lbnRPcmlnaW4pCkBAIC0zODAsNyArMzY2LDI0IEBAIHZvaWQgVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmVudW1lcmF0ZU1lZGlhRGV2aWNlc0ZvckZyYW1lKHVp
bnQ2CiAgICAgICAgIG1fcGFnZS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlk
Q29tcGxldGVNZWRpYURldmljZUVudW1lcmF0aW9uKHVzZXJNZWRpYUlELCBkZXZpY2VzLCBkZXZp
Y2VJZGVudGlmaWVySGFzaFNhbHQsIG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpLCBtX3BhZ2Uu
cGFnZUlEKCkpOwogICAgIH07CiAKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkK
KyAgICBpZiAobV9wYWdlLnByZWZlcmVuY2VzKCkubW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgp
KSB7CisgICAgICAgIGdldFVzZXJNZWRpYVBlcm1pc3Npb25JbmZvKHVzZXJNZWRpYUlELCBmcmFt
ZUlELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZSh1c2VyTWVkaWFEb2N1bWVu
dE9yaWdpbiksIFdURk1vdmUodG9wTGV2ZWxEb2N1bWVudE9yaWdpbikpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgUGVybWlzc2lvbk1hbmFnZXI6OlBlcm1pc3Npb25TdGF0ZSBzdGF0
ZSA9IG1fcGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkucGVybWlzc2lvbk1hbmFnZXIoKS0+Z2V0TWVk
aWFQZXJtaXNzaW9uRm9yT3JpZ2luKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLmdldCgpLCB0b3BM
ZXZlbERvY3VtZW50T3JpZ2luLmdldCgpLAorICAgICAgICBQZXJtaXNzaW9uTWFuYWdlcjo6UGVy
bWlzc2lvbk5hbWU6OkRldmljZUluZm8pOworCisgICAgYXV0byBkZXZpY2VJZGVudGlmaWVySGFz
aFNhbHQgPSBtX3BhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpLnBlcm1pc3Npb25NYW5hZ2VyKCktPmdl
dERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbih1c2VyTWVkaWFEb2N1bWVudE9yaWdp
bi5nZXQoKSwgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbi5nZXQoKSk7CisgICAgYXV0byByZXF1ZXN0
ID0gVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHk6OmNyZWF0ZSh1c2VyTWVkaWFJRCwgZnJh
bWVJRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFdURk1vdmUodXNlck1lZGlhRG9jdW1l
bnRPcmlnaW4pLCBXVEZNb3ZlKHRvcExldmVsRG9jdW1lbnRPcmlnaW4pKTsKKyAgICBtX3BlbmRp
bmdEZXZpY2VSZXF1ZXN0cy5hZGQodXNlck1lZGlhSUQsIHJlcXVlc3QuY29weVJlZigpKTsKKyAg
ICByZXF1ZXN0LT5jb21wbGV0aW9uSGFuZGxlcigpKHVzZXJNZWRpYUlELCBXVEZNb3ZlKGRldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdCksIHN0YXRlID09IFBlcm1pc3Npb25NYW5hZ2VyOjpQZXJtaXNz
aW9uU3RhdGU6OkdyYW50ZWQgPyB0cnVlIDogZmFsc2UpOworCisjZWxzZQogICAgIGdldFVzZXJN
ZWRpYVBlcm1pc3Npb25JbmZvKHVzZXJNZWRpYUlELCBmcmFtZUlELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgV1RGTW92ZSh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiksIFdURk1vdmUodG9w
TGV2ZWxEb2N1bWVudE9yaWdpbikpOworI2VuZGlmCisKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHVzZXJNZWRpYUlEKTsKICAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CkBAIC00NDMsNyArNDQ2
LDYgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6cHJvY2Vz
c1ByZWdyYW50ZWRSZXF1ZXN0cygpCiAKIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHk6OndhdGNoZG9nVGltZXJGaXJlZCgpCiB7Ci0gICAgbV9ncmFudGVkUmVxdWVz
dHMuY2xlYXIoKTsKICAgICBtX3ByZWdyYW50ZWRSZXF1ZXN0cy5jbGVhcigpOwogICAgIG1fY3Vy
cmVudFdhdGNoZG9nSW50ZXJ2YWwgPSAwX3M7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuaAppbmRleCA1NzNhZjA0ZDcxYi4uNGY0YTZkNWYyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuaApAQCAtNjksOSArNjksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVueVJl
cXVlc3QodWludDY0X3QgdXNlck1lZGlhSUQsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJv
eHk6OlVzZXJNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbiwgY29uc3QgU3RyaW5nJiBpbnZhbGlkQ29u
c3RyYWludCk7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBib29sIGdyYW50QWNjZXNz
KHVpbnQ2NF90IHVzZXJNZWRpYUlELCBjb25zdCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlIGF1ZGlv
RGV2aWNlLCBjb25zdCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlIHZpZGVvRGV2aWNlLCBjb25zdCBT
dHJpbmcmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCk7Ci0KLSAgICBjb25zdCBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdFByb3h5KiBzZWFyY2hGb3JHcmFudGVkUmVxdWVzdCh1aW50NjRfdCBm
cmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRP
cmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3Jp
Z2luLCBib29sIG5lZWRzQXVkaW8sIGJvb2wgbmVlZHNWaWRlbykgY29uc3Q7Ci0gICAgYm9vbCB3
YXNSZXF1ZXN0RGVuaWVkKHVpbnQ2NF90IG1haW5GcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBib29sIG5lZWRzQXVkaW8sIGJvb2wg
bmVlZHNWaWRlbyk7CiAjZW5kaWYKICAgICB2b2lkIGdldFVzZXJNZWRpYVBlcm1pc3Npb25JbmZv
KHVpbnQ2NF90IHVzZXJNZWRpYUlELCB1aW50NjRfdCBmcmFtZUlELCBVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tQcm94eTo6Q29tcGxldGlvbkhhbmRsZXImJiwgUmVmPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiYmIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+JiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbik7CiAKQEAgLTg3LDE2ICs4NCw2IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPHVpbnQ2NF90PiBtX3BlbmRpbmdSZWplY3Rpb25zOwogCiAgICAg
VmVjdG9yPFJlZjxVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5Pj4gbV9wcmVncmFudGVk
UmVxdWVzdHM7Ci0gICAgVmVjdG9yPFJlZjxVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5
Pj4gbV9ncmFudGVkUmVxdWVzdHM7Ci0KLSAgICBzdHJ1Y3QgRGVuaWVkUmVxdWVzdCB7Ci0gICAg
ICAgIHVpbnQ2NF90IG1haW5GcmFtZUlEOwotICAgICAgICBSZWY8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+IHVzZXJNZWRpYURvY3VtZW50T3JpZ2luOwotICAgICAgICBSZWY8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4+IHRvcExldmVsRG9jdW1lbnRPcmlnaW47Ci0gICAgICAgIGJvb2wgaXNBdWRp
b0RlbmllZDsKLSAgICAgICAgYm9vbCBpc1ZpZGVvRGVuaWVkOwotICAgIH07Ci0gICAgVmVjdG9y
PERlbmllZFJlcXVlc3Q+IG1fZGVuaWVkUmVxdWVzdHM7CiAKICAgICBXZWJDb3JlOjpNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbV9jYXB0dXJlU3RhdGUgeyBXZWJDb3JlOjpNZWRpYVBy
b2R1Y2VyOjpJc05vdFBsYXlpbmcgfTsKICAgICBSdW5Mb29wOjpUaW1lcjxVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eT4gbV93YXRjaGRvZ1RpbWVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cAppbmRleCA0YmQ3OTc4MzI1ZC4uN2NhMzVlODQ1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFSZWNvcmQuaCIKICNpbmNsdWRl
ICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIlBlcm1pc3Npb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1h
bmFnZXIuaCIKICNpbmNsdWRlICJTdG9yYWdlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTk1LDYgKzk2LDcgQEAgV2Vi
c2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24sIFBBTDo6U2Vzc2lvbklEIHMKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAs
IG1fY29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pKQogICAgICwgbV9zdG9yYWdl
TWFuYWdlcihTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKG1fY29uZmlndXJhdGlvbi5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkpKQorICAgICwgbV9wZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIoUGVybWlzc2lv
bk1hbmFnZXI6OmNyZWF0ZSgpKQogICAgICwgbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29t
LmFwcGxlLldlYktpdC5XZWJzaXRlRGF0YVN0b3JlIikpCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNz
UHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwpAQCAtNDYwLDYgKzQ2MiwxOSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgTwogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAoZGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UGVybWlzc2lvbnMpICYmIG1fcGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyKSB7CisgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0Nh
bGxiYWNrKCk7CisKKyAgICAgICAgbV9wZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXItPmdldFBlcm1p
c3Npb25SZXF1ZXN0T3JpZ2lucyhbY2FsbGJhY2tBZ2dyZWdhdG9yXShIYXNoU2V0PFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YT4mJiBvcmlnaW5zKSB7CisgICAgICAgICAgICBXZWJzaXRlRGF0
YSB3ZWJzaXRlRGF0YTsKKworICAgICAgICAgICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6
RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpQZXJtaXNzaW9ucywg
MCB9KTsKKworICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2Fs
bGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBp
ZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGUpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CiAKQEAgLTc4Miw2ICs3OTcsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgV2FsbFRpbWUKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgaWYgKGRhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlBlcm1pc3Npb25zKSAmJiBtX3Blcm1pc3Npb25SZXF1
ZXN0TWFuYWdlcikgeworICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxs
YmFjaygpOworCisgICAgICAgIG1fcGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLT5kZWxldGVQZXJt
aXNzaW9uUmVxdWVzdE9yaWdpbnNNb2RpZmllZFNpbmNlKG1vZGlmaWVkU2luY2UsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIGlmIChkYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSkgJiYg
aXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5n
Q2FsbGJhY2soKTsKIApAQCAtMTA2OCw2ICsxMDkxLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0
IFZlCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpQZXJtaXNzaW9ucykgJiYgbV9wZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIp
IHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKKwor
ICAgICAgICBtX3Blcm1pc3Npb25SZXF1ZXN0TWFuYWdlci0+ZGVsZXRlUGVybWlzc2lvblJlcXVl
c3RGb3JPcmlnaW5zKG9yaWdpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgIH0p
OworICAgIH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5k
ZXggMzFmNTA1ZjdjNWYuLjE0Mjc3MjNlMDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0yNiw2ICsyNiw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCisjaW5jbHVkZSAiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTGlmZXRpbWVPYnNlcnZlci5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEu
aD4KQEAgLTUzLDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNlY0tleVBy
b3h5U3RvcmU7CiBjbGFzcyBTdG9yYWdlTWFuYWdlcjsKK2NsYXNzIFBlcm1pc3Npb25NYW5hZ2Vy
OwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CkBAIC0xNTUsNiArMTU3LDggQEAgcHVibGljOgog
CiAgICAgU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9zdG9yYWdl
TWFuYWdlci5nZXQoKTsgfQogCisgICAgUGVybWlzc2lvbk1hbmFnZXIqIHBlcm1pc3Npb25NYW5h
Z2VyKCkgeyByZXR1cm4gbV9wZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuZ2V0KCk7IH0KKwogICAg
IFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7
CiAgICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0
OwogCkBAIC0yMjUsNiArMjI5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzUmVzb2x2ZWRE
aXJlY3RvcmllcyB7IGZhbHNlIH07CiAKICAgICBjb25zdCBSZWZQdHI8U3RvcmFnZU1hbmFnZXI+
IG1fc3RvcmFnZU1hbmFnZXI7CisgICAgY29uc3QgUmVmUHRyPFBlcm1pc3Npb25NYW5hZ2VyPiBt
X3Blcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjsKICAgICBSZWZQdHI8V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3M7CiAgICAgYm9vbCBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2Zjg2ZTA0NWI1Ny4uYTYx
Mzk2NTYwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNjgsNiArNjgsOCBAQAogCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFGODggLyog
RmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDBCOTY2MTgxOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCAqLzsgfTsKIAkJMDcy
OTdGOUUxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RjlD
MUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHAgKi87
IH07CiAJCTA3Mjk3RjlGMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDcyOTdGOUQxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5
LmggKi87IH07CisJCTA3Mjk3RjlFMUMxN0JCRUEwMTRGMDczNSAvKiBQZXJtaXNzaW9uTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5
N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogUGVybWlzc2lvbk1hbmFnZXIuY3BwICovOyB9OworCQkw
NzI5N0Y5RjFDMTdCQkVBMDE1RjA3MzUgLyogUGVybWlzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RjlEMUMxN0JCRUEyMjNG
MDczNSAvKiBQZXJtaXNzaW9uTWFuYWdlci5oICovOyB9OwogCQkwNzI5N0ZBMjFDMTg2QURCMDAz
RjA3MzUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGQTAxQzE4NkFEQjAwM0YwNzM1IC8q
IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcCAqLzsgfTsKIAkJMDcyOTdGQTMxQzE4NkFE
QjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUg
LyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzRFNzVGRDFERjIyMTE1MDBEMzE4RUMgLyogVXNl
ck1lZGlhUHJvY2Vzc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDc0RTc1RkMxREYyMDAyNDAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nl
c3NNYW5hZ2VyLmNwcCAqLzsgfTsKQEAgLTI0NjksNiArMjQ3MSw4IEBACiAJCTAwQjk2NjE4MThF
MjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbmRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdG
OUMxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJNZWRpYVBlcm1pc3Npb25D
aGVja1Byb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGOUQxQzE3
QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAv
KiBQZXJtaXNzaW9uTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQZXJtaXNzaW9uTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBQZXJtaXNzaW9uTWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJtaXNzaW9uTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0ZBMDFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9u
Q2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyTWVkaWFQZXJt
aXNzaW9uQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0RTc1RkIxREYx
RkQxMzAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NDYyLDYgKzc0NjYsOCBAQAogCQkJCTUxM0ZGQjhCMjAxNDU5
QTcwMDI1OTZFQSAvKiBVSU1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmggKi8sCiAJCQkJMDcy
OTdGOUMxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmNw
cCAqLywKIAkJCQkwNzI5N0Y5RDFDMTdCQkVBMDAzRjA3MzUgLyogVXNlck1lZGlhUGVybWlzc2lv
bkNoZWNrUHJveHkuaCAqLywKKwkJCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogUGVybWlz
c2lvbk1hbmFnZXIuY3BwICovLAorCQkJCTA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBQZXJt
aXNzaW9uTWFuYWdlci5oICovLAogCQkJCTRBNDEwRjM5MTlBRjdCMDQwMDJFQkFCNSAvKiBVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJNEE0MTBGM0Ex
OUFGN0IwNDAwMkVCQUI1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmggKi8sCiAJCQkJNEE0MTBGM0IxOUFGN0IwNDAwMkVCQUI1IC8qIFVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0UHJveHkuY3BwICovLApAQCAtOTQwNiw2ICs5NDEyLDcgQEAKIAkJCQlDRDQ5MUIx
MzFFNzM0ODIxMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0Q0OTFCMTgxRTczNTI1NTAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcyOTdGOUYxQzE3
QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwNzI5N0Y5RjFDMTdCQkVBMDE1RjA3MzUgLyogUGVybWlzc2lvbk1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTRBM0NDMThCMTlCMDY0MEYwMEQxNEFFRiAvKiBVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEEz
Q0MxOEQxOUIwNjQxOTAwRDE0QUVGIC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTA3NEU3NUZFMURGMjIxMTkwMEQzMThFQyAvKiBVc2VyTWVk
aWFQcm9jZXNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTIzOSw2ICsxMTI0Niw3IEBA
CiAJCQkJQ0Q0OTFCMTIxRTczNDgyMTAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OTFCMTcxRTczNTI1NTAwMDA5MDY2IC8q
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDcyOTdGOUUxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Np
b25DaGVja1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3Mjk3RjlFMUMxN0JCRUEwMTRG
MDczNSAvKiBQZXJtaXNzaW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTczOUJC
QzFCNDIwNDAzMDBEMjU4QzEgLyogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTRBM0NDMThBMTlCMDYzRTcwMEQxNEFFRiAvKiBVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
QTNDQzE4QzE5QjA2NDE1MDBEMTRBRUYgLyogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9t
YWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCmluZGV4IDU4NzAxZmM4NDJjLi42
MzI0MTIyNDE0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYworKysg
Yi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBAIC00MDIsNiArNDAyLDcgQEAgc3RhdGlj
IHZvaWQgZ290V2Vic2l0ZURhdGFDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1h
bmFnZXIsIEdBc3luY1Jlc3UKIAogICAgIGd1aW50NjQgcGFnZUlEID0gd2Via2l0X3dlYl92aWV3
X2dldF9wYWdlX2lkKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KGRhdGFS
ZXF1ZXN0LT5yZXF1ZXN0KSk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJl
cXVlc3QsIGRhdGFMaXN0LCAiQ29va2llcyIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUywg
TlVMTCwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVz
dCwgZGF0YUxpc3QsICJQZXJtaXNzaW9ucyIsIFdFQktJVF9XRUJTSVRFX0RBVEFfUEVSTUlTU0lP
TlMsIE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJl
cXVlc3QsIGRhdGFMaXN0LCAiTWVtb3J5IENhY2hlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1P
UllfQ0FDSEUsIE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwg
ZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiRGlzayBDYWNoZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFf
RElTS19DQUNIRSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2Rp
cmVjdG9yeShtYW5hZ2VyKSwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0
LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJTZXNzaW9uIFN0b3JhZ2UiLCBXRUJLSVRfV0VCU0lU
RV9EQVRBX1NFU1NJT05fU1RPUkFHRSwgTlVMTCwgcGFnZUlEKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351077</attachid>
            <date>2018-09-28 08:52:33 -0700</date>
            <delta_ts>2018-09-28 09:06:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20180928175231.patch</filename>
            <type>text/plain</type>
            <size>80732</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDQ1ZTk0NzVlZWJiYzA0
NDYzZDYyZjgzMTVhMmE3ZTdiM2NkNjQ1Ni4uOTA2ZjY5NTU0MWUzYzdlYjlkYWRmNDNhNTFmNjA2
ZWY2Y2E5NWQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA5LTI4ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMg
aWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lzdGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4K
KwogMjAxOC0wOS0yNSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTWVkaWFTdHJlYW1dIEFkZCBNYWMgd2luZG93IGNhcHR1cmUgc291cmNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGIzNDBlNTM5Y2EzZWFiMDQ5ODg3MjljZThjYTg1MGRlMjkxNDQ4OTQuLmNjNmNiMWQ5
N2RmODdlM2VjMjNjZDg0YTEzZmFmNDNmMzRkODFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYz
IEBACisyMDE4LTA5LTI4ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NTc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudGVkIHRoZSBlbnVtZXJhdGVEZXZpY2VzIEFQSSB1c2luZyBhIG5ldyBXZWJLaXQgY2xh
c3MKKyAgICAgICAgKERldmljZUlkSGFzaFNhbHRTdG9yYWdlKSB0aGF0IGdlbmVyYXRlcyBhbmQg
c3RvcmVzIHRoZSBkZXZpY2UgaWRzCisgICAgICAgIGhhc2ggc2FsdHMgcGVyIG9yaWdpbiwgdXNl
ZCB0byBhdm9pZCBmaW5nZXJwcmludGluZyBpbiB0aGUKKyAgICAgICAgd2VicGFnZXMuIFRoZSBo
YXNoIHNhbHRzIGFyZSBwZXJzaXN0ZW50IHdoZW4gdGhlIHdlYnBhZ2UgaXMgbm90CisgICAgICAg
IGVwaGVtZXJhbCwgdGhleSB1c2UgYSBuZXcgZGlyZWN0b3J5IHdoZXJlIGEgZmlsZSBpcyBzdG9y
ZWQgd2l0aAorICAgICAgICB0aGUgU2VjdXJpdHlPcmlnaW4gaWQgYXMgdGhlIG5hbWUgb2YgdGhl
IGZpbGUgYW5kIHRoZSBoYXNoIHNhbHQgYXMKKyAgICAgICAgdGhlIGNvbnRlbnQgb2YgdGhlIGZp
bGUuCisKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gYWRkcyBhIG5ldyB0eXBlIG9mIGRhdGEgZm9y
IHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICBUaGF0IHdheSB0aGUgdXNlcnMgY2FuIGNh
bGwgdGhlIFdlYnNpdGVEYXRhU3RvcmUgdG8gc2hvdyB3aGF0CisgICAgICAgIG9yaWdpbnMgaGF2
ZSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGFuZCByZW1vdmUgdGhlbSBhdCBzb21lIHBvaW50LgorCisg
ICAgICAgIFRoZSBEZXZpY2VIYXNoU2FsdFN0b3JhZ2UgY2xhc3MgcmVhZHMgdGhlIGluZm9ybWF0
aW9uIGluIGRpc2sgd2hlbgorICAgICAgICBpdCBpcyBjcmVhdGVkIGFuZCB1cGRhdGVzIHRoZSBk
aXNrIHN0b3JhZ2Ugd2hlbiBzb21lIG1vZGlmaWNhdGlvbgorICAgICAgICBpcyBkZXRlY3RlZC4g
SXQgaXMgYWxzbyB1c2VkIGFzIHRoZSBkZWxlZ2F0ZSBvZiB0aGUgV2Vic2l0ZURhdGFTdG9yZQor
ICAgICAgICBBUEkgdG8gcmVtb3ZlIHRoZSBzdG9yZWQgaGFzaCBzYWx0cy4KKworICAgICAgICBG
b3IgdGhlIG1vbWVudCBqdXN0IEdUSysgYW5kIFdQRSBwb3J0cyBhcmUgdXNpbmcgdGhpcyBjbGFz
cyB0bworICAgICAgICBnZW5lcmF0ZSB0aGUgaGFzaCBzYWx0cy4gVGhlIHBhdGNoIGFkZHMgY29k
ZSB0byB0aGUKKyAgICAgICAgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luIEFQSSBp
bXBsZW1lbnRhdGlvbiwgaXQgd2FzIGVtcHR5CisgICAgICAgIHVudGlsIG5vdyBmb3IgdGhlc2Ug
cG9ydHMuIEluIHRoaXMgZnVuY3Rpb24gd2UgY3JlYXRlIGFuIGluc3RhbmNlCisgICAgICAgIG9m
IGEgbmV3IGNsYXNzIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCB0aGF0IGltcGxl
bWVudHMKKyAgICAgICAgdGhlIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0SWZhY2UgaW50ZXJmYWNl
LCB0aGF0IGFsbG93cyB0aGUgcG9ydHMKKyAgICAgICAgdG8gdXNlIHRoZSBjdXJyZW50IHBlcm1p
c3Npb24gbWFuYWdlcnMgaW1wbGVtZW50ZWQgaW4gdGhlCisgICAgICAgIGVtYmVkZGVycyB0byBo
YW5kbGUgdGhpcyBuZXcga2luZCBvZiByZXF1ZXN0IHRoZSB3YXkgdGhleSBsaWtlCisgICAgICAg
IGl0LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBkZW55LgorCisgICAgICAgIFRoZSBj
bGFzcyBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgdGFrZXMgY2FyZSBvZgorICAg
ICAgICBjb250YWN0aW5nIHRoZSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBhbmQgcmVxdWVzdC9y
ZWdlbmVyYXRlIHRoZQorICAgICAgICBoYXNoIHNhbHRzIGFjY29yZGluZ2x5LgorCisgICAgICAg
IFRoZXJlIGlzIG9uZSBhZGRpdGlvbiB0byB0aGUgZ2VuZXJhbCBBUEkgdG8gaGFuZGxlIHRoZSBs
b2NhdGlvbiBvZgorICAgICAgICB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBmaWxlcyBhcmUgc3Rv
cmVkIHRvIG1ha2UgdGhlIGhhc2ggc2FsdAorICAgICAgICBwZXJzaXN0ZW50LgorCisgICAgICAg
ICogU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oOiBBZGRlZCB0aGUgbmV3IHR5
cGUgb2YKKyAgICAgICAgd2Vic2lkZSBkYXRhOiBEZXZpY2VJZEhhc2hTYWx0LgorICAgICAgICAq
IFNvdXJjZXMudHh0OiBBZGRlZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
U291cmNlc0dUSy50eHQ6IERpdHRvLgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OiBEaXR0by4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHA6
CisgICAgICAgIChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aFdlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uKToKKyAgICAgICAgQWRkZWQgYSBsb2NhdGlvbiBvZiB0
aGUgZGlyZWN0b3J5IHVzZWQgdG8gc3RvcmUgdGhlIGhhc2ggc2FsdHMuCisgICAgICAgIChBUEk6
OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uKTogRGl0
dG8uCisgICAgICAgIChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y29weSk6IERpdHRv
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg6
IEFkZGVkIEFQSSB0bworICAgICAgICByZXRyaWV2ZSBhbmQgc2V0IHRoZSBkaXJlY3RvcnkgdG8g
c3RvcmUgdGhlIGhhc2ggc2FsdHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRl
RGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVm
YXVsdERhdGFTdG9yZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICBJbml0aWFsaXplIHRoZSBuYW1l
IG9mIHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGhhc2ggc2FsdHMuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9BUElXZWJzaXRlRGF0YVN0b3JlLmg6IERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9BUElXZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHA6CisgICAgICAgIChBUEk6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rv
cnkpOgorICAgICAgICBBZGRlZCB0aGUgZGVmYXVsdCBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgZm9y
IHRoZSBHVEsrIGFuZCBXUEUgcG9ydHMuCisgICAgICAgIChBUEk6OldlYnNpdGVEYXRhU3RvcmU6
OmxlZ2FjeURlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkpOiBEaXR0by4K
KyAgICAgICAgKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24pOiBJbml0aWFsaXplCisgICAgICAgIHRoZSBkZWZhdWx0IG5hbWUgb2YgdGhlIGRpcmVj
dG9yeSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHA6IEFkZGVkCisgICAgICAgIHRo
aXMgY2xhc3MgdG8gcmVwcmVzZW50IGEgcmVxdWVzdCBvZiBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0
aGUKKyAgICAgICAgZGV2aWNlcyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBzcGVjaWZpYyBmb3IgZ2xp
YiBwb3J0cyBhbmQgaW1wbGVtZW50cworICAgICAgICB0aGUgcG9saWNpZXMgcmVnYXJkaW5nIHRo
ZSBoYXNoIHNhbHRzIHdoZW4gdGhlIGVtYmVkZGVyIGFsbG93cyBvcgorICAgICAgICBkZW5pZXMg
dGhlIGFjY2VzcyB1c2luZyB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgY2xhc3MuCisgICAg
ICAgICh3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RBbGxvdyk6IEdldCB0aGUgZGV2
aWNlIGhhc2ggc2FsdAorICAgICAgICB3aGVuIHRoZSBvcmlnaW4gaXMgYWxsb3dlZCBhbmQgc2V0
IGl0IGluIHRoZSBvcmlnaW5hbCByZXF1ZXN0LgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0RGVueSk6IFJlZ2VuZXJhdGUgdGhlIGRldmljZSBpZAorICAgICAgICBo
YXNoIHNhbHQgd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBhbGxvdyB0byBhY2Nlc3MgdGhlIGRldmlj
ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgKHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJm
YWNlX2luaXQpOgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGlz
cG9zZSk6CisgICAgICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2Ns
YXNzX2luaXQpOgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3Jl
YXRlKTogQ3JlYXRlIHRoZSBjbGFzcyB1c2luZworICAgICAgICB0aGUgcHJveHkgcmVxdWVzdCBm
cm9tIHRoZSB3ZWJwcm9jZXNzIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUKKyAgICAgICAgRGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaDoKKyAgICAgICAgRGl0dG8uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcDogQWRkZWQgdGhlIGlt
cGxlbWVudGF0aW9uCisgICAgICAgIGZvciB0aGUgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9y
T3JpZ2luIEFQSSBmb3IgdGhlIGdsaWIgcG9ydHMsCisgICAgICAgIGl0IGNyZWF0ZXMgdGhlIGRl
dmljZSBpbmZvIHJlcXVlc3QgYW5kIGNhbGxzIHRoZSBwZXJtaXNzaW9uCisgICAgICAgIHJlcXVl
c3QgQVBJLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNw
cDoKKyAgICAgICAgKHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2ViUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uKToKKyAgICAgICAgQWRkcyB0aGUgZGlyZWN0b3J5IHRvIHN0b3JlIHRo
ZSBoYXNoIHNhbHRzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRl
RGF0YS5jcHA6CisgICAgICAgICh0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMpOiBBZGRlZCB0aGUg
Y29udmVyc2lvbiBmcm9tIHRoZSBXZWJLaXQKKyAgICAgICAgdHlwZXMgdG8gdGhlIGdsaWIgdHlw
ZXMgZm9yIHRoZSBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUpOiBBZGRlZCB0aGUgZGlyZWN0
b3J5IHRvCisgICAgICAgIHN0b3JlIHRoZSBoYXNoIHNhbHRzLgorICAgICAgICAodG9XZWJzaXRl
RGF0YVR5cGVzKTogQWRkZWQgdGhlIGNvbnZlcnNpb24gZnJvbSB0aGUgZ2xpYiB0eXBlCisgICAg
ICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCB0byB0aGUgV2ViS2l0
IHR5cGUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0Lmg6IEFkZGVkCisgICAgICAgIHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVz
ZW50cyBhIHBlcm1pc3Npb24gcmVxdWVzdCBmb3IgdGhlIGRldmljZQorICAgICAgICBpbmZvcm1h
dGlvbiBpbiB0aGUgR1RLKyBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYnNpdGVEYXRhLmg6IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaXRlIHRo
YXQgaW4gdGhlIEdUSysgcG9ydDoKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0Vf
SURfSEFTSF9TQUxULgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdC5oOiBBZGRlZAorICAgICAgICB0aGlzIG5ldyBjbGFzcyB0aGF0
IHJlcHJlc2VudHMgYSBwZXJtaXNzaW9uIHJlcXVlc3QgZm9yIHRoZSBkZXZpY2UKKyAgICAgICAg
aW5mb3JtYXRpb24gaW4gdGhlIFdQRSBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdFdlYnNpdGVEYXRhLmg6IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJz
aXRlIHRoYXQgaW4gdGhlIFdQRSBwb3J0OgorICAgICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RF
VklDRV9JRF9IQVNIX1NBTFQuCisgICAgICAgICogVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwOiBBZGRlZAorICAgICAgICBhbiBpbmNsdWRl
IHRvIHNvbHZlIGNvbXBpbGF0aW9uIGlzc3VlIHdpdGggdGhlIHVuaWZpZWQgY29tcGlsYXRpb24u
CisgICAgICAgICogVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcDogQWRkZWQg
dGhpcyBuZXcgY2xhc3MgdGhhdAorICAgICAgICBoYW5kbGVzIGhvdyB0byBnZW5lcmF0ZSBhbmQg
c3RvcmUgdGhlIGhhc2ggc2FsdHMgaW5zaWRlIFdlYktpdC4gSXQKKyAgICAgICAgdXNlcyBhIGRp
cmVjdG9yeSB0byBzdG9yZSBhIGxpc3Qgb2YgZmlsZXMgdG8gc3RvcmUgdGhlIGhhc2ggc2FsdHMK
KyAgICAgICAgcGVyc2lzdGVudGx5IGluIHRoZSBkaXNrLgorICAgICAgICAoV2ViS2l0OjpEZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZTo6bG9hZFN0b3JhZ2VGcm9tRGlzayk6IEl0IHJlYWRzIGZpbGVz
CisgICAgICAgIGluIHRoZSBkaXNrIHRvIHJlc3RvcmUgdGhlIG1hcCBvZiBoYXNoIHNhbHQgb3Jp
Z2lucy4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnN0b3JlSGFz
aFNhbHRUb0Rpc2spOiBTYXZlcyBhbgorICAgICAgICBvcmlnaW4gYW5kIGl0cyBoYXNoIHNhbHQg
dG8gdGhlIGRpc2suCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpn
ZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAgICBDaGVjayB0aGUg
bWFwIHRvIGdldCB0aGUgaGFzaCBzYWx0IGZvciBhbiBvcmlnaW4sIGlmIHRoZXJlIGlzIG5vbmUK
KyAgICAgICAgY3JlYXRlIGEgbmV3IHJhbmRvbSBvbmUuCisgICAgICAgIChXZWJLaXQ6OkRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOjpyZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9y
T3JpZ2luKToKKyAgICAgICAgRGVsZXRlIHRoZSBoYXNoIHNhbHQgb2YgYW4gb3JpZ2luIGlmIGl0
IGFscmVhZHkgZXhpc3RzIGFuZCBjcmVhdGUgYSBuZXcgb25lLgorICAgICAgICAoV2ViS2l0OjpE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6c2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3Jp
Z2luKToKKyAgICAgICAgU2V0IHRoZSBoYXNoIHNhbHQgb2YgYW4gb3JpZ2luIGluIHRoZSBtYXAs
IGlmIHRoZSBtYXAgYWxyZWFkeSBoYXMKKyAgICAgICAgdGhhdCBvcmlnaW4gaXQgcmVwbGFjZXMg
dGhlIGhhc2ggc2FsdCwgaW4gb3RoZXIgY2FzZSBpdCBjcmVhdGVzIGEKKyAgICAgICAgbmV3IHJl
Z2lzdGVyIGluIHRoZSBtYXAuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9y
YWdlOjpnZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyk6CisgICAgICAgIFJldHVybnMgdGhlIGxp
c3Qgb2Ygb3JpZ2lucyB0aGF0IGhhdmUgYSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGZvcgorICAgICAg
ICB0aGVtLiBJdCBpcyB1c2VkIGluIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICAoV2Vi
S2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlSGFzaFNhbHRGcm9tRGlza0lmTmVl
ZGVkKToKKyAgICAgICAgRGVsZXRlcyB0aGUgZmlsZXMgaW4gZGlzayByZXByZXNlbnRpbmcgYSBo
YXNoIHNhbHQgZm9yIGFuIG9yaWdpbi4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2U6OmRlbGV0ZURldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKToKKyAgICAgICAgRGVs
ZXRlcyB0aGUgaGFzaCBzYWx0cyBpbiB0aGUgbWFwIGZvciBhbiBvcmlnaW4uCisgICAgICAgIChX
ZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3Jp
Z2luc01vZGlmaWVkU2luY2UpOgorICAgICAgICBEZWxldGUgdGhlIG9yaWdpbnMgdGhhdCBoYXZl
IG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIGEgdGltZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJN
ZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5Lmg6IFJlbW92ZSB1bmVlZGVkIGNsYXNzCisgICAgICAg
IGRlZmluaXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6bGVnYWN5V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24pOiBBZGRl
ZCBkaXJlY3RveQorICAgICAgICBpbml0aWFsaXphdGlvbiBmb3IgdGhlIGhhc2ggc2FsdHMgc3Rv
cmVkIGluIGRpc2suCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwOiBBZGRlZCBzdXBwb3J0IHRvCisgICAgICAgIHJldHVybiBhbmQgcmVtb3ZlIHRo
ZSBvcmlnaW5zIHdpdGggYSBnZW5lcmF0ZSBoYXNoIHNhbHQgdXNlZCB0bworICAgICAgICBnZW5l
cmF0ZSB0aGUgZGV2aWNlIGlkcy4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
V2Vic2l0ZURhdGFTdG9yZSk6IEFkZGVkIHRoZSBuZXcKKyAgICAgICAgcmVmZXJlbmNlIHRvIHRo
ZSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBjbGFzcywgdXNlZCB0byBoYW5kbGUgdGhlCisgICAg
ICAgIGhhc2ggc2FsdHMuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc29s
dmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KTogSGFuZGxlCisgICAgICAgIHRoZSBuZXcgZGlyZWN0
b3J5IHVzZWQgZm9yIHRoZSBoYXNoIHNhbHRzIHN0b3JhZ2UgaW4gZGlzay4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOiBHZXQgdGhlIGxpc3Qg
b2YKKyAgICAgICAgb3JpZ2lucyB3aXRoIGEgaGFzaCBzYWx0cyBpbiB0aGUgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOiBSZW1vdmUgdGhlIGhhc2ggc2FsdHMgaW4KKyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UgZm9yIGFuIG9yaWdpbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVzb2x2ZWREZXZpY2VJZEhhc2hTYWx0c0RpcmVjdG9yeSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRldmljZUlkSGFzaFNhbHRTdG9yYWdlKToKKyAgICAg
ICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgdGhlCisgICAgICAg
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlIHRvIHRoZSBjb21waWxhdGlvbi4KKwogMjAxOC0wOS0y
NSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIGZyYW1l
IGZsYXR0ZW5pbmcgYW4gaW50ZXJuYWwgZGVidWcgZmVhdHVyZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAK
aW5kZXggZTJjNWJmNzBhMjY3MjRmZDA1N2M5YTZhZTQ2MWFkNWFkYTUzZjllMC4uYmM2OWE0NTQ1
MTRmZGVkMWQxYjQ4MDQxMDc1MjJjYjg0ZGViYTYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCkBA
IC04MSw5ICs4MSw3IEBAIHZvaWQgTWVkaWFEZXZpY2VzUmVxdWVzdDo6Y29udGV4dERlc3Ryb3ll
ZCgpCiAKIHZvaWQgTWVkaWFEZXZpY2VzUmVxdWVzdDo6ZmlsdGVyRGV2aWNlTGlzdChWZWN0b3I8
UmVmPE1lZGlhRGV2aWNlSW5mbz4+JiBkZXZpY2VzKQogewotI2lmICFQTEFURk9STShDT0NPQSkK
LSAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7Ci0jZWxzZQorI2lmIFBMQVRGT1JNKENPQ09BKSB8
fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKIAogI2lmIFBMQVRGT1JNKElPUykKICAg
ICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDYW1lcmFDb3VudCA9IDI7CkBAIC05MSw2ICs4OSwx
MCBAQCB2b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJl
ZjxNZWRpYURldmljZUluZm8+PiYgZGV2aWNlcwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRDYW1lcmFDb3VudCA9IDE7CiAjZW5kaWYKKyNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKyAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDYW1l
cmFDb3VudCA9IDE7CisjZW5kaWYKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdE1pY3Jv
cGhvbmVDb3VudCA9IDE7CiAKICAgICBpbnQgY2FtZXJhQ291bnQgPSAwOwpAQCAtMTAzLDcgKzEw
NSw4IEBAIHZvaWQgTWVkaWFEZXZpY2VzUmVxdWVzdDo6ZmlsdGVyRGV2aWNlTGlzdChWZWN0b3I8
UmVmPE1lZGlhRGV2aWNlSW5mbz4+JiBkZXZpY2VzCiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0pOwotCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkZXZpY2VzKTsKICNlbmRpZgogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVR5cGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlw
ZS5oCmluZGV4IDlkNTAzNjFlODFhMzdiZDk0MDJkZTkxYzFjNTM5NTg0ZWFhYTYyZGUuLjYwMWJi
NDQzNjdiZjE1YmVjZWI5YmIxYjZkYjNiZTc3NzQ2NjhhNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oCkBAIC00OSw2ICs0OSw3
IEBAIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIHsKICAgICBTZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9ucyA9IDEgPDwgMTQsCiAjZW5kaWYKICAgICBET01DYWNoZSA9IDEgPDwgMTUsCisgICAg
RGV2aWNlSWRIYXNoU2FsdCA9IDEgPDwgMTYsCiB9OwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggZmNj
YTNjNTQ4YWNkNjc2YjhjNjEyMDkyMjJjNTdhZWU1NmVmZWM0ZC4uNWJjNjM2M2ViNDk3NjhhYmE2
YThhZTczMTlmYjM1ODZiYTU2MmRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yMzMsNiArMjMzLDcgQEAg
VUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdFByb3h5LmNwcAogVUlQcm9jZXNzL1BhZ2VMb2FkU3RhdGUuY3BwCitVSVByb2Nl
c3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwCiBVSVByb2Nlc3MvUHJvY2Vzc0Fzc2VydGlv
bi5jcHAKIFVJUHJvY2Vzcy9Qcm9jZXNzVGhyb3R0bGVyLmNwcAogVUlQcm9jZXNzL1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RL
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggYzQ1Y2FmZTZjM2ZiZDMw
MTE3ZjhkMjE3NjlhZDkzZWI2ZDc0ZDg3Yy4uMTQyZTg0MDYzYzQ4ZmJmNWM2ZGViMmQxNDUzODAy
MmZkZGJmMzI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0xMzUsNiArMTM1LDcgQEAgVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuY3BwIEBuby11bmlmeQorVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5v
LXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWQuY3BwIEBuby11bmlmeQog
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JTdGF0ZS5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
V1BFLnR4dAppbmRleCBmOWNmMzcxNzViNmY5OWY1ZmI1MjllYTIwZDAwYTExNzQzNjU1ZjIzLi5m
MzZhOTQ2NTQzZThlNzVhMDUwY2E1MmM1OGEwMWUzY2FhNDUyYzM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50
eHQKQEAgLTEyMiw2ICsxMjIsNyBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29udGV4dE1l
bnVDbGllbnQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1h
bmFnZXIuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENyZWRlbnRpYWwu
Y3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudC5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNl
SW5mb1Blcm1pc3Npb25SZXF1ZXN0LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXREb3dubG9hZC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93
bmxvYWRDbGllbnQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEVkaXRv
clN0YXRlLmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAKaW5kZXggYzExM2VkODMx
ZTY1MmMzNWY1MWRkZTQ1NTQyODQ1OWJkODc1ZGI2Yi4uYmYwNzc0NzM4Njk3NmI2MzE2YTg2ZGRk
MzhiNzkyYWQ5MWI2ODgzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAKQEAgLTU4LDYgKzU4LDcg
QEAgUmVmPFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbj4gUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
OjpjcmVhdGVXaXRoV2Vic2l0ZURhdGFTdG8KICAgICBjb25maWd1cmF0aW9uLT5tX2luZGV4ZWRE
QkRhdGFiYXNlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVmYXVsdEluZGV4
ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi0+bV9sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkgPSBsZWdhY3lDb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeTsK
ICAgICBjb25maWd1cmF0aW9uLT5tX21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBsZWdhY3lD
b25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7CisgICAgY29uZmlndXJhdGlv
bi0+bV9kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkgPSBsZWdhY3lDb25maWd1cmF0
aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeTsKICAgICBjb25maWd1cmF0aW9u
LT5tX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBsZWdhY3lDb25maWd1cmF0aW9u
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7CiAgICAgY29uZmlndXJhdGlvbi0+bV93
ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IGxlZ2FjeUNvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJh
c2VEaXJlY3Rvcnk7CiAgICAgY29uZmlndXJhdGlvbi0+bV9qYXZhU2NyaXB0Q29uZmlndXJhdGlv
bkRpcmVjdG9yeSA9IGxlZ2FjeUNvbmZpZ3VyYXRpb24uamF2YVNjcmlwdENvbmZpZ3VyYXRpb25E
aXJlY3Rvcnk7CkBAIC03NCw2ICs3NSw3IEBAIFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uKCkKICAgICAsIG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5KFdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSkKICAgICAsIG1f
d2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFdlYlNRTERh
dGFiYXNlRGlyZWN0b3J5KCkpCiAgICAgLCBtX21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKSkKKyAgICAs
IG1fZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKSkKICAgICAsIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeShXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpKQogICAgICwgbV9qYXZhU2NyaXB0Q29uZmlndXJh
dGlvbkRpcmVjdG9yeShXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0SmF2YVNjcmlwdENvbmZpZ3Vy
YXRpb25EaXJlY3RvcnkoKSkKIHsKQEAgLTEwMCw2ICsxMDIsNyBAQCBSZWY8UHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uPiBQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNvcHkoKQogICAgIGNvcHkt
Pm1faW5qZWN0ZWRCdW5kbGVQYXRoID0gdGhpcy0+bV9pbmplY3RlZEJ1bmRsZVBhdGg7CiAgICAg
Y29weS0+bV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5tX2xvY2FsU3RvcmFnZURpcmVj
dG9yeTsKICAgICBjb3B5LT5tX21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5tX21l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7CisgICAgY29weS0+bV9kZXZpY2VJZEhhc2hTYWx0c1N0
b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5tX2RldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9y
eTsKICAgICBjb3B5LT5tX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSB0aGlzLT5t
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7CiAgICAgY29weS0+bV9qYXZhU2NyaXB0
Q29uZmlndXJhdGlvbkRpcmVjdG9yeSA9IHRoaXMtPm1famF2YVNjcmlwdENvbmZpZ3VyYXRpb25E
aXJlY3Rvcnk7CiAgICAgY29weS0+bV93ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IHRoaXMtPm1f
d2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgKaW5kZXggNDViMWI3NTA2
YTU0NWJjOTVjMjViY2JiMDY0M2IzYzNlNWQyNzE0Mi4uOTg2MDFmYmYyM2MwNTYxY2RmOTQ4YTMz
YWUyYTM4N2JlYjBhOTNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaApAQCAtOTEsNiArOTEsOSBAQCBw
dWJsaWM6CiAgICAgY29uc3QgV1RGOjpTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnko
KSBjb25zdCB7IHJldHVybiBtX21lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KICAgICB2b2lk
IHNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoY29uc3QgV1RGOjpTdHJpbmcmIG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnkpIHsgbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeTsgfQogCisgICAgY29uc3QgV1RGOjpTdHJpbmcmIGRldmljZUlk
SGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNo
U2FsdHNTdG9yYWdlRGlyZWN0b3J5OyB9CisgICAgdm9pZCBzZXREZXZpY2VJZEhhc2hTYWx0c1N0
b3JhZ2VEaXJlY3RvcnkoY29uc3QgV1RGOjpTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRzU3RvcmFn
ZURpcmVjdG9yeSkgeyBtX2RldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IGRldmlj
ZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeTsgfQorCiAgICAgY29uc3QgV1RGOjpTdHJpbmcm
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7IH0KICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkoY29uc3QgV1RGOjpTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkpIHsgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsgfQogCkBAIC0xODAsNiArMTgzLDcgQEAgcHJpdmF0
ZToKICAgICBXVEY6OlN0cmluZyBtX2xvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBXVEY6OlN0
cmluZyBtX3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFdURjo6U3RyaW5nIG1fbWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeTsKKyAgICBXVEY6OlN0cmluZyBtX2RldmljZUlkSGFzaFNhbHRz
U3RvcmFnZURpcmVjdG9yeTsKICAgICBXVEY6OlN0cmluZyBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3Rvcnk7CiAgICAgV1RGOjpTdHJpbmcgbV9qYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRp
cmVjdG9yeTsKICAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fY2FjaGVQYXJ0aXRpb25lZFVSTFNj
aGVtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0
ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURh
dGFTdG9yZS5jcHAKaW5kZXggYTNlYzI1ZDBkZjZiODY3ZGM5MGNlMTg0YTg0NmIwN2UyYTk5ZTIz
MS4uZTQxZmJiZDU0ZjZkOTBjYTEyZDIyOGJjM2RlMDQ0NGNhYWVjODJhMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAt
MTI4LDYgKzEyOCw3IEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiBX
ZWJzaXRlRGF0YVN0b3JlOjpsZWdhY3lEZWZhdWx0RGF0YVN0b3JlCiAgICAgY29uZmlndXJhdGlv
bi5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0
b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5ID0gbGVnYWN5RGVm
YXVsdE1lZGlhQ2FjaGVEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgp
OworICAgIGNvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0g
bGVnYWN5RGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIGNv
bmZpZ3VyYXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0SW5k
ZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLndlYlNRTERhdGFi
YXNlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCk7CiAg
ICAgY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0TG9j
YWxTdG9yYWdlRGlyZWN0b3J5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVdlYnNpdGVEYXRhU3RvcmUuaAppbmRleCA2NmVmYTU4NzYwYTdmZTdlMWZjMjY3ZGNjNDUy
MjczMjlmZGQyODNhLi5hOWYwNzQ5ZmFlZDllOTc2ZGY3NThmOGI5ZDBjZTQ2ZWYwMDA0ODA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlRGF0YVN0b3Jl
LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZh
dWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6
OlN0cmluZyBkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgc3RhdGljIFdURjo6
U3RyaW5nIGRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFdU
Rjo6U3RyaW5nIGRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAg
ICBzdGF0aWMgV1RGOjpTdHJpbmcgZGVmYXVsdFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCk7CiAg
ICAgc3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5KCk7CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJh
dGlvbkRpcmVjdG9yeSgpOwpAQCAtNzMsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdU
Rjo6U3RyaW5nIGxlZ2FjeURlZmF1bHRJbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSgpOwogICAg
IHN0YXRpYyBXVEY6OlN0cmluZyBsZWdhY3lEZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnko
KTsKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5RGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VE
aXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5RGVmYXVsdERldmljZUlk
SGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBsZWdh
Y3lEZWZhdWx0TWVkaWFDYWNoZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBs
ZWdhY3lEZWZhdWx0SmF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJlY3RvcnkoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvQVBJV2Vic2l0ZURhdGFTdG9y
ZUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvQVBJV2Vic2l0ZURh
dGFTdG9yZUdMaWIuY3BwCmluZGV4IDMxOTY4NDcyNmY5YzJmNjFjZWRmNjEzZWUwYjE1YzJkYTM5
NjdmNTkuLmM0ZGU2NTkxMTgzZGQzOTZkMmI1MjQyNzA2YjcxZDhkZmIzNTgyNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0FQSVdlYnNpdGVEYXRhU3RvcmVH
TGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9BUElXZWJzaXRl
RGF0YVN0b3JlR0xpYi5jcHAKQEAgLTczLDYgKzczLDEyIEBAIFdURjo6U3RyaW5nIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkKICAgICByZXR1cm4g
d2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oQkFTRV9ESVJFQ1RP
UlkgR19ESVJfU0VQQVJBVE9SX1MgIm1lZGlha2V5cyIpOwogfQogCisKK1N0cmluZyBXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKK3sK
KyAgICByZXR1cm4gd2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
QkFTRV9ESVJFQ1RPUlkgR19ESVJfU0VQQVJBVE9SX1MgImRldmljZWlkaGFzaHNhbHRzIik7Cit9
CisKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRXZWJTUUxEYXRhYmFzZURp
cmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIHdlYnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKEJBU0VfRElSRUNUT1JZIEdfRElSX1NFUEFSQVRPUl9TICJkYXRhYmFzZXMi
KTsKQEAgLTE1Niw2ICsxNjIsMTUgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6bGVn
YWN5RGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKQogICAgIHJldHVybiBkZWZhdWx0
TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOwogfQogCitTdHJpbmcgV2Vic2l0ZURhdGFTdG9y
ZTo6bGVnYWN5RGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCit7Cisj
aWYgUExBVEZPUk0oV1BFKQorICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGRldmljZUlkSGFzaFNhbHRz
U3RvcmFnZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwg
IndwZSIsICJkZXZpY2VpZGhhc2hzYWx0cyIsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6RmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXZpY2VJ
ZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkuZ2V0KCkpOworI2VuZGlmCisgICAgcmV0dXJuIGRl
ZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKK30KKwogV1RGOjpTdHJp
bmcgV2Vic2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0aW9u
RGlyZWN0b3J5KCkKIHsKICAgICBHVW5pcXVlUHRyPGdjaGFyPiBqYXZhU2NyaXB0Q29yZUNvbmZp
Z0RpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgQkFTRV9E
SVJFQ1RPUlksICJKYXZhU2NyaXB0Q29yZURlYnVnIiwgbnVsbHB0cikpOwpAQCAtMTc0LDYgKzE4
OSw3IEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlQ29uZmlnCiAgICAgY29uZmlndXJhdGlvbi53ZWJTUUxE
YXRhYmFzZURpcmVjdG9yeSA9IGRlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOwogICAg
IGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGVmYXVsdExvY2FsU3RvcmFn
ZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eSA9IGRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgY29uZmlndXJhdGlv
bi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkgPSBkZWZhdWx0RGV2aWNlSWRIYXNo
U2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5ID0gZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkoKTsKIAogICAgIHJldHVybiBjb25maWd1cmF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZmMDg3ZDY2ZTdkOWJhZGFjMTE4YThj
MTBjMmY3YmFjYjI5ZjNkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHAKQEAgLTAs
MCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oIgorCisjaW5jbHVkZSAiVXNlck1l
ZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UGVybWlzc2lvblJlcXVl
c3QuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4
bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdAorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBBIHBlcm1pc3Npb24gcmVxdWVzdCBmb3Ig
YWNjZXNzaW5nIHVzZXIncyBhdWRpby92aWRlbyBkZXZpY2VzLgorICogQFRpdGxlOiBXZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFBlcm1pc3Np
b25SZXF1ZXN0LCAjV2ViS2l0V2ViVmlldworICoKKyAqIFdlYktpdFVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0IHJlcHJlc2VudHMgYSByZXF1ZXN0IGZvcgorICogcGVybWlzc2lvbiB0byB3aGV0
aGVyIFdlYktpdCBzaG91bGQgYmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHVzZXIncworICogZGV2
aWNlcyBpbmZvcm1hdGlvbiB3aGVuIHJlcXVlc3RlZCB0aHJvdWdoIHRoZSBlbnVtZXJhY2VEZXZp
Y2VzIEFQSS4KKyAqCisgKiBXaGVuIGEgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZSB1c2VyLAorICogaXQgaXMgZGVuaWVkIGJ5IGRlZmF1bHQu
CisgKgorICogU2luY2U6IDIuMjIKKyAqLworCitzdGF0aWMgdm9pZCB3ZWJraXRfcGVybWlzc2lv
bl9yZXF1ZXN0X2ludGVyZmFjZV9pbml0KFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0SWZhY2UqKTsK
Kworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlIHsKKyAg
ICBSZWZQdHI8VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHk+IHJlcXVlc3Q7CisgICAgUmVm
UHRyPERldmljZUlkSGFzaFNhbHRTdG9yYWdlPiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKKyAg
ICBib29sIG1hZGVEZWNpc2lvbjsKK307CisKK1dFQktJVF9ERUZJTkVfVFlQRV9XSVRIX0NPREUo
CisgICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LCB3ZWJraXRfZGV2aWNlX2lu
Zm9fcGVybWlzc2lvbl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAorICAgIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRShXRUJLSVRfVFlQRV9QRVJNSVNTSU9OX1JFUVVFU1QsIHdlYmtpdF9wZXJtaXNzaW9u
X3JlcXVlc3RfaW50ZXJmYWNlX2luaXQpKQorCitzdGF0aWMgdm9pZCB3ZWJraXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RBbGxvdyhXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBBU1NFUlQoV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChy
ZXF1ZXN0KSk7CisKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KS0+
cHJpdjsKKworICAgIC8vIE9ubHkgb25lIGRlY2lzaW9uIGF0IGEgdGltZS4KKyAgICBpZiAocHJp
di0+bWFkZURlY2lzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5tYWRlRGVjaXNp
b24gPSB0cnVlOworICAgIGF1dG8gc2FsdCA9IHByaXYtPmRldmljZUlkSGFzaFNhbHRTdG9yYWdl
LT5nZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocHJpdi0+cmVxdWVzdC5nZXQo
KSk7CisgICAgcHJpdi0+cmVxdWVzdC0+c2V0VXNlck1lZGlhQWNjZXNzSW5mbyhXVEZNb3ZlKHNh
bHQpLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0RGVueShXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBBU1NF
UlQoV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisK
KyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KS0+cHJpdjsKKworICAg
IC8vIE9ubHkgb25lIGRlY2lzaW9uIGF0IGEgdGltZS4KKyAgICBpZiAocHJpdi0+bWFkZURlY2lz
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5tYWRlRGVjaXNpb24gPSB0cnVlOwor
ICAgIGF1dG8gc2FsdCA9IHByaXYtPmRldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5yZWdlbmVyYXRl
RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHByaXYtPnJlcXVlc3QuZ2V0KCkpOwor
ICAgIHByaXYtPnJlcXVlc3QtPnNldFVzZXJNZWRpYUFjY2Vzc0luZm8oV1RGTW92ZShzYWx0KSwg
ZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2ludGVy
ZmFjZV9pbml0KFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0SWZhY2UqIGlmYWNlKQoreworICAgIGlm
YWNlLT5hbGxvdyA9IHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdEFsbG93OworICAg
IGlmYWNlLT5kZW55ID0gd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gRGVmYXVsdCBiZWhhdmlvdXIgd2hlbiBubyBkZWNp
c2lvbiBoYXMgYmVlbiBtYWRlIGlzIGRlbnlpbmcgdGhlIHJlcXVlc3QuCisgICAgd2Via2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueShXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKG9i
amVjdCkpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9u
X3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqZWN0Q2xh
c3MtPmRpc3Bvc2UgPSB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REaXNwb3NlOwor
fQorCitXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QqIHdlYmtpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYgcmVx
dWVzdCwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIEFQSTo6
U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIERldmljZUlkSGFzaFNhbHRT
dG9yYWdlKiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSkKK3sKKyAgICBXZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3QqIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCA9IFdFQktJVF9E
RVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RF
VklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgbnVsbHB0cikpOworCisgICAgLy8gRklYTUU6
IHN0b3JlIFNlY3VyaXR5T3JpZ2lucyBhbmQgbWFkZSB0aGVtIGF2YWlsYWJsZSB0byB0aGUgZW1i
ZWRkZXIuCisgICAgVU5VU0VEX1BBUkFNKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luKTsKKyAgICBV
TlVTRURfUEFSQU0odG9wTGV2ZWxEb2N1bWVudE9yaWdpbik7CisKKyAgICBkZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QtPnByaXYtPnJlcXVlc3QgPSAmcmVxdWVzdDsKKyAgICBkZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3QtPnByaXYtPmRldmljZUlkSGFzaFNhbHRTdG9yYWdlID0gZGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2U7CisgICAgcmV0dXJuIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yNDQzMDM4ZmY4NzAyNWIxMWExMDU3ZjE3OGUwMmU0ZmRkZDQ0OGEyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaHBvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4u
aCIKKyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIgorI2luY2x1ZGUgIldlYktp
dERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oIgorCitXZWJLaXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3QqIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShXZWJL
aXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYs
IEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNs
aWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVu
dC5jcHAKaW5kZXggMDI3NTQzMTI3YWVlMWIwODZkMDM2MTUxZDExOGNmYzc5NjY2YTQyZS4uNWUz
NmJkYTk2NzQyMDcyZGNiNDQzOTNjYTgxOGFiNjFjYWQ3MzVmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcApAQCAtMjIsNiAr
MjIsNyBAQAogCiAjaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJl
YVByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgiCkBAIC0zMiw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogCiAjaWYg
UExBVEZPUk0oR1RLKQpAQCAtMTg5LDYgKzE5MSwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBib29sIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9y
aWdpbihXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3Jp
Z2luJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2
ZWxEb2N1bWVudE9yaWdpbiwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHBlcm1pc3Np
b25SZXF1ZXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3Q+IGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0
R1JlZih3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUocGVybWlzc2lvblJl
cXVlc3QsIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBw
YWdlLndlYnNpdGVEYXRhU3RvcmUoKS5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpKSk7CisgICAg
ICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3QobV93ZWJWaWV3LCBXRUJLSVRf
UEVSTUlTU0lPTl9SRVFVRVNUKGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5nZXQoKSkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYsIEFQSTo6U2VjdXJpdHlP
cmlnaW4mLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAog
ICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dD4gbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0Tm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3Q6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkucHRyKCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAK
aW5kZXggM2Y1MjYyNWU2N2IxZTcxYTQ0ZjY0MWVhOTJiODUzNmVhMDE0OWIyZC4uNDZlOTJkNTNm
YWQ2MzQyOTEwN2MxY2YwNjk1YWY4NTkwZTI0NjA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTMyMiw2ICsz
MjIsNyBAQCBzdGF0aWMgaW5saW5lIFdlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gd2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25Gb3JXZQogICAgIGNvbmZpZ3VyYXRpb24ud2ViU1FM
RGF0YWJhc2VEaXJlY3RvcnkgPSBwcm9jZXNzUG9vbGNvbmZpZ3VyYXJpb24ud2ViU1FMRGF0YWJh
c2VEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IHByb2Nlc3NQb29sY29uZmlndXJhcmlvbi5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBj
b25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBwcm9jZXNzUG9vbGNvbmZp
Z3VyYXJpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGNvbmZpZ3VyYXRpb24u
ZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xjb25maWd1cmFy
aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIHJldHVybiBjb25m
aWd1cmF0aW9uOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJzaXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJzaXRlRGF0YS5jcHAKaW5kZXggYTI0ZGE0ZDZlMWNjODgyNmU0Y2UyM2Rh
N2E3NzU3ZWU1ZTMwOTRkZi4uMDEyZjg4ZjRmZDU1YTIwOGI5MzM3Y2MyY2MzYzVkMjUxNzAzMjJj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
c2l0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFdlYnNpdGVEYXRhLmNwcApAQCAtMTAzLDYgKzEwMyw4IEBAIHN0YXRpYyBXZWJLaXRXZWJzaXRl
RGF0YVR5cGVzIHRvV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlCiAjZW5kaWYKICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDb29r
aWVzKSkKICAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVT
OworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNh
bHQpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9J
RF9IQVNIX1NBTFQ7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhVHlw
ZXM+KHJldHVyblZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKaW5kZXggODZi
ZjQ3ZmQxYWUwZWFkMjkxZWI1MDlhYzE3ZmE2M2E2MTE0ZTE2Yi4uN2VmMjVlZmQzZDQ2MGQ4ZDk2
NzRmNDJiZmE1N2E1YjMwMjUyODY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC0z
NzEsNiArMzcxLDcgQEAgQVBJOjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXREYXRhU3RvcmUoV2ViS2l0V2Vic2l0ZURhdGFNYW4KICAgICAgICAgY29uZmlndXJh
dGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9ICFwcml2LT53ZWJTUUxEaXJlY3RvcnkgPwog
ICAgICAgICAgICAgQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0V2ViU1FMRGF0YWJhc2VE
aXJlY3RvcnkoKSA6IFdlYkNvcmU6OkZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocHJpdi0+d2ViU1FMRGlyZWN0b3J5LmdldCgpKTsKICAgICAgICAgY29uZmln
dXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gQVBJOjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAgICAgICBjb25maWd1cmF0
aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgICAg
ICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVM
ZWdhY3koV1RGTW92ZShjb25maWd1cmF0aW9uKSk7CiAgICAgfQogCkBAIC02NDksNiArNjUwLDgg
QEAgc3RhdGljIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlcyhX
ZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5cGUKICNlbmRpZgogICAgIGlmICh0eXBlcyAmIFdFQktJ
VF9XRUJTSVRFX0RBVEFfQ09PS0lFUykKICAgICAgICAgcmV0dXJuVmFsdWUuYWRkKFdlYnNpdGVE
YXRhVHlwZTo6Q29va2llcyk7CisgICAgaWYgKHR5cGVzICYgV0VCS0lUX1dFQlNJVEVfREFUQV9E
RVZJQ0VfSURfSEFTSF9TQUxUKQorICAgICAgICByZXR1cm5WYWx1ZS5hZGQoV2Vic2l0ZURhdGFU
eXBlOjpEZXZpY2VJZEhhc2hTYWx0KTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmOGM0MmVjYjYw
ODRlYjVhM2M1MjM2NGQ4NDFkZGM0ZTE1ZGI4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
Ml9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJP
bmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9oCisjZGVmaW5l
IFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNU
ICAgICAgICAgICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVF
U1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ERVZJQ0VfSU5GT19Q
RVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ICAgICAgICBXZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0Q2xhc3MgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFz
czsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2
YXRlIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBf
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsK
KworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAg
dm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVz
ZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7Cisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBlICAgICh2
b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgKaW5kZXggMDY1MDQ3ZmUxN2M1ODVl
MjgyNjExOWFjZGI0YjMwNzBlMTQzMjMyMS4uNjc0MzA1Y2MwMWYwZDk0YWIwY2RkMjQ3YTkzMjkw
ZWYzYjlhNTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2Vic2l0ZURhdGEuaApAQCAtNDQsNiArNDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0V2Vic2l0ZURhdGEgV2ViS2l0V2Vic2l0ZURhdGE7CiAgKiBAV0VCS0lUX1dFQlNJVEVfREFU
QV9JTkRFWEVEREJfREFUQUJBU0VTOiBJbmRleGVkREIgZGF0YWJhc2VzLgogICogQFdFQktJVF9X
RUJTSVRFX0RBVEFfUExVR0lOX0RBVEE6IFBsdWdpbnMgZGF0YS4KICAqIEBXRUJLSVRfV0VCU0lU
RV9EQVRBX0NPT0tJRVM6IENvb2tpZXMuCisgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0Vf
SURfSEFTSF9TQUxUOiBIYXNoIHNhbHQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGV2aWNlIGlkcyB1
c2VkIGJ5IHdlYnBhZ2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMOiBBbGwgdHlwZXMu
CiAgKgogICogRW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXByZXNlbnRpbmcgdHlwZXMgb2YgV2Vi
c2l0ZSBkYXRhLgpAQCAtNjAsNyArNjEsOCBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9X
RUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAgICA9IDEgPDwgNiwKICAgICBXRUJL
SVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAgICAgICAgPSAxIDw8IDcsCiAgICAg
V0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTICAgICAgICAgICAgICAgICAgID0gMSA8PCA4LAot
ICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgxIDw8
IDkpIC0gMQorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCAgICAg
ICA9IDEgPDwgOSwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAg
ICAgICAgPSAoMSA8PCAxMCkgLSAxCiB9IFdlYktpdFdlYnNpdGVEYXRhVHlwZXM7CiAKIFdFQktJ
VF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3N2QxOGQ2OTE4MDNjNzI5ZGM1MGQ5MDY4MjQ3Nzg5OTIxOGQyNDcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lUX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJ
T04pCisjZXJyb3IgIk9ubHkgPHdwZS93ZWJraXQuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9o
CisjZGVmaW5lIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9oCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JF
UVVFU1QgICAgICAgICAgICAod2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNU
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05f
UkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9J
TkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1Qp
KQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RF
VklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5G
T19QRVJNSVNTSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNU
LCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgICAgICAgIFdlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RDbGFzcyAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dFByaXZhdGUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZTsKKworc3Ry
dWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgeworICAgIEdPYmplY3QgcGFy
ZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisK
KyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUg
ICAgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaAppbmRleCAzYTQ2MmFhZmY5
Yjg3YzZlMGU1N2Y5NjJjMGU0NjMwOTI1OWRkZTAzLi4wM2RkNTg1ZDEyNjVhNmU0ZWVkYjk0MjY4
NzUzZjM2MjRjNjIwYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRXZWJzaXRlRGF0YS5oCkBAIC00NCw2ICs0NCw3IEBAIHR5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJzaXRlRGF0YSBXZWJLaXRXZWJzaXRlRGF0YTsKICAqIEBXRUJLSVRfV0VCU0lU
RV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVM6IEluZGV4ZWREQiBkYXRhYmFzZXMuCiAgKiBAV0VC
S0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQTogUGx1Z2lucyBkYXRhLgogICogQFdFQktJVF9X
RUJTSVRFX0RBVEFfQ09PS0lFUzogQ29va2llcy4KKyAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0RF
VklDRV9JRF9IQVNIX1NBTFQ6IEhhc2ggc2FsdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkZXZpY2Ug
aWRzIHVzZWQgYnkgd2VicGFnZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9BTEw6IEFsbCB0
eXBlcy4KICAqCiAgKiBFbnVtIHZhbHVlcyB3aXRoIGZsYWdzIHJlcHJlc2VudGluZyB0eXBlcyBv
ZiBXZWJzaXRlIGRhdGEuCkBAIC02MCw3ICs2MSw4IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VC
S0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTICAgICAgID0gMSA8PCA2LAogICAg
IFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEEgICAgICAgICAgICAgICA9IDEgPDwgNywK
ICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDgsCi0gICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAgICAgID0g
KDEgPDwgOSkgLSAxCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxU
ICAgICAgID0gMSA8PCA5LAorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAg
ICAgICAgICAgICA9ICgxIDw8IDEwKSAtIDEKIH0gV2ViS2l0V2Vic2l0ZURhdGFUeXBlczsKIAog
V0VCS0lUX0FQSSBHVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
LmNwcAppbmRleCBlNTlkMDljZDBjYjQ1NjkzNzVjNzUzNGE5M2Q4NzhhNGUxYzQwMjM0Li5iMmM4
OWUyNjE1M2FkMDBlYmJmOTVlZDRlMWFkZTQ0N2U5NThhODVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKIAor
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24uaCIKICNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKICNpbmNsdWRlICJBdXRoZW50aWNh
dGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdlcy5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFkZWFiOGE4NWVmNjljZTc5ODFmODYxNGZiYmI4ZjllNWY3ZTcy
YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5jcHAKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBjb25zdCBpbnQgaGFzaFNhbHRTaXplID0g
NDg7CitzdGF0aWMgY29uc3QgaW50IHJhbmRvbURhdGFTaXplID0gaGFzaFNhbHRTaXplIC8gMTY7
CisKK1JlZjxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBi
b29sIGlzUGVyc2lzdGVudCkKK3sKKyAgICBhdXRvIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlID0g
YWRvcHRSZWYoKm5ldyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZShkZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZURpcmVjdG9yeSwgaXNQZXJzaXN0ZW50KSk7CisgICAgZGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UtPmxvYWRTdG9yYWdlRnJvbURpc2soKTsKKyAgICByZXR1cm4gZGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2U7Cit9CisKK0RldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZShjb25zdCBTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBib29s
IGlzUGVyc2lzdGVudCkKKyAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UiKSkKKyAgICAsIG1faXNQZXJzaXN0ZW50
KGlzUGVyc2lzdGVudCkKKyAgICAsIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3Rvcnko
ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnkpCit7Cit9CisKK0RldmljZUlkSGFzaFNh
bHRTdG9yYWdlOjp+RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKQoreworfQorCit2b2lkIERldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOjpsb2FkU3RvcmFnZUZyb21EaXNrKCkKK3sKKyAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11dGFi
bGUgeworICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgICAgICBGaWxl
U3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVj
dG9yeSk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gb3JpZ2luUGF0aHMgPSBGaWxlU3lzdGVt
OjpsaXN0RGlyZWN0b3J5KG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnksICIqIik7
CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgb3JpZ2luUGF0aCA6IG9yaWdpblBhdGhzKSB7Cisg
ICAgICAgICAgICBVUkwgdXJsOworICAgICAgICAgICAgdXJsLnNldFByb3RvY29sKCJmaWxlIl9z
KTsKKyAgICAgICAgICAgIHVybC5zZXRQYXRoKG9yaWdpblBhdGgpOworCisgICAgICAgICAgICBT
dHJpbmcgZGV2aWNlSWRIYXNoU2FsdElkZW50aWZpZXIgPSB1cmwubGFzdFBhdGhDb21wb25lbnQo
KTsKKworICAgICAgICAgICAgYXV0byBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0
YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihkZXZpY2VJZEhhc2hTYWx0SWRlbnRpZmllcik7Cisg
ICAgICAgICAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgICAgICAgICAgaWYg
KCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShvcmlnaW5QYXRoLCBmaWxlU2l6ZSkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5c3Rl
bTo6b3BlbkFuZExvY2tGaWxlKG9yaWdpblBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZCk7CisgICAgICAgICAgICBpZiAoaGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IHNpemVfdCBieXRlc1RvUmVhZDsKKyAgICAgICAgICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5
KGZpbGVTaXplLCBieXRlc1RvUmVhZCkpIHsKKyAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjp1
bmxvY2tBbmRDbG9zZUZpbGUoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihieXRlc1RvUmVh
ZCk7CisgICAgICAgICAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFk
RnJvbUZpbGUoaGFuZGxlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKworICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICAgICAg
ICAgIGlmICh0b3RhbEJ5dGVzUmVhZCAhPSBieXRlc1RvUmVhZCB8fCB0b3RhbEJ5dGVzUmVhZCAh
PSBoYXNoU2FsdFNpemUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IGF1dG8gZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luID0gU3RyaW5nKGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5zaXplKCkpOworCisgICAgICAgICAgICBzZXREZXZpY2VJZGVudGlmaWVy
SGFzaFNhbHRGb3JPcmlnaW4oc2VjdXJpdHlPcmlnaW4tPnNlY3VyaXR5T3JpZ2luKCksIFdURk1v
dmUoZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKSk7CisgICAgICAgIH0KKyAgICB9
KTsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6c3RvcmVIYXNoU2FsdFRvRGlz
ayhIYXNoU2FsdEZvck9yaWdpbiogaGFzaFNhbHRGb3JPcmlnaW4pCit7CisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaGFzaFNhbHRG
b3JPcmlnaW5dKCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgICAgIFN0cmluZyBmaWxlRnVsbFBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeSwgaGFzaFNh
bHRGb3JPcmlnaW4tPnRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbi0+ZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKKworICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUoZmlsZUZ1bGxQYXRoLCBGaWxlU3lzdGVt
OjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKKyAgICAgICAgaWYgKCFoYW5kbGUpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaW50NjRfdCB3cml0dGVuQnl0ZXMgPSBGaWxlU3lzdGVtOjp3
cml0ZVRvRmlsZShoYW5kbGUsIGhhc2hTYWx0Rm9yT3JpZ2luLT5kZXZpY2VJZGVudGlmaWVySGFz
aFNhbHRGb3JPcmlnaW4udXRmOCgpLmRhdGEoKSwgaGFzaFNhbHRGb3JPcmlnaW4tPmRldmljZUlk
ZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbi51dGY4KCkubGVuZ3RoKCkpOworICAgICAgICBGaWxl
U3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKKworICAgICAgICBpZiAod3JpdHRlbkJ5dGVzICE9
IHN0YXRpY19jYXN0PGludDY0X3Q+KGhhc2hTYWx0Rm9yT3JpZ2luLT5kZXZpY2VJZGVudGlmaWVy
SGFzaFNhbHRGb3JPcmlnaW4udXRmOCgpLmxlbmd0aCgpKSkKKyAgICAgICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoZmlsZUZ1bGxQYXRoKTsKKyAgICB9KTsKK30KKworU3RyaW5nIERldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4o
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIGdl
dERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihyZXF1ZXN0LT50b3BMZXZlbERvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4oKSk7Cit9CisKK1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZTo6cmVnZW5lcmF0ZURldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihVc2VyTWVkaWFQ
ZXJtaXNzaW9uQ2hlY2tQcm94eSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVnZW5lcmF0ZURl
dmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihyZXF1ZXN0LT50b3BMZXZlbERvY3VtZW50
U2VjdXJpdHlPcmlnaW4oKSk7Cit9CisKK1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6
cmVnZW5lcmF0ZURldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihTZWN1cml0eU9yaWdp
biYgdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQoreworICAgIGF1dG8gdG9wTGV2ZWxE
b2N1bWVudFNlY3VyaXR5T3JpZ2luRGF0YSA9IHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdp
bi5kYXRhKCk7CisgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luLnJlbW92ZUlmKFt0b3BM
ZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW5EYXRhXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAg
ICAgICByZXR1cm4ga2V5QW5kVmFsdWUudmFsdWUtPnRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9y
aWdpbi0+ZGF0YSgpID09IHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbkRhdGE7CisgICAg
fSk7CisKKyAgICByZXR1cm4gZ2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHRv
cExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Cit9CisKK1N0cmluZyBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4pCit7CisgICAgYXV0byBkZXZp
Y2VJZEhhc2hTYWx0Zm9yT3JpZ2luID0gbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luLmdldCh0
b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4udG9SYXdTdHJpbmcoKSk7CisgICAgaWYgKGRl
dmljZUlkSGFzaFNhbHRmb3JPcmlnaW4pIHsKKyAgICAgICAgZGV2aWNlSWRIYXNoU2FsdGZvck9y
aWdpbi0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworICAgICAgICByZXR1cm4gZGV2
aWNlSWRIYXNoU2FsdGZvck9yaWdpbi0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2lu
OworICAgIH0KKworICAgIHVpbnQ2NF90IHJhbmRvbURhdGFbcmFuZG9tRGF0YVNpemVdOworICAg
IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KHJhbmRvbURhdGEpLCBzaXplb2YocmFuZG9tRGF0YSkpOworCisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGhhc2hTYWx0U2l6ZSk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5kb21EYXRhU2l6ZTsgaSsrKQorICAgICAgICBh
cHBlbmRVbnNpZ25lZDY0QXNIZXgocmFuZG9tRGF0YVswXSwgYnVpbGRlcik7CisKKyAgICBTdHJp
bmcgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luID0gYnVpbGRlci50b1N0cmluZygp
OworCisgICAgYXV0byBuZXdIYXNoU2FsdEZvck9yaWdpbiA9IHN0ZDo6bWFrZV91bmlxdWU8SGFz
aFNhbHRGb3JPcmlnaW4+KHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgZGV2aWNlSWRl
bnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKTsKKyAgICBuZXdIYXNoU2FsdEZvck9yaWdpbi0+bGFz
dFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworCisgICAgaWYgKG1faXNQZXJzaXN0ZW50KQor
ICAgICAgICBzdG9yZUhhc2hTYWx0VG9EaXNrKG5ld0hhc2hTYWx0Rm9yT3JpZ2luLmdldCgpKTsK
KworICAgIG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5hZGQodG9wTGV2ZWxEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luLnRvUmF3U3RyaW5nKCksIFdURk1vdmUobmV3SGFzaFNhbHRGb3JPcmlnaW4p
KTsKKworICAgIHJldHVybiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW47Cit9CisK
K3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnNldERldmljZUlkZW50aWZpZXJIYXNoU2Fs
dEZvck9yaWdpbihTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pCit7CisgICAgYXV0
byBkZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luID0gbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2lu
LmdldCh0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4udG9SYXdTdHJpbmcoKSk7CisgICAg
aWYgKGRldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4pIHsKKyAgICAgICAgZGV2aWNlSWRIYXNoU2Fs
dGZvck9yaWdpbi0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luID0gZGV2aWNlSWRl
bnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luOworICAgICAgICBkZXZpY2VJZEhhc2hTYWx0Zm9yT3Jp
Z2luLT5sYXN0VGltZVVzZWQgPSBXYWxsVGltZTo6bm93KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBhdXRvIG5ld0hhc2hTYWx0Rm9yT3JpZ2luID0gc3RkOjptYWtlX3VuaXF1ZTxI
YXNoU2FsdEZvck9yaWdpbj4odG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBkZXZpY2VJ
ZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOworICAgIG5ld0hhc2hTYWx0Rm9yT3JpZ2luLT5k
ZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4gPSBkZXZpY2VJZGVudGlmaWVySGFzaFNh
bHRGb3JPcmlnaW47CisgICAgbmV3SGFzaFNhbHRGb3JPcmlnaW4tPmxhc3RUaW1lVXNlZCA9IFdh
bGxUaW1lOjpub3coKTsKKyAgICBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4uYWRkKHRvcExl
dmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbi50b1Jhd1N0cmluZygpLCBXVEZNb3ZlKG5ld0hhc2hT
YWx0Rm9yT3JpZ2luKSk7Cit9CisKK3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERl
dmljZUlkSGFzaFNhbHRPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxTZWN1cml0eU9yaWdp
bkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIEhhc2hT
ZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOworCisgICAgICAgIGZvciAoYXV0byYgaGFz
aFNhbHRGb3JPcmlnaW4gOiBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4pCisgICAgICAgICAg
ICBvcmlnaW5zLmFkZChoYXNoU2FsdEZvck9yaWdpbi52YWx1ZS0+dG9wTGV2ZWxEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luLT5kYXRhKCkpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbb3JpZ2lucyA9IFdURk1vdmUob3JpZ2lucyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK2Jv
b2wgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRlbGV0ZUhhc2hTYWx0RnJvbURpc2tJZk5lZWRl
ZChIYXNoU2FsdEZvck9yaWdpbiogaGFzaFNhbHRGb3JPcmlnaW4sIGJvb2wgbmVlZHNSZW1vdmFs
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG5lZWRzUmVt
b3ZhbCkgeworICAgICAgICBTdHJpbmcgZmlsZUZ1bGxQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnksIGhh
c2hTYWx0Rm9yT3JpZ2luLT50b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4tPmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmls
ZUZ1bGxQYXRoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmVlZHNSZW1vdmFsOworfQorCit2b2lk
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lu
cyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgRnVuY3Rpb248dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IGNvcGllZE9yaWdpbnM7CisgICAgY29waWVkT3JpZ2lucy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG9yaWdpbnMuc2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYgb3JpZ2luIDogb3JpZ2lucykK
KyAgICAgICAgY29waWVkT3JpZ2lucy51bmNoZWNrZWRBcHBlbmQob3JpZ2luLmlzb2xhdGVkQ29w
eSgpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGNvcGllZE9yaWdpbnMgPSBXVEZNb3ZlKGNvcGllZE9yaWdpbnMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewor
ICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4ucmVtb3ZlSWYoW3RoaXMsIGNvcGll
ZE9yaWdpbnNdKGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gZGVsZXRl
SGFzaFNhbHRGcm9tRGlza0lmTmVlZGVkKGtleUFuZFZhbHVlLnZhbHVlLmdldCgpLCBjb3BpZWRP
cmlnaW5zLmNvbnRhaW5zKGtleUFuZFZhbHVlLnZhbHVlLT50b3BMZXZlbERvY3VtZW50U2VjdXJp
dHlPcmlnaW4tPmRhdGEoKSkpOworICAgICAgICB9KTsKKworICAgICAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2
b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2lu
c01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZSwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdGZv
ck9yaWdpbi5yZW1vdmVJZihbdGhpcywgdGltZV0oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBkZWxldGVIYXNoU2FsdEZyb21EaXNrSWZOZWVkZWQoa2V5QW5kVmFsdWUu
dmFsdWUuZ2V0KCksIGtleUFuZFZhbHVlLnZhbHVlLT5sYXN0VGltZVVzZWQgPiB0aW1lKTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40M2FmYTdmMWRmODE2MThjOTIzMGZkMjc1OGY0NjFlNWUwMzM5NjUwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRh
dGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luSGFzaC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBib29s
IGlzUGVyc2lzdGVudCk7CisgICAgfkRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCk7CisKKyAgICBz
dHJ1Y3QgSGFzaFNhbHRGb3JPcmlnaW4geworICAgIEhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbiwgU3RyaW5nJiBkZXZpY2VJZGVudGlmaWVy
SGFzaFNhbHRGb3JPcmlnaW4pCisgICAgICAgIDogdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luKHNlY3VyaXR5T3JpZ2luKQorICAgICAgICAsIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZv
ck9yaWdpbihkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pCisgICAgICAgICwgbGFz
dFRpbWVVc2VkKFdhbGxUaW1lOjpub3coKSkKKyAgICAgICAgeyB9OworCisgICAgICAgIH5IYXNo
U2FsdEZvck9yaWdpbigpID0gZGVmYXVsdDsKKyAgICAgICAgUmVmPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiB0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW47CisgICAgICAgIFN0cmluZyBk
ZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW47CisgICAgICAgIFdhbGxUaW1lIGxhc3RU
aW1lVXNlZDsKKyAgICB9OworCisgICAgU3RyaW5nIGdldERldmljZUlkZW50aWZpZXJIYXNoU2Fs
dEZvck9yaWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSopOworICAgIFN0cmluZyBy
ZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFVzZXJNZWRpYVBlcm1p
c3Npb25DaGVja1Byb3h5Kik7CisKKyAgICB2b2lkIGdldERldmljZUlkSGFzaFNhbHRPcmlnaW5z
KEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGRlbGV0ZURldmljZUlkSGFzaFNhbHRGb3JP
cmlnaW5zKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rp
b248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGRlbGV0ZURldmljZUlk
SGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKKworICAgIHZvaWQgbG9hZFN0b3JhZ2VGcm9tRGlzaygpOwor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IERldmljZUlkSGFzaFNhbHRTdG9yYWdlKGNvbnN0IFN0
cmluZyYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnksIGJvb2wgaXNQZXJzaXN0ZW50
KTsKKworICAgIFN0cmluZyBnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Cisg
ICAgU3RyaW5nIHJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Cisg
ICAgdm9pZCBzdG9yZUhhc2hTYWx0VG9EaXNrKEhhc2hTYWx0Rm9yT3JpZ2luKik7CisgICAgYm9v
bCBkZWxldGVIYXNoU2FsdEZyb21EaXNrSWZOZWVkZWQoSGFzaFNhbHRGb3JPcmlnaW4qLCBib29s
IG5lZWRzUmVtb3ZhbCk7CisgICAgdm9pZCBzZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JP
cmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgU3RyaW5nJiYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKTsKKworICAg
IFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVl
X3B0cjxIYXNoU2FsdEZvck9yaWdpbj4+IG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbjsKKyAg
ICBib29sIG1faXNQZXJzaXN0ZW50OworICAgIFN0cmluZyBtX2RldmljZUlkSGFzaFNhbHRTdG9y
YWdlRGlyZWN0b3J5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaApp
bmRleCBmMzdiZTdhYjIxZjNmMTFmNTc1YjFjZmMxMjc3YmNhNTY2Y2NjMzAxLi5mYmNjNGNmZWUz
YTViNGJkMGMwYTBhYzYyMWRiMDhmMWZhNGMwZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgKQEAgLTM2LDgg
KzM2LDYgQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1j
bGFzcyBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTsKLQogY2xhc3MgVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6
T2JqZWN0OjpUeXBlOjpVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2s+IHsKIHB1YmxpYzoKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGJlZjQwZGU4NDY4
OTBhMjQ5NzI5NThjNWMzMWE0ZDFlOTczMTQ2NDUuLmI4M2IwYTE1NDlmMGViMzY3NjY4NWYxNWNj
ODBiODNlMTk1MjA3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKQEAgLTIxMiw2ICsyMTIsNyBAQCBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZTo6Q29uZmln
dXJhdGlvbiBsZWdhY3lXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbihBUEk6OgogICAgIGNv
bmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSA9IHBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3Rv
cnlOYW1lKCk7CiAgICAgY29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5ID0gcHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0
aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24u
bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGNvbmZpZ3VyYXRpb24uZGV2aWNlSWRI
YXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmRldmlj
ZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24ucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5uZXR3b3Jr
Q2FjaGVEaXJlY3RvcnkgPSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uZGlza0NhY2hlRGlyZWN0
b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5qYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9y
eSA9IHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5qYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVj
dG9yeSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAyMzVkMTc5NjRlOTIwM2JiODQwZTI2NWEyOTRh
OGY1MWRmOWY4YzI3Li5hMDFhZjQ2YTIyNTllY2FhYzA4MWM1ODhlM2JiYTVjZGI0ODg5MGJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFQSVdlYnNpdGVE
YXRhUmVjb3JkLmgiCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUg
IkF1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuaCIKICNpbmNsdWRlICJNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKQEAg
LTk3LDYgKzk4LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShDb25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24sIFBBTDo6U2Vzc2lvbklEIHMKICAgICA6IG1fc2Vzc2lvbklE
KHNlc3Npb25JRCkKICAgICAsIG1fY29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24p
KQogICAgICwgbV9zdG9yYWdlTWFuYWdlcihTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKG1fY29uZmln
dXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpKQorICAgICwgbV9kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZShEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Y3JlYXRlKG1fY29uZmlndXJhdGlvbi5k
ZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnksIGlzUGVyc2lzdGVudCgpKSkKICAgICAs
IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV2Vic2l0ZURhdGFT
dG9yZSIpKQogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAgLCBtX2F1dGhlbnRpY2F0b3JNYW5h
Z2VyKG1ha2VVbmlxdWVSZWY8QXV0aGVudGljYXRvck1hbmFnZXI+KCkpCkBAIC0xNzQsNiArMTc2
LDggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2Fy
eSgpCiAgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3Rvcnkg
PSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbiht
X2NvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVjdG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3Vy
YXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgIG1fcmVz
b2x2ZWRDb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSByZXNvbHZlQW5k
Q3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRp
b24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSk7CisgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24u
ZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgbV9y
ZXNvbHZlZENvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0g
cmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRlbnNpb24obV9j
b25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSk7CiAgICAgaWYg
KCFtX2NvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAg
ICAgICBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IHJl
c29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5zaW9uKG1fY29u
ZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3Vy
YXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtNDg4LDYgKzQ5
MiwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgICAgICB9KTsKICAgICB9CiAKKyAg
ICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiBkYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgeworICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UtPmdldERldmljZUlkSGFzaFNhbHRPcmlnaW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
KEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmIG9yaWdpbnMpIHsKKyAgICAg
ICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOworCisgICAgICAgICAgICB3aGlsZSAoIW9y
aWdpbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBw
ZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5
cGU6OkRldmljZUlkSGFzaFNhbHQsIDAgfSk7CisKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAg
ICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwogCkBAIC04MDMs
NiArODIwLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgIH0pOwogICAgIH0K
IAorICAgIGlmIChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlICYmIGRhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpKSB7CisgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CisKKyAgICAgICAgbV9kZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS0+ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNl
KG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAg
IH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKIApAQCAtMTA3Nyw2ICsxMTAyLDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGlm
IChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlICYmIGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpKSB7CisgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CisKKyAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZS0+ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbnMob3JpZ2lucywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geworICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5k
aW5nQ2FsbGJhY2soKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgaWYgKGRhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlKSAmJiBp
c1BlcnNpc3RlbnQoKSkgewogICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4gb3JpZ2luczsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0
YVJlY29yZHMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCBkMTI0YTA2YjRiNWQ4NzZiZDhkYzhhNDcxOWRm
OGFjN2Q3ZTU5NDRmLi41NzZlNDY4M2ZlMDhjYmM2ODJmZDI1Y2VkYmU1ZGQ4MmYyNDUxYjg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
QXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgU3Rv
cmFnZU1hbmFnZXI7CitjbGFzcyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKIGNsYXNzIFdlYlBh
Z2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOwpAQCAtOTMsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyB3
ZWJTUUxEYXRhYmFzZURpcmVjdG9yeTsKICAgICAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVj
dG9yeTsKICAgICAgICAgU3RyaW5nIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7CisgICAgICAg
IFN0cmluZyBkZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmlu
ZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgamF2YVNj
cmlwdENvbmZpZ3VyYXRpb25EaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBjb29raWVTdG9yYWdl
RmlsZTsKQEAgLTE1Myw2ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiByZXNv
bHZlZEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVk
Q29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5OyB9CiAgICAgY29uc3QgU3Ry
aW5nJiByZXNvbHZlZE1lZGlhQ2FjaGVEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29s
dmVkQ29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5OyB9CiAgICAgY29uc3QgU3RyaW5n
JiByZXNvbHZlZE1lZGlhS2V5c0RpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRD
b25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KKyAgICBjb25zdCBTdHJp
bmcmIHJlc29sdmVkRGV2aWNlSWRIYXNoU2FsdHNEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBt
X3Jlc29sdmVkQ29uZmlndXJhdGlvbi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7
IH0KICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeTsg
fQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVj
dG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLmphdmFTY3JpcHRD
b25maWd1cmF0aW9uRGlyZWN0b3J5OyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZENvb2tp
ZVN0b3JhZ2VGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uY29v
a2llU3RvcmFnZUZpbGU7IH0KQEAgLTE2Miw2ICsxNjUsOCBAQCBwdWJsaWM6CiAKICAgICBTdG9y
YWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIoKSB7IHJldHVybiBtX3N0b3JhZ2VNYW5hZ2VyLmdl
dCgpOyB9CiAKKyAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSogZGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CisKICAg
ICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygp
OwogICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25z
dDsKIApAQCAtMjM3LDYgKzI0Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Jlc29sdmVk
RGlyZWN0b3JpZXMgeyBmYWxzZSB9OwogCiAgICAgY29uc3QgUmVmUHRyPFN0b3JhZ2VNYW5hZ2Vy
PiBtX3N0b3JhZ2VNYW5hZ2VyOworICAgIGNvbnN0IFJlZlB0cjxEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZT4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKICAgICBSZWZQdHI8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3M7CiAgICAgYm9vbCBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNjJjYTZhYzBl
OWJiY2M4NDQ2YTZkZjdhNGFjYmVlZDFkZmFhOWVhLi40OTM0YzFlOGQzYzQ4OGJjMWJkYmQ2ZDdi
NTJjNTdmMWM3YjJkNDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTc3LDYgKzc3LDggQEAKIAkJMDBCOTY2MTYxOEUyNENCQTAwQ0Ux
Rjg4IC8qIEFQSUZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDAwQjk2NjE1MThFMjRDQkEwMENFMUY4OCAvKiBBUElGaW5kQ2xpZW50Lmgg
Ki87IH07CiAJCTAwQjk2NjFBMThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEI5NjYxODE4RTI1QUUx
MDBDRTFGODggLyogRmluZENsaWVudC5oICovOyB9OwogCQkwNzI5N0Y5RjFDMTdCQkVBMDAzRjA3
MzUgLyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RjlEMUMxN0JCRUEwMDNGMDczNSAvKiBV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oICovOyB9OworCQkwNzI5N0Y5RTFDMTdCQkVB
MDE0RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGOUMxQzE3MTFFQTAwM0YwNzM1IC8q
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCAqLzsgfTsKKwkJMDcyOTdGOUYxQzE3QkJFQTAx
NUYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCAqLzsgfTsKIAkJMDcyOTdGQTMxQzE4NkFEQjAwM0YwNzM1
IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2Vy
TWVkaWFQZXJtaXNzaW9uQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwNzRFNzVGRTFERjIyMTE5MDBEMzE4RUMgLyogVXNlck1lZGlhUHJv
Y2Vzc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3NEU3NUZCMURGMUZEMTMwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5o
ICovOyB9OwogCQkwNzZFODg0RTFBMTNDQURGMDA1RTkwRkMgLyogQVBJQ29udGV4dE1lbnVDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NkU4
ODREMUExM0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5oICovOyB9OwpAQCAt
MTg3NCw2ICsxODc2LDggQEAKIAkJMDBCOTY2MTgxOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZENsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0Y5QzFDMTdCQkVBMDAzRjA3MzUgLyogVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0Y5RDFDMTdCQkVBMDAzRjA3MzUgLyogVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMDcyOTdGOUMxQzE3MTFFQTAwM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcyOTdGOUQxQzE3
QkJFQTIyM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RkEwMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRp
YVBlcm1pc3Npb25DaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3Mjk3RkExMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJNZWRpYVBlcm1p
c3Npb25DaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzRFNzVGQjFERjFG
RDEzMDBEMzE4RUMgLyogVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTczMzAsNiArNzMzNCw4IEBACiAJCQkJNDZBMkI2MDcxRTU2NzVB
MjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovLAog
CQkJCUUxNTEzQzY0MTY2RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAgKi8s
CiAJCQkJRTE1MTNDNjUxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmggKi8s
CisJCQkJMDcyOTdGOUMxQzE3MTFFQTAwM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
LmNwcCAqLywKKwkJCQkwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuaCAqLywKIAkJCQlCQzI2NTIxMjExODI2MDgxMDAyNDNFMTIgLyogRHJhd2luZ0Fy
ZWFQcm94eS5jcHAgKi8sCiAJCQkJQkMyNjUyMTMxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdB
cmVhUHJveHkuaCAqLywKIAkJCQkxQTY0MjJGQzEyREQwOEZFMDBDQUFFMkMgLyogRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTkwMDgsNiArOTAxNCw3IEBACiAJCQkJMUFDNzUz
ODAxODNCRTUwRjAwNzJDQjE1IC8qIERhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDMyREE2MTBGNDM3RDEwMDU4QzE1QSAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1N0RDRURBQjIxNEM2MDA5MDAxNkI4NDcgLyogRGV2aWNlSWRlbnRpdHlTUEkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTA3Mjk3RjlGMUMxN0JCRUEwMTVGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM4OTFCNkMxQTY4QzMwQjAwMzBGMzg2IC8q
IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMTgxNzM2MTIw
NTg0MjQ3MDBERkRBNjUgLyogRGlzcGxheUxpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQy
NzAyMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDc4
Niw2ICsxMDc5Myw3IEBACiAJCQkJMkQ5MkE3N0QyMTJCNkE3MTAwRjQ5M0ZEIC8qIENvbm5lY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3N0UyMTJCNkE3MTAwRjQ5M0ZEIC8qIERh
dGFSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3N0YyMTJCNkE3MTAwRjQ5
M0ZEIC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcyOTdGOUUxQzE3QkJFQTAx
NEYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQjdENjE5MTI4OEI5RDkwMENGRDA4QyAvKiBEb3dubG9hZFByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjQyMjk5MTJERDAyOTIwMENBQUUyQyAvKiBEcmF3
aW5nQXJlYU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjMwODEy
REQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAzNWRjMWFiOWI1ZDU3ZWU4YzhhNzA2ZmNmOGU1OTY5MDdlNDgwY2JmLi45NjNjMzZl
ZjdlMTc5NGZiYmViZTY4NzQ2ZTMyNjY0M2JhZGFhNTkyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTgtMDktMjgg
IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11b
V1BFXSBBZGQgbWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMgc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1NzYxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSB0ZXN0
IGZvciB0aGUgbWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXM6CisgICAgICAgIHVzZXJtZWRp
YS1lbnVtZXJhdGVkZXZpY2VzLXBlcm1pc3Npb24tY2hlY2suCisKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci9ndGsvbWFpbi5jOgorICAgICAgICAoZ290V2Vic2l0ZURhdGFDYWxsYmFjayk6IEFkZGVk
IGEgbmV3IHNlY3Rpb24gdG8gdGhlIGFib3V0OmRhdGEKKyAgICAgICAgd2VicGFnZSB0byBpbmNs
dWRlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFzaCBzYWx0LgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwOgorICAgICAgICAodGVz
dFdlYlZpZXdVc2VyTWVkaWFFbnVtZXJhdGVEZXZpY2VzUGVybWlzc2lvbkNoZWNrKTogQWRkZWQg
dGhlCisgICAgICAgIG5ldyB0ZXN0IGNoZWNraW5nIHRoZSBlbnVtZXJhdGVEZXZpY2VzIEFQSSB3
aGVuIHBlcm1pc3Npb24gaXMKKyAgICAgICAgZGVuaWVkIGFuZCB3aGVuIHBlcm1pc3Npb24gaXMg
YWxsb3dlZCBmb3IgdGhlIG9yaWdpbi4KKyAgICAgICAgKGJlZm9yZUFsbCk6IERlZmluZWQgdGhl
IG5ldyB0ZXN0LgorCiAyMDE4LTA5LTI1ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dlYkF1dGhOXSBNYWtlIEF1dGhlbnRpY2F0b3JNYW5hZ2VyCmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIv
Z3RrL21haW4uYwppbmRleCA1ODcwMWZjODQyY2U1OTVkMjY4NDc2MmE0YTEzZWIxODY0ODlhNDkw
Li41MTMzYTRkZDYxYjkyY2Q1MzFkZTkzNDk4MDkzMzExNDcwODNlYjE0IDEwMDY0NAotLS0gYS9U
b29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9t
YWluLmMKQEAgLTQwMiw2ICs0MDIsNyBAQCBzdGF0aWMgdm9pZCBnb3RXZWJzaXRlRGF0YUNhbGxi
YWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdQogCiAgICAg
Z3VpbnQ2NCBwYWdlSUQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQod2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcoZGF0YVJlcXVlc3QtPnJlcXVlc3QpKTsKICAgICBh
Ym91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJDb29raWVz
IiwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTLCBOVUxMLCBwYWdlSUQpOworICAgIGFib3V0
RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkRldmljZSBJZCBI
YXNoIFNhbHQiLCBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQsIE5VTEws
IHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRh
dGFMaXN0LCAiTWVtb3J5IENhY2hlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUs
IE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVl
c3QsIGRhdGFMaXN0LCAiRGlzayBDYWNoZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFfRElTS19DQUNI
RSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSht
YW5hZ2VyKSwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVx
dWVzdCwgZGF0YUxpc3QsICJTZXNzaW9uIFN0b3JhZ2UiLCBXRUJLSVRfV0VCU0lURV9EQVRBX1NF
U1NJT05fU1RPUkFHRSwgTlVMTCwgcGFnZUlEKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHAKaW5kZXggNjYxMTM3NzNlM2I0
MzgyMTU4ZjlkOWM0ZWNiNzJiYzk2ODEzMDk1ZC4uZTViNmE4OWU4NDU1ZmMzYjUzYjgwMGYyYjAw
ODQ4ZGU3YjEyZjFlMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHTGliL1Rlc3RVSUNsaWVudC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHAKQEAgLTgzNCw2ICs4MzQsNDcgQEAgc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3Qq
IHRlc3QsIGdjb25zdHAKICNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCiAKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdVc2VyTWVkaWFFbnVtZXJh
dGVEZXZpY2VzUGVybWlzc2lvbkNoZWNrKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncyk7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzLCBUUlVFKTsKKworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQo
KTsKKyNlbmRpZgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1c2VyTWVkaWFSZXF1ZXN0SFRNTCA9
CisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxzY3JpcHQ+IgorICAgICAgICAiICBmdW5j
dGlvbiBydW5UZXN0KCkiCisgICAgICAgICIgIHsiCisgICAgICAgICIgICAgbmF2aWdhdG9yLm1l
ZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbigiCisgICAgICAgICIgICAgICAgIGZ1
bmN0aW9uKGRldmljZXMpIHsgIgorICAgICAgICAiICAgICAgICAgICAgZGV2aWNlcy5mb3JFYWNo
KGZ1bmN0aW9uKGRldmljZSkgeyIKKyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRldmljZS5sYWJlbCkgZG9jdW1lbnQudGl0bGUgPSBcIk9LXCI7IgorICAgICAg
ICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBkb2N1
bWVudC50aXRsZSA9IFwiUGVybWlzc2lvbiBkZW5pZWRcIjsiCisgICAgICAgICIgICAgICAgICAg
ICB9KSIKKyAgICAgICAgIiAgICB9KSIKKyAgICAgICAgIiAgfSIKKyAgICAgICAgIiAgPC9zY3Jp
cHQ+IgorICAgICAgICAiICA8Ym9keSBvbmxvYWQ9J3J1blRlc3QoKTsnPjwvYm9keT4iCisgICAg
ICAgICI8L2h0bWw+IjsKKworICAgIHRlc3QtPm1fdmVyaWZ5TWVkaWFUeXBlcyA9IFRSVUU7CisK
KyAgICAvLyBUZXN0IGRlbnlpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCisgICAgdGVzdC0+bV9h
bGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IGZhbHNlOworICAgIHRlc3QtPmxvYWRIdG1sKHVzZXJN
ZWRpYVJlcXVlc3RIVE1MLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5n
ZWRUbygiUGVybWlzc2lvbiBkZW5pZWQiKTsKKworICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJt
aXNzaW9uIHJlcXVlc3QuCisgICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRy
dWU7CisgICAgdGVzdC0+bG9hZEh0bWwodXNlck1lZGlhUmVxdWVzdEhUTUwsIG51bGxwdHIpOwor
ICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKCJPSyIpOworCisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzLCBlbmFibGVkKTsKK30KKwog
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdHMoVUlDbGll
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIFdlYktpdFNldHRpbmdzKiBzZXR0
aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKQEAg
LTExNTYsNiArMTE5Nyw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJnZW9sb2NhdGlvbi1wZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVz
dFdlYlZpZXdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk7CiAjZW5kaWYKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
InVzZXJtZWRpYS1lbnVtZXJhdGVkZXZpY2VzLXBlcm1pc3Npb24tY2hlY2siLCB0ZXN0V2ViVmll
d1VzZXJNZWRpYUVudW1lcmF0ZURldmljZXNQZXJtaXNzaW9uQ2hlY2spOwogICAgIFVJQ2xpZW50
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInVzZXJtZWRpYS1wZXJtaXNzaW9uLXJlcXVlc3Rz
IiwgdGVzdFdlYlZpZXdVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdHMpOwogICAgIFVJQ2xpZW50
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1ZGlvLXVzZXJtZWRpYS1wZXJtaXNzaW9uLXJl
cXVlc3QiLCB0ZXN0V2ViVmlld0F1ZGlvT25seVVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCAyZGUxMmRkM2E5MDgzNmUwZTMwZDJkYjExZjZjZmQ4YjZhYTc5Y2Y2
Li5lM2JlMjkzZWU5YmM1ZDcyODU0OTRhNzEzYzM2NzBhNTNjOGFjMTU5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTgtMDktMjggIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS11bV1BFXSBBZGQgbWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmlj
ZXMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1NzYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIHRoZSBmYWlsdXJlIGV4cGVjdGF0aW9uIGZvciB0aGUgdGVzdAorICAgICAgICBt
ZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwuIEp1c3QgZm9yIHRoZSByZWNvcmQg
d2UgaGF2ZQorICAgICAgICBhbHNvIHNvbHZlZCB0aGUgZm9sbG93aW5nIHRlc3RzLCBidXQgd2Ug
YXJlIG5vdCByZW1vdmluZyB0aGUKKyAgICAgICAgZ2VuZXJhbCBza2lwIG9mIHRoZSBtZWRpYXN0
cmVhbSBkaXJlY3RvcnkgdW50aWwgdGhlIG5leHQgcGF0Y2g6CisKKyAgICAgICAgZmFzdC9tZWRp
YXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwKKyAgICAgICAgZmFz
dC9tZWRpYXN0cmVhbS9yZXNvdXJjZXMvZW51bWVyYXRlLWRldmljZXMtZnJhbWUuaHRtbAorICAg
ICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9lbnVtZXJhdGUtZGV2aWNlcy1zb3Vy
Y2UtaWQuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9lbnVtZXJh
dGUtZGV2aWNlcy1zb3VyY2UtaWQtcGVyc2lzdGVudC5odG1sCisgICAgICAgIGh0dHAvdGVzdHMv
bWVkaWEvbWVkaWEtc3RyZWFtL3Jlc291cmNlcy9lbnVtZXJhdGUtZGV2aWNlcy1zb3VyY2UtaWQt
ZnJhbWUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6CisK
IDIwMTgtMDktMjUgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWJHTCAyIENvbmZvcm1hbmNlOiBwcmltaXRpdmUgcmVzdGFydCBhbmQgZHJhd19wcmltaXRp
dmVfcmVzdGFydCBXZWJHTDIgc2FtcGxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zCmluZGV4IDU4MTAyYjcxZDFhZTY5NTA1ZjYwNTM2MDk3NmNiY2VkZTBmNjNkMDUu
LjdmYjcyYmY5OWM4YzVmZDQwNzE3ZWE2NGJlN2VlZTZlMTdkOGM4NjAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC02MzksNyArNjM5LDYgQEAgd2Via2l0
Lm9yZy9iLzc5MjAzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFjYXB0dXJl
LXN0cmVhbXMvTWVkaWFTdHIKIHdlYmtpdC5vcmcvYi8xNTEzNDQgZmFzdC9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbS1hZGQtZW5kZWQtdHJhY2tzLmh0bWwgWyBUaW1lb3V0IF0KICMgQ3Jhc2ggaXMg
YnVnICMxNzY4MDEKIHdlYmtpdC5vcmcvYi8xNjA5OTYgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbS12aWRlby1lbGVtZW50LXZpZGVvLXRyYWNrcy1kaXNhYmxlZC5odG1sIFsgSW1hZ2VPbmx5
RmFpbHVyZSBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTcyMjY5IGZhc3QvbWVkaWFzdHJlYW0vbWVk
aWEtZGV2aWNlcy1lbnVtZXJhdGUtZGV2aWNlcy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTczMjU3IGZhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLWdyYW50LXBlcnNpc3RlbmN5
My5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogIyBDYW52YXMgY2FwdHVyZVN0cmVhbSBzdXBwb3J0
IGlzIG5vdCBpbXBsZW1lbnRlZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351080</attachid>
            <date>2018-09-28 09:06:15 -0700</date>
            <delta_ts>2018-09-28 09:20:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20180928180613.patch</filename>
            <type>text/plain</type>
            <size>80218</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBhZjg3NDFhYTFjZmRj
MTU5MGI4MTczODNiMGI2YTU0N2Q5MTYwYi4uYWYyNjA4MTNmMmMxM2QzYzExNzQ0NGI5ZmIzOGI4
Yzk4OTQ5ZGM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA5LTI4ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMg
aWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lzdGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4K
KwogMjAxOC0wOS0yNyAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CiAK
ICAgICAgICAgW0N1cmxdIEZpeCBwcmlvcml0eSBpc3N1ZSB3aXRoIG11bHRpcGxlIGNvb2tpZXMg
d2l0aCBkaWZmZXJlbnQgbGV2ZWwgb2YgcGF0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGNjNzU2OTNiMTRhMWY2
MDg1YmI1ZjM3YTg0N2ZjMWNiZmIzOGU5OC4uZGQwMzQ0NjE4OTMyZWJkMDkyM2RhYjdmMTEyMjk0
Njk2NzUwZWZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjMgQEAKKzIwMTgtMDktMjggIEFsZWph
bmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBB
ZGQgbWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMgc3VwcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1NzYxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGhlIGVudW1lcmF0
ZURldmljZXMgQVBJIHVzaW5nIGEgbmV3IFdlYktpdCBjbGFzcworICAgICAgICAoRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UpIHRoYXQgZ2VuZXJhdGVzIGFuZCBzdG9yZXMgdGhlIGRldmljZSBpZHMK
KyAgICAgICAgaGFzaCBzYWx0cyBwZXIgb3JpZ2luLCB1c2VkIHRvIGF2b2lkIGZpbmdlcnByaW50
aW5nIGluIHRoZQorICAgICAgICB3ZWJwYWdlcy4gVGhlIGhhc2ggc2FsdHMgYXJlIHBlcnNpc3Rl
bnQgd2hlbiB0aGUgd2VicGFnZSBpcyBub3QKKyAgICAgICAgZXBoZW1lcmFsLCB0aGV5IHVzZSBh
IG5ldyBkaXJlY3Rvcnkgd2hlcmUgYSBmaWxlIGlzIHN0b3JlZCB3aXRoCisgICAgICAgIHRoZSBT
ZWN1cml0eU9yaWdpbiBpZCBhcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhbmQgdGhlIGhhc2ggc2Fs
dCBhcworICAgICAgICB0aGUgY29udGVudCBvZiB0aGUgZmlsZS4KKworICAgICAgICBUaGUgcGF0
Y2ggYWxzbyBhZGRzIGEgbmV3IHR5cGUgb2YgZGF0YSBmb3IgdGhlIFdlYnNpdGVEYXRhU3RvcmUu
CisgICAgICAgIFRoYXQgd2F5IHRoZSB1c2VycyBjYW4gY2FsbCB0aGUgV2Vic2l0ZURhdGFTdG9y
ZSB0byBzaG93IHdoYXQKKyAgICAgICAgb3JpZ2lucyBoYXZlIGhhc2ggc2FsdCBnZW5lcmF0ZWQg
YW5kIHJlbW92ZSB0aGVtIGF0IHNvbWUgcG9pbnQuCisKKyAgICAgICAgVGhlIERldmljZUhhc2hT
YWx0U3RvcmFnZSBjbGFzcyByZWFkcyB0aGUgaW5mb3JtYXRpb24gaW4gZGlzayB3aGVuCisgICAg
ICAgIGl0IGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZXMgdGhlIGRpc2sgc3RvcmFnZSB3aGVuIHNvbWUg
bW9kaWZpY2F0aW9uCisgICAgICAgIGlzIGRldGVjdGVkLiBJdCBpcyBhbHNvIHVzZWQgYXMgdGhl
IGRlbGVnYXRlIG9mIHRoZSBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIEFQSSB0byByZW1vdmUg
dGhlIHN0b3JlZCBoYXNoIHNhbHRzLgorCisgICAgICAgIEZvciB0aGUgbW9tZW50IGp1c3QgR1RL
KyBhbmQgV1BFIHBvcnRzIGFyZSB1c2luZyB0aGlzIGNsYXNzIHRvCisgICAgICAgIGdlbmVyYXRl
IHRoZSBoYXNoIHNhbHRzLiBUaGUgcGF0Y2ggYWRkcyBjb2RlIHRvIHRoZQorICAgICAgICBjaGVj
a1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4gQVBJIGltcGxlbWVudGF0aW9uLCBpdCB3YXMg
ZW1wdHkKKyAgICAgICAgdW50aWwgbm93IGZvciB0aGVzZSBwb3J0cy4gSW4gdGhpcyBmdW5jdGlv
biB3ZSBjcmVhdGUgYW4gaW5zdGFuY2UKKyAgICAgICAgb2YgYSBuZXcgY2xhc3MgV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHRoYXQgaW1wbGVtZW50cworICAgICAgICB0aGUgV2Vi
S2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSBpbnRlcmZhY2UsIHRoYXQgYWxsb3dzIHRoZSBwb3J0
cworICAgICAgICB0byB1c2UgdGhlIGN1cnJlbnQgcGVybWlzc2lvbiBtYW5hZ2VycyBpbXBsZW1l
bnRlZCBpbiB0aGUKKyAgICAgICAgZW1iZWRkZXJzIHRvIGhhbmRsZSB0aGlzIG5ldyBraW5kIG9m
IHJlcXVlc3QgdGhlIHdheSB0aGV5IGxpa2UKKyAgICAgICAgaXQuIFRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGlzIGRlbnkuCisKKyAgICAgICAgVGhlIGNsYXNzIFdlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdCB0YWtlcyBjYXJlIG9mCisgICAgICAgIGNvbnRhY3RpbmcgdGhlIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlIGFuZCByZXF1ZXN0L3JlZ2VuZXJhdGUgdGhlCisgICAgICAg
IGhhc2ggc2FsdHMgYWNjb3JkaW5nbHkuCisKKyAgICAgICAgVGhlcmUgaXMgb25lIGFkZGl0aW9u
IHRvIHRoZSBnZW5lcmFsIEFQSSB0byBoYW5kbGUgdGhlIGxvY2F0aW9uIG9mCisgICAgICAgIHRo
ZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGZpbGVzIGFyZSBzdG9yZWQgdG8gbWFrZSB0aGUgaGFzaCBz
YWx0CisgICAgICAgIHBlcnNpc3RlbnQuCisKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFUeXBlLmg6IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaWRl
IGRhdGE6IERldmljZUlkSGFzaFNhbHQuCisgICAgICAgICogU291cmNlcy50eHQ6IEFkZGVkIG5l
dyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDogRGl0dG8u
CisgICAgICAgICogU291cmNlc1dQRS50eHQ6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKEFQSTo6UHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGVXaXRoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24pOgorICAgICAgICBBZGRlZCBhIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RvcnkgdXNlZCB0byBz
dG9yZSB0aGUgaGFzaCBzYWx0cy4KKyAgICAgICAgKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKEFQSTo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjb3B5KTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaDogQWRkZWQgQVBJIHRvCisgICAgICAg
IHJldHJpZXZlIGFuZCBzZXQgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgaGFzaCBzYWx0cy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAg
ICAoQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpsZWdhY3lEZWZhdWx0RGF0YVN0b3JlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIEluaXRpYWxpemUgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0byBz
dG9yZSB0aGUgaGFzaCBzYWx0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVE
YXRhU3RvcmUuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL0FQSVdlYnNp
dGVEYXRhU3RvcmVHTGliLmNwcDoKKyAgICAgICAgKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSk6CisgICAgICAgIEFkZGVkIHRo
ZSBkZWZhdWx0IG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIEdUSysgYW5kIFdQRSBwb3J0
cy4KKyAgICAgICAgKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVmYXVsdERldmljZUlk
SGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSk6IERpdHRvLgorICAgICAgICAoQVBJOjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlQ29uZmlndXJhdGlvbik6IEluaXRpYWxpemUKKyAg
ICAgICAgdGhlIGRlZmF1bHQgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGZvciB0aGUgY29uZmlndXJh
dGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0LmNwcDogQWRkZWQKKyAgICAgICAgdGhpcyBjbGFzcyB0byByZXByZXNlbnQg
YSByZXF1ZXN0IG9mIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZQorICAgICAgICBkZXZpY2VzIGlu
Zm9ybWF0aW9uLiBUaGlzIGlzIHNwZWNpZmljIGZvciBnbGliIHBvcnRzIGFuZCBpbXBsZW1lbnRz
CisgICAgICAgIHRoZSBwb2xpY2llcyByZWdhcmRpbmcgdGhlIGhhc2ggc2FsdHMgd2hlbiB0aGUg
ZW1iZWRkZXIgYWxsb3dzIG9yCisgICAgICAgIGRlbmllcyB0aGUgYWNjZXNzIHVzaW5nIHRoZSBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBjbGFzcy4KKyAgICAgICAgKHdlYmtpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdEFsbG93KTogR2V0IHRoZSBkZXZpY2UgaGFzaCBzYWx0CisgICAgICAg
IHdoZW4gdGhlIG9yaWdpbiBpcyBhbGxvd2VkIGFuZCBzZXQgaXQgaW4gdGhlIG9yaWdpbmFsIHJl
cXVlc3QuCisgICAgICAgICh3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REZW55KTog
UmVnZW5lcmF0ZSB0aGUgZGV2aWNlIGlkCisgICAgICAgIGhhc2ggc2FsdCB3aGVuIHRoZSB1c2Vy
IGRvZXMgbm90IGFsbG93IHRvIGFjY2VzcyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uLgorICAgICAg
ICAod2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdCk6CisgICAgICAgICh3
ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REaXNwb3NlKToKKyAgICAgICAgKHdlYmtp
dF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3
ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUpOiBDcmVhdGUgdGhlIGNsYXNz
IHVzaW5nCisgICAgICAgIHRoZSBwcm94eSByZXF1ZXN0IGZyb20gdGhlIHdlYnByb2Nlc3MgYW5k
IGEgcmVmZXJlbmNlIHRvIHRoZQorICAgICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0UHJpdmF0ZS5oOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0VUlDbGllbnQuY3BwOiBBZGRlZCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
Zm9yIHRoZSBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4gQVBJIGZvciB0aGUgZ2xp
YiBwb3J0cywKKyAgICAgICAgaXQgY3JlYXRlcyB0aGUgZGV2aWNlIGluZm8gcmVxdWVzdCBhbmQg
Y2FsbHMgdGhlIHBlcm1pc3Npb24KKyAgICAgICAgcmVxdWVzdCBBUEkuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb25Gb3JXZWJQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24pOgorICAg
ICAgICBBZGRzIHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGhhc2ggc2FsdHMuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhLmNwcDoKKyAgICAgICAgKHRv
V2ViS2l0V2Vic2l0ZURhdGFUeXBlcyk6IEFkZGVkIHRoZSBjb252ZXJzaW9uIGZyb20gdGhlIFdl
YktpdAorICAgICAgICB0eXBlcyB0byB0aGUgZ2xpYiB0eXBlcyBmb3IgdGhlIFdlYnNpdGVEYXRh
VHlwZTo6RGV2aWNlSWRIYXNoU2FsdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZSk6IEFkZGVkIHRoZSBkaXJlY3RvcnkgdG8KKyAgICAgICAgc3RvcmUg
dGhlIGhhc2ggc2FsdHMuCisgICAgICAgICh0b1dlYnNpdGVEYXRhVHlwZXMpOiBBZGRlZCB0aGUg
Y29udmVyc2lvbiBmcm9tIHRoZSBnbGliIHR5cGUKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFU
QV9ERVZJQ0VfSURfSEFTSF9TQUxUIHRvIHRoZSBXZWJLaXQgdHlwZS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaDogQWRkZWQK
KyAgICAgICAgdGhpcyBuZXcgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgcGVybWlzc2lvbiByZXF1
ZXN0IGZvciB0aGUgZGV2aWNlCisgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBHVEsrIHBvcnQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaDogQWRkZWQg
dGhlIG5ldyB0eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgR1RLKyBwb3J0Ogor
ICAgICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmg6
IEFkZGVkCisgICAgICAgIHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHBlcm1pc3Np
b24gcmVxdWVzdCBmb3IgdGhlIGRldmljZQorICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgV1BF
IHBvcnQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaDog
QWRkZWQgdGhlIG5ldyB0eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgV1BFIHBv
cnQ6CisgICAgICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eS5jcHA6IEFkZGVkCisgICAgICAgIGFuIGluY2x1ZGUgdG8gc29sdmUgY29tcGlsYXRpb24g
aXNzdWUgd2l0aCB0aGUgdW5pZmllZCBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwOiBBZGRlZCB0aGlzIG5ldyBjbGFzcyB0aGF0Cisg
ICAgICAgIGhhbmRsZXMgaG93IHRvIGdlbmVyYXRlIGFuZCBzdG9yZSB0aGUgaGFzaCBzYWx0cyBp
bnNpZGUgV2ViS2l0LiBJdAorICAgICAgICB1c2VzIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgbGlz
dCBvZiBmaWxlcyB0byBzdG9yZSB0aGUgaGFzaCBzYWx0cworICAgICAgICBwZXJzaXN0ZW50bHkg
aW4gdGhlIGRpc2suCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlOjps
b2FkU3RvcmFnZUZyb21EaXNrKTogSXQgcmVhZHMgZmlsZXMKKyAgICAgICAgaW4gdGhlIGRpc2sg
dG8gcmVzdG9yZSB0aGUgbWFwIG9mIGhhc2ggc2FsdCBvcmlnaW5zLgorICAgICAgICAoV2ViS2l0
OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6c3RvcmVIYXNoU2FsdFRvRGlzayk6IFNhdmVzIGFu
CisgICAgICAgIG9yaWdpbiBhbmQgaXRzIGhhc2ggc2FsdCB0byB0aGUgZGlzay4KKyAgICAgICAg
KFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkZW50aWZpZXJIYXNo
U2FsdEZvck9yaWdpbik6CisgICAgICAgIENoZWNrIHRoZSBtYXAgdG8gZ2V0IHRoZSBoYXNoIHNh
bHQgZm9yIGFuIG9yaWdpbiwgaWYgdGhlcmUgaXMgbm9uZQorICAgICAgICBjcmVhdGUgYSBuZXcg
cmFuZG9tIG9uZS4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnJl
Z2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAgICBEZWxl
dGUgdGhlIGhhc2ggc2FsdCBvZiBhbiBvcmlnaW4gaWYgaXQgYWxyZWFkeSBleGlzdHMgYW5kIGNy
ZWF0ZSBhIG5ldyBvbmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdl
OjpzZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAgICBTZXQgdGhl
IGhhc2ggc2FsdCBvZiBhbiBvcmlnaW4gaW4gdGhlIG1hcCwgaWYgdGhlIG1hcCBhbHJlYWR5IGhh
cworICAgICAgICB0aGF0IG9yaWdpbiBpdCByZXBsYWNlcyB0aGUgaGFzaCBzYWx0LCBpbiBvdGhl
ciBjYXNlIGl0IGNyZWF0ZXMgYQorICAgICAgICBuZXcgcmVnaXN0ZXIgaW4gdGhlIG1hcC4KKyAg
ICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkSGFzaFNh
bHRPcmlnaW5zKToKKyAgICAgICAgUmV0dXJucyB0aGUgbGlzdCBvZiBvcmlnaW5zIHRoYXQgaGF2
ZSBhIGhhc2ggc2FsdCBnZW5lcmF0ZWQgZm9yCisgICAgICAgIHRoZW0uIEl0IGlzIHVzZWQgaW4g
dGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpkZWxldGVIYXNoU2FsdEZyb21EaXNrSWZOZWVkZWQpOgorICAgICAgICBEZWxldGVz
IHRoZSBmaWxlcyBpbiBkaXNrIHJlcHJlc2VudGluZyBhIGhhc2ggc2FsdCBmb3IgYW4gb3JpZ2lu
LgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNl
SWRIYXNoU2FsdEZvck9yaWdpbnMpOgorICAgICAgICBEZWxldGVzIHRoZSBoYXNoIHNhbHRzIGlu
IHRoZSBtYXAgZm9yIGFuIG9yaWdpbi4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2U6OmRlbGV0ZURldmljZUlkSGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZSk6Cisg
ICAgICAgIERlbGV0ZSB0aGUgb3JpZ2lucyB0aGF0IGhhdmUgbm90IGJlZW4gbW9kaWZpZWQgc2lu
Y2UgYSB0aW1lLgorICAgICAgICAqIFVJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5o
OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJv
eHkuaDogUmVtb3ZlIHVuZWVkZWQgY2xhc3MKKyAgICAgICAgZGVmaW5pdGlvbi4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpsZWdhY3lX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbik6IEFkZGVkIGRpcmVjdG95CisgICAgICAgIGlu
aXRpYWxpemF0aW9uIGZvciB0aGUgaGFzaCBzYWx0cyBzdG9yZWQgaW4gZGlzay4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6IEFkZGVkIHN1cHBv
cnQgdG8KKyAgICAgICAgcmV0dXJuIGFuZCByZW1vdmUgdGhlIG9yaWdpbnMgd2l0aCBhIGdlbmVy
YXRlIGhhc2ggc2FsdCB1c2VkIHRvCisgICAgICAgIGdlbmVyYXRlIHRoZSBkZXZpY2UgaWRzLgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKTogQWRk
ZWQgdGhlIG5ldworICAgICAgICByZWZlcmVuY2UgdG8gdGhlIERldmljZUlkSGFzaFNhbHRTdG9y
YWdlIGNsYXNzLCB1c2VkIHRvIGhhbmRsZSB0aGUKKyAgICAgICAgaGFzaCBzYWx0cy4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkpOiBIYW5kbGUKKyAgICAgICAgdGhlIG5ldyBkaXJlY3RvcnkgdXNlZCBmb3IgdGhlIGhhc2gg
c2FsdHMgc3RvcmFnZSBpbiBkaXNrLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpmZXRjaERhdGFBbmRBcHBseSk6IEdldCB0aGUgbGlzdCBvZgorICAgICAgICBvcmlnaW5zIHdp
dGggYSBoYXNoIHNhbHRzIGluIHRoZSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6IFJlbW92ZSB0aGUgaGFzaCBz
YWx0cyBpbgorICAgICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBmb3IgYW4gb3JpZ2luLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlZERldmljZUlkSGFz
aFNhbHRzRGlyZWN0b3J5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZCB0aGUKKyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UgdG8gdGhlIGNvbXBpbGF0aW9uLgorCiAyMDE4LTA5LTI4ICBGdWppaSBIaXJvbm9yaSAgPEhp
cm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gZXJyb3IgQzIwMjc6
IHVzZSBvZiB1bmRlZmluZWQgdHlwZSAnV1RGOjpFbnVtVHJhaXRzPEU+JyB3aGlsZSBjb21waWxp
bmcgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmlu
ZGV4IGUyYzViZjcwYTI2NzI0ZmQwNTdjOWE2YWU0NjFhZDVhZGE1M2Y5ZTAuLmJjNjlhNDU0NTE0
ZmRlZDFkMWI0ODA0MTA3NTIyY2I4NGRlYmE2MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAt
ODEsOSArODEsNyBAQCB2b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQo
KQogCiB2b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJl
ZjxNZWRpYURldmljZUluZm8+PiYgZGV2aWNlcykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0g
ICAgVU5VU0VEX1BBUkFNKGRldmljZXMpOwotI2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAg
c3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAg
QEAgdm9pZCBNZWRpYURldmljZXNSZXF1ZXN0OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8
TWVkaWFEZXZpY2VJbmZvPj4mIGRldmljZXMKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGlj
IGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJh
Q291bnQgPSAxOworI2VuZGlmCisKICAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bo
b25lQ291bnQgPSAxOwogCiAgICAgaW50IGNhbWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUs
OCBAQCB2b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJl
ZjxNZWRpYURldmljZUluZm8+PiYgZGV2aWNlcwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9KTsKLQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFU
eXBlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUu
aAppbmRleCA5ZDUwMzYxZTgxYTM3YmQ5NDAyZGU5MWMxYzUzOTU4NGVhYWE2MmRlLi42MDFiYjQ0
MzY3YmYxNWJlY2ViOWJiMWI2ZGIzYmU3Nzc0NjY4YTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaApAQCAtNDksNiArNDksNyBA
QCBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZSB7CiAgICAgU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbnMgPSAxIDw8IDE0LAogI2VuZGlmCiAgICAgRE9NQ2FjaGUgPSAxIDw8IDE1LAorICAgIERl
dmljZUlkSGFzaFNhbHQgPSAxIDw8IDE2LAogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGZjY2Ez
YzU0OGFjZDY3NmI4YzYxMjA5MjIyYzU3YWVlNTZlZmVjNGQuLjViYzYzNjNlYjQ5NzY4YWJhNmE4
YWU3MzE5ZmIzNTg2YmE1NjJkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjMzLDYgKzIzMyw3IEBAIFVJ
UHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RQcm94eS5jcHAKIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorVUlQcm9jZXNz
L0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24u
Y3BwCiBVSVByb2Nlc3MvUHJvY2Vzc1Rocm90dGxlci5jcHAKIFVJUHJvY2Vzcy9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IGM0NWNhZmU2YzNmYmQzMDEx
N2Y4ZDIxNzY5YWQ5M2ViNmQ3NGQ4N2MuLjE0MmU4NDA2M2M0OGZiZjVjNmRlYjJkMTQ1MzgwMjJm
ZGRiZjMyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtMTM1LDYgKzEzNSw3IEBAIFVJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q3JlZGVudGlhbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREb3dubG9hZENsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0RWRpdG9yU3RhdGUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQ
RS50eHQKaW5kZXggZjljZjM3MTc1YjZmOTlmNWZiNTI5ZWEyMGQwMGExMTc0MzY1NWYyMy4uZjM2
YTk0NjU0M2U4ZTc1YTA1MGNhNTJjNThhMDFlM2NhYTQ1MmMzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0
CkBAIC0xMjIsNiArMTIyLDcgQEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51
Q2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5h
Z2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNw
cCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0RG93bmxvYWQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25s
b2FkQ2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JT
dGF0ZS5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCmluZGV4IGMxMTNlZDgzMWU2
NTJjMzVmNTFkZGU0NTU0Mjg0NTliZDg3NWRiNmIuLmJmMDc3NDczODY5NzZiNjMxNmE4NmRkZDM4
Yjc5MmFkOTFiNjg4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBA
IFJlZjxQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+IFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6
Y3JlYXRlV2l0aFdlYnNpdGVEYXRhU3RvCiAgICAgY29uZmlndXJhdGlvbi0+bV9pbmRleGVkREJE
YXRhYmFzZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1bHRJbmRleGVk
REJEYXRhYmFzZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24tPm1fbG9jYWxTdG9yYWdl
RGlyZWN0b3J5ID0gbGVnYWN5Q29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAg
ICAgY29uZmlndXJhdGlvbi0+bV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbGVnYWN5Q29u
ZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OworICAgIGNvbmZpZ3VyYXRpb24t
Pm1fZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gbGVnYWN5Q29uZmlndXJhdGlv
bi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgY29uZmlndXJhdGlvbi0+
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbGVnYWN5Q29uZmlndXJhdGlvbi5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwogICAgIGNvbmZpZ3VyYXRpb24tPm1fd2Vi
U1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBsZWdhY3lDb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNl
RGlyZWN0b3J5OwogICAgIGNvbmZpZ3VyYXRpb24tPm1famF2YVNjcmlwdENvbmZpZ3VyYXRpb25E
aXJlY3RvcnkgPSBsZWdhY3lDb25maWd1cmF0aW9uLmphdmFTY3JpcHRDb25maWd1cmF0aW9uRGly
ZWN0b3J5OwpAQCAtNzQsNiArNzUsNyBAQCBQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbigpCiAgICAgLCBtX2xvY2FsU3RvcmFnZURpcmVjdG9yeShXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkpCiAgICAgLCBtX3dl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRXZWJTUUxEYXRh
YmFzZURpcmVjdG9yeSgpKQogICAgICwgbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkpCisgICAgLCBt
X2RldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeShXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkpCiAgICAgLCBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKSkKICAgICAsIG1famF2YVNjcmlwdENvbmZpZ3VyYXRp
b25EaXJlY3RvcnkoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0
aW9uRGlyZWN0b3J5KCkpCiB7CkBAIC0xMDAsNiArMTAyLDcgQEAgUmVmPFByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbj4gUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjb3B5KCkKICAgICBjb3B5LT5t
X2luamVjdGVkQnVuZGxlUGF0aCA9IHRoaXMtPm1faW5qZWN0ZWRCdW5kbGVQYXRoOwogICAgIGNv
cHktPm1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+bV9sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnk7CiAgICAgY29weS0+bV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+bV9tZWRp
YUtleXNTdG9yYWdlRGlyZWN0b3J5OworICAgIGNvcHktPm1fZGV2aWNlSWRIYXNoU2FsdHNTdG9y
YWdlRGlyZWN0b3J5ID0gdGhpcy0+bV9kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7
CiAgICAgY29weS0+bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gdGhpcy0+bV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwogICAgIGNvcHktPm1famF2YVNjcmlwdENv
bmZpZ3VyYXRpb25EaXJlY3RvcnkgPSB0aGlzLT5tX2phdmFTY3JpcHRDb25maWd1cmF0aW9uRGly
ZWN0b3J5OwogICAgIGNvcHktPm1fd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSB0aGlzLT5tX3dl
YlNRTERhdGFiYXNlRGlyZWN0b3J5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCmluZGV4IDQ1YjFiNzUwNmE1
NDViYzk1YzI1YmNiYjA2NDNiM2MzZTVkMjcxNDIuLjk4NjAxZmJmMjNjMDU2MWNkZjk0OGEzM2Fl
MmEzODdiZWIwYTkzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVi
bGljOgogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OyB9CiAgICAgdm9pZCBz
ZXRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFdURjo6U3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5KSB7IG1fbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KIAorICAgIGNvbnN0IFdURjo6U3RyaW5nJiBkZXZpY2VJZEhh
c2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2RldmljZUlkSGFzaFNh
bHRzU3RvcmFnZURpcmVjdG9yeTsgfQorICAgIHZvaWQgc2V0RGV2aWNlSWRIYXNoU2FsdHNTdG9y
YWdlRGlyZWN0b3J5KGNvbnN0IFdURjo6U3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VE
aXJlY3RvcnkpIHsgbV9kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkgPSBkZXZpY2VJ
ZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KKwogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OyB9CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KGNvbnN0IFdURjo6U3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KSB7IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7IH0KIApAQCAtMTgwLDYgKzE4Myw3IEBAIHByaXZhdGU6
CiAgICAgV1RGOjpTdHJpbmcgbV9sb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgV1RGOjpTdHJp
bmcgbV93ZWJTUUxEYXRhYmFzZURpcmVjdG9yeTsKICAgICBXVEY6OlN0cmluZyBtX21lZGlhS2V5
c1N0b3JhZ2VEaXJlY3Rvcnk7CisgICAgV1RGOjpTdHJpbmcgbV9kZXZpY2VJZEhhc2hTYWx0c1N0
b3JhZ2VEaXJlY3Rvcnk7CiAgICAgV1RGOjpTdHJpbmcgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5OwogICAgIFdURjo6U3RyaW5nIG1famF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJl
Y3Rvcnk7CiAgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX2NhY2hlUGFydGl0aW9uZWRVUkxTY2hl
bWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVE
YXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRh
U3RvcmUuY3BwCmluZGV4IGEzZWMyNWQwZGY2Yjg2N2RjOTBjZTE4NGE4NDZiMDdlMmE5OWUyMzEu
LmU0MWZiYmQ1NGY2ZDkwY2ExMmQyMjhiYzNkZTA0NDRjYWFlYzgyYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTEy
OCw2ICsxMjgsNyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gV2Vi
c2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVmYXVsdERhdGFTdG9yZQogICAgIGNvbmZpZ3VyYXRpb24u
bmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9y
eSgpOwogICAgIGNvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVjdG9yeSA9IGxlZ2FjeURlZmF1
bHRNZWRpYUNhY2hlRGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsK
KyAgICBjb25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IGxl
Z2FjeURlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBjb25m
aWd1cmF0aW9uLmluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdEluZGV4
ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFz
ZURpcmVjdG9yeSA9IGxlZ2FjeURlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOwogICAg
IGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdExvY2Fs
U3RvcmFnZURpcmVjdG9yeSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElXZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggNjZlZmE1ODc2MGE3ZmU3ZTFmYzI2N2RjYzQ1MjI3
MzI5ZmRkMjgzYS4uYTlmMDc0OWZhZWQ5ZTk3NmRmNzU4ZjhiOWQwY2U0NmVmMDAwNDgwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9yZS5o
CkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgZGVmYXVs
dFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RGOjpT
dHJpbmcgZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0
cmluZyBkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBXVEY6
OlN0cmluZyBkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAg
c3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOwogICAg
IHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0SmF2YVNjcmlwdENvbmZpZ3VyYXRp
b25EaXJlY3RvcnkoKTsKQEAgLTczLDYgKzc0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBXVEY6
OlN0cmluZyBsZWdhY3lEZWZhdWx0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBz
dGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5RGVmYXVsdFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCk7
CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGxlZ2FjeURlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5KCk7CisgICAgc3RhdGljIFdURjo6U3RyaW5nIGxlZ2FjeURlZmF1bHREZXZpY2VJZEhh
c2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5
RGVmYXVsdE1lZGlhQ2FjaGVEaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVn
YWN5RGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0FQSVdlYnNpdGVEYXRhU3RvcmVH
TGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0FQSVdlYnNpdGVEYXRh
U3RvcmVHTGliLmNwcAppbmRleCAzMTk2ODQ3MjZmOWMyZjYxY2VkZjYxM2VlMGIxNWMyZGEzOTY3
ZjU5Li5jNGRlNjU5MTE4M2RkMzk2ZDJiNTI0MjcwNmI3MWQ4ZGZiMzU4MjYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9BUElXZWJzaXRlRGF0YVN0b3JlR0xp
Yi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvQVBJV2Vic2l0ZURh
dGFTdG9yZUdMaWIuY3BwCkBAIC03Myw2ICs3MywxMiBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpCiAgICAgcmV0dXJuIHdl
YnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKEJBU0VfRElSRUNUT1JZ
IEdfRElSX1NFUEFSQVRPUl9TICJtZWRpYWtleXMiKTsKIH0KIAorCitTdHJpbmcgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCit7Cisg
ICAgcmV0dXJuIHdlYnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKEJB
U0VfRElSRUNUT1JZIEdfRElSX1NFUEFSQVRPUl9TICJkZXZpY2VpZGhhc2hzYWx0cyIpOworfQor
CiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKQogewogICAgIHJldHVybiB3ZWJzaXRlRGF0YURpcmVjdG9yeUZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihCQVNFX0RJUkVDVE9SWSBHX0RJUl9TRVBBUkFUT1JfUyAiZGF0YWJhc2VzIik7
CkBAIC0xNTYsNiArMTYyLDE1IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2Fj
eURlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkKICAgICByZXR1cm4gZGVmYXVsdE1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKIH0KIAorU3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6
OmxlZ2FjeURlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQoreworI2lm
IFBMQVRGT1JNKFdQRSkKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBkZXZpY2VJZEhhc2hTYWx0c1N0
b3JhZ2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3
cGUiLCAiZGV2aWNlaWRoYXNoc2FsdHMiLCBudWxscHRyKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OkZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGV2aWNlSWRI
YXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5LmdldCgpKTsKKyNlbmRpZgorICAgIHJldHVybiBkZWZh
dWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7Cit9CisKIFdURjo6U3RyaW5n
IFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRp
cmVjdG9yeSgpCiB7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gamF2YVNjcmlwdENvcmVDb25maWdE
aXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksIEJBU0VfRElS
RUNUT1JZLCAiSmF2YVNjcmlwdENvcmVEZWJ1ZyIsIG51bGxwdHIpKTsKQEAgLTE3NCw2ICsxODks
NyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUNvbmZpZwogICAgIGNvbmZpZ3VyYXRpb24ud2ViU1FMRGF0
YWJhc2VEaXJlY3RvcnkgPSBkZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBj
b25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGRlZmF1bHRMb2NhbFN0b3JhZ2VE
aXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnkg
PSBkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGNvbmZpZ3VyYXRpb24u
ZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gZGVmYXVsdERldmljZUlkSGFzaFNh
bHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24ucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeSA9IGRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KCk7CiAKICAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZjA4N2Q2NmU3ZDliYWRhYzExOGE4YzEw
YzJmN2JhY2IyOWYzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwCkBAIC0wLDAg
KzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCIKKworI2luY2x1ZGUgIlVzZXJNZWRp
YVBlcm1pc3Npb25DaGVja1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFBlcm1pc3Npb25SZXF1ZXN0
LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4t
bGliLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJl
cXVlc3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSBwZXJtaXNzaW9uIHJlcXVlc3QgZm9yIGFj
Y2Vzc2luZyB1c2VyJ3MgYXVkaW8vdmlkZW8gZGV2aWNlcy4KKyAqIEBUaXRsZTogV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRQZXJtaXNzaW9u
UmVxdWVzdCwgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBXZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdCByZXByZXNlbnRzIGEgcmVxdWVzdCBmb3IKKyAqIHBlcm1pc3Npb24gdG8gd2hldGhl
ciBXZWJLaXQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSB1c2VyJ3MKKyAqIGRldmlj
ZXMgaW5mb3JtYXRpb24gd2hlbiByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUgZW51bWVyYWNlRGV2aWNl
cyBBUEkuCisgKgorICogV2hlbiBhIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCBp
cyBub3QgaGFuZGxlZCBieSB0aGUgdXNlciwKKyAqIGl0IGlzIGRlbmllZCBieSBkZWZhdWx0Lgor
ICoKKyAqIFNpbmNlOiAyLjIyCisgKi8KKworc3RhdGljIHZvaWQgd2Via2l0X3Blcm1pc3Npb25f
cmVxdWVzdF9pbnRlcmZhY2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElmYWNlKik7CisK
K3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSB7CisgICAg
UmVmUHRyPFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5PiByZXF1ZXN0OworICAgIFJlZlB0
cjxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4gZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CisgICAg
Ym9vbCBtYWRlRGVjaXNpb247Cit9OworCitXRUJLSVRfREVGSU5FX1RZUEVfV0lUSF9DT0RFKAor
ICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCwgd2Via2l0X2RldmljZV9pbmZv
X3Blcm1pc3Npb25fcmVxdWVzdCwgR19UWVBFX09CSkVDVCwKKyAgICBHX0lNUExFTUVOVF9JTlRF
UkZBQ0UoV0VCS0lUX1RZUEVfUEVSTUlTU0lPTl9SRVFVRVNULCB3ZWJraXRfcGVybWlzc2lvbl9y
ZXF1ZXN0X2ludGVyZmFjZV9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0QWxsb3coV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgQVNTRVJUKFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVx
dWVzdCkpOworCisgICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCktPnBy
aXY7CisKKyAgICAvLyBPbmx5IG9uZSBkZWNpc2lvbiBhdCBhIHRpbWUuCisgICAgaWYgKHByaXYt
Pm1hZGVEZWNpc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+bWFkZURlY2lzaW9u
ID0gdHJ1ZTsKKyAgICBhdXRvIHNhbHQgPSBwcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+
Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHByaXYtPnJlcXVlc3QuZ2V0KCkp
OworICAgIHByaXYtPnJlcXVlc3QtPnNldFVzZXJNZWRpYUFjY2Vzc0luZm8oV1RGTW92ZShzYWx0
KSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdERlbnkoV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgQVNTRVJU
KFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOworCisg
ICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCktPnByaXY7CisKKyAgICAv
LyBPbmx5IG9uZSBkZWNpc2lvbiBhdCBhIHRpbWUuCisgICAgaWYgKHByaXYtPm1hZGVEZWNpc2lv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+bWFkZURlY2lzaW9uID0gdHJ1ZTsKKyAg
ICBhdXRvIHNhbHQgPSBwcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+cmVnZW5lcmF0ZURl
dmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihwcml2LT5yZXF1ZXN0LmdldCgpKTsKKyAg
ICBwcml2LT5yZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKFdURk1vdmUoc2FsdCksIGZh
bHNlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZh
Y2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFj
ZS0+YWxsb3cgPSB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RBbGxvdzsKKyAgICBp
ZmFjZS0+ZGVueSA9IHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERpc3Bvc2UoR09i
amVjdCogb2JqZWN0KQoreworICAgIC8vIERlZmF1bHQgYmVoYXZpb3VyIHdoZW4gbm8gZGVjaXNp
b24gaGFzIGJlZW4gbWFkZSBpcyBkZW55aW5nIHRoZSByZXF1ZXN0LgorICAgIHdlYmtpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnkoV0VCS0lUX1BFUk1JU1NJT05fUkVRVUVTVChvYmpl
Y3QpKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9y
ZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNz
LT5kaXNwb3NlID0gd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZTsKK30K
KworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3RDcmVhdGUoVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHJlcXVl
c3QsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBBUEk6OlNl
Y3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSogZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpCit7CisgICAgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0KiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgPSBXRUJLSVRfREVW
SUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ERVZJ
Q0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIG51bGxwdHIpKTsKKworICAgIC8vIEZJWE1FOiBz
dG9yZSBTZWN1cml0eU9yaWdpbnMgYW5kIG1hZGUgdGhlbSBhdmFpbGFibGUgdG8gdGhlIGVtYmVk
ZGVyLgorICAgIFVOVVNFRF9QQVJBTSh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbik7CisgICAgVU5V
U0VEX1BBUkFNKHRvcExldmVsRG9jdW1lbnRPcmlnaW4pOworCisgICAgZGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0LT5wcml2LT5yZXF1ZXN0ID0gJnJlcXVlc3Q7CisgICAgZGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LT5wcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSA9IGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlOworICAgIHJldHVybiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjQ0MzAzOGZmODcwMjViMTFhMTA1N2YxNzhlMDJlNGZkZGQ0NDhhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hwb3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJXZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCIKKworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoV2ViS2l0
OjpVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiwgV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQu
Y3BwCmluZGV4IDAyNzU0MzEyN2FlZTFiMDg2ZDAzNjE1MWQxMThjZmM3OTY2NmE0MmUuLjVlMzZi
ZGE5Njc0MjA3MmRjYjQ0MzkzY2E4MThhYjYxY2FkNzM1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIyLDYgKzIy
LDcgQEAKIAogI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eS5oIgorI2luY2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oIgpAQCAtMzIsNiArMzMsNyBAQAog
I2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2Vi
c2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAogI2lmIFBM
QVRGT1JNKEdUSykKQEAgLTE4OSw2ICsxOTEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCisgICAgYm9vbCBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmln
aW4oV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdp
biYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVs
RG9jdW1lbnRPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiBwZXJtaXNzaW9u
UmVxdWVzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0PiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgPSBhZG9wdEdS
ZWYod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBlcm1pc3Npb25SZXF1
ZXN0LCB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgcGFn
ZS53ZWJzaXRlRGF0YVN0b3JlKCkuZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSkpOworICAgICAg
ICB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KG1fd2ViVmlldywgV0VCS0lUX1BF
Uk1JU1NJT05fUkVRVUVTVChkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuZ2V0KCkpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJQYWdlUHJveHkmLCBBUEk6OlNlY3VyaXR5T3Jp
Z2luJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAg
ICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Q+
IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdE5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpLnB0cigpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmlu
ZGV4IDNmNTI2MjVlNjdiMWU3MWE0NGY2NDFlYTkyYjg1MzZlYTAxNDliMmQuLjQ2ZTkyZDUzZmFk
NjM0MjkxMDdjMWNmMDY5NWFmODU5MGUyNDYwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0zMjIsNiArMzIy
LDcgQEAgc3RhdGljIGlubGluZSBXZWJzaXRlRGF0YVN0b3JlOjpDb25maWd1cmF0aW9uIHdlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2UKICAgICBjb25maWd1cmF0aW9uLndlYlNRTERh
dGFiYXNlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xjb25maWd1cmFyaW9uLndlYlNRTERhdGFiYXNl
RGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBw
cm9jZXNzUG9vbGNvbmZpZ3VyYXJpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgY29u
ZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xjb25maWd1
cmFyaW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBjb25maWd1cmF0aW9uLmRl
dmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IHByb2Nlc3NQb29sY29uZmlndXJhcmlv
bi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICByZXR1cm4gY29uZmln
dXJhdGlvbjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2Vic2l0ZURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2Vic2l0ZURhdGEuY3BwCmluZGV4IGEyNGRhNGQ2ZTFjYzg4MjZlNGNlMjNkYTdh
Nzc1N2VlNWUzMDk0ZGYuLjAxMmY4OGY0ZmQ1NWEyMDhiOTMzN2NjMmNjM2M1ZDI1MTcwMzIyYzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNp
dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJzaXRlRGF0YS5jcHAKQEAgLTEwMyw2ICsxMDMsOCBAQCBzdGF0aWMgV2ViS2l0V2Vic2l0ZURh
dGFUeXBlcyB0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZQogI2VuZGlmCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2ll
cykpCiAgICAgICAgIHJldHVyblZhbHVlIHw9IFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzsK
KyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0
KSkKKyAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURf
SEFTSF9TQUxUOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVz
PihyZXR1cm5WYWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IDg2YmY0
N2ZkMWFlMGVhZDI5MWViNTA5YWMxN2ZhNjNhNjExNGUxNmIuLjdlZjI1ZWZkM2Q0NjBkOGQ5Njc0
ZjQyYmZhNTdhNWIzMDI1Mjg2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcApAQCAtMzcx
LDYgKzM3MSw3IEBAIEFQSTo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0RGF0YVN0b3JlKFdlYktpdFdlYnNpdGVEYXRhTWFuCiAgICAgICAgIGNvbmZpZ3VyYXRp
b24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSAhcHJpdi0+d2ViU1FMRGlyZWN0b3J5ID8KICAg
ICAgICAgICAgIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFdlYlNRTERhdGFiYXNlRGly
ZWN0b3J5KCkgOiBXZWJDb3JlOjpGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHByaXYtPndlYlNRTERpcmVjdG9yeS5nZXQoKSk7CiAgICAgICAgIGNvbmZpZ3Vy
YXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICAgICAgY29uZmlndXJhdGlv
bi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkgPSBBUEk6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTGVn
YWN5KFdURk1vdmUoY29uZmlndXJhdGlvbikpOwogICAgIH0KIApAQCAtNjQ5LDYgKzY1MCw4IEBA
IHN0YXRpYyBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZXMoV2Vi
S2l0V2Vic2l0ZURhdGFUeXBlcyB0eXBlCiAjZW5kaWYKICAgICBpZiAodHlwZXMgJiBXRUJLSVRf
V0VCU0lURV9EQVRBX0NPT0tJRVMpCiAgICAgICAgIHJldHVyblZhbHVlLmFkZChXZWJzaXRlRGF0
YVR5cGU6OkNvb2tpZXMpOworICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfREVW
SUNFX0lEX0hBU0hfU0FMVCkKKyAgICAgICAgcmV0dXJuVmFsdWUuYWRkKFdlYnNpdGVEYXRhVHlw
ZTo6RGV2aWNlSWRIYXNoU2FsdCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjhjNDJlY2I2MDg0
ZWI1YTNjNTIzNjRkODQxZGRjNGUxNWRiODg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Qu
aApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJf
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25s
eSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorI2RlZmluZSBX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCAg
ICAgICAgICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
REVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNU
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVm
aW5lIFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1J
U1NJT05fUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktp
dERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCAgICAgICAgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdENsYXNzICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0
ZSBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisK
KyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZSAgICAodm9p
ZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCmluZGV4IDA2NTA0N2ZlMTdjNTg1ZTI4
MjYxMTlhY2RiNGIzMDcwZTE0MzIzMjEuLjY3NDMwNWNjMDFmMGQ5NGFiMGNkZDI0N2E5MzI5MGVm
M2I5YTU1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2Vic2l0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYnNpdGVEYXRhLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYnNpdGVEYXRhIFdlYktpdFdlYnNpdGVEYXRhOwogICogQFdFQktJVF9XRUJTSVRFX0RBVEFf
SU5ERVhFRERCX0RBVEFCQVNFUzogSW5kZXhlZERCIGRhdGFiYXNlcy4KICAqIEBXRUJLSVRfV0VC
U0lURV9EQVRBX1BMVUdJTl9EQVRBOiBQbHVnaW5zIGRhdGEuCiAgKiBAV0VCS0lUX1dFQlNJVEVf
REFUQV9DT09LSUVTOiBDb29raWVzLgorICogQFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lE
X0hBU0hfU0FMVDogSGFzaCBzYWx0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRldmljZSBpZHMgdXNl
ZCBieSB3ZWJwYWdlcy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTDogQWxsIHR5cGVzLgog
ICoKICAqIEVudW0gdmFsdWVzIHdpdGggZmxhZ3MgcmVwcmVzZW50aW5nIHR5cGVzIG9mIFdlYnNp
dGUgZGF0YS4KQEAgLTYwLDcgKzYxLDggQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfV0VC
U0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMgICAgICAgPSAxIDw8IDYsCiAgICAgV0VCS0lU
X1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQSAgICAgICAgICAgICAgID0gMSA8PCA3LAogICAgIFdF
QktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUyAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKLSAg
ICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCA5
KSAtIDEKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQgICAgICAg
PSAxIDw8IDksCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAg
ICAgID0gKDEgPDwgMTApIC0gMQogfSBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzOwogCiBXRUJLSVRf
QVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNzdkMThkNjkxODAzYzcyOWRjNTBkOTA2ODI0Nzc4OTkyMThkMjQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVF9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9O
KQorI2Vycm9yICJPbmx5IDx3cGUvd2Via2l0Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAor
I2RlZmluZSBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNUICAgICAgICAgICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ERVZJQ0VfSU5G
T19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJ
Q0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9f
UEVSTUlTU0lPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwg
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ICAgICAgICBXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0Q2xhc3MgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQ
cml2YXRlIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGU7CisKK3N0cnVj
dCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVu
dDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBlICAg
ICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKaW5kZXggM2E0NjJhYWZmOWI4
N2M2ZTBlNTdmOTYyYzBlNDYzMDkyNTlkZGUwMy4uMDNkZDU4NWQxMjY1YTZlNGVlZGI5NDI2ODc1
M2YzNjI0YzYyMGFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRXZWJzaXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0V2Vic2l0ZURhdGEuaApAQCAtNDQsNiArNDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2Vic2l0ZURhdGEgV2ViS2l0V2Vic2l0ZURhdGE7CiAgKiBAV0VCS0lUX1dFQlNJVEVf
REFUQV9JTkRFWEVEREJfREFUQUJBU0VTOiBJbmRleGVkREIgZGF0YWJhc2VzLgogICogQFdFQktJ
VF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEE6IFBsdWdpbnMgZGF0YS4KICAqIEBXRUJLSVRfV0VC
U0lURV9EQVRBX0NPT0tJRVM6IENvb2tpZXMuCisgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJ
Q0VfSURfSEFTSF9TQUxUOiBIYXNoIHNhbHQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGV2aWNlIGlk
cyB1c2VkIGJ5IHdlYnBhZ2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMOiBBbGwgdHlw
ZXMuCiAgKgogICogRW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXByZXNlbnRpbmcgdHlwZXMgb2Yg
V2Vic2l0ZSBkYXRhLgpAQCAtNjAsNyArNjEsOCBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJ
VF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAgICA9IDEgPDwgNiwKICAgICBX
RUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAgICAgICAgPSAxIDw8IDcsCiAg
ICAgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTICAgICAgICAgICAgICAgICAgID0gMSA8PCA4
LAotICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgx
IDw8IDkpIC0gMQorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCAg
ICAgICA9IDEgPDwgOSwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAg
ICAgICAgICAgPSAoMSA8PCAxMCkgLSAxCiB9IFdlYktpdFdlYnNpdGVEYXRhVHlwZXM7CiAKIFdF
QktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlk
SGFzaFNhbHRTdG9yYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGVhYjhhODVlZjY5Y2U3OTgxZjg2MTRm
YmJiOGY5ZTVmN2U3MmJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3Rm
L0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJl
ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgaW50IGhh
c2hTYWx0U2l6ZSA9IDQ4Oworc3RhdGljIGNvbnN0IGludCByYW5kb21EYXRhU2l6ZSA9IGhhc2hT
YWx0U2l6ZSAvIDE2OworCitSZWY8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IERldmljZUlkSGFz
aFNhbHRTdG9yYWdlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZURpcmVjdG9yeSwgYm9vbCBpc1BlcnNpc3RlbnQpCit7CisgICAgYXV0byBkZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZSA9IGFkb3B0UmVmKCpuZXcgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoZGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnksIGlzUGVyc2lzdGVudCkpOworICAgIGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlLT5sb2FkU3RvcmFnZUZyb21EaXNrKCk7CisgICAgcmV0dXJuIGRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOworfQorCitEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6RGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURp
cmVjdG9yeSwgYm9vbCBpc1BlcnNpc3RlbnQpCisgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3Jl
YXRlKCJjb20uYXBwbGUuV2ViS2l0LkRldmljZUlkSGFzaFNhbHRTdG9yYWdlIikpCisgICAgLCBt
X2lzUGVyc2lzdGVudChpc1BlcnNpc3RlbnQpCisgICAgLCBtX2RldmljZUlkSGFzaFNhbHRTdG9y
YWdlRGlyZWN0b3J5KGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5KQoreworfQorCitE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6fkRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkKK3sKK30K
Kwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6bG9hZFN0b3JhZ2VGcm9tRGlzaygpCit7
CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKG1fZGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG9yaWdpblBhdGhz
ID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlRGly
ZWN0b3J5LCAiKiIpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpblBhdGggOiBvcmln
aW5QYXRocykgeworICAgICAgICAgICAgVVJMIHVybDsKKyAgICAgICAgICAgIHVybC5zZXRQcm90
b2NvbCgiZmlsZSJfcyk7CisgICAgICAgICAgICB1cmwuc2V0UGF0aChvcmlnaW5QYXRoKTsKKwor
ICAgICAgICAgICAgU3RyaW5nIGRldmljZUlkSGFzaFNhbHRJZGVudGlmaWVyID0gdXJsLmxhc3RQ
YXRoQ29tcG9uZW50KCk7CisKKyAgICAgICAgICAgIGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBTZWN1
cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoZGV2aWNlSWRIYXNoU2FsdElk
ZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFzZWN1cml0eU9yaWdpbikKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAg
ICAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUob3JpZ2luUGF0aCwgZmlsZVNp
emUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGhhbmRs
ZSA9IEZpbGVTeXN0ZW06Om9wZW5BbmRMb2NrRmlsZShvcmlnaW5QYXRoLCBGaWxlU3lzdGVtOjpG
aWxlT3Blbk1vZGU6OlJlYWQpOworICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSBGaWxlU3lzdGVt
OjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBzaXplX3QgYnl0ZXNUb1JlYWQ7CisgICAgICAgICAgICBpZiAoIVdURjo6
Y29udmVydFNhZmVseShmaWxlU2l6ZSwgYnl0ZXNUb1JlYWQpKSB7CisgICAgICAgICAgICAgICAg
RmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZm
ZXIoYnl0ZXNUb1JlYWQpOworICAgICAgICAgICAgc2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmls
ZVN5c3RlbTo6cmVhZEZyb21GaWxlKGhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OnVubG9ja0FuZENsb3NlRmlsZShoYW5kbGUp
OworCisgICAgICAgICAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQgfHwgdG90
YWxCeXRlc1JlYWQgIT0gaGFzaFNhbHRTaXplKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBhdXRvIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbiA9IFN0
cmluZyhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKworICAgICAgICAgICAgc2V0RGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHNlY3VyaXR5T3JpZ2luLT5zZWN1cml0eU9y
aWdpbigpLCBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbikpOworICAg
ICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnN0b3Jl
SGFzaFNhbHRUb0Rpc2soSGFzaFNhbHRGb3JPcmlnaW4qIGhhc2hTYWx0Rm9yT3JpZ2luKQorewor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGhhc2hTYWx0Rm9yT3JpZ2luXSgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgICAgICBTdHJpbmcgZmlsZUZ1bGxQYXRoID0gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJl
Y3RvcnksIGhhc2hTYWx0Rm9yT3JpZ2luLT50b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4t
PmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisKKyAgICAgICAgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKGZpbGVGdWxsUGF0
aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7CisgICAgICAgIGlmICghaGFuZGxl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGludDY0X3Qgd3JpdHRlbkJ5dGVzID0g
RmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBoYXNoU2FsdEZvck9yaWdpbi0+ZGV2aWNl
SWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luLnV0ZjgoKS5kYXRhKCksIGhhc2hTYWx0Rm9yT3Jp
Z2luLT5kZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4udXRmOCgpLmxlbmd0aCgpKTsK
KyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKHdy
aXR0ZW5CeXRlcyAhPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihoYXNoU2FsdEZvck9yaWdpbi0+ZGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luLnV0ZjgoKS5sZW5ndGgoKSkpCisgICAgICAg
ICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVGdWxsUGF0aCk7CisgICAgfSk7Cit9CisK
K1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0Rm9yT3JpZ2luKFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5KiByZXF1ZXN0KQorewor
ICAgIHJldHVybiBnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVzdC0+
dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpOworfQorCitTdHJpbmcgRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmln
aW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVzdC0+dG9w
TGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpOworfQorCitTdHJpbmcgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4o
U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKK3sKKyAgICBh
dXRvIHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbkRhdGEgPSB0b3BMZXZlbERvY3VtZW50
U2VjdXJpdHlPcmlnaW4uZGF0YSgpOworICAgIG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5y
ZW1vdmVJZihbdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luRGF0YV0oYXV0byYga2V5QW5k
VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleUFuZFZhbHVlLnZhbHVlLT50b3BMZXZlbERvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4tPmRhdGEoKSA9PSB0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmln
aW5EYXRhOworICAgIH0pOworCisgICAgcmV0dXJuIGdldERldmljZUlkZW50aWZpZXJIYXNoU2Fs
dEZvck9yaWdpbih0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworfQorCitTdHJpbmcg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbihTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorewor
ICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbiA9IG1fZGV2aWNlSWRIYXNoU2FsdGZv
ck9yaWdpbi5nZXQodG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLnRvUmF3U3RyaW5nKCkp
OworICAgIGlmIChkZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luKSB7CisgICAgICAgIGRldmljZUlk
SGFzaFNhbHRmb3JPcmlnaW4tPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICAg
ICAgcmV0dXJuIGRldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4tPmRldmljZUlkZW50aWZpZXJIYXNo
U2FsdEZvck9yaWdpbjsKKyAgICB9CisKKyAgICB1aW50NjRfdCByYW5kb21EYXRhW3JhbmRvbURh
dGFTaXplXTsKKyAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihyYW5kb21EYXRhKSwgc2l6ZW9mKHJhbmRvbURhdGEpKTsKKwor
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eSho
YXNoU2FsdFNpemUpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmFuZG9tRGF0YVNpemU7IGkr
KykKKyAgICAgICAgYXBwZW5kVW5zaWduZWQ2NEFzSGV4KHJhbmRvbURhdGFbMF0sIGJ1aWxkZXIp
OworCisgICAgU3RyaW5nIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbiA9IGJ1aWxk
ZXIudG9TdHJpbmcoKTsKKworICAgIGF1dG8gbmV3SGFzaFNhbHRGb3JPcmlnaW4gPSBzdGQ6Om1h
a2VfdW5pcXVlPEhhc2hTYWx0Rm9yT3JpZ2luPih0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbik7CisgICAgbmV3SGFzaFNhbHRG
b3JPcmlnaW4tPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKworICAgIGlmIChtX2lz
UGVyc2lzdGVudCkKKyAgICAgICAgc3RvcmVIYXNoU2FsdFRvRGlzayhuZXdIYXNoU2FsdEZvck9y
aWdpbi5nZXQoKSk7CisKKyAgICBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4uYWRkKHRvcExl
dmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbi50b1Jhd1N0cmluZygpLCBXVEZNb3ZlKG5ld0hhc2hT
YWx0Rm9yT3JpZ2luKSk7CisKKyAgICByZXR1cm4gZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9y
T3JpZ2luOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpzZXREZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgU3RyaW5nJiYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2lu
KQoreworICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbiA9IG1fZGV2aWNlSWRIYXNo
U2FsdGZvck9yaWdpbi5nZXQodG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLnRvUmF3U3Ry
aW5nKCkpOworICAgIGlmIChkZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luKSB7CisgICAgICAgIGRl
dmljZUlkSGFzaFNhbHRmb3JPcmlnaW4tPmRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdp
biA9IGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsKKyAgICAgICAgZGV2aWNlSWRI
YXNoU2FsdGZvck9yaWdpbi0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBuZXdIYXNoU2FsdEZvck9yaWdpbiA9IHN0ZDo6
bWFrZV91bmlxdWU8SGFzaFNhbHRGb3JPcmlnaW4+KHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKTsKKyAgICBuZXdIYXNoU2Fs
dEZvck9yaWdpbi0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luID0gZGV2aWNlSWRl
bnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luOworICAgIG5ld0hhc2hTYWx0Rm9yT3JpZ2luLT5sYXN0
VGltZVVzZWQgPSBXYWxsVGltZTo6bm93KCk7CisgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3Jp
Z2luLmFkZCh0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4udG9SYXdTdHJpbmcoKSwgV1RG
TW92ZShuZXdIYXNoU2FsdEZvck9yaWdpbikpOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpnZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8
U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewor
ICAgICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKKworICAgICAgICBm
b3IgKGF1dG8mIGhhc2hTYWx0Rm9yT3JpZ2luIDogbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2lu
KQorICAgICAgICAgICAgb3JpZ2lucy5hZGQoaGFzaFNhbHRGb3JPcmlnaW4udmFsdWUtPnRvcExl
dmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbi0+ZGF0YSgpKTsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW29yaWdpbnMgPSBXVEZNb3ZlKG9yaWdpbnMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5zKSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCitib29sIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVIYXNoU2FsdEZy
b21EaXNrSWZOZWVkZWQoSGFzaFNhbHRGb3JPcmlnaW4qIGhhc2hTYWx0Rm9yT3JpZ2luLCBib29s
IG5lZWRzUmVtb3ZhbCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmIChuZWVkc1JlbW92YWwpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVGdWxsUGF0aCA9IEZpbGVT
eXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdl
RGlyZWN0b3J5LCBoYXNoU2FsdEZvck9yaWdpbi0+dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLT5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVGaWxlKGZpbGVGdWxsUGF0aCk7CisgICAgfQorCisgICAgcmV0dXJuIG5lZWRzUmVtb3Zh
bDsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNo
U2FsdEZvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMs
IEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8U2Vj
dXJpdHlPcmlnaW5EYXRhPiBjb3BpZWRPcmlnaW5zOworICAgIGNvcGllZE9yaWdpbnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5zLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIG9yaWdp
biA6IG9yaWdpbnMpCisgICAgICAgIGNvcGllZE9yaWdpbnMudW5jaGVja2VkQXBwZW5kKG9yaWdp
bi5pc29sYXRlZENvcHkoKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb3BpZWRPcmlnaW5zID0gV1RGTW92ZShjb3BpZWRP
cmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luLnJlbW92ZUlm
KFt0aGlzLCBjb3BpZWRPcmlnaW5zXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICAgICAg
cmV0dXJuIGRlbGV0ZUhhc2hTYWx0RnJvbURpc2tJZk5lZWRlZChrZXlBbmRWYWx1ZS52YWx1ZS5n
ZXQoKSwgY29waWVkT3JpZ2lucy5jb250YWlucyhrZXlBbmRWYWx1ZS52YWx1ZS0+dG9wTGV2ZWxE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLT5kYXRhKCkpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRI
YXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1bmN0aW9uPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aW1lLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBtX2Rldmlj
ZUlkSGFzaFNhbHRmb3JPcmlnaW4ucmVtb3ZlSWYoW3RoaXMsIHRpbWVdKGF1dG8mIGtleUFuZFZh
bHVlKSB7CisgICAgICAgICAgICByZXR1cm4gZGVsZXRlSGFzaFNhbHRGcm9tRGlza0lmTmVlZGVk
KGtleUFuZFZhbHVlLnZhbHVlLmdldCgpLCBrZXlBbmRWYWx1ZS52YWx1ZS0+bGFzdFRpbWVVc2Vk
ID4gdGltZSk7CisgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDNhZmE3ZjFkZjgxNjE4YzkyMzBmZDI3NThmNDYxZTVl
MDMzOTY1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Vj
dXJpdHlPcmlnaW5EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkhhc2gu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8RGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERldmljZUlkSGFzaFNh
bHRTdG9yYWdlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURp
cmVjdG9yeSwgYm9vbCBpc1BlcnNpc3RlbnQpOworICAgIH5EZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSgpOworCisgICAgc3RydWN0IEhhc2hTYWx0Rm9yT3JpZ2luIHsKKyAgICBIYXNoU2FsdEZvck9y
aWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIFN0cmluZyYgZGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKQorICAgICAgICA6IHRvcExldmVsRG9jdW1l
bnRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKKyAgICAgICAgLCBkZXZpY2VJZGVudGlm
aWVySGFzaFNhbHRGb3JPcmlnaW4oZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKQor
ICAgICAgICAsIGxhc3RUaW1lVXNlZChXYWxsVGltZTo6bm93KCkpCisgICAgICAgIHsgfTsKKwor
ICAgICAgICB+SGFzaFNhbHRGb3JPcmlnaW4oKSA9IGRlZmF1bHQ7CisgICAgICAgIFJlZjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbj4gdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luOworICAg
ICAgICBTdHJpbmcgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luOworICAgICAgICBX
YWxsVGltZSBsYXN0VGltZVVzZWQ7CisgICAgfTsKKworICAgIFN0cmluZyBnZXREZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkqKTsK
KyAgICBTdHJpbmcgcmVnZW5lcmF0ZURldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSopOworCisgICAgdm9pZCBnZXREZXZpY2VJZEhh
c2hTYWx0T3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBkZWxldGVEZXZpY2VJ
ZEhhc2hTYWx0Rm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBk
ZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2luc01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIEZ1bmN0
aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisKKyAgICB2b2lkIGxvYWRTdG9yYWdl
RnJvbURpc2soKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZShjb25zdCBTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBib29s
IGlzUGVyc2lzdGVudCk7CisKKyAgICBTdHJpbmcgZ2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0
Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50U2VjdXJp
dHlPcmlnaW4pOworICAgIFN0cmluZyByZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0
Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50U2VjdXJp
dHlPcmlnaW4pOworICAgIHZvaWQgc3RvcmVIYXNoU2FsdFRvRGlzayhIYXNoU2FsdEZvck9yaWdp
biopOworICAgIGJvb2wgZGVsZXRlSGFzaFNhbHRGcm9tRGlza0lmTmVlZGVkKEhhc2hTYWx0Rm9y
T3JpZ2luKiwgYm9vbCBuZWVkc1JlbW92YWwpOworICAgIHZvaWQgc2V0RGV2aWNlSWRlbnRpZmll
ckhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbik7CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIEhhc2hNYXA8U3RyaW5n
LCBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNhbHRGb3JPcmlnaW4+PiBtX2RldmljZUlkSGFzaFNhbHRm
b3JPcmlnaW47CisgICAgYm9vbCBtX2lzUGVyc2lzdGVudDsKKyAgICBTdHJpbmcgbV9kZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNo
ZWNrUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVja1Byb3h5LmgKaW5kZXggZjM3YmU3YWIyMWYzZjExZjU3NWIxY2ZjMTI3N2JjYTU2NmNjYzMw
MS4uZmJjYzRjZmVlM2E1YjRiZDBjMGEwYWM2MjFkYjA4ZjFmYTRjMGVmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eS5oCkBAIC0zNiw4ICszNiw2IEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotY2xhc3MgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk7
Ci0KIGNsYXNzIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5IDogcHVibGljIEFQSTo6T2Jq
ZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrPiB7CiBw
dWJsaWM6CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRl
eCBiZWY0MGRlODQ2ODkwYTI0OTcyOTU4YzVjMzFhNGQxZTk3MzE0NjQ1Li5iODNiMGExNTQ5ZjBl
YjM2NzY2ODVmMTVjYzgwYjgzZTE5NTIwNzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGljIFdlYnNpdGVEYXRh
U3RvcmU6OkNvbmZpZ3VyYXRpb24gbGVnYWN5V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24o
QVBJOjoKICAgICBjb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVj
dG9yeU5hbWUgPSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZUZsYXRG
aWxlU3ViZGlyZWN0b3J5TmFtZSgpOwogICAgIGNvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVj
dG9yeSA9IHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5KCk7CiAg
ICAgY29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBjb25maWd1cmF0
aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IHByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBjb25maWd1
cmF0aW9uLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBwcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24ucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3Vy
YXRpb24ubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmRp
c2tDYWNoZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24uamF2YVNjcmlwdENvbmZpZ3Vy
YXRpb25EaXJlY3RvcnkgPSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uamF2YVNjcmlwdENvbmZp
Z3VyYXRpb25EaXJlY3RvcnkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMjM1ZDE3OTY0ZTkyMDNi
Yjg0MGUyNjVhMjk0YThmNTFkZjlmOGMyNy4uYTAxYWY0NmEyMjU5ZWNhYWMwODFjNTg4ZTNiYmE1
Y2RiNDg4OTBiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJBUElXZWJzaXRlRGF0YVJlY29yZC5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUu
aCIKICNpbmNsdWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIkRldmljZUlk
SGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VN
YW5hZ2VyLmgiCkBAIC05Nyw2ICs5OCw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRh
U3RvcmUoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLCBQQUw6OlNlc3Npb25JRCBzCiAgICAg
OiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2NvbmZpZ3VyYXRpb24oV1RGTW92ZShj
b25maWd1cmF0aW9uKSkKICAgICAsIG1fc3RvcmFnZU1hbmFnZXIoU3RvcmFnZU1hbmFnZXI6OmNy
ZWF0ZShtX2NvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkKKyAgICAsIG1fZGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UoRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmNyZWF0ZShtX2Nv
bmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5LCBpc1BlcnNpc3Rl
bnQoKSkpCiAgICAgLCBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0
LldlYnNpdGVEYXRhU3RvcmUiKSkKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogICAgICwgbV9hdXRo
ZW50aWNhdG9yTWFuYWdlcihtYWtlVW5pcXVlUmVmPEF1dGhlbnRpY2F0b3JNYW5hZ2VyPigpKQpA
QCAtMTc0LDYgKzE3Niw4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9y
aWVzSWZOZWNlc3NhcnkoKQogICAgICAgICBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5tZWRpYUNh
Y2hlRGlyZWN0b3J5ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRi
b3hFeHRlbnNpb24obV9jb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3RvcnkpOwogICAgIGlm
ICghbV9jb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQog
ICAgICAgICBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRlbnNpb24o
bV9jb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpOworICAgIGlmICghbV9j
b25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkp
CisgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFn
ZURpcmVjdG9yeSA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94
RXh0ZW5zaW9uKG1fY29uZmlndXJhdGlvbi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rv
cnkpOwogICAgIGlmICghbV9jb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKICAgICAgICAgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VE
aXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4
dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpOwogICAgIGlm
ICghbV9jb25maWd1cmF0aW9uLmluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
QEAgLTQ4OCw2ICs0OTIsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgfSk7
CiAgICAgfQogCisgICAgaWYgKG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgJiYgZGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkpIHsKKyAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKKworICAgICAgICBtX2Rl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLT5nZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhbY2FsbGJh
Y2tBZ2dyZWdhdG9yXShIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mJiBvcmln
aW5zKSB7CisgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKKworICAgICAgICAg
ICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0
YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwg
V2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0LCAwIH0pOworCisgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVE
YXRhKSk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJzaXN0
ZW50KCkpIHsKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2so
KTsKIApAQCAtODAzLDYgKzgyMCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgICAg
ICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiBkYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgeworICAg
ICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAgICAg
IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmRlbGV0ZURldmljZUlkSGFzaFNhbHRPcmlnaW5z
TW9kaWZpZWRTaW5jZShtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOworICAg
ICAgICB9KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CiAKQEAgLTEw
NzcsNiArMTEwMiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICB9KTsKICAg
ICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiBkYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgeworICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UtPmRlbGV0ZURldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKG9yaWdp
bnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIGlm
IChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRp
b25DYWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZGF0
YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggZDEyNGEwNmI0YjVkODc2
YmQ4ZGM4YTQ3MTlkZjhhYzdkN2U1OTQ0Zi4uNTc2ZTQ2ODNmZTA4Y2JjNjgyZmQyNWNlZGJlNWRk
ODJmMjQ1MWI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNTUsNiArNTUsNyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9y
ZTsKIGNsYXNzIFN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7
CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKQEAgLTkzLDYgKzk0LDcgQEAgcHVibGljOgogICAg
ICAgICBTdHJpbmcgd2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBsb2Nh
bFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBtZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5OworICAgICAgICBTdHJpbmcgZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5Owog
ICAgICAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKICAgICAgICAg
U3RyaW5nIGphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcg
Y29va2llU3RvcmFnZUZpbGU7CkBAIC0xNTMsNiArMTU1LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFN0cmluZyYgcmVzb2x2ZWRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1
cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeTsgfQog
ICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRNZWRpYUNhY2hlRGlyZWN0b3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVjdG9yeTsgfQogICAg
IGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRNZWRpYUtleXNEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVy
biBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OyB9Cisg
ICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZERldmljZUlkSGFzaFNhbHRzRGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9y
YWdlRGlyZWN0b3J5OyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZERhdGFiYXNlRGlyZWN0
b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJh
c2VEaXJlY3Rvcnk7IH0KICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkSmF2YVNjcmlwdENvbmZp
Z3VyYXRpb25EaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlv
bi5qYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeTsgfQogICAgIGNvbnN0IFN0cmluZyYg
cmVzb2x2ZWRDb29raWVTdG9yYWdlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25m
aWd1cmF0aW9uLmNvb2tpZVN0b3JhZ2VGaWxlOyB9CkBAIC0xNjIsNiArMTY1LDggQEAgcHVibGlj
OgogCiAgICAgU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9zdG9y
YWdlTWFuYWdlci5nZXQoKTsgfQogCisgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UqIGRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5n
ZXQoKTsgfQorCiAgICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKICAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nl
c3NQb29sJikgY29uc3Q7CiAKQEAgLTIzNyw2ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzIHsgZmFsc2UgfTsKIAogICAgIGNvbnN0IFJlZlB0cjxT
dG9yYWdlTWFuYWdlcj4gbV9zdG9yYWdlTWFuYWdlcjsKKyAgICBjb25zdCBSZWZQdHI8RGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2U+IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CiAgICAgUmVmUHRy
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
OwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlIHsgZmFsc2UgfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTYyY2E2YWMwZTliYmNjODQ0NmE2ZGY3YTRhY2JlZWQxZGZhYTllYS4uNDkzNGMxZThkM2M0
ODhiYzFiZGJkNmQ3YjUyYzU3ZjFjN2IyZDQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03Nyw2ICs3Nyw4IEBACiAJCTAwQjk2NjE2
MThFMjRDQkEwMENFMUY4OCAvKiBBUElGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEI5NjYxNTE4RTI0Q0JBMDBDRTFGODggLyogQVBJ
RmluZENsaWVudC5oICovOyB9OwogCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFGODggLyogRmluZENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBC
OTY2MTgxOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCAqLzsgfTsKIAkJMDcyOTdGOUYx
QzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVB
MDAzRjA3MzUgLyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLzsgfTsKKwkJMDcy
OTdGOUUxQzE3QkJFQTAxNEYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RjlDMUMxNzEx
RUEwMDNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgKi87IH07CisJCTA3Mjk3
RjlGMUMxN0JCRUEwMTVGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGOUQxQzE3QkJFQTIy
M0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi87IH07CiAJCTA3Mjk3RkEzMUMx
ODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGQTExQzE4NkFEQjAwM0Yw
NzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc0RTc1RkUxREYyMjExOTAwRDMxOEVDIC8q
IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzRFNzVGQjFERjFGRDEzMDBEMzE4RUMgLyogVXNlck1lZGlhUHJv
Y2Vzc01hbmFnZXIuaCAqLzsgfTsKIAkJMDc2RTg4NEUxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNv
bnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzZFODg0RDFBMTNDQURGMDA1RTkwRkMgLyogQVBJQ29udGV4dE1lbnVDbGllbnQu
aCAqLzsgfTsKQEAgLTE4NzQsNiArMTg3Niw4IEBACiAJCTAwQjk2NjE4MThFMjVBRTEwMENFMUY4
OCAvKiBGaW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGOUMxQzE3QkJFQTAw
M0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGOUQxQzE3QkJFQTAwM0YwNzM1
IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0ZBMDFDMTg2QURCMDAzRjA3MzUg
LyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MDc0RTc1RkIxREYxRkQxMzAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzMwLDYgKzczMzQsOCBAQAogCQkJCTQ2
QTJCNjA3MUU1Njc1QTIwMEMzREVEQSAvKiBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNz
VGltZXIuaCAqLywKIAkJCQlFMTUxM0M2NDE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNz
UHJveHkuY3BwICovLAogCQkJCUUxNTEzQzY1MTY2RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nl
c3NQcm94eS5oICovLAorCQkJCTA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5jcHAgKi8sCisJCQkJMDcyOTdGOUQxQzE3QkJFQTIyM0YwNzM1IC8qIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi8sCiAJCQkJQkMyNjUyMTIxMTgyNjA4MTAwMjQzRTEy
IC8qIERyYXdpbmdBcmVhUHJveHkuY3BwICovLAogCQkJCUJDMjY1MjEzMTE4MjYwODEwMDI0M0Ux
MiAvKiBEcmF3aW5nQXJlYVByb3h5LmggKi8sCiAJCQkJMUE2NDIyRkMxMkREMDhGRTAwQ0FBRTJD
IC8qIERyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC05MDA4LDYgKzkwMTQsNyBA
QAogCQkJCTFBQzc1MzgwMTgzQkU1MEYwMDcyQ0IxNSAvKiBEYXRhUmVmZXJlbmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzAzMkRBNjEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTdEQ0VEQUIyMTRDNjAwOTAwMTZCODQ3IC8qIERldmljZUlkZW50aXR5
U1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzI5N0Y5RjFDMTdCQkVBMDE1RjA3MzUgLyogRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzODkxQjZDMUE2OEMz
MEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzE4MTczNjEyMDU4NDI0NzAwREZEQTY1IC8qIERpc3BsYXlMaW5rLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzE0MjcwMjFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTA3ODYsNiArMTA3OTMsNyBAQAogCQkJCTJEOTJBNzdEMjEyQjZBNzEwMEY0OTNG
RCAvKiBDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzdFMjEyQjZBNzEw
MEY0OTNGRCAvKiBEYXRhUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzdG
MjEyQjZBNzEwMEY0OTNGRCAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3Mjk3
RjlFMUMxN0JCRUEwMTRGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUI3RDYxOTEyODhCOUQ5MDBDRkQwOEMgLyogRG93bmxvYWRQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjI5OTEyREQwMjkyMDBD
QUFFMkMgLyogRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE2NDIzMDgxMkREMDlFQjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggOTE1MTIzOTE0MTYyYWZlYmYwMWMzZjFiMjI1ZTRkZmNhYjMz
MWE3NC4uNTFmYzU1MmQzMmZiZTVkZDExZjVmZTg4MmIxNzMxODNhZGIyNWVkNiAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDE4LTA5LTI4ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IG5ldyBBUEkgdGVzdCBmb3IgdGhlIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzOgorICAg
ICAgICB1c2VybWVkaWEtZW51bWVyYXRlZGV2aWNlcy1wZXJtaXNzaW9uLWNoZWNrLgorCisgICAg
ICAgICogTWluaUJyb3dzZXIvZ3RrL21haW4uYzoKKyAgICAgICAgKGdvdFdlYnNpdGVEYXRhQ2Fs
bGJhY2spOiBBZGRlZCBhIG5ldyBzZWN0aW9uIHRvIHRoZSBhYm91dDpkYXRhCisgICAgICAgIHdl
YnBhZ2UgdG8gaW5jbHVkZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhc2ggc2FsdC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcDoK
KyAgICAgICAgKHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25D
aGVjayk6IEFkZGVkIHRoZQorICAgICAgICBuZXcgdGVzdCBjaGVja2luZyB0aGUgZW51bWVyYXRl
RGV2aWNlcyBBUEkgd2hlbiBwZXJtaXNzaW9uIGlzCisgICAgICAgIGRlbmllZCBhbmQgd2hlbiBw
ZXJtaXNzaW9uIGlzIGFsbG93ZWQgZm9yIHRoZSBvcmlnaW4uCisgICAgICAgIChiZWZvcmVBbGwp
OiBEZWZpbmVkIHRoZSBuZXcgdGVzdC4KKwogMjAxOC0wOS0yOCAgS29ieSBCb3lhbmdvICA8a29i
eS5iQG1jZS5zeXN0ZW1zPgogCiAgICAgICAgIFtXVEZdIEFkZCBFeHRlcm5hbFN0cmluZ0ltcGws
IGEgU3RyaW5nSW1wbCBmb3IgdXNlciBjb250cm9sbGVkIGJ1ZmZlcnMKZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5j
CmluZGV4IDU4NzAxZmM4NDJjZTU5NWQyNjg0NzYyYTRhMTNlYjE4NjQ4OWE0OTAuLjUxMzNhNGRk
NjFiOTJjZDUzMWRlOTM0OTgwOTMzMTE0NzA4M2ViMTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlC
cm93c2VyL2d0ay9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwpAQCAt
NDAyLDYgKzQwMiw3IEBAIHN0YXRpYyB2b2lkIGdvdFdlYnNpdGVEYXRhQ2FsbGJhY2soV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1CiAKICAgICBndWludDY0IHBh
Z2VJRCA9IHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2dldF93ZWJfdmlldyhkYXRhUmVxdWVzdC0+cmVxdWVzdCkpOwogICAgIGFib3V0RGF0YUZp
bGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkNvb2tpZXMiLCBXRUJLSVRf
V0VCU0lURV9EQVRBX0NPT0tJRVMsIE5VTEwsIHBhZ2VJRCk7CisgICAgYWJvdXREYXRhRmlsbFRh
YmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiRGV2aWNlIElkIEhhc2ggU2FsdCIs
IFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCwgTlVMTCwgcGFnZUlEKTsK
ICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJN
ZW1vcnkgQ2FjaGUiLCBXRUJLSVRfV0VCU0lURV9EQVRBX01FTU9SWV9DQUNIRSwgTlVMTCwgcGFn
ZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxp
c3QsICJEaXNrIENhY2hlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hFLCB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpLCBw
YWdlSUQpOwogICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRh
TGlzdCwgIlNlc3Npb24gU3RvcmFnZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFfU0VTU0lPTl9TVE9S
QUdFLCBOVUxMLCBwYWdlSUQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcAppbmRleCA2NjExMzc3M2UzYjQzODIxNThmOWQ5
YzRlY2I3MmJjOTY4MTMwOTVkLi5lNWI2YTg5ZTg0NTVmYzNiNTNiODAwZjJiMDA4NDhkZTdiMTJm
MWUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dFVJQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFVJQ2xpZW50LmNwcApAQCAtODM0LDYgKzgzNCw0NyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2Nv
bnN0cAogI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKIAogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1VzZXJNZWRpYUVudW1lcmF0ZURldmljZXNQ
ZXJtaXNzaW9uQ2hlY2soVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
dGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnYm9vbGVhbiBlbmFibGVkID0gd2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIFRSVUUpOworCisjaWYgUExBVEZPUk0o
R1RLKQorICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworI2VuZGlm
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJNZWRpYVJlcXVlc3RIVE1MID0KKyAgICAgICAg
IjxodG1sPiIKKyAgICAgICAgIiAgPHNjcmlwdD4iCisgICAgICAgICIgIGZ1bmN0aW9uIHJ1blRl
c3QoKSIKKyAgICAgICAgIiAgeyIKKyAgICAgICAgIiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2Vz
LmVudW1lcmF0ZURldmljZXMoKS50aGVuKCIKKyAgICAgICAgIiAgICAgICAgZnVuY3Rpb24oZGV2
aWNlcykgeyAiCisgICAgICAgICIgICAgICAgICAgICBkZXZpY2VzLmZvckVhY2goZnVuY3Rpb24o
ZGV2aWNlKSB7IgorICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZGV2aWNlLmxhYmVsKSBkb2N1bWVudC50aXRsZSA9IFwiT0tcIjsiCisgICAgICAgICIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRvY3VtZW50LnRpdGxl
ID0gXCJQZXJtaXNzaW9uIGRlbmllZFwiOyIKKyAgICAgICAgIiAgICAgICAgICAgIH0pIgorICAg
ICAgICAiICAgIH0pIgorICAgICAgICAiICB9IgorICAgICAgICAiICA8L3NjcmlwdD4iCisgICAg
ICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKKyAgICAgICAgIjwvaHRt
bD4iOworCisgICAgdGVzdC0+bV92ZXJpZnlNZWRpYVR5cGVzID0gVFJVRTsKKworICAgIC8vIFRl
c3QgZGVueWluZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlz
c2lvblJlcXVlc3RzID0gZmFsc2U7CisgICAgdGVzdC0+bG9hZEh0bWwodXNlck1lZGlhUmVxdWVz
dEhUTUwsIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKCJQZXJt
aXNzaW9uIGRlbmllZCIpOworCisgICAgLy8gVGVzdCBhbGxvd2luZyBhIHBlcm1pc3Npb24gcmVx
dWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0gdHJ1ZTsKKyAgICB0
ZXN0LT5sb2FkSHRtbCh1c2VyTWVkaWFSZXF1ZXN0SFRNTCwgbnVsbHB0cik7CisgICAgdGVzdC0+
d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIk9LIik7CisKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIGVuYWJsZWQpOworfQorCiBzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwpAQCAtMTE1Niw2ICsx
MTk3LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImdlb2xvY2F0aW9uLXBlcm1pc3Npb24tcmVxdWVzdHMiLCB0ZXN0V2ViVmlld0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidXNlcm1lZGlh
LWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjayIsIHRlc3RXZWJWaWV3VXNlck1lZGlh
RW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25DaGVjayk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAidXNlcm1lZGlhLXBlcm1pc3Npb24tcmVxdWVzdHMiLCB0ZXN0V2Vi
Vmlld1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiYXVkaW8tdXNlcm1lZGlhLXBlcm1pc3Npb24tcmVxdWVzdCIsIHRl
c3RXZWJWaWV3QXVkaW9Pbmx5VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RzKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDJjMGMyMjliY2FhZTk3OWFiZGFiY2E0YmY4MzYzZDlkYThkYzViNWIuLjAyNjRlMGE0
MWE4OGMzOTRmNTk2OWEyYmE3YTQxZmU1YjFiYzM0NGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAor
MjAxOC0wOS0yOCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUg
dGhlIGZhaWx1cmUgZXhwZWN0YXRpb24gZm9yIHRoZSB0ZXN0CisgICAgICAgIG1lZGlhLWRldmlj
ZXMtZW51bWVyYXRlLWRldmljZXMuaHRtbC4gSnVzdCBmb3IgdGhlIHJlY29yZCB3ZSBoYXZlCisg
ICAgICAgIGFsc28gc29sdmVkIHRoZSBmb2xsb3dpbmcgdGVzdHMsIGJ1dCB3ZSBhcmUgbm90IHJl
bW92aW5nIHRoZQorICAgICAgICBnZW5lcmFsIHNraXAgb2YgdGhlIG1lZGlhc3RyZWFtIGRpcmVj
dG9yeSB1bnRpbCB0aGUgbmV4dCBwYXRjaDoKKworICAgICAgICBmYXN0L21lZGlhc3RyZWFtL21l
ZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmljZXMuaHRtbAorICAgICAgICBmYXN0L21lZGlhc3Ry
ZWFtL3Jlc291cmNlcy9lbnVtZXJhdGUtZGV2aWNlcy1mcmFtZS5odG1sCisgICAgICAgIGh0dHAv
dGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2VudW1lcmF0ZS1kZXZpY2VzLXNvdXJjZS1pZC5odG1s
CisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2VudW1lcmF0ZS1kZXZpY2Vz
LXNvdXJjZS1pZC1wZXJzaXN0ZW50Lmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRp
YS1zdHJlYW0vcmVzb3VyY2VzL2VudW1lcmF0ZS1kZXZpY2VzLXNvdXJjZS1pZC1mcmFtZS5odG1s
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxOC0wOS0y
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04g
KHIyMzY1NzMpOiBbaU9TXSBMYXlvdXQgdGVzdCBlZGl0aW5nL3Bhc3RlYm9hcmQvZW1hY3MtY3Ry
bC1hLWsteS5odG1sIGlzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMKaW5kZXggNThlN2UyODFjNTUwZmEzOThkNDU4ZmQ4OTMzYmRhNTg3NDg2MDI4Yi4u
MjI3YzAyMTI5MzZhYWRkZWJhMTU1MTIzMzgzMmFmOWIwZTA2Mjg3NiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTYzOSw3ICs2MzksNiBAQCB3ZWJraXQu
b3JnL2IvNzkyMDMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUt
c3RyZWFtcy9NZWRpYVN0cgogd2Via2l0Lm9yZy9iLzE1MTM0NCBmYXN0L21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLWFkZC1lbmRlZC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQogIyBDcmFzaCBpcyBi
dWcgIzE3NjgwMQogd2Via2l0Lm9yZy9iLzE2MDk5NiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtLXZpZGVvLWVsZW1lbnQtdmlkZW8tdHJhY2tzLWRpc2FibGVkLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzIyNjkgZmFzdC9tZWRpYXN0cmVhbS9tZWRp
YS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi8xNzMyNTcgZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtZ3JhbnQtcGVyc2lzdGVuY3kz
Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiAjIENhbnZhcyBjYXB0dXJlU3RyZWFtIHN1cHBvcnQg
aXMgbm90IGltcGxlbWVudGVkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351081</attachid>
            <date>2018-09-28 09:20:14 -0700</date>
            <delta_ts>2018-10-03 09:03:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20180928182012.patch</filename>
            <type>text/plain</type>
            <size>80230</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBhZjg3NDFhYTFjZmRj
MTU5MGI4MTczODNiMGI2YTU0N2Q5MTYwYi4uYWYyNjA4MTNmMmMxM2QzYzExNzQ0NGI5ZmIzOGI4
Yzk4OTQ5ZGM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA5LTI4ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMg
aWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lzdGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4K
KwogMjAxOC0wOS0yNyAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CiAK
ICAgICAgICAgW0N1cmxdIEZpeCBwcmlvcml0eSBpc3N1ZSB3aXRoIG11bHRpcGxlIGNvb2tpZXMg
d2l0aCBkaWZmZXJlbnQgbGV2ZWwgb2YgcGF0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGNjNzU2OTNiMTRhMWY2
MDg1YmI1ZjM3YTg0N2ZjMWNiZmIzOGU5OC4uZGQwMzQ0NjE4OTMyZWJkMDkyM2RhYjdmMTEyMjk0
Njk2NzUwZWZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjMgQEAKKzIwMTgtMDktMjggIEFsZWph
bmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBB
ZGQgbWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMgc3VwcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1NzYxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGhlIGVudW1lcmF0
ZURldmljZXMgQVBJIHVzaW5nIGEgbmV3IFdlYktpdCBjbGFzcworICAgICAgICAoRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UpIHRoYXQgZ2VuZXJhdGVzIGFuZCBzdG9yZXMgdGhlIGRldmljZSBpZHMK
KyAgICAgICAgaGFzaCBzYWx0cyBwZXIgb3JpZ2luLCB1c2VkIHRvIGF2b2lkIGZpbmdlcnByaW50
aW5nIGluIHRoZQorICAgICAgICB3ZWJwYWdlcy4gVGhlIGhhc2ggc2FsdHMgYXJlIHBlcnNpc3Rl
bnQgd2hlbiB0aGUgd2VicGFnZSBpcyBub3QKKyAgICAgICAgZXBoZW1lcmFsLCB0aGV5IHVzZSBh
IG5ldyBkaXJlY3Rvcnkgd2hlcmUgYSBmaWxlIGlzIHN0b3JlZCB3aXRoCisgICAgICAgIHRoZSBT
ZWN1cml0eU9yaWdpbiBpZCBhcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhbmQgdGhlIGhhc2ggc2Fs
dCBhcworICAgICAgICB0aGUgY29udGVudCBvZiB0aGUgZmlsZS4KKworICAgICAgICBUaGUgcGF0
Y2ggYWxzbyBhZGRzIGEgbmV3IHR5cGUgb2YgZGF0YSBmb3IgdGhlIFdlYnNpdGVEYXRhU3RvcmUu
CisgICAgICAgIFRoYXQgd2F5IHRoZSB1c2VycyBjYW4gY2FsbCB0aGUgV2Vic2l0ZURhdGFTdG9y
ZSB0byBzaG93IHdoYXQKKyAgICAgICAgb3JpZ2lucyBoYXZlIGhhc2ggc2FsdCBnZW5lcmF0ZWQg
YW5kIHJlbW92ZSB0aGVtIGF0IHNvbWUgcG9pbnQuCisKKyAgICAgICAgVGhlIERldmljZUhhc2hT
YWx0U3RvcmFnZSBjbGFzcyByZWFkcyB0aGUgaW5mb3JtYXRpb24gaW4gZGlzayB3aGVuCisgICAg
ICAgIGl0IGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZXMgdGhlIGRpc2sgc3RvcmFnZSB3aGVuIHNvbWUg
bW9kaWZpY2F0aW9uCisgICAgICAgIGlzIGRldGVjdGVkLiBJdCBpcyBhbHNvIHVzZWQgYXMgdGhl
IGRlbGVnYXRlIG9mIHRoZSBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAgIEFQSSB0byByZW1vdmUg
dGhlIHN0b3JlZCBoYXNoIHNhbHRzLgorCisgICAgICAgIEZvciB0aGUgbW9tZW50IGp1c3QgR1RL
KyBhbmQgV1BFIHBvcnRzIGFyZSB1c2luZyB0aGlzIGNsYXNzIHRvCisgICAgICAgIGdlbmVyYXRl
IHRoZSBoYXNoIHNhbHRzLiBUaGUgcGF0Y2ggYWRkcyBjb2RlIHRvIHRoZQorICAgICAgICBjaGVj
a1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4gQVBJIGltcGxlbWVudGF0aW9uLCBpdCB3YXMg
ZW1wdHkKKyAgICAgICAgdW50aWwgbm93IGZvciB0aGVzZSBwb3J0cy4gSW4gdGhpcyBmdW5jdGlv
biB3ZSBjcmVhdGUgYW4gaW5zdGFuY2UKKyAgICAgICAgb2YgYSBuZXcgY2xhc3MgV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHRoYXQgaW1wbGVtZW50cworICAgICAgICB0aGUgV2Vi
S2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSBpbnRlcmZhY2UsIHRoYXQgYWxsb3dzIHRoZSBwb3J0
cworICAgICAgICB0byB1c2UgdGhlIGN1cnJlbnQgcGVybWlzc2lvbiBtYW5hZ2VycyBpbXBsZW1l
bnRlZCBpbiB0aGUKKyAgICAgICAgZW1iZWRkZXJzIHRvIGhhbmRsZSB0aGlzIG5ldyBraW5kIG9m
IHJlcXVlc3QgdGhlIHdheSB0aGV5IGxpa2UKKyAgICAgICAgaXQuIFRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGlzIGRlbnkuCisKKyAgICAgICAgVGhlIGNsYXNzIFdlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdCB0YWtlcyBjYXJlIG9mCisgICAgICAgIGNvbnRhY3RpbmcgdGhlIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlIGFuZCByZXF1ZXN0L3JlZ2VuZXJhdGUgdGhlCisgICAgICAg
IGhhc2ggc2FsdHMgYWNjb3JkaW5nbHkuCisKKyAgICAgICAgVGhlcmUgaXMgb25lIGFkZGl0aW9u
IHRvIHRoZSBnZW5lcmFsIEFQSSB0byBoYW5kbGUgdGhlIGxvY2F0aW9uIG9mCisgICAgICAgIHRo
ZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGZpbGVzIGFyZSBzdG9yZWQgdG8gbWFrZSB0aGUgaGFzaCBz
YWx0CisgICAgICAgIHBlcnNpc3RlbnQuCisKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFUeXBlLmg6IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaWRl
IGRhdGE6IERldmljZUlkSGFzaFNhbHQuCisgICAgICAgICogU291cmNlcy50eHQ6IEFkZGVkIG5l
dyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDogRGl0dG8u
CisgICAgICAgICogU291cmNlc1dQRS50eHQ6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKEFQSTo6UHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGVXaXRoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24pOgorICAgICAgICBBZGRlZCBhIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RvcnkgdXNlZCB0byBz
dG9yZSB0aGUgaGFzaCBzYWx0cy4KKyAgICAgICAgKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKEFQSTo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjb3B5KTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaDogQWRkZWQgQVBJIHRvCisgICAgICAg
IHJldHJpZXZlIGFuZCBzZXQgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgaGFzaCBzYWx0cy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAg
ICAoQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpsZWdhY3lEZWZhdWx0RGF0YVN0b3JlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIEluaXRpYWxpemUgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0byBz
dG9yZSB0aGUgaGFzaCBzYWx0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVE
YXRhU3RvcmUuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL0FQSVdlYnNp
dGVEYXRhU3RvcmVHTGliLmNwcDoKKyAgICAgICAgKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSk6CisgICAgICAgIEFkZGVkIHRo
ZSBkZWZhdWx0IG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIEdUSysgYW5kIFdQRSBwb3J0
cy4KKyAgICAgICAgKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVmYXVsdERldmljZUlk
SGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSk6IERpdHRvLgorICAgICAgICAoQVBJOjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlQ29uZmlndXJhdGlvbik6IEluaXRpYWxpemUKKyAg
ICAgICAgdGhlIGRlZmF1bHQgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGZvciB0aGUgY29uZmlndXJh
dGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0LmNwcDogQWRkZWQKKyAgICAgICAgdGhpcyBjbGFzcyB0byByZXByZXNlbnQg
YSByZXF1ZXN0IG9mIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZQorICAgICAgICBkZXZpY2VzIGlu
Zm9ybWF0aW9uLiBUaGlzIGlzIHNwZWNpZmljIGZvciBnbGliIHBvcnRzIGFuZCBpbXBsZW1lbnRz
CisgICAgICAgIHRoZSBwb2xpY2llcyByZWdhcmRpbmcgdGhlIGhhc2ggc2FsdHMgd2hlbiB0aGUg
ZW1iZWRkZXIgYWxsb3dzIG9yCisgICAgICAgIGRlbmllcyB0aGUgYWNjZXNzIHVzaW5nIHRoZSBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBjbGFzcy4KKyAgICAgICAgKHdlYmtpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdEFsbG93KTogR2V0IHRoZSBkZXZpY2UgaGFzaCBzYWx0CisgICAgICAg
IHdoZW4gdGhlIG9yaWdpbiBpcyBhbGxvd2VkIGFuZCBzZXQgaXQgaW4gdGhlIG9yaWdpbmFsIHJl
cXVlc3QuCisgICAgICAgICh3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REZW55KTog
UmVnZW5lcmF0ZSB0aGUgZGV2aWNlIGlkCisgICAgICAgIGhhc2ggc2FsdCB3aGVuIHRoZSB1c2Vy
IGRvZXMgbm90IGFsbG93IHRvIGFjY2VzcyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uLgorICAgICAg
ICAod2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdCk6CisgICAgICAgICh3
ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REaXNwb3NlKToKKyAgICAgICAgKHdlYmtp
dF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3
ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUpOiBDcmVhdGUgdGhlIGNsYXNz
IHVzaW5nCisgICAgICAgIHRoZSBwcm94eSByZXF1ZXN0IGZyb20gdGhlIHdlYnByb2Nlc3MgYW5k
IGEgcmVmZXJlbmNlIHRvIHRoZQorICAgICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0UHJpdmF0ZS5oOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0VUlDbGllbnQuY3BwOiBBZGRlZCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
Zm9yIHRoZSBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4gQVBJIGZvciB0aGUgZ2xp
YiBwb3J0cywKKyAgICAgICAgaXQgY3JlYXRlcyB0aGUgZGV2aWNlIGluZm8gcmVxdWVzdCBhbmQg
Y2FsbHMgdGhlIHBlcm1pc3Npb24KKyAgICAgICAgcmVxdWVzdCBBUEkuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb25Gb3JXZWJQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24pOgorICAg
ICAgICBBZGRzIHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGhhc2ggc2FsdHMuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhLmNwcDoKKyAgICAgICAgKHRv
V2ViS2l0V2Vic2l0ZURhdGFUeXBlcyk6IEFkZGVkIHRoZSBjb252ZXJzaW9uIGZyb20gdGhlIFdl
YktpdAorICAgICAgICB0eXBlcyB0byB0aGUgZ2xpYiB0eXBlcyBmb3IgdGhlIFdlYnNpdGVEYXRh
VHlwZTo6RGV2aWNlSWRIYXNoU2FsdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZSk6IEFkZGVkIHRoZSBkaXJlY3RvcnkgdG8KKyAgICAgICAgc3RvcmUg
dGhlIGhhc2ggc2FsdHMuCisgICAgICAgICh0b1dlYnNpdGVEYXRhVHlwZXMpOiBBZGRlZCB0aGUg
Y29udmVyc2lvbiBmcm9tIHRoZSBnbGliIHR5cGUKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFU
QV9ERVZJQ0VfSURfSEFTSF9TQUxUIHRvIHRoZSBXZWJLaXQgdHlwZS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaDogQWRkZWQK
KyAgICAgICAgdGhpcyBuZXcgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgcGVybWlzc2lvbiByZXF1
ZXN0IGZvciB0aGUgZGV2aWNlCisgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBHVEsrIHBvcnQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaDogQWRkZWQg
dGhlIG5ldyB0eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgR1RLKyBwb3J0Ogor
ICAgICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmg6
IEFkZGVkCisgICAgICAgIHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHBlcm1pc3Np
b24gcmVxdWVzdCBmb3IgdGhlIGRldmljZQorICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgV1BF
IHBvcnQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaDog
QWRkZWQgdGhlIG5ldyB0eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgV1BFIHBv
cnQ6CisgICAgICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eS5jcHA6IEFkZGVkCisgICAgICAgIGFuIGluY2x1ZGUgdG8gc29sdmUgY29tcGlsYXRpb24g
aXNzdWUgd2l0aCB0aGUgdW5pZmllZCBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwOiBBZGRlZCB0aGlzIG5ldyBjbGFzcyB0aGF0Cisg
ICAgICAgIGhhbmRsZXMgaG93IHRvIGdlbmVyYXRlIGFuZCBzdG9yZSB0aGUgaGFzaCBzYWx0cyBp
bnNpZGUgV2ViS2l0LiBJdAorICAgICAgICB1c2VzIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgbGlz
dCBvZiBmaWxlcyB0byBzdG9yZSB0aGUgaGFzaCBzYWx0cworICAgICAgICBwZXJzaXN0ZW50bHkg
aW4gdGhlIGRpc2suCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlOjps
b2FkU3RvcmFnZUZyb21EaXNrKTogSXQgcmVhZHMgZmlsZXMKKyAgICAgICAgaW4gdGhlIGRpc2sg
dG8gcmVzdG9yZSB0aGUgbWFwIG9mIGhhc2ggc2FsdCBvcmlnaW5zLgorICAgICAgICAoV2ViS2l0
OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6c3RvcmVIYXNoU2FsdFRvRGlzayk6IFNhdmVzIGFu
CisgICAgICAgIG9yaWdpbiBhbmQgaXRzIGhhc2ggc2FsdCB0byB0aGUgZGlzay4KKyAgICAgICAg
KFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkZW50aWZpZXJIYXNo
U2FsdEZvck9yaWdpbik6CisgICAgICAgIENoZWNrIHRoZSBtYXAgdG8gZ2V0IHRoZSBoYXNoIHNh
bHQgZm9yIGFuIG9yaWdpbiwgaWYgdGhlcmUgaXMgbm9uZQorICAgICAgICBjcmVhdGUgYSBuZXcg
cmFuZG9tIG9uZS4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnJl
Z2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAgICBEZWxl
dGUgdGhlIGhhc2ggc2FsdCBvZiBhbiBvcmlnaW4gaWYgaXQgYWxyZWFkeSBleGlzdHMgYW5kIGNy
ZWF0ZSBhIG5ldyBvbmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdl
OjpzZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAgICBTZXQgdGhl
IGhhc2ggc2FsdCBvZiBhbiBvcmlnaW4gaW4gdGhlIG1hcCwgaWYgdGhlIG1hcCBhbHJlYWR5IGhh
cworICAgICAgICB0aGF0IG9yaWdpbiBpdCByZXBsYWNlcyB0aGUgaGFzaCBzYWx0LCBpbiBvdGhl
ciBjYXNlIGl0IGNyZWF0ZXMgYQorICAgICAgICBuZXcgcmVnaXN0ZXIgaW4gdGhlIG1hcC4KKyAg
ICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkSGFzaFNh
bHRPcmlnaW5zKToKKyAgICAgICAgUmV0dXJucyB0aGUgbGlzdCBvZiBvcmlnaW5zIHRoYXQgaGF2
ZSBhIGhhc2ggc2FsdCBnZW5lcmF0ZWQgZm9yCisgICAgICAgIHRoZW0uIEl0IGlzIHVzZWQgaW4g
dGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpkZWxldGVIYXNoU2FsdEZyb21EaXNrSWZOZWVkZWQpOgorICAgICAgICBEZWxldGVz
IHRoZSBmaWxlcyBpbiBkaXNrIHJlcHJlc2VudGluZyBhIGhhc2ggc2FsdCBmb3IgYW4gb3JpZ2lu
LgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNl
SWRIYXNoU2FsdEZvck9yaWdpbnMpOgorICAgICAgICBEZWxldGVzIHRoZSBoYXNoIHNhbHRzIGlu
IHRoZSBtYXAgZm9yIGFuIG9yaWdpbi4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2U6OmRlbGV0ZURldmljZUlkSGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZSk6Cisg
ICAgICAgIERlbGV0ZSB0aGUgb3JpZ2lucyB0aGF0IGhhdmUgbm90IGJlZW4gbW9kaWZpZWQgc2lu
Y2UgYSB0aW1lLgorICAgICAgICAqIFVJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5o
OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJv
eHkuaDogUmVtb3ZlIHVuZWVkZWQgY2xhc3MKKyAgICAgICAgZGVmaW5pdGlvbi4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpsZWdhY3lX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbik6IEFkZGVkIGRpcmVjdG95CisgICAgICAgIGlu
aXRpYWxpemF0aW9uIGZvciB0aGUgaGFzaCBzYWx0cyBzdG9yZWQgaW4gZGlzay4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6IEFkZGVkIHN1cHBv
cnQgdG8KKyAgICAgICAgcmV0dXJuIGFuZCByZW1vdmUgdGhlIG9yaWdpbnMgd2l0aCBhIGdlbmVy
YXRlIGhhc2ggc2FsdCB1c2VkIHRvCisgICAgICAgIGdlbmVyYXRlIHRoZSBkZXZpY2UgaWRzLgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKTogQWRk
ZWQgdGhlIG5ldworICAgICAgICByZWZlcmVuY2UgdG8gdGhlIERldmljZUlkSGFzaFNhbHRTdG9y
YWdlIGNsYXNzLCB1c2VkIHRvIGhhbmRsZSB0aGUKKyAgICAgICAgaGFzaCBzYWx0cy4KKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkpOiBIYW5kbGUKKyAgICAgICAgdGhlIG5ldyBkaXJlY3RvcnkgdXNlZCBmb3IgdGhlIGhhc2gg
c2FsdHMgc3RvcmFnZSBpbiBkaXNrLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpmZXRjaERhdGFBbmRBcHBseSk6IEdldCB0aGUgbGlzdCBvZgorICAgICAgICBvcmlnaW5zIHdp
dGggYSBoYXNoIHNhbHRzIGluIHRoZSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS4KKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6IFJlbW92ZSB0aGUgaGFzaCBz
YWx0cyBpbgorICAgICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBmb3IgYW4gb3JpZ2luLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlZERldmljZUlkSGFz
aFNhbHRzRGlyZWN0b3J5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZCB0aGUKKyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UgdG8gdGhlIGNvbXBpbGF0aW9uLgorCiAyMDE4LTA5LTI4ICBGdWppaSBIaXJvbm9yaSAgPEhp
cm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gZXJyb3IgQzIwMjc6
IHVzZSBvZiB1bmRlZmluZWQgdHlwZSAnV1RGOjpFbnVtVHJhaXRzPEU+JyB3aGlsZSBjb21waWxp
bmcgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmlu
ZGV4IGUyYzViZjcwYTI2NzI0ZmQwNTdjOWE2YWU0NjFhZDVhZGE1M2Y5ZTAuLmJjNjlhNDU0NTE0
ZmRlZDFkMWI0ODA0MTA3NTIyY2I4NGRlYmE2MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAt
ODEsOSArODEsNyBAQCB2b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQo
KQogCiB2b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJl
ZjxNZWRpYURldmljZUluZm8+PiYgZGV2aWNlcykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0g
ICAgVU5VU0VEX1BBUkFNKGRldmljZXMpOwotI2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAg
c3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAg
QEAgdm9pZCBNZWRpYURldmljZXNSZXF1ZXN0OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8
TWVkaWFEZXZpY2VJbmZvPj4mIGRldmljZXMKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGlj
IGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJh
Q291bnQgPSAxOworI2VuZGlmCisKICAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bo
b25lQ291bnQgPSAxOwogCiAgICAgaW50IGNhbWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUs
OCBAQCB2b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJl
ZjxNZWRpYURldmljZUluZm8+PiYgZGV2aWNlcwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9KTsKLQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFU
eXBlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUu
aAppbmRleCA5ZDUwMzYxZTgxYTM3YmQ5NDAyZGU5MWMxYzUzOTU4NGVhYWE2MmRlLi42MDFiYjQ0
MzY3YmYxNWJlY2ViOWJiMWI2ZGIzYmU3Nzc0NjY4YTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaApAQCAtNDksNiArNDksNyBA
QCBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZSB7CiAgICAgU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbnMgPSAxIDw8IDE0LAogI2VuZGlmCiAgICAgRE9NQ2FjaGUgPSAxIDw8IDE1LAorICAgIERl
dmljZUlkSGFzaFNhbHQgPSAxIDw8IDE2LAogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGZjY2Ez
YzU0OGFjZDY3NmI4YzYxMjA5MjIyYzU3YWVlNTZlZmVjNGQuLjViYzYzNjNlYjQ5NzY4YWJhNmE4
YWU3MzE5ZmIzNTg2YmE1NjJkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjMzLDYgKzIzMyw3IEBAIFVJ
UHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RQcm94eS5jcHAKIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorVUlQcm9jZXNz
L0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24u
Y3BwCiBVSVByb2Nlc3MvUHJvY2Vzc1Rocm90dGxlci5jcHAKIFVJUHJvY2Vzcy9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IGM0NWNhZmU2YzNmYmQzMDEx
N2Y4ZDIxNzY5YWQ5M2ViNmQ3NGQ4N2MuLjE0MmU4NDA2M2M0OGZiZjVjNmRlYjJkMTQ1MzgwMjJm
ZGRiZjMyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtMTM1LDYgKzEzNSw3IEBAIFVJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q3JlZGVudGlhbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREb3dubG9hZENsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0RWRpdG9yU3RhdGUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQ
RS50eHQKaW5kZXggZjljZjM3MTc1YjZmOTlmNWZiNTI5ZWEyMGQwMGExMTc0MzY1NWYyMy4uZjM2
YTk0NjU0M2U4ZTc1YTA1MGNhNTJjNThhMDFlM2NhYTQ1MmMzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0
CkBAIC0xMjIsNiArMTIyLDcgQEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51
Q2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5h
Z2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNw
cCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0RG93bmxvYWQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25s
b2FkQ2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JT
dGF0ZS5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCmluZGV4IGMxMTNlZDgzMWU2
NTJjMzVmNTFkZGU0NTU0Mjg0NTliZDg3NWRiNmIuLmJmMDc3NDczODY5NzZiNjMxNmE4NmRkZDM4
Yjc5MmFkOTFiNjg4M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBA
IFJlZjxQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+IFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6
Y3JlYXRlV2l0aFdlYnNpdGVEYXRhU3RvCiAgICAgY29uZmlndXJhdGlvbi0+bV9pbmRleGVkREJE
YXRhYmFzZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1bHRJbmRleGVk
REJEYXRhYmFzZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24tPm1fbG9jYWxTdG9yYWdl
RGlyZWN0b3J5ID0gbGVnYWN5Q29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAg
ICAgY29uZmlndXJhdGlvbi0+bV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbGVnYWN5Q29u
ZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OworICAgIGNvbmZpZ3VyYXRpb24t
Pm1fZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gbGVnYWN5Q29uZmlndXJhdGlv
bi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgY29uZmlndXJhdGlvbi0+
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbGVnYWN5Q29uZmlndXJhdGlvbi5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwogICAgIGNvbmZpZ3VyYXRpb24tPm1fd2Vi
U1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBsZWdhY3lDb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNl
RGlyZWN0b3J5OwogICAgIGNvbmZpZ3VyYXRpb24tPm1famF2YVNjcmlwdENvbmZpZ3VyYXRpb25E
aXJlY3RvcnkgPSBsZWdhY3lDb25maWd1cmF0aW9uLmphdmFTY3JpcHRDb25maWd1cmF0aW9uRGly
ZWN0b3J5OwpAQCAtNzQsNiArNzUsNyBAQCBQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbigpCiAgICAgLCBtX2xvY2FsU3RvcmFnZURpcmVjdG9yeShXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkpCiAgICAgLCBtX3dl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRXZWJTUUxEYXRh
YmFzZURpcmVjdG9yeSgpKQogICAgICwgbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkpCisgICAgLCBt
X2RldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeShXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkpCiAgICAgLCBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKSkKICAgICAsIG1famF2YVNjcmlwdENvbmZpZ3VyYXRp
b25EaXJlY3RvcnkoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0
aW9uRGlyZWN0b3J5KCkpCiB7CkBAIC0xMDAsNiArMTAyLDcgQEAgUmVmPFByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbj4gUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjb3B5KCkKICAgICBjb3B5LT5t
X2luamVjdGVkQnVuZGxlUGF0aCA9IHRoaXMtPm1faW5qZWN0ZWRCdW5kbGVQYXRoOwogICAgIGNv
cHktPm1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+bV9sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnk7CiAgICAgY29weS0+bV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+bV9tZWRp
YUtleXNTdG9yYWdlRGlyZWN0b3J5OworICAgIGNvcHktPm1fZGV2aWNlSWRIYXNoU2FsdHNTdG9y
YWdlRGlyZWN0b3J5ID0gdGhpcy0+bV9kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7
CiAgICAgY29weS0+bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gdGhpcy0+bV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwogICAgIGNvcHktPm1famF2YVNjcmlwdENv
bmZpZ3VyYXRpb25EaXJlY3RvcnkgPSB0aGlzLT5tX2phdmFTY3JpcHRDb25maWd1cmF0aW9uRGly
ZWN0b3J5OwogICAgIGNvcHktPm1fd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSB0aGlzLT5tX3dl
YlNRTERhdGFiYXNlRGlyZWN0b3J5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCmluZGV4IDQ1YjFiNzUwNmE1
NDViYzk1YzI1YmNiYjA2NDNiM2MzZTVkMjcxNDIuLjk4NjAxZmJmMjNjMDU2MWNkZjk0OGEzM2Fl
MmEzODdiZWIwYTkzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgKQEAgLTkxLDYgKzkxLDkgQEAgcHVi
bGljOgogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OyB9CiAgICAgdm9pZCBz
ZXRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFdURjo6U3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5KSB7IG1fbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KIAorICAgIGNvbnN0IFdURjo6U3RyaW5nJiBkZXZpY2VJZEhh
c2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2RldmljZUlkSGFzaFNh
bHRzU3RvcmFnZURpcmVjdG9yeTsgfQorICAgIHZvaWQgc2V0RGV2aWNlSWRIYXNoU2FsdHNTdG9y
YWdlRGlyZWN0b3J5KGNvbnN0IFdURjo6U3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VE
aXJlY3RvcnkpIHsgbV9kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkgPSBkZXZpY2VJ
ZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KKwogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OyB9CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KGNvbnN0IFdURjo6U3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KSB7IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7IH0KIApAQCAtMTgwLDYgKzE4Myw3IEBAIHByaXZhdGU6
CiAgICAgV1RGOjpTdHJpbmcgbV9sb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgV1RGOjpTdHJp
bmcgbV93ZWJTUUxEYXRhYmFzZURpcmVjdG9yeTsKICAgICBXVEY6OlN0cmluZyBtX21lZGlhS2V5
c1N0b3JhZ2VEaXJlY3Rvcnk7CisgICAgV1RGOjpTdHJpbmcgbV9kZXZpY2VJZEhhc2hTYWx0c1N0
b3JhZ2VEaXJlY3Rvcnk7CiAgICAgV1RGOjpTdHJpbmcgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5OwogICAgIFdURjo6U3RyaW5nIG1famF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJl
Y3Rvcnk7CiAgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX2NhY2hlUGFydGl0aW9uZWRVUkxTY2hl
bWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVE
YXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRh
U3RvcmUuY3BwCmluZGV4IGEzZWMyNWQwZGY2Yjg2N2RjOTBjZTE4NGE4NDZiMDdlMmE5OWUyMzEu
LmU0MWZiYmQ1NGY2ZDkwY2ExMmQyMjhiYzNkZTA0NDRjYWFlYzgyYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTEy
OCw2ICsxMjgsNyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gV2Vi
c2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVmYXVsdERhdGFTdG9yZQogICAgIGNvbmZpZ3VyYXRpb24u
bmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9y
eSgpOwogICAgIGNvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVjdG9yeSA9IGxlZ2FjeURlZmF1
bHRNZWRpYUNhY2hlRGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsK
KyAgICBjb25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IGxl
Z2FjeURlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBjb25m
aWd1cmF0aW9uLmluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdEluZGV4
ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFz
ZURpcmVjdG9yeSA9IGxlZ2FjeURlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOwogICAg
IGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdExvY2Fs
U3RvcmFnZURpcmVjdG9yeSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElXZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggNjZlZmE1ODc2MGE3ZmU3ZTFmYzI2N2RjYzQ1MjI3
MzI5ZmRkMjgzYS4uYTlmMDc0OWZhZWQ5ZTk3NmRmNzU4ZjhiOWQwY2U0NmVmMDAwNDgwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9yZS5o
CkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgZGVmYXVs
dFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RGOjpT
dHJpbmcgZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0
cmluZyBkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBXVEY6
OlN0cmluZyBkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAg
c3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOwogICAg
IHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0SmF2YVNjcmlwdENvbmZpZ3VyYXRp
b25EaXJlY3RvcnkoKTsKQEAgLTczLDYgKzc0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBXVEY6
OlN0cmluZyBsZWdhY3lEZWZhdWx0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBz
dGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5RGVmYXVsdFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCk7
CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGxlZ2FjeURlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5KCk7CisgICAgc3RhdGljIFdURjo6U3RyaW5nIGxlZ2FjeURlZmF1bHREZXZpY2VJZEhh
c2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5
RGVmYXVsdE1lZGlhQ2FjaGVEaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVn
YWN5RGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0FQSVdlYnNpdGVEYXRhU3RvcmVH
TGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0FQSVdlYnNpdGVEYXRh
U3RvcmVHTGliLmNwcAppbmRleCAzMTk2ODQ3MjZmOWMyZjYxY2VkZjYxM2VlMGIxNWMyZGEzOTY3
ZjU5Li5jNGRlNjU5MTE4M2RkMzk2ZDJiNTI0MjcwNmI3MWQ4ZGZiMzU4MjYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9BUElXZWJzaXRlRGF0YVN0b3JlR0xp
Yi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvQVBJV2Vic2l0ZURh
dGFTdG9yZUdMaWIuY3BwCkBAIC03Myw2ICs3MywxMiBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpCiAgICAgcmV0dXJuIHdl
YnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKEJBU0VfRElSRUNUT1JZ
IEdfRElSX1NFUEFSQVRPUl9TICJtZWRpYWtleXMiKTsKIH0KIAorCitTdHJpbmcgV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCit7Cisg
ICAgcmV0dXJuIHdlYnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKEJB
U0VfRElSRUNUT1JZIEdfRElSX1NFUEFSQVRPUl9TICJkZXZpY2VpZGhhc2hzYWx0cyIpOworfQor
CiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKQogewogICAgIHJldHVybiB3ZWJzaXRlRGF0YURpcmVjdG9yeUZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihCQVNFX0RJUkVDVE9SWSBHX0RJUl9TRVBBUkFUT1JfUyAiZGF0YWJhc2VzIik7
CkBAIC0xNTYsNiArMTYyLDE1IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2Fj
eURlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkKICAgICByZXR1cm4gZGVmYXVsdE1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKIH0KIAorU3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6
OmxlZ2FjeURlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQoreworI2lm
IFBMQVRGT1JNKFdQRSkKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBkZXZpY2VJZEhhc2hTYWx0c1N0
b3JhZ2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3
cGUiLCAiZGV2aWNlaWRoYXNoc2FsdHMiLCBudWxscHRyKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OkZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGV2aWNlSWRI
YXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5LmdldCgpKTsKKyNlbmRpZgorICAgIHJldHVybiBkZWZh
dWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7Cit9CisKIFdURjo6U3RyaW5n
IFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRp
cmVjdG9yeSgpCiB7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gamF2YVNjcmlwdENvcmVDb25maWdE
aXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksIEJBU0VfRElS
RUNUT1JZLCAiSmF2YVNjcmlwdENvcmVEZWJ1ZyIsIG51bGxwdHIpKTsKQEAgLTE3NCw2ICsxODks
NyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUNvbmZpZwogICAgIGNvbmZpZ3VyYXRpb24ud2ViU1FMRGF0
YWJhc2VEaXJlY3RvcnkgPSBkZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBj
b25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGRlZmF1bHRMb2NhbFN0b3JhZ2VE
aXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnkg
PSBkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGNvbmZpZ3VyYXRpb24u
ZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gZGVmYXVsdERldmljZUlkSGFzaFNh
bHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24ucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeSA9IGRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KCk7CiAKICAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZjA4N2Q2NmU3ZDliYWRhYzExOGE4YzEw
YzJmN2JhY2IyOWYzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwCkBAIC0wLDAg
KzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCIKKworI2luY2x1ZGUgIlVzZXJNZWRp
YVBlcm1pc3Npb25DaGVja1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFBlcm1pc3Npb25SZXF1ZXN0
LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4t
bGliLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJl
cXVlc3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSBwZXJtaXNzaW9uIHJlcXVlc3QgZm9yIGFj
Y2Vzc2luZyB1c2VyJ3MgYXVkaW8vdmlkZW8gZGV2aWNlcy4KKyAqIEBUaXRsZTogV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRQZXJtaXNzaW9u
UmVxdWVzdCwgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBXZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdCByZXByZXNlbnRzIGEgcmVxdWVzdCBmb3IKKyAqIHBlcm1pc3Npb24gdG8gd2hldGhl
ciBXZWJLaXQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSB1c2VyJ3MKKyAqIGRldmlj
ZXMgaW5mb3JtYXRpb24gd2hlbiByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUgZW51bWVyYWNlRGV2aWNl
cyBBUEkuCisgKgorICogV2hlbiBhIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCBp
cyBub3QgaGFuZGxlZCBieSB0aGUgdXNlciwKKyAqIGl0IGlzIGRlbmllZCBieSBkZWZhdWx0Lgor
ICoKKyAqIFNpbmNlOiAyLjIyCisgKi8KKworc3RhdGljIHZvaWQgd2Via2l0X3Blcm1pc3Npb25f
cmVxdWVzdF9pbnRlcmZhY2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElmYWNlKik7CisK
K3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSB7CisgICAg
UmVmUHRyPFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5PiByZXF1ZXN0OworICAgIFJlZlB0
cjxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4gZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CisgICAg
Ym9vbCBtYWRlRGVjaXNpb247Cit9OworCitXRUJLSVRfREVGSU5FX1RZUEVfV0lUSF9DT0RFKAor
ICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCwgd2Via2l0X2RldmljZV9pbmZv
X3Blcm1pc3Npb25fcmVxdWVzdCwgR19UWVBFX09CSkVDVCwKKyAgICBHX0lNUExFTUVOVF9JTlRF
UkZBQ0UoV0VCS0lUX1RZUEVfUEVSTUlTU0lPTl9SRVFVRVNULCB3ZWJraXRfcGVybWlzc2lvbl9y
ZXF1ZXN0X2ludGVyZmFjZV9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0QWxsb3coV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgQVNTRVJUKFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVx
dWVzdCkpOworCisgICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCktPnBy
aXY7CisKKyAgICAvLyBPbmx5IG9uZSBkZWNpc2lvbiBhdCBhIHRpbWUuCisgICAgaWYgKHByaXYt
Pm1hZGVEZWNpc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+bWFkZURlY2lzaW9u
ID0gdHJ1ZTsKKyAgICBhdXRvIHNhbHQgPSBwcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+
Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHByaXYtPnJlcXVlc3QuZ2V0KCkp
OworICAgIHByaXYtPnJlcXVlc3QtPnNldFVzZXJNZWRpYUFjY2Vzc0luZm8oV1RGTW92ZShzYWx0
KSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdERlbnkoV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgQVNTRVJU
KFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOworCisg
ICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCktPnByaXY7CisKKyAgICAv
LyBPbmx5IG9uZSBkZWNpc2lvbiBhdCBhIHRpbWUuCisgICAgaWYgKHByaXYtPm1hZGVEZWNpc2lv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+bWFkZURlY2lzaW9uID0gdHJ1ZTsKKyAg
ICBhdXRvIHNhbHQgPSBwcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+cmVnZW5lcmF0ZURl
dmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihwcml2LT5yZXF1ZXN0LmdldCgpKTsKKyAg
ICBwcml2LT5yZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKFdURk1vdmUoc2FsdCksIGZh
bHNlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZh
Y2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFj
ZS0+YWxsb3cgPSB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RBbGxvdzsKKyAgICBp
ZmFjZS0+ZGVueSA9IHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERpc3Bvc2UoR09i
amVjdCogb2JqZWN0KQoreworICAgIC8vIERlZmF1bHQgYmVoYXZpb3VyIHdoZW4gbm8gZGVjaXNp
b24gaGFzIGJlZW4gbWFkZSBpcyBkZW55aW5nIHRoZSByZXF1ZXN0LgorICAgIHdlYmtpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnkoV0VCS0lUX1BFUk1JU1NJT05fUkVRVUVTVChvYmpl
Y3QpKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9y
ZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNz
LT5kaXNwb3NlID0gd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZTsKK30K
KworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3RDcmVhdGUoVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHJlcXVl
c3QsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBBUEk6OlNl
Y3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSogZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpCit7CisgICAgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0KiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgPSBXRUJLSVRfREVW
SUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ERVZJ
Q0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIG51bGxwdHIpKTsKKworICAgIC8vIEZJWE1FOiBz
dG9yZSBTZWN1cml0eU9yaWdpbnMgYW5kIG1hZGUgdGhlbSBhdmFpbGFibGUgdG8gdGhlIGVtYmVk
ZGVyLgorICAgIFVOVVNFRF9QQVJBTSh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbik7CisgICAgVU5V
U0VEX1BBUkFNKHRvcExldmVsRG9jdW1lbnRPcmlnaW4pOworCisgICAgZGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0LT5wcml2LT5yZXF1ZXN0ID0gJnJlcXVlc3Q7CisgICAgZGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LT5wcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSA9IGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlOworICAgIHJldHVybiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjQ0MzAzOGZmODcwMjViMTFhMTA1N2YxNzhlMDJlNGZkZGQ0NDhhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hwb3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJXZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCIKKworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoV2ViS2l0
OjpVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiwgV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQu
Y3BwCmluZGV4IDAyNzU0MzEyN2FlZTFiMDg2ZDAzNjE1MWQxMThjZmM3OTY2NmE0MmUuLjVlMzZi
ZGE5Njc0MjA3MmRjYjQ0MzkzY2E4MThhYjYxY2FkNzM1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIyLDYgKzIy
LDcgQEAKIAogI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eS5oIgorI2luY2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oIgpAQCAtMzIsNiArMzMsNyBAQAog
I2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2Vi
c2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAogI2lmIFBM
QVRGT1JNKEdUSykKQEAgLTE4OSw2ICsxOTEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCisgICAgYm9vbCBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmln
aW4oV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdp
biYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHRvcExldmVs
RG9jdW1lbnRPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiBwZXJtaXNzaW9u
UmVxdWVzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0PiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgPSBhZG9wdEdS
ZWYod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBlcm1pc3Npb25SZXF1
ZXN0LCB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgcGFn
ZS53ZWJzaXRlRGF0YVN0b3JlKCkuZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSkpOworICAgICAg
ICB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KG1fd2ViVmlldywgV0VCS0lUX1BF
Uk1JU1NJT05fUkVRVUVTVChkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuZ2V0KCkpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJQYWdlUHJveHkmLCBBUEk6OlNlY3VyaXR5T3Jp
Z2luJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAg
ICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Q+
IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdE5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpLnB0cigpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmlu
ZGV4IDNmNTI2MjVlNjdiMWU3MWE0NGY2NDFlYTkyYjg1MzZlYTAxNDliMmQuLjQ2ZTkyZDUzZmFk
NjM0MjkxMDdjMWNmMDY5NWFmODU5MGUyNDYwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0zMjIsNiArMzIy
LDcgQEAgc3RhdGljIGlubGluZSBXZWJzaXRlRGF0YVN0b3JlOjpDb25maWd1cmF0aW9uIHdlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2UKICAgICBjb25maWd1cmF0aW9uLndlYlNRTERh
dGFiYXNlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xjb25maWd1cmFyaW9uLndlYlNRTERhdGFiYXNl
RGlyZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBw
cm9jZXNzUG9vbGNvbmZpZ3VyYXJpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgY29u
ZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xjb25maWd1
cmFyaW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBjb25maWd1cmF0aW9uLmRl
dmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IHByb2Nlc3NQb29sY29uZmlndXJhcmlv
bi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICByZXR1cm4gY29uZmln
dXJhdGlvbjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2Vic2l0ZURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2Vic2l0ZURhdGEuY3BwCmluZGV4IGEyNGRhNGQ2ZTFjYzg4MjZlNGNlMjNkYTdh
Nzc1N2VlNWUzMDk0ZGYuLjAxMmY4OGY0ZmQ1NWEyMDhiOTMzN2NjMmNjM2M1ZDI1MTcwMzIyYzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNp
dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJzaXRlRGF0YS5jcHAKQEAgLTEwMyw2ICsxMDMsOCBAQCBzdGF0aWMgV2ViS2l0V2Vic2l0ZURh
dGFUeXBlcyB0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZQogI2VuZGlmCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2ll
cykpCiAgICAgICAgIHJldHVyblZhbHVlIHw9IFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzsK
KyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0
KSkKKyAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURf
SEFTSF9TQUxUOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVz
PihyZXR1cm5WYWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IDg2YmY0
N2ZkMWFlMGVhZDI5MWViNTA5YWMxN2ZhNjNhNjExNGUxNmIuLjdlZjI1ZWZkM2Q0NjBkOGQ5Njc0
ZjQyYmZhNTdhNWIzMDI1Mjg2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcApAQCAtMzcx
LDYgKzM3MSw3IEBAIEFQSTo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0RGF0YVN0b3JlKFdlYktpdFdlYnNpdGVEYXRhTWFuCiAgICAgICAgIGNvbmZpZ3VyYXRp
b24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSAhcHJpdi0+d2ViU1FMRGlyZWN0b3J5ID8KICAg
ICAgICAgICAgIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFdlYlNRTERhdGFiYXNlRGly
ZWN0b3J5KCkgOiBXZWJDb3JlOjpGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHByaXYtPndlYlNRTERpcmVjdG9yeS5nZXQoKSk7CiAgICAgICAgIGNvbmZpZ3Vy
YXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICAgICAgY29uZmlndXJhdGlv
bi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkgPSBBUEk6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTGVn
YWN5KFdURk1vdmUoY29uZmlndXJhdGlvbikpOwogICAgIH0KIApAQCAtNjQ5LDYgKzY1MCw4IEBA
IHN0YXRpYyBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZXMoV2Vi
S2l0V2Vic2l0ZURhdGFUeXBlcyB0eXBlCiAjZW5kaWYKICAgICBpZiAodHlwZXMgJiBXRUJLSVRf
V0VCU0lURV9EQVRBX0NPT0tJRVMpCiAgICAgICAgIHJldHVyblZhbHVlLmFkZChXZWJzaXRlRGF0
YVR5cGU6OkNvb2tpZXMpOworICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfREVW
SUNFX0lEX0hBU0hfU0FMVCkKKyAgICAgICAgcmV0dXJuVmFsdWUuYWRkKFdlYnNpdGVEYXRhVHlw
ZTo6RGV2aWNlSWRIYXNoU2FsdCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjhjNDJlY2I2MDg0
ZWI1YTNjNTIzNjRkODQxZGRjNGUxNWRiODg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Qu
aApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJf
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25s
eSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorI2RlZmluZSBX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCAg
ICAgICAgICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
REVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNU
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVm
aW5lIFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1J
U1NJT05fUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktp
dERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCAgICAgICAgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdENsYXNzICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0
ZSBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisK
KyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZSAgICAodm9p
ZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCmluZGV4IDA2NTA0N2ZlMTdjNTg1ZTI4
MjYxMTlhY2RiNGIzMDcwZTE0MzIzMjEuLjY3NDMwNWNjMDFmMGQ5NGFiMGNkZDI0N2E5MzI5MGVm
M2I5YTU1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2Vic2l0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYnNpdGVEYXRhLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYnNpdGVEYXRhIFdlYktpdFdlYnNpdGVEYXRhOwogICogQFdFQktJVF9XRUJTSVRFX0RBVEFf
SU5ERVhFRERCX0RBVEFCQVNFUzogSW5kZXhlZERCIGRhdGFiYXNlcy4KICAqIEBXRUJLSVRfV0VC
U0lURV9EQVRBX1BMVUdJTl9EQVRBOiBQbHVnaW5zIGRhdGEuCiAgKiBAV0VCS0lUX1dFQlNJVEVf
REFUQV9DT09LSUVTOiBDb29raWVzLgorICogQFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lE
X0hBU0hfU0FMVDogSGFzaCBzYWx0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRldmljZSBpZHMgdXNl
ZCBieSB3ZWJwYWdlcy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTDogQWxsIHR5cGVzLgog
ICoKICAqIEVudW0gdmFsdWVzIHdpdGggZmxhZ3MgcmVwcmVzZW50aW5nIHR5cGVzIG9mIFdlYnNp
dGUgZGF0YS4KQEAgLTYwLDcgKzYxLDggQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfV0VC
U0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMgICAgICAgPSAxIDw8IDYsCiAgICAgV0VCS0lU
X1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQSAgICAgICAgICAgICAgID0gMSA8PCA3LAogICAgIFdF
QktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUyAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKLSAg
ICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCA5
KSAtIDEKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQgICAgICAg
PSAxIDw8IDksCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAg
ICAgID0gKDEgPDwgMTApIC0gMQogfSBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzOwogCiBXRUJLSVRf
QVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNzdkMThkNjkxODAzYzcyOWRjNTBkOTA2ODI0Nzc4OTkyMThkMjQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVF9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9O
KQorI2Vycm9yICJPbmx5IDx3cGUvd2Via2l0Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAor
I2RlZmluZSBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNUICAgICAgICAgICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ERVZJQ0VfSU5G
T19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJ
Q0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9f
UEVSTUlTU0lPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwg
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ICAgICAgICBXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0Q2xhc3MgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQ
cml2YXRlIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGU7CisKK3N0cnVj
dCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVu
dDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBlICAg
ICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKaW5kZXggM2E0NjJhYWZmOWI4
N2M2ZTBlNTdmOTYyYzBlNDYzMDkyNTlkZGUwMy4uMDNkZDU4NWQxMjY1YTZlNGVlZGI5NDI2ODc1
M2YzNjI0YzYyMGFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRXZWJzaXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0V2Vic2l0ZURhdGEuaApAQCAtNDQsNiArNDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2Vic2l0ZURhdGEgV2ViS2l0V2Vic2l0ZURhdGE7CiAgKiBAV0VCS0lUX1dFQlNJVEVf
REFUQV9JTkRFWEVEREJfREFUQUJBU0VTOiBJbmRleGVkREIgZGF0YWJhc2VzLgogICogQFdFQktJ
VF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEE6IFBsdWdpbnMgZGF0YS4KICAqIEBXRUJLSVRfV0VC
U0lURV9EQVRBX0NPT0tJRVM6IENvb2tpZXMuCisgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJ
Q0VfSURfSEFTSF9TQUxUOiBIYXNoIHNhbHQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGV2aWNlIGlk
cyB1c2VkIGJ5IHdlYnBhZ2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMOiBBbGwgdHlw
ZXMuCiAgKgogICogRW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXByZXNlbnRpbmcgdHlwZXMgb2Yg
V2Vic2l0ZSBkYXRhLgpAQCAtNjAsNyArNjEsOCBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJ
VF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAgICA9IDEgPDwgNiwKICAgICBX
RUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAgICAgICAgPSAxIDw8IDcsCiAg
ICAgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTICAgICAgICAgICAgICAgICAgID0gMSA8PCA4
LAotICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgx
IDw8IDkpIC0gMQorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCAg
ICAgICA9IDEgPDwgOSwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAg
ICAgICAgICAgPSAoMSA8PCAxMCkgLSAxCiB9IFdlYktpdFdlYnNpdGVEYXRhVHlwZXM7CiAKIFdF
QktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlk
SGFzaFNhbHRTdG9yYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjkxZWE4YzlhOGM1ZmIwOThiOWFiYWY3
ZjNlYjk3MjBmZTM3YmQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3Rm
L0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJl
ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgaW50IGhh
c2hTYWx0U2l6ZSA9IDQ4Oworc3RhdGljIGNvbnN0IGludCByYW5kb21EYXRhU2l6ZSA9IGhhc2hT
YWx0U2l6ZSAvIDE2OworCitSZWY8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IERldmljZUlkSGFz
aFNhbHRTdG9yYWdlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZURpcmVjdG9yeSwgYm9vbCBpc1BlcnNpc3RlbnQpCit7CisgICAgYXV0byBkZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZSA9IGFkb3B0UmVmKCpuZXcgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoZGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnksIGlzUGVyc2lzdGVudCkpOworICAgIGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlLT5sb2FkU3RvcmFnZUZyb21EaXNrKCk7CisgICAgcmV0dXJuIGRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOworfQorCitEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6RGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURp
cmVjdG9yeSwgYm9vbCBpc1BlcnNpc3RlbnQpCisgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3Jl
YXRlKCJjb20uYXBwbGUuV2ViS2l0LkRldmljZUlkSGFzaFNhbHRTdG9yYWdlIikpCisgICAgLCBt
X2lzUGVyc2lzdGVudChpc1BlcnNpc3RlbnQpCisgICAgLCBtX2RldmljZUlkSGFzaFNhbHRTdG9y
YWdlRGlyZWN0b3J5KGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5KQoreworfQorCitE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6fkRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkKK3sKK30K
Kwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6bG9hZFN0b3JhZ2VGcm9tRGlzaygpCit7
CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKG1fZGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG9yaWdpblBhdGhz
ID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlRGly
ZWN0b3J5LCAiKiIpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpblBhdGggOiBvcmln
aW5QYXRocykgeworICAgICAgICAgICAgVVJMIHVybDsKKyAgICAgICAgICAgIHVybC5zZXRQcm90
b2NvbCgiZmlsZSJfcyk7CisgICAgICAgICAgICB1cmwuc2V0UGF0aChvcmlnaW5QYXRoKTsKKwor
ICAgICAgICAgICAgU3RyaW5nIGRldmljZUlkSGFzaFNhbHRJZGVudGlmaWVyID0gdXJsLmxhc3RQ
YXRoQ29tcG9uZW50KCk7CisKKyAgICAgICAgICAgIGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBTZWN1
cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoZGV2aWNlSWRIYXNoU2FsdElk
ZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFzZWN1cml0eU9yaWdpbikKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAg
ICAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUob3JpZ2luUGF0aCwgZmlsZVNp
emUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGhhbmRs
ZSA9IEZpbGVTeXN0ZW06Om9wZW5BbmRMb2NrRmlsZShvcmlnaW5QYXRoLCBGaWxlU3lzdGVtOjpG
aWxlT3Blbk1vZGU6OlJlYWQpOworICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSBGaWxlU3lzdGVt
OjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBzaXplX3QgYnl0ZXNUb1JlYWQ7CisgICAgICAgICAgICBpZiAoIVdURjo6
Y29udmVydFNhZmVseShmaWxlU2l6ZSwgYnl0ZXNUb1JlYWQpKSB7CisgICAgICAgICAgICAgICAg
RmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZm
ZXIoYnl0ZXNUb1JlYWQpOworICAgICAgICAgICAgc2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmls
ZVN5c3RlbTo6cmVhZEZyb21GaWxlKGhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OnVubG9ja0FuZENsb3NlRmlsZShoYW5kbGUp
OworCisgICAgICAgICAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQgfHwgdG90
YWxCeXRlc1JlYWQgIT0gaGFzaFNhbHRTaXplKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBhdXRvIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbiA9IFN0
cmluZyhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKworICAgICAgICAgICAgc2V0RGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHNlY3VyaXR5T3JpZ2luLT5zZWN1cml0eU9y
aWdpbigpLCBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbikpOworICAg
ICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnN0b3Jl
SGFzaFNhbHRUb0Rpc2soSGFzaFNhbHRGb3JPcmlnaW4qIGhhc2hTYWx0Rm9yT3JpZ2luKQorewor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGhhc2hTYWx0Rm9yT3JpZ2luXSgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgICAgICBTdHJpbmcgZmlsZUZ1bGxQYXRoID0gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJl
Y3RvcnksIGhhc2hTYWx0Rm9yT3JpZ2luLT50b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4t
PmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisKKyAgICAgICAgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKGZpbGVGdWxsUGF0
aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7CisgICAgICAgIGlmICghaGFuZGxl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGludDY0X3Qgd3JpdHRlbkJ5dGVzID0g
RmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBoYXNoU2FsdEZvck9yaWdpbi0+ZGV2aWNl
SWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luLnV0ZjgoKS5kYXRhKCksIGhhc2hTYWx0Rm9yT3Jp
Z2luLT5kZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4udXRmOCgpLmxlbmd0aCgpKTsK
KyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKHdy
aXR0ZW5CeXRlcyAhPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihoYXNoU2FsdEZvck9yaWdpbi0+ZGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luLnV0ZjgoKS5sZW5ndGgoKSkpCisgICAgICAg
ICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVGdWxsUGF0aCk7CisgICAgfSk7Cit9CisK
K1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0Rm9yT3JpZ2luKFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5KiByZXF1ZXN0KQorewor
ICAgIHJldHVybiBnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVzdC0+
dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpOworfQorCitTdHJpbmcgRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmln
aW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVzdC0+dG9w
TGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpOworfQorCitTdHJpbmcgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4o
U2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKK3sKKyAgICBh
dXRvIHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbkRhdGEgPSB0b3BMZXZlbERvY3VtZW50
U2VjdXJpdHlPcmlnaW4uZGF0YSgpOworICAgIG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5y
ZW1vdmVJZihbdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luRGF0YV0oYXV0byYga2V5QW5k
VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGtleUFuZFZhbHVlLnZhbHVlLT50b3BMZXZlbERvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4tPmRhdGEoKSA9PSB0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmln
aW5EYXRhOworICAgIH0pOworCisgICAgcmV0dXJuIGdldERldmljZUlkZW50aWZpZXJIYXNoU2Fs
dEZvck9yaWdpbih0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworfQorCitTdHJpbmcg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbihTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorewor
ICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbiA9IG1fZGV2aWNlSWRIYXNoU2FsdGZv
ck9yaWdpbi5nZXQodG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLnRvUmF3U3RyaW5nKCkp
OworICAgIGlmIChkZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luKSB7CisgICAgICAgIGRldmljZUlk
SGFzaFNhbHRmb3JPcmlnaW4tPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICAg
ICAgcmV0dXJuIGRldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4tPmRldmljZUlkZW50aWZpZXJIYXNo
U2FsdEZvck9yaWdpbjsKKyAgICB9CisKKyAgICB1aW50NjRfdCByYW5kb21EYXRhW3JhbmRvbURh
dGFTaXplXTsKKyAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihyYW5kb21EYXRhKSwgc2l6ZW9mKHJhbmRvbURhdGEpKTsKKwor
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eSho
YXNoU2FsdFNpemUpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmFuZG9tRGF0YVNpemU7IGkr
KykKKyAgICAgICAgYXBwZW5kVW5zaWduZWQ2NEFzSGV4KHJhbmRvbURhdGFbMF0sIGJ1aWxkZXIp
OworCisgICAgU3RyaW5nIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbiA9IGJ1aWxk
ZXIudG9TdHJpbmcoKTsKKworICAgIGF1dG8gbmV3SGFzaFNhbHRGb3JPcmlnaW4gPSBzdGQ6Om1h
a2VfdW5pcXVlPEhhc2hTYWx0Rm9yT3JpZ2luPih0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbik7CisgICAgbmV3SGFzaFNhbHRG
b3JPcmlnaW4tPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKworICAgIGlmIChtX2lz
UGVyc2lzdGVudCkKKyAgICAgICAgc3RvcmVIYXNoU2FsdFRvRGlzayhuZXdIYXNoU2FsdEZvck9y
aWdpbi5nZXQoKSk7CisKKyAgICBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4uYWRkKHRvcExl
dmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbi50b1Jhd1N0cmluZygpLCBXVEZNb3ZlKG5ld0hhc2hT
YWx0Rm9yT3JpZ2luKSk7CisKKyAgICByZXR1cm4gZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9y
T3JpZ2luOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpzZXREZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgU3RyaW5nJiYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2lu
KQoreworICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbiA9IG1fZGV2aWNlSWRIYXNo
U2FsdGZvck9yaWdpbi5nZXQodG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLnRvUmF3U3Ry
aW5nKCkpOworICAgIGlmIChkZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luKSB7CisgICAgICAgIGRl
dmljZUlkSGFzaFNhbHRmb3JPcmlnaW4tPmRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdp
biA9IGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsKKyAgICAgICAgZGV2aWNlSWRI
YXNoU2FsdGZvck9yaWdpbi0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBuZXdIYXNoU2FsdEZvck9yaWdpbiA9IHN0ZDo6
bWFrZV91bmlxdWU8SGFzaFNhbHRGb3JPcmlnaW4+KHRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKTsKKyAgICBuZXdIYXNoU2Fs
dEZvck9yaWdpbi0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luID0gZGV2aWNlSWRl
bnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luOworICAgIG5ld0hhc2hTYWx0Rm9yT3JpZ2luLT5sYXN0
VGltZVVzZWQgPSBXYWxsVGltZTo6bm93KCk7CisgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3Jp
Z2luLmFkZCh0b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4udG9SYXdTdHJpbmcoKSwgV1RG
TW92ZShuZXdIYXNoU2FsdEZvck9yaWdpbikpOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpnZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8
U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewor
ICAgICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKKworICAgICAgICBm
b3IgKGF1dG8mIGhhc2hTYWx0Rm9yT3JpZ2luIDogbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2lu
KQorICAgICAgICAgICAgb3JpZ2lucy5hZGQoaGFzaFNhbHRGb3JPcmlnaW4udmFsdWUtPnRvcExl
dmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbi0+ZGF0YSgpKTsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW29yaWdpbnMgPSBXVEZNb3ZlKG9yaWdpbnMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5zKSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCitib29sIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVIYXNoU2FsdEZy
b21EaXNrSWZOZWVkZWQoSGFzaFNhbHRGb3JPcmlnaW4qIGhhc2hTYWx0Rm9yT3JpZ2luLCBib29s
IG5lZWRzUmVtb3ZhbCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmIChuZWVkc1JlbW92YWwpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVGdWxsUGF0aCA9IEZpbGVT
eXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdl
RGlyZWN0b3J5LCBoYXNoU2FsdEZvck9yaWdpbi0+dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLT5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVGaWxlKGZpbGVGdWxsUGF0aCk7CisgICAgfQorCisgICAgcmV0dXJuIG5lZWRzUmVtb3Zh
bDsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNo
U2FsdEZvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMs
IEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8U2Vj
dXJpdHlPcmlnaW5EYXRhPiBjb3BpZWRPcmlnaW5zOworICAgIGNvcGllZE9yaWdpbnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5zLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIG9yaWdp
biA6IG9yaWdpbnMpCisgICAgICAgIGNvcGllZE9yaWdpbnMudW5jaGVja2VkQXBwZW5kKG9yaWdp
bi5pc29sYXRlZENvcHkoKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb3BpZWRPcmlnaW5zID0gV1RGTW92ZShjb3BpZWRP
cmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luLnJlbW92ZUlm
KFt0aGlzLCBjb3BpZWRPcmlnaW5zXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMtPmRlbGV0ZUhhc2hTYWx0RnJvbURpc2tJZk5lZWRlZChrZXlBbmRWYWx1ZS52
YWx1ZS5nZXQoKSwgY29waWVkT3JpZ2lucy5jb250YWlucyhrZXlBbmRWYWx1ZS52YWx1ZS0+dG9w
TGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luLT5kYXRhKCkpKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICB9KTsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2
aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1bmN0aW9u
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aW1lLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBt
X2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4ucmVtb3ZlSWYoW3RoaXMsIHRpbWVdKGF1dG8mIGtl
eUFuZFZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy0+ZGVsZXRlSGFzaFNhbHRGcm9t
RGlza0lmTmVlZGVkKGtleUFuZFZhbHVlLnZhbHVlLmdldCgpLCBrZXlBbmRWYWx1ZS52YWx1ZS0+
bGFzdFRpbWVVc2VkID4gdGltZSk7CisgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDNhZmE3ZjFkZjgxNjE4YzkyMzBm
ZDI3NThmNDYxZTVlMDMzOTY1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25DaGVj
a1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0
eU9yaWdpbkhhc2guaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlIDogcHVibGljIFJlZkNvdW50
ZWQ8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZURpcmVjdG9yeSwgYm9vbCBpc1BlcnNpc3RlbnQpOworICAgIH5EZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZSgpOworCisgICAgc3RydWN0IEhhc2hTYWx0Rm9yT3JpZ2luIHsKKyAgICBI
YXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4s
IFN0cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKQorICAgICAgICA6IHRv
cExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKKyAgICAgICAgLCBk
ZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0
Rm9yT3JpZ2luKQorICAgICAgICAsIGxhc3RUaW1lVXNlZChXYWxsVGltZTo6bm93KCkpCisgICAg
ICAgIHsgfTsKKworICAgICAgICB+SGFzaFNhbHRGb3JPcmlnaW4oKSA9IGRlZmF1bHQ7CisgICAg
ICAgIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gdG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5
T3JpZ2luOworICAgICAgICBTdHJpbmcgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2lu
OworICAgICAgICBXYWxsVGltZSBsYXN0VGltZVVzZWQ7CisgICAgfTsKKworICAgIFN0cmluZyBn
ZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oVXNlck1lZGlhUGVybWlzc2lvbkNo
ZWNrUHJveHkqKTsKKyAgICBTdHJpbmcgcmVnZW5lcmF0ZURldmljZUlkZW50aWZpZXJIYXNoU2Fs
dEZvck9yaWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSopOworCisgICAgdm9pZCBn
ZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBk
ZWxldGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7
CisgICAgdm9pZCBkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2luc01vZGlmaWVkU2luY2UoV2Fs
bFRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisKKyAgICB2b2lk
IGxvYWRTdG9yYWdlRnJvbURpc2soKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZShjb25zdCBTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGly
ZWN0b3J5LCBib29sIGlzUGVyc2lzdGVudCk7CisKKyAgICBTdHJpbmcgZ2V0RGV2aWNlSWRlbnRp
Zmllckhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERv
Y3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIFN0cmluZyByZWdlbmVyYXRlRGV2aWNlSWRlbnRp
Zmllckhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERv
Y3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIHZvaWQgc3RvcmVIYXNoU2FsdFRvRGlzayhIYXNo
U2FsdEZvck9yaWdpbiopOworICAgIGJvb2wgZGVsZXRlSGFzaFNhbHRGcm9tRGlza0lmTmVlZGVk
KEhhc2hTYWx0Rm9yT3JpZ2luKiwgYm9vbCBuZWVkc1JlbW92YWwpOworICAgIHZvaWQgc2V0RGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0
b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4sIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJI
YXNoU2FsdEZvck9yaWdpbik7CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIEhh
c2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNhbHRGb3JPcmlnaW4+PiBtX2Rldmlj
ZUlkSGFzaFNhbHRmb3JPcmlnaW47CisgICAgYm9vbCBtX2lzUGVyc2lzdGVudDsKKyAgICBTdHJp
bmcgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRp
YVBlcm1pc3Npb25DaGVja1Byb3h5LmgKaW5kZXggZjM3YmU3YWIyMWYzZjExZjU3NWIxY2ZjMTI3
N2JjYTU2NmNjYzMwMS4uZmJjYzRjZmVlM2E1YjRiZDBjMGEwYWM2MjFkYjA4ZjFmYTRjMGVmZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNo
ZWNrUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tQcm94eS5oCkBAIC0zNiw4ICszNiw2IEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHk7Ci0KIGNsYXNzIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VXNlck1lZGlhUGVybWlzc2lv
bkNoZWNrPiB7CiBwdWJsaWM6CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAppbmRleCBiZWY0MGRlODQ2ODkwYTI0OTcyOTU4YzVjMzFhNGQxZTk3MzE0NjQ1Li5i
ODNiMGExNTQ5ZjBlYjM2NzY2ODVmMTVjYzgwYjgzZTE5NTIwNzUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGlj
IFdlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gbGVnYWN5V2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24oQVBJOjoKICAgICBjb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVGbGF0
RmlsZVN1YmRpcmVjdG9yeU5hbWUgPSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uYXBwbGljYXRp
b25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSgpOwogICAgIGNvbmZpZ3VyYXRpb24ubWVk
aWFDYWNoZURpcmVjdG9yeSA9IHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGly
ZWN0b3J5KCk7CiAgICAgY29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0g
cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAg
ICBjb25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IHByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsK
ICAgICBjb25maWd1cmF0aW9uLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBwcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24ucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwog
ICAgIGNvbmZpZ3VyYXRpb24ubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gcHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmRpc2tDYWNoZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3VyYXRpb24uamF2YVNj
cmlwdENvbmZpZ3VyYXRpb25EaXJlY3RvcnkgPSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uamF2
YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJlY3RvcnkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMjM1
ZDE3OTY0ZTkyMDNiYjg0MGUyNjVhMjk0YThmNTFkZjlmOGMyNy4uYTAxYWY0NmEyMjU5ZWNhYWMw
ODFjNTg4ZTNiYmE1Y2RiNDg4OTBiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVJlY29yZC5oIgogI2luY2x1ZGUgIkFQSVdlYnNp
dGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1
ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiTW9ja0F1dGhlbnRpY2F0
b3JNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VNYW5hZ2VyLmgiCkBAIC05Nyw2ICs5OCw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6
OldlYnNpdGVEYXRhU3RvcmUoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLCBQQUw6OlNlc3Np
b25JRCBzCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2NvbmZpZ3VyYXRp
b24oV1RGTW92ZShjb25maWd1cmF0aW9uKSkKICAgICAsIG1fc3RvcmFnZU1hbmFnZXIoU3RvcmFn
ZU1hbmFnZXI6OmNyZWF0ZShtX2NvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkK
KyAgICAsIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6
OmNyZWF0ZShtX2NvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5
LCBpc1BlcnNpc3RlbnQoKSkpCiAgICAgLCBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20u
YXBwbGUuV2ViS2l0LldlYnNpdGVEYXRhU3RvcmUiKSkKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
ICAgICwgbV9hdXRoZW50aWNhdG9yTWFuYWdlcihtYWtlVW5pcXVlUmVmPEF1dGhlbnRpY2F0b3JN
YW5hZ2VyPigpKQpAQCAtMTc0LDYgKzE3Niw4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVz
b2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogICAgICAgICBtX3Jlc29sdmVkQ29uZmlndXJh
dGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVj
dG9yeUZvclNhbmRib3hFeHRlbnNpb24obV9jb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3Rv
cnkpOwogICAgIGlmICghbV9jb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnku
aXNFbXB0eSgpKQogICAgICAgICBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRi
b3hFeHRlbnNpb24obV9jb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpOwor
ICAgIGlmICghbV9jb25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLmRldmljZUlkSGFz
aFNhbHRzU3RvcmFnZURpcmVjdG9yeSA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3Rv
cnlGb3JTYW5kYm94RXh0ZW5zaW9uKG1fY29uZmlndXJhdGlvbi5kZXZpY2VJZEhhc2hTYWx0c1N0
b3JhZ2VEaXJlY3RvcnkpOwogICAgIGlmICghbV9jb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNl
RGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ud2Vi
U1FMRGF0YWJhc2VEaXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5
Rm9yU2FuZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3Rv
cnkpOwogICAgIGlmICghbV9jb25maWd1cmF0aW9uLmluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5
LmlzRW1wdHkoKSkKQEAgLTQ4OCw2ICs0OTIsMTkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpm
ZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8K
ICAgICAgICAgfSk7CiAgICAgfQogCisgICAgaWYgKG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2Ug
JiYgZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkp
IHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKKwor
ICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5nZXREZXZpY2VJZEhhc2hTYWx0T3Jp
Z2lucyhbY2FsbGJhY2tBZ2dyZWdhdG9yXShIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mJiBvcmlnaW5zKSB7CisgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsK
KworICAgICAgICAgICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5z
LnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0LCAwIH0pOworCisg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZN
b3ZlKHdlYnNpdGVEYXRhKSk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIGlmIChkYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSkg
JiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5k
aW5nQ2FsbGJhY2soKTsKIApAQCAtODAzLDYgKzgyMCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxs
VGltZQogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSAmJiBkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hT
YWx0KSkgeworICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygp
OworCisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmRlbGV0ZURldmljZUlkSGFz
aFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZShtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7CisgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxs
YmFjaygpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlzUGVyc2lz
dGVudCgpKSB7CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7CiAKQEAgLTEwNzcsNiArMTEwMiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAg
ICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiBk
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgewor
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAg
ICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmRlbGV0ZURldmljZUlkSGFzaFNhbHRGb3JP
cmlnaW5zKG9yaWdpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAg
IH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgSGFzaFNl
dDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgICAgIGZvciAoY29u
c3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggZDEy
NGEwNmI0YjVkODc2YmQ4ZGM4YTQ3MTlkZjhhYzdkN2U1OTQ0Zi4uNTc2ZTQ2ODNmZTA4Y2JjNjgy
ZmQyNWNlZGJlNWRkODJmMjQ1MWI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNTUsNiArNTUsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2Vj
S2V5UHJveHlTdG9yZTsKIGNsYXNzIFN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2U7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsK
IGNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKQEAgLTkzLDYgKzk0LDcgQEAg
cHVibGljOgogICAgICAgICBTdHJpbmcgd2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgICAg
IFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5OworICAgICAgICBTdHJpbmcgZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdl
RGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eTsKICAgICAgICAgU3RyaW5nIGphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5OwogICAg
ICAgICBTdHJpbmcgY29va2llU3RvcmFnZUZpbGU7CkBAIC0xNTMsNiArMTU1LDcgQEAgcHVibGlj
OgogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZURp
cmVjdG9yeTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRNZWRpYUNhY2hlRGlyZWN0b3J5
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVj
dG9yeTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRNZWRpYUtleXNEaXJlY3RvcnkoKSBj
b25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5OyB9CisgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZERldmljZUlkSGFzaFNhbHRzRGly
ZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uZGV2aWNlSWRI
YXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5OyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZERh
dGFiYXNlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24u
d2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7IH0KICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkSmF2
YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVk
Q29uZmlndXJhdGlvbi5qYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeTsgfQogICAgIGNv
bnN0IFN0cmluZyYgcmVzb2x2ZWRDb29raWVTdG9yYWdlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzb2x2ZWRDb25maWd1cmF0aW9uLmNvb2tpZVN0b3JhZ2VGaWxlOyB9CkBAIC0xNjIsNiArMTY1
LDggQEAgcHVibGljOgogCiAgICAgU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgeyBy
ZXR1cm4gbV9zdG9yYWdlTWFuYWdlci5nZXQoKTsgfQogCisgICAgRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UqIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZS5nZXQoKTsgfQorCiAgICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKICAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQ
b29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7CiAKQEAgLTIzNyw2ICsyNDIsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzIHsgZmFsc2UgfTsKIAogICAgIGNv
bnN0IFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4gbV9zdG9yYWdlTWFuYWdlcjsKKyAgICBjb25zdCBS
ZWZQdHI8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7
CiAgICAgUmVmUHRyPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
IHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZTYyY2E2YWMwZTliYmNjODQ0NmE2ZGY3YTRhY2JlZWQxZGZhYTllYS4u
NDkzNGMxZThkM2M0ODhiYzFiZGJkNmQ3YjUyYzU3ZjFjN2IyZDQxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03Nyw2ICs3Nyw4IEBA
CiAJCTAwQjk2NjE2MThFMjRDQkEwMENFMUY4OCAvKiBBUElGaW5kQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEI5NjYxNTE4RTI0Q0JBMDBD
RTFGODggLyogQVBJRmluZENsaWVudC5oICovOyB9OwogCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFG
ODggLyogRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDBCOTY2MTgxOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCAqLzsgfTsK
IAkJMDcyOTdGOUYxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1By
b3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5
N0Y5RDFDMTdCQkVBMDAzRjA3MzUgLyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCAq
LzsgfTsKKwkJMDcyOTdGOUUxQzE3QkJFQTAxNEYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9y
YWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgKi87
IH07CisJCTA3Mjk3RjlGMUMxN0JCRUEwMTVGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdG
OUQxQzE3QkJFQTIyM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi87IH07CiAJ
CTA3Mjk3RkEzMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGQTEx
QzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc0RTc1RkUxREYyMjEx
OTAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzRFNzVGQjFERjFGRDEzMDBEMzE4RUMgLyog
VXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCAqLzsgfTsKIAkJMDc2RTg4NEUxQTEzQ0FERjAwNUU5
MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzZFODg0RDFBMTNDQURGMDA1RTkwRkMgLyogQVBJQ29udGV4
dE1lbnVDbGllbnQuaCAqLzsgfTsKQEAgLTE4NzQsNiArMTg3Niw4IEBACiAJCTAwQjk2NjE4MThF
MjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbmRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdG
OUMxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJNZWRpYVBlcm1pc3Npb25D
aGVja1Byb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGOUQxQzE3
QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAv
KiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0ZBMDFDMTg2
QURCMDAzRjA3MzUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUg
LyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDc0RTc1RkIxREYxRkQxMzAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NN
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZWRpYVByb2Nl
c3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzMwLDYgKzczMzQs
OCBAQAogCQkJCTQ2QTJCNjA3MUU1Njc1QTIwMEMzREVEQSAvKiBCYWNrZ3JvdW5kUHJvY2Vzc1Jl
c3BvbnNpdmVuZXNzVGltZXIuaCAqLywKIAkJCQlFMTUxM0M2NDE2NkVBQkIyMDAxNDlGQ0IgLyog
Q2hpbGRQcm9jZXNzUHJveHkuY3BwICovLAogCQkJCUUxNTEzQzY1MTY2RUFCQjIwMDE0OUZDQiAv
KiBDaGlsZFByb2Nlc3NQcm94eS5oICovLAorCQkJCTA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAv
KiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgKi8sCisJCQkJMDcyOTdGOUQxQzE3QkJFQTIy
M0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi8sCiAJCQkJQkMyNjUyMTIxMTgy
NjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVhUHJveHkuY3BwICovLAogCQkJCUJDMjY1MjEzMTE4
MjYwODEwMDI0M0UxMiAvKiBEcmF3aW5nQXJlYVByb3h5LmggKi8sCiAJCQkJMUE2NDIyRkMxMkRE
MDhGRTAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC05MDA4
LDYgKzkwMTQsNyBAQAogCQkJCTFBQzc1MzgwMTgzQkU1MEYwMDcyQ0IxNSAvKiBEYXRhUmVmZXJl
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkRBNjEwRjQzN0QxMDA1OEMxNUEgLyogRGVj
b2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdEQ0VEQUIyMTRDNjAwOTAwMTZCODQ3IC8qIERl
dmljZUlkZW50aXR5U1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzI5N0Y5RjFDMTdCQkVBMDE1
RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
ODkxQjZDMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzE4MTczNjEyMDU4NDI0NzAwREZEQTY1IC8qIERpc3BsYXlMaW5rLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzE0MjcwMjFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA3ODYsNiArMTA3OTMsNyBAQAogCQkJCTJEOTJBNzdEMjEy
QjZBNzEwMEY0OTNGRCAvKiBDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJB
NzdFMjEyQjZBNzEwMEY0OTNGRCAvKiBEYXRhUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTJEOTJBNzdGMjEyQjZBNzEwMEY0OTNGRCAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTA3Mjk3RjlFMUMxN0JCRUEwMTRGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI3RDYxOTEyODhCOUQ5MDBDRkQwOEMgLyogRG93
bmxvYWRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjI5
OTEyREQwMjkyMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE2NDIzMDgxMkREMDlFQjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTE1MTIzOTE0MTYyYWZlYmYwMWMzZjFi
MjI1ZTRkZmNhYjMzMWE3NC4uNTFmYzU1MmQzMmZiZTVkZDExZjVmZTg4MmIxNzMxODNhZGIyNWVk
NiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIyIEBACisyMDE4LTA5LTI4ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVE
ZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIG5ldyBBUEkgdGVzdCBmb3IgdGhlIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVE
ZXZpY2VzOgorICAgICAgICB1c2VybWVkaWEtZW51bWVyYXRlZGV2aWNlcy1wZXJtaXNzaW9uLWNo
ZWNrLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL21haW4uYzoKKyAgICAgICAgKGdvdFdl
YnNpdGVEYXRhQ2FsbGJhY2spOiBBZGRlZCBhIG5ldyBzZWN0aW9uIHRvIHRoZSBhYm91dDpkYXRh
CisgICAgICAgIHdlYnBhZ2UgdG8gaW5jbHVkZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhh
c2ggc2FsdC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJ
Q2xpZW50LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNl
c1Blcm1pc3Npb25DaGVjayk6IEFkZGVkIHRoZQorICAgICAgICBuZXcgdGVzdCBjaGVja2luZyB0
aGUgZW51bWVyYXRlRGV2aWNlcyBBUEkgd2hlbiBwZXJtaXNzaW9uIGlzCisgICAgICAgIGRlbmll
ZCBhbmQgd2hlbiBwZXJtaXNzaW9uIGlzIGFsbG93ZWQgZm9yIHRoZSBvcmlnaW4uCisgICAgICAg
IChiZWZvcmVBbGwpOiBEZWZpbmVkIHRoZSBuZXcgdGVzdC4KKwogMjAxOC0wOS0yOCAgS29ieSBC
b3lhbmdvICA8a29ieS5iQG1jZS5zeXN0ZW1zPgogCiAgICAgICAgIFtXVEZdIEFkZCBFeHRlcm5h
bFN0cmluZ0ltcGwsIGEgU3RyaW5nSW1wbCBmb3IgdXNlciBjb250cm9sbGVkIGJ1ZmZlcnMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nl
ci9ndGsvbWFpbi5jCmluZGV4IDU4NzAxZmM4NDJjZTU5NWQyNjg0NzYyYTRhMTNlYjE4NjQ4OWE0
OTAuLjUxMzNhNGRkNjFiOTJjZDUzMWRlOTM0OTgwOTMzMTE0NzA4M2ViMTQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L21haW4uYwpAQCAtNDAyLDYgKzQwMiw3IEBAIHN0YXRpYyB2b2lkIGdvdFdlYnNpdGVEYXRhQ2Fs
bGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1CiAKICAg
ICBndWludDY0IHBhZ2VJRCA9IHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh3ZWJraXRfdXJp
X3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhkYXRhUmVxdWVzdC0+cmVxdWVzdCkpOwogICAg
IGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkNvb2tp
ZXMiLCBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMsIE5VTEwsIHBhZ2VJRCk7CisgICAgYWJv
dXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiRGV2aWNlIElk
IEhhc2ggU2FsdCIsIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCwgTlVM
TCwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwg
ZGF0YUxpc3QsICJNZW1vcnkgQ2FjaGUiLCBXRUJLSVRfV0VCU0lURV9EQVRBX01FTU9SWV9DQUNI
RSwgTlVMTCwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVx
dWVzdCwgZGF0YUxpc3QsICJEaXNrIENhY2hlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NB
Q0hFLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5
KG1hbmFnZXIpLCBwYWdlSUQpOwogICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFS
ZXF1ZXN0LCBkYXRhTGlzdCwgIlNlc3Npb24gU3RvcmFnZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFf
U0VTU0lPTl9TVE9SQUdFLCBOVUxMLCBwYWdlSUQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcAppbmRleCA2NjExMzc3M2Uz
YjQzODIxNThmOWQ5YzRlY2I3MmJjOTY4MTMwOTVkLi5lNWI2YTg5ZTg0NTVmYzNiNTNiODAwZjJi
MDA4NDhkZTdiMTJmMWUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcApAQCAtODM0LDYgKzgzNCw0NyBAQCBzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVz
dCogdGVzdCwgZ2NvbnN0cAogI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKIAogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1VzZXJNZWRpYUVudW1l
cmF0ZURldmljZXNQZXJtaXNzaW9uQ2hlY2soVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnYm9vbGVhbiBlbmFibGVkID0gd2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzKTsKKyAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIFRSVUUpOworCisj
aWYgUExBVEZPUk0oR1RLKQorICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpOworI2VuZGlmCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJNZWRpYVJlcXVlc3RIVE1M
ID0KKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPHNjcmlwdD4iCisgICAgICAgICIgIGZ1
bmN0aW9uIHJ1blRlc3QoKSIKKyAgICAgICAgIiAgeyIKKyAgICAgICAgIiAgICBuYXZpZ2F0b3Iu
bWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKCIKKyAgICAgICAgIiAgICAgICAg
ZnVuY3Rpb24oZGV2aWNlcykgeyAiCisgICAgICAgICIgICAgICAgICAgICBkZXZpY2VzLmZvckVh
Y2goZnVuY3Rpb24oZGV2aWNlKSB7IgorICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZGV2aWNlLmxhYmVsKSBkb2N1bWVudC50aXRsZSA9IFwiT0tcIjsiCisgICAg
ICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRv
Y3VtZW50LnRpdGxlID0gXCJQZXJtaXNzaW9uIGRlbmllZFwiOyIKKyAgICAgICAgIiAgICAgICAg
ICAgIH0pIgorICAgICAgICAiICAgIH0pIgorICAgICAgICAiICB9IgorICAgICAgICAiICA8L3Nj
cmlwdD4iCisgICAgICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKKyAg
ICAgICAgIjwvaHRtbD4iOworCisgICAgdGVzdC0+bV92ZXJpZnlNZWRpYVR5cGVzID0gVFJVRTsK
KworICAgIC8vIFRlc3QgZGVueWluZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5t
X2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0gZmFsc2U7CisgICAgdGVzdC0+bG9hZEh0bWwodXNl
ck1lZGlhUmVxdWVzdEhUTUwsIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hh
bmdlZFRvKCJQZXJtaXNzaW9uIGRlbmllZCIpOworCisgICAgLy8gVGVzdCBhbGxvd2luZyBhIHBl
cm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0g
dHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh1c2VyTWVkaWFSZXF1ZXN0SFRNTCwgbnVsbHB0cik7
CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIk9LIik7CisKKyAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIGVuYWJsZWQpOworfQor
CiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyhVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgV2ViS2l0U2V0dGluZ3MqIHNl
dHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwpA
QCAtMTE1Niw2ICsxMTk3LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFVJQ2xpZW50VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImdlb2xvY2F0aW9uLXBlcm1pc3Npb24tcmVxdWVzdHMiLCB0
ZXN0V2ViVmlld0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKICNlbmRpZgogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAidXNlcm1lZGlhLWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjayIsIHRlc3RXZWJW
aWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25DaGVjayk7CiAgICAgVUlDbGll
bnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidXNlcm1lZGlhLXBlcm1pc3Npb24tcmVxdWVz
dHMiLCB0ZXN0V2ViVmlld1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyk7CiAgICAgVUlDbGll
bnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXVkaW8tdXNlcm1lZGlhLXBlcm1pc3Npb24t
cmVxdWVzdCIsIHRlc3RXZWJWaWV3QXVkaW9Pbmx5VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3Rz
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDJjMGMyMjliY2FhZTk3OWFiZGFiY2E0YmY4MzYzZDlkYThkYzVi
NWIuLjAyNjRlMGE0MWE4OGMzOTRmNTk2OWEyYmE3YTQxZmU1YjFiYzM0NGQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxOC0wOS0yOCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2
aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgdGhlIGZhaWx1cmUgZXhwZWN0YXRpb24gZm9yIHRoZSB0ZXN0CisgICAgICAg
IG1lZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmljZXMuaHRtbC4gSnVzdCBmb3IgdGhlIHJlY29y
ZCB3ZSBoYXZlCisgICAgICAgIGFsc28gc29sdmVkIHRoZSBmb2xsb3dpbmcgdGVzdHMsIGJ1dCB3
ZSBhcmUgbm90IHJlbW92aW5nIHRoZQorICAgICAgICBnZW5lcmFsIHNraXAgb2YgdGhlIG1lZGlh
c3RyZWFtIGRpcmVjdG9yeSB1bnRpbCB0aGUgbmV4dCBwYXRjaDoKKworICAgICAgICBmYXN0L21l
ZGlhc3RyZWFtL21lZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmljZXMuaHRtbAorICAgICAgICBm
YXN0L21lZGlhc3RyZWFtL3Jlc291cmNlcy9lbnVtZXJhdGUtZGV2aWNlcy1mcmFtZS5odG1sCisg
ICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2VudW1lcmF0ZS1kZXZpY2VzLXNv
dXJjZS1pZC5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2VudW1l
cmF0ZS1kZXZpY2VzLXNvdXJjZS1pZC1wZXJzaXN0ZW50Lmh0bWwKKyAgICAgICAgaHR0cC90ZXN0
cy9tZWRpYS9tZWRpYS1zdHJlYW0vcmVzb3VyY2VzL2VudW1lcmF0ZS1kZXZpY2VzLXNvdXJjZS1p
ZC1mcmFtZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoK
KwogMjAxOC0wOS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT04gKHIyMzY1NzMpOiBbaU9TXSBMYXlvdXQgdGVzdCBlZGl0aW5nL3Bhc3RlYm9h
cmQvZW1hY3MtY3RybC1hLWsteS5odG1sIGlzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNThlN2UyODFjNTUwZmEzOThkNDU4ZmQ4OTMzYmRh
NTg3NDg2MDI4Yi4uMjI3YzAyMTI5MzZhYWRkZWJhMTU1MTIzMzgzMmFmOWIwZTA2Mjg3NiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTYzOSw3ICs2Mzks
NiBAQCB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9t
ZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cgogd2Via2l0Lm9yZy9iLzE1MTM0NCBmYXN0L21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1lbmRlZC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQog
IyBDcmFzaCBpcyBidWcgIzE3NjgwMQogd2Via2l0Lm9yZy9iLzE2MDk5NiBmYXN0L21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQtdmlkZW8tdHJhY2tzLWRpc2FibGVkLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzIyNjkgZmFzdC9tZWRp
YXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwgWyBGYWlsdXJlIF0K
IHdlYmtpdC5vcmcvYi8xNzMyNTcgZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtZ3JhbnQt
cGVyc2lzdGVuY3kzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiAjIENhbnZhcyBjYXB0dXJlU3Ry
ZWFtIHN1cHBvcnQgaXMgbm90IGltcGxlbWVudGVkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351526</attachid>
            <date>2018-10-03 09:03:17 -0700</date>
            <delta_ts>2018-10-03 10:19:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20181003180315.patch</filename>
            <type>text/plain</type>
            <size>81657</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2Nzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI1MDg3Y2JlYzdlZWVh
NmM0OTdlN2JlYTk5NzQwY2ZlMzM3MTMyMi4uMmYzY2U3NGFhYTY3NTI5MjUyMTE5MDQ3MzI2YmQy
OWFjYzBiMzAwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTEwLTAxICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMg
aWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lzdGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4K
KwogMjAxOC0xMC0wMyAgTWlndWVsIEdvbWV6ICA8bWFnb21lekBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHVEtdW1dQRV0gSW5jb3JyZWN0IHJlbmRlcmluZyBvZiBsYXllcnMgd2hvc2UgYmFja2lu
Z1N0b3JlIGhhc24ndCBjaGFuZ2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI2ZmRkYTY1NjQyY2Y1ZTVhZTIxZWZm
YWIxMjMwYWJhZTgzYzBlNGQuLmI0NjRjMzBiZTFlNDY2MWE1NWI1OGExOWViNTA5MzFiOGU0MDI4
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU3IEBACisyMDE4LTEwLTAxICBBbGVqYW5kcm8gRy4g
Q2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlh
RGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHRoZSBlbnVtZXJhdGVEZXZpY2Vz
IEFQSSB1c2luZyBhIG5ldyBXZWJLaXQgY2xhc3MKKyAgICAgICAgKERldmljZUlkSGFzaFNhbHRT
dG9yYWdlKSB0aGF0IGdlbmVyYXRlcyBhbmQgc3RvcmVzIHRoZSBkZXZpY2UgaWRzCisgICAgICAg
IGhhc2ggc2FsdHMgcGVyIG9yaWdpbiwgdXNlZCB0byBhdm9pZCBmaW5nZXJwcmludGluZyBpbiB0
aGUKKyAgICAgICAgd2VicGFnZXMuIFRoZSBoYXNoIHNhbHRzIGFyZSBwZXJzaXN0ZW50IHdoZW4g
dGhlIHdlYnBhZ2UgaXMgbm90CisgICAgICAgIGVwaGVtZXJhbCwgdGhleSB1c2UgYSBuZXcgZGly
ZWN0b3J5IHdoZXJlIGEgZmlsZSBpcyBzdG9yZWQgd2l0aAorICAgICAgICB0aGUgU2VjdXJpdHlP
cmlnaW4gaWQgYXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYW5kIHRoZSBoYXNoIHNhbHQgYXMKKyAg
ICAgICAgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuCisKKyAgICAgICAgVGhlIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB0eXBlIG9mIGRhdGEgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAg
ICBUaGF0IHdheSB0aGUgdXNlcnMgY2FuIGNhbGwgdGhlIFdlYnNpdGVEYXRhU3RvcmUgdG8gc2hv
dyB3aGF0CisgICAgICAgIG9yaWdpbnMgaGF2ZSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGFuZCByZW1v
dmUgdGhlbSBhdCBzb21lIHBvaW50LgorCisgICAgICAgIFRoZSBEZXZpY2VIYXNoU2FsdFN0b3Jh
Z2UgY2xhc3MgcmVhZHMgdGhlIGluZm9ybWF0aW9uIGluIGRpc2sgd2hlbgorICAgICAgICBpdCBp
cyBjcmVhdGVkIGFuZCB1cGRhdGVzIHRoZSBkaXNrIHN0b3JhZ2Ugd2hlbiBzb21lIG1vZGlmaWNh
dGlvbgorICAgICAgICBpcyBkZXRlY3RlZC4gSXQgaXMgYWxzbyB1c2VkIGFzIHRoZSBkZWxlZ2F0
ZSBvZiB0aGUgV2Vic2l0ZURhdGFTdG9yZQorICAgICAgICBBUEkgdG8gcmVtb3ZlIHRoZSBzdG9y
ZWQgaGFzaCBzYWx0cy4KKworICAgICAgICBGb3IgdGhlIG1vbWVudCBqdXN0IEdUSysgYW5kIFdQ
RSBwb3J0cyBhcmUgdXNpbmcgdGhpcyBjbGFzcyB0bworICAgICAgICBnZW5lcmF0ZSB0aGUgaGFz
aCBzYWx0cy4gVGhlIHBhdGNoIGFkZHMgY29kZSB0byB0aGUKKyAgICAgICAgY2hlY2tVc2VyTWVk
aWFQZXJtaXNzaW9uRm9yT3JpZ2luIEFQSSBpbXBsZW1lbnRhdGlvbiwgaXQgd2FzIGVtcHR5Cisg
ICAgICAgIHVudGlsIG5vdyBmb3IgdGhlc2UgcG9ydHMuIEluIHRoaXMgZnVuY3Rpb24gd2UgY3Jl
YXRlIGFuIGluc3RhbmNlCisgICAgICAgIG9mIGEgbmV3IGNsYXNzIFdlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdCB0aGF0IGltcGxlbWVudHMKKyAgICAgICAgdGhlIFdlYktpdFBlcm1p
c3Npb25SZXF1ZXN0SWZhY2UgaW50ZXJmYWNlLCB0aGF0IGFsbG93cyB0aGUgcG9ydHMKKyAgICAg
ICAgdG8gdXNlIHRoZSBjdXJyZW50IHBlcm1pc3Npb24gbWFuYWdlcnMgaW1wbGVtZW50ZWQgaW4g
dGhlCisgICAgICAgIGVtYmVkZGVycyB0byBoYW5kbGUgdGhpcyBuZXcga2luZCBvZiByZXF1ZXN0
IHRoZSB3YXkgdGhleSBsaWtlCisgICAgICAgIGl0LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
biBpcyBkZW55LgorCisgICAgICAgIFRoZSBjbGFzcyBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QgdGFrZXMgY2FyZSBvZgorICAgICAgICBjb250YWN0aW5nIHRoZSBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZSBhbmQgcmVxdWVzdC9yZWdlbmVyYXRlIHRoZQorICAgICAgICBoYXNoIHNh
bHRzIGFjY29yZGluZ2x5LgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBhZGRpdGlvbiB0byB0aGUg
Z2VuZXJhbCBBUEkgdG8gaGFuZGxlIHRoZSBsb2NhdGlvbiBvZgorICAgICAgICB0aGUgZGlyZWN0
b3J5IHdoZXJlIHRoZSBmaWxlcyBhcmUgc3RvcmVkIHRvIG1ha2UgdGhlIGhhc2ggc2FsdAorICAg
ICAgICBwZXJzaXN0ZW50LgorCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhVHlwZS5oOiBBZGRlZCB0aGUgbmV3IHR5cGUgb2YKKyAgICAgICAgd2Vic2lkZSBkYXRhOiBE
ZXZpY2VJZEhhc2hTYWx0LgorICAgICAgICAqIFNvdXJjZXMudHh0OiBBZGRlZCBuZXcgZmlsZXMg
dG8gY29tcGlsYXRpb24uCisgICAgICAgICogU291cmNlc0dUSy50eHQ6IERpdHRvLgorICAgICAg
ICAqIFNvdXJjZXNXUEUudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdl
YnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpsZWdh
Y3lEZWZhdWx0RGF0YVN0b3JlQ29uZmlndXJhdGlvbik6CisgICAgICAgIEluaXRpYWxpemUgdGhl
IG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgaGFzaCBzYWx0cy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUuaDogRGl0dG8uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9BUElXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06CisgICAgICAg
IChBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VE
aXJlY3RvcnkpOgorICAgICAgICBBZGRlZCB0aGUgZnVuY3Rpb24gdG8gZGVmaW5lIHRoZSBkZWZh
dWx0IGRpcmVjdG9yeSwgbm90IGltcGxlbWVudGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
d2luL0FQSVdlYnNpdGVEYXRhU3RvcmVXaW4uY3BwOgorICAgICAgICAoQVBJOjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KToKKyAgICAg
ICAgKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6bGVnYWN5RGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VE
aXJlY3RvcnkpOgorICAgICAgICBBZGRlZCB0aGUgZnVuY3Rpb24gdG8gZGVmaW5lIHRoZSBkZWZh
dWx0IGRpcmVjdG9yeSwgbm90IGltcGxlbWVudGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9BUElXZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHA6CisgICAgICAgIChBUEk6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkpOgorICAg
ICAgICBBZGRlZCB0aGUgZGVmYXVsdCBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBHVEsr
IGFuZCBXUEUgcG9ydHMuCisgICAgICAgIChBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURl
ZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkpOiBEaXR0by4KKyAgICAgICAg
KEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUNvbmZpZ3VyYXRpb24pOiBJ
bml0aWFsaXplCisgICAgICAgIHRoZSBkZWZhdWx0IG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBmb3Ig
dGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHA6IEFkZGVkCisgICAgICAgIHRoaXMgY2xhc3Mg
dG8gcmVwcmVzZW50IGEgcmVxdWVzdCBvZiBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUKKyAgICAg
ICAgZGV2aWNlcyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBzcGVjaWZpYyBmb3IgZ2xpYiBwb3J0cyBh
bmQgaW1wbGVtZW50cworICAgICAgICB0aGUgcG9saWNpZXMgcmVnYXJkaW5nIHRoZSBoYXNoIHNh
bHRzIHdoZW4gdGhlIGVtYmVkZGVyIGFsbG93cyBvcgorICAgICAgICBkZW5pZXMgdGhlIGFjY2Vz
cyB1c2luZyB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgY2xhc3MuCisgICAgICAgICh3ZWJr
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RBbGxvdyk6IEdldCB0aGUgZGV2aWNlIGhhc2gg
c2FsdAorICAgICAgICB3aGVuIHRoZSBvcmlnaW4gaXMgYWxsb3dlZCBhbmQgc2V0IGl0IGluIHRo
ZSBvcmlnaW5hbCByZXF1ZXN0LgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0RGVueSk6IFJlZ2VuZXJhdGUgdGhlIGRldmljZSBpZAorICAgICAgICBoYXNoIHNhbHQg
d2hlbiB0aGUgdXNlciBkb2VzIG5vdCBhbGxvdyB0byBhY2Nlc3MgdGhlIGRldmljZSBpbmZvcm1h
dGlvbi4KKyAgICAgICAgKHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQp
OgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZSk6Cisg
ICAgICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2NsYXNzX2luaXQp
OgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKTogQ3Jl
YXRlIHRoZSBjbGFzcyB1c2luZworICAgICAgICB0aGUgcHJveHkgcmVxdWVzdCBmcm9tIHRoZSB3
ZWJwcm9jZXNzIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUKKyAgICAgICAgRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaDoKKyAgICAgICAgRGl0dG8uCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcDogQWRkZWQgdGhlIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGZvciB0aGUgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luIEFQ
SSBmb3IgdGhlIGdsaWIgcG9ydHMsCisgICAgICAgIGl0IGNyZWF0ZXMgdGhlIGRldmljZSBpbmZv
IHJlcXVlc3QgYW5kIGNhbGxzIHRoZSBwZXJtaXNzaW9uCisgICAgICAgIHJlcXVlc3QgQVBJLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YS5jcHA6CisgICAg
ICAgICh0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMpOiBBZGRlZCB0aGUgY29udmVyc2lvbiBmcm9t
IHRoZSBXZWJLaXQKKyAgICAgICAgdHlwZXMgdG8gdGhlIGdsaWIgdHlwZXMgZm9yIHRoZSBXZWJz
aXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgICh3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXREYXRhU3RvcmUpOiBBZGRlZCB0aGUgZGlyZWN0b3J5IHRvCisgICAgICAg
IHN0b3JlIHRoZSBoYXNoIHNhbHRzLgorICAgICAgICAodG9XZWJzaXRlRGF0YVR5cGVzKTogQWRk
ZWQgdGhlIGNvbnZlcnNpb24gZnJvbSB0aGUgZ2xpYiB0eXBlCisgICAgICAgIFdFQktJVF9XRUJT
SVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCB0byB0aGUgV2ViS2l0IHR5cGUuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmg6
IEFkZGVkCisgICAgICAgIHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHBlcm1pc3Np
b24gcmVxdWVzdCBmb3IgdGhlIGRldmljZQorICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgR1RL
KyBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmg6
IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaXRlIHRoYXQgaW4gdGhlIEdUSysg
cG9ydDoKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxULgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdC5oOiBBZGRlZAorICAgICAgICB0aGlzIG5ldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBw
ZXJtaXNzaW9uIHJlcXVlc3QgZm9yIHRoZSBkZXZpY2UKKyAgICAgICAgaW5mb3JtYXRpb24gaW4g
dGhlIFdQRSBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVE
YXRhLmg6IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaXRlIHRoYXQgaW4gdGhl
IFdQRSBwb3J0OgorICAgICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NB
TFQuCisgICAgICAgICogVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkuY3BwOiBBZGRlZAorICAgICAgICBhbiBpbmNsdWRlIHRvIHNvbHZlIGNvbXBp
bGF0aW9uIGlzc3VlIHdpdGggdGhlIHVuaWZpZWQgY29tcGlsYXRpb24uCisgICAgICAgICogVUlQ
cm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcDogQWRkZWQgdGhpcyBuZXcgY2xhc3Mg
dGhhdAorICAgICAgICBoYW5kbGVzIGhvdyB0byBnZW5lcmF0ZSBhbmQgc3RvcmUgdGhlIGhhc2gg
c2FsdHMgaW5zaWRlIFdlYktpdC4gSXQKKyAgICAgICAgdXNlcyBhIGRpcmVjdG9yeSB0byBzdG9y
ZSBhIGxpc3Qgb2YgZmlsZXMgdG8gc3RvcmUgdGhlIGhhc2ggc2FsdHMKKyAgICAgICAgcGVyc2lz
dGVudGx5IGluIHRoZSBkaXNrLgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZTo6bG9hZFN0b3JhZ2VGcm9tRGlzayk6IEl0IHJlYWRzIGZpbGVzCisgICAgICAgIGluIHRo
ZSBkaXNrIHRvIHJlc3RvcmUgdGhlIG1hcCBvZiBoYXNoIHNhbHQgb3JpZ2lucy4KKyAgICAgICAg
KFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnN0b3JlSGFzaFNhbHRUb0Rpc2spOiBT
YXZlcyBhbgorICAgICAgICBvcmlnaW4gYW5kIGl0cyBoYXNoIHNhbHQgdG8gdGhlIGRpc2suCisg
ICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZGVudGlm
aWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAgICBDaGVjayB0aGUgbWFwIHRvIGdldCB0aGUg
aGFzaCBzYWx0IGZvciBhbiBvcmlnaW4sIGlmIHRoZXJlIGlzIG5vbmUKKyAgICAgICAgY3JlYXRl
IGEgbmV3IHJhbmRvbSBvbmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9y
YWdlOjpyZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKToKKyAgICAg
ICAgRGVsZXRlIHRoZSBoYXNoIHNhbHQgb2YgYW4gb3JpZ2luIGlmIGl0IGFscmVhZHkgZXhpc3Rz
IGFuZCBjcmVhdGUgYSBuZXcgb25lLgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZTo6c2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKToKKyAgICAgICAg
U2V0IHRoZSBoYXNoIHNhbHQgb2YgYW4gb3JpZ2luIGluIHRoZSBtYXAsIGlmIHRoZSBtYXAgYWxy
ZWFkeSBoYXMKKyAgICAgICAgdGhhdCBvcmlnaW4gaXQgcmVwbGFjZXMgdGhlIGhhc2ggc2FsdCwg
aW4gb3RoZXIgY2FzZSBpdCBjcmVhdGVzIGEKKyAgICAgICAgbmV3IHJlZ2lzdGVyIGluIHRoZSBt
YXAuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJ
ZEhhc2hTYWx0T3JpZ2lucyk6CisgICAgICAgIFJldHVybnMgdGhlIGxpc3Qgb2Ygb3JpZ2lucyB0
aGF0IGhhdmUgYSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGZvcgorICAgICAgICB0aGVtLiBJdCBpcyB1
c2VkIGluIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZTo6ZGVsZXRlSGFzaFNhbHRGcm9tRGlza0lmTmVlZGVkKToKKyAgICAgICAg
RGVsZXRlcyB0aGUgZmlsZXMgaW4gZGlzayByZXByZXNlbnRpbmcgYSBoYXNoIHNhbHQgZm9yIGFu
IG9yaWdpbi4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRlbGV0
ZURldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKToKKyAgICAgICAgRGVsZXRlcyB0aGUgaGFzaCBz
YWx0cyBpbiB0aGUgbWFwIGZvciBhbiBvcmlnaW4uCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlk
SGFzaFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2luc01vZGlmaWVkU2lu
Y2UpOgorICAgICAgICBEZWxldGUgdGhlIG9yaWdpbnMgdGhhdCBoYXZlIG5vdCBiZWVuIG1vZGlm
aWVkIHNpbmNlIGEgdGltZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVja1Byb3h5Lmg6IFJlbW92ZSB1bmVlZGVkIGNsYXNzCisgICAgICAgIGRlZmluaXRpb24uCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOiBBZGRl
ZCBzdXBwb3J0IHRvCisgICAgICAgIHJldHVybiBhbmQgcmVtb3ZlIHRoZSBvcmlnaW5zIHdpdGgg
YSBnZW5lcmF0ZSBoYXNoIHNhbHQgdXNlZCB0bworICAgICAgICBnZW5lcmF0ZSB0aGUgZGV2aWNl
IGlkcy4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9y
ZSk6IEFkZGVkIHRoZSBuZXcKKyAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZSBjbGFzcywgdXNlZCB0byBoYW5kbGUgdGhlCisgICAgICAgIGhhc2ggc2FsdHMu
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lm
TmVjZXNzYXJ5KTogSGFuZGxlCisgICAgICAgIHRoZSBuZXcgZGlyZWN0b3J5IHVzZWQgZm9yIHRo
ZSBoYXNoIHNhbHRzIHN0b3JhZ2UgaW4gZGlzay4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOiBHZXQgdGhlIGxpc3Qgb2YKKyAgICAgICAgb3Jp
Z2lucyB3aXRoIGEgaGFzaCBzYWx0cyBpbiB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOiBSZW1vdmUgdGhl
IGhhc2ggc2FsdHMgaW4KKyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgZm9yIGFuIG9y
aWdpbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZWREZXZp
Y2VJZEhhc2hTYWx0c0RpcmVjdG9yeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRldmljZUlkSGFzaFNhbHRTdG9yYWdlKToKKyAgICAgICAgKiBXZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgdGhlCisgICAgICAgIERldmljZUlkSGFzaFNh
bHRTdG9yYWdlIHRvIHRoZSBjb21waWxhdGlvbi4KKwogMjAxOC0xMC0wMyAgTWljaGFlbCBDYXRh
bnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV1bR1RLXSBFbmFi
bGUgTVNFIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmluZGV4IGJlNTFhZTM0YTY5ZTlm
ZDY1NTA1MDdmNWI4YTMyYzBkNjdkYTY4NGMuLjllNWYyMjc2Mzc2MWFjMTIyNDI3OTMyYjQ3ZTQ2
ZTY2YTc3YTE1N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAtODEsOSArODEsNyBAQCB2b2lk
IE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQoKQogCiB2b2lkIE1lZGlhRGV2
aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+
PiYgZGV2aWNlcykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgVU5VU0VEX1BBUkFNKGRl
dmljZXMpOwotI2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShXUEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGNvbnN0IGludCBk
ZWZhdWx0Q2FtZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAgQEAgdm9pZCBNZWRpYURldmlj
ZXNSZXF1ZXN0OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZvPj4m
IGRldmljZXMKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0
Q2FtZXJhQ291bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
UEUpCisgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOworI2VuZGlm
CisKICAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwogCiAg
ICAgaW50IGNhbWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUsOCBAQCB2b2lkIE1lZGlhRGV2
aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+
PiYgZGV2aWNlcwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQorI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAppbmRleCA5ZDUwMzYxZTgx
YTM3YmQ5NDAyZGU5MWMxYzUzOTU4NGVhYWE2MmRlLi42MDFiYjQ0MzY3YmYxNWJlY2ViOWJiMWI2
ZGIzYmU3Nzc0NjY4YTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVR5cGUuaApAQCAtNDksNiArNDksNyBAQCBlbnVtIGNsYXNzIFdlYnNp
dGVEYXRhVHlwZSB7CiAgICAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMgPSAxIDw8IDE0LAog
I2VuZGlmCiAgICAgRE9NQ2FjaGUgPSAxIDw8IDE1LAorICAgIERldmljZUlkSGFzaFNhbHQgPSAx
IDw8IDE2LAogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDEwMjQ5OWJhNGZkMTQ0MmRlODFkZTkw
MmRiM2I5OGFiNTJhYzA4NTEuLjgwNjIxZDNhYTcxYTE5NWM1YWE1ZjM0YjRlZGEwOTBjZDQ1NjUy
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dApAQCAtMjI4LDYgKzIyOCw3IEBAIFVJUHJvY2Vzcy9GcmFtZUxvYWRT
dGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAK
IFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRT
dG9yYWdlLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3MvUHJv
Y2Vzc1Rocm90dGxlci5jcHAKIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNHVEsudHh0CmluZGV4IGUxMzgxOTQ5YjBmZDAzZjU2ODFlM2M4ZTJiYTE0MzkzYzJl
MzY5ZmMuLmZjNWY1NWZiYjdmNjIyNzExZjE3ZWNjOTY0M2JhMjU1MDM3Y2FiY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzR1RLLnR4dApAQCAtMTMzLDYgKzEzMyw3IEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRD
b250ZXh0TWVudUNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
Q29va2llTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q3Jl
ZGVudGlhbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdERvd25sb2FkLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXREb3dubG9hZENsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0RWRpdG9yU3RhdGUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
b3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggYzU5Zjhl
YjE4NDg1OGQwZTUyNDA3MDJlNmE1ZWE1ZmY5N2ZmYWNmNC4uOTY1NWFlMmM4NWIxN2M3MjJhZjAx
OTU5YjY3ZDFhMjk4YjlmYWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BF
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBAIC0xMjAsNiArMTIwLDcg
QEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBAbm8tdW5pZnkK
IFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuY3BwIEBuby11
bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWQuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBAbm8t
dW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JTdGF0ZS5jcHAgQG5vLXVuaWZ5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKaW5kZXggYTNlYzI1ZDBkZjZiODY3ZGM5MGNlMTg0YTg0NmIwN2UyYTk5ZTIzMS4uZTQx
ZmJiZDU0ZjZkOTBjYTEyZDIyOGJjM2RlMDQ0NGNhYWVjODJhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTI4LDYg
KzEyOCw3IEBAIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiBXZWJzaXRl
RGF0YVN0b3JlOjpsZWdhY3lEZWZhdWx0RGF0YVN0b3JlCiAgICAgY29uZmlndXJhdGlvbi5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
CiAgICAgY29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5ID0gbGVnYWN5RGVmYXVsdE1l
ZGlhQ2FjaGVEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VE
aXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworICAg
IGNvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gbGVnYWN5
RGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIGNvbmZpZ3Vy
YXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0SW5kZXhlZERC
RGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGly
ZWN0b3J5ID0gbGVnYWN5RGVmYXVsdFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCk7CiAgICAgY29u
ZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsZWdhY3lEZWZhdWx0TG9jYWxTdG9y
YWdlRGlyZWN0b3J5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdl
YnNpdGVEYXRhU3RvcmUuaAppbmRleCA2NmVmYTU4NzYwYTdmZTdlMWZjMjY3ZGNjNDUyMjczMjlm
ZGQyODNhLi5hOWYwNzQ5ZmFlZDllOTc2ZGY3NThmOGI5ZDBjZTQ2ZWYwMDA0ODA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0U2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmlu
ZyBkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgc3RhdGljIFdURjo6U3RyaW5n
IGRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFdURjo6U3Ry
aW5nIGRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBzdGF0
aWMgV1RGOjpTdHJpbmcgZGVmYXVsdFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCk7CiAgICAgc3Rh
dGljIFdURjo6U3RyaW5nIGRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7
CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRp
cmVjdG9yeSgpOwpAQCAtNzMsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdURjo6U3Ry
aW5nIGxlZ2FjeURlZmF1bHRJbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSgpOwogICAgIHN0YXRp
YyBXVEY6OlN0cmluZyBsZWdhY3lEZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAg
ICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5RGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rv
cnkoKTsKKyAgICBzdGF0aWMgV1RGOjpTdHJpbmcgbGVnYWN5RGVmYXVsdERldmljZUlkSGFzaFNh
bHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBsZWdhY3lEZWZh
dWx0TWVkaWFDYWNoZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBsZWdhY3lE
ZWZhdWx0SmF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJlY3RvcnkoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSVdlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElXZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KaW5kZXggMmE1NDEzMGY4YjUwYjdlYjNjN2M1NTMxM2UyNWUzMTY5YTQ3MDg5
NC4uN2ZkNzM1MjdlZmVlZDNmODk1OTY1NjA0NmYyNmQ2ZTE3ZTEyMDJkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSVdlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJV2Vic2l0ZURh
dGFTdG9yZUNvY29hLm1tCkBAIC05NSw2ICs5NSwxMiBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpCiAgICAgcmV0dXJuIHdl
YnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKCJNZWRpYUtleXMiKTsK
IH0KIAorV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNh
bHRzU3RvcmFnZURpcmVjdG9yeSgpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgorICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKwogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCkKIHsKICAgICByZXR1cm4gd2Vic2l0ZURhdGFEaXJl
Y3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oIldlYlNRTCIpOwpAQCAtMTk5LDYgKzIwNSwx
MiBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpsZWdhY3lEZWZhdWx0TWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSgpCiAgICAgcmV0dXJuIFdlYktpdDo6c3RyaW5nQnlSZXNvbHZpbmdT
eW1saW5rc0luUGF0aChbbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJk
aXppbmdQYXRoXSk7CiB9CiAKK1dURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
ZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQoreworICAgIC8vIE5vdCBpbXBsZW1l
bnRlZC4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRh
U3RvcmU6OmxlZ2FjeURlZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeSgpCiB7
CiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvQVBJV2Vic2l0ZURhdGFTdG9yZUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvQVBJV2Vic2l0ZURhdGFTdG9yZUdMaWIuY3BwCmluZGV4IDMxOTY4NDcy
NmY5YzJmNjFjZWRmNjEzZWUwYjE1YzJkYTM5NjdmNTkuLmU4MmNkMTFhNWMxZmNhNTRjZmNmOWJh
OTA4ZTIwOWUxOWRmMjZiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL0FQSVdlYnNpdGVEYXRhU3RvcmVHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9BUElXZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHAKQEAgLTczLDYgKzcz
LDExIEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRNZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5KCkKICAgICByZXR1cm4gd2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oQkFTRV9ESVJFQ1RPUlkgR19ESVJfU0VQQVJBVE9SX1MgIm1lZGlha2V5
cyIpOwogfQogCitTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNh
bHRzU3RvcmFnZURpcmVjdG9yeSgpCit7CisgICAgcmV0dXJuIHdlYnNpdGVEYXRhRGlyZWN0b3J5
RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKEJBU0VfRElSRUNUT1JZIEdfRElSX1NFUEFSQVRPUl9T
ICJkZXZpY2VpZGhhc2hzYWx0cyIpOworfQorCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKQogewogICAgIHJldHVybiB3ZWJzaXRl
RGF0YURpcmVjdG9yeUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihCQVNFX0RJUkVDVE9SWSBHX0RJ
Ul9TRVBBUkFUT1JfUyAiZGF0YWJhc2VzIik7CkBAIC0xNTYsNiArMTYxLDE1IEBAIFdURjo6U3Ry
aW5nIFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5KCkKICAgICByZXR1cm4gZGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKIH0K
IAorU3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1bHREZXZpY2VJZEhhc2hTYWx0
c1N0b3JhZ2VEaXJlY3RvcnkoKQoreworI2lmIFBMQVRGT1JNKFdQRSkKKyAgICBHVW5pcXVlUHRy
PGdjaGFyPiBkZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFt
ZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3cGUiLCAiZGV2aWNlaWRoYXNoc2FsdHMiLCBudWxs
cHRyKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5LmdldCgp
KTsKKyNlbmRpZgorICAgIHJldHVybiBkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGly
ZWN0b3J5KCk7Cit9CisKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1
bHRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeSgpCiB7CiAgICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gamF2YVNjcmlwdENvcmVDb25maWdEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dl
dF91c2VyX2RhdGFfZGlyKCksIEJBU0VfRElSRUNUT1JZLCAiSmF2YVNjcmlwdENvcmVEZWJ1ZyIs
IG51bGxwdHIpKTsKQEAgLTE3NCw2ICsxODgsNyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OkNvbmZpZ3VyYXRpb24gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUNvbmZpZwog
ICAgIGNvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBkZWZhdWx0V2ViU1FM
RGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVj
dG9yeSA9IGRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBjb25maWd1cmF0aW9u
Lm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVj
dG9yeSgpOworICAgIGNvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0
b3J5ID0gZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIGNv
bmZpZ3VyYXRpb24ucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGRlZmF1bHRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAKICAgICByZXR1cm4gY29uZmlndXJhdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYyZTg1NTAzM2YxMzYzN2M1YzE4OGVkYTk2Y2NkOGZiMGQ0NTYxOTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QuaCIKKworI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgiCisjaW5j
bHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9y
ZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RG
R1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjog
QSBwZXJtaXNzaW9uIHJlcXVlc3QgZm9yIGFjY2Vzc2luZyB1c2VyJ3MgYXVkaW8vdmlkZW8gZGV2
aWNlcy4KKyAqIEBUaXRsZTogV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0CisgKiBA
U2VlX2Fsc286ICNXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCwgI1dlYktpdFdlYlZpZXcKKyAqCisg
KiBXZWJLaXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdCByZXByZXNlbnRzIGEgcmVxdWVzdCBm
b3IKKyAqIHBlcm1pc3Npb24gdG8gd2hldGhlciBXZWJLaXQgc2hvdWxkIGJlIGFsbG93ZWQgdG8g
YWNjZXNzIHRoZSB1c2VyJ3MKKyAqIGRldmljZXMgaW5mb3JtYXRpb24gd2hlbiByZXF1ZXN0ZWQg
dGhyb3VnaCB0aGUgZW51bWVyYWNlRGV2aWNlcyBBUEkuCisgKgorICogV2hlbiBhIFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCBpcyBub3QgaGFuZGxlZCBieSB0aGUgdXNlciwKKyAq
IGl0IGlzIGRlbmllZCBieSBkZWZhdWx0LgorICoKKyAqIFNpbmNlOiAyLjIyCisgKi8KKworc3Rh
dGljIHZvaWQgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdChXZWJLaXRQ
ZXJtaXNzaW9uUmVxdWVzdElmYWNlKik7CisKK3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPFVzZXJNZWRpYVBlcm1pc3Npb25DaGVj
a1Byb3h5PiByZXF1ZXN0OworICAgIFJlZlB0cjxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4gZGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CisgICAgYm9vbCBtYWRlRGVjaXNpb247Cit9OworCitXRUJL
SVRfREVGSU5FX1RZUEVfV0lUSF9DT0RFKAorICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdCwgd2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdCwgR19UWVBFX09C
SkVDVCwKKyAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX1RZUEVfUEVSTUlTU0lPTl9S
RVFVRVNULCB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2ludGVyZmFjZV9pbml0KSkKKworc3Rh
dGljIHZvaWQgd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0QWxsb3coV2ViS2l0UGVy
bWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKFdFQktJVF9JU19ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgV2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ERVZJQ0VfSU5GT19QRVJN
SVNTSU9OX1JFUVVFU1QocmVxdWVzdCktPnByaXY7CisKKyAgICAvLyBPbmx5IG9uZSBkZWNpc2lv
biBhdCBhIHRpbWUuCisgICAgaWYgKHByaXYtPm1hZGVEZWNpc2lvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgcHJpdi0+bWFkZURlY2lzaW9uID0gdHJ1ZTsKKyAgICBhdXRvIHNhbHQgPSBwcml2
LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9y
T3JpZ2luKCpwcml2LT5yZXF1ZXN0LmdldCgpKTsKKyAgICBwcml2LT5yZXF1ZXN0LT5zZXRVc2Vy
TWVkaWFBY2Nlc3NJbmZvKFdURk1vdmUoc2FsdCksIHRydWUpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REZW55KFdlYktpdFBlcm1pc3Npb25SZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIEFTU0VSVChXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVSTUlT
U0lPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNUKHJlcXVlc3QpLT5wcml2OworCisgICAgLy8gT25seSBvbmUgZGVjaXNpb24gYXQgYSB0aW1l
LgorICAgIGlmIChwcml2LT5tYWRlRGVjaXNpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHBy
aXYtPm1hZGVEZWNpc2lvbiA9IHRydWU7CisgICAgYXV0byBzYWx0ID0gcHJpdi0+ZGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UtPnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmln
aW4oKnByaXYtPnJlcXVlc3QuZ2V0KCkpOworICAgIHByaXYtPnJlcXVlc3QtPnNldFVzZXJNZWRp
YUFjY2Vzc0luZm8oV1RGTW92ZShzYWx0KSwgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfcGVybWlzc2lvbl9yZXF1ZXN0X2ludGVyZmFjZV9pbml0KFdlYktpdFBlcm1pc3Npb25SZXF1
ZXN0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5hbGxvdyA9IHdlYmtpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdEFsbG93OworICAgIGlmYWNlLT5kZW55ID0gd2Via2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0RGVueTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gRGVm
YXVsdCBiZWhhdmlvdXIgd2hlbiBubyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlIGlzIGRlbnlpbmcg
dGhlIHJlcXVlc3QuCisgICAgd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueShX
RUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKG9iamVjdCkpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZGlzcG9z
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lv
bl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xh
c3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhrbGFzcyk7CisgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3REaXNwb3NlOworfQorCitXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QqIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYgcmVxdWVzdCwgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2Uq
IGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKQoreworICAgIFdlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdCogZGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ID0gV0VCS0lUX0RFVklDRV9J
TkZPX1BFUk1JU1NJT05fUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNULCBudWxscHRyKSk7CisKKyAgICBkZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3QtPnByaXYtPnJlcXVlc3QgPSAmcmVxdWVzdDsKKyAgICBkZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QtPnByaXYtPmRldmljZUlkSGFzaFNhbHRTdG9yYWdlID0gZGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2U7CisgICAgcmV0dXJuIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMzcxYjNlNDE2YTEyY2RkMTEwNzdmMjI5NGUwNTUyYmM4MTA5ODRlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmgiCisKK1dlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdCogd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmLCBXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRVSUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRVSUNsaWVudC5jcHAKaW5kZXggMDI3NTQzMTI3YWVlMWIwODZkMDM2MTUxZDExOGNmYzc5NjY2
YTQyZS4uMjcyZjMxNTIwNWRhYTg4OTJlZWNhNWVjMmFkOWFhMWNmOTlkMzI5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcApA
QCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKICNpbmNsdWRlICJE
cmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgiCkBAIC0zMiw2
ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5o
PgogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAtMTg5LDYgKzE5MSwxMyBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBib29sIGNoZWNrVXNlck1lZGlhUGVybWlz
c2lvbkZvck9yaWdpbihXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmLCBBUEk6OlNl
Y3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdp
biYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkm
IHBlcm1pc3Npb25SZXF1ZXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q+IGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dCA9IGFkb3B0R1JlZih3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUocGVy
bWlzc2lvblJlcXVlc3QsIHBhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpLmRldmljZUlkSGFzaFNhbHRT
dG9yYWdlKCkpKTsKKyAgICAgICAgd2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdCht
X3dlYlZpZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QoZGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0LmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5
JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpIGZpbmFsCiAgICAgewogICAgICAgICBHUmVmUHRyPFdlYktpdE5vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0PiBub3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0
R1JlZih3ZWJraXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdDo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKS5w
dHIoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2Vic2l0ZURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2Vic2l0ZURhdGEuY3BwCmluZGV4IGEyNGRhNGQ2ZTFjYzg4MjZlNGNlMjNkYTdhNzc1N2Vl
NWUzMDk0ZGYuLjdjOTdlMGIxYjI0YTFiM2E2YWEyMTMzZjg5NGExZThhNzhlMDAzOWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRl
RGF0YS5jcHAKQEAgLTc2LDcgKzc2LDggQEAgc3RhdGljIGJvb2wgcmVjb3JkQ29udGFpbnNTdXBw
b3J0ZWREYXRhVHlwZXMoY29uc3QgV2Vic2l0ZURhdGFSZWNvcmQmIHJlY29yZCkKICNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5E
YXRhLAogI2VuZGlmCi0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcworICAgICAgICBX
ZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNl
SWRIYXNoU2FsdAogICAgIH0pOwogfQogCkBAIC0xMDMsNiArMTA0LDggQEAgc3RhdGljIFdlYktp
dFdlYnNpdGVEYXRhVHlwZXMgdG9XZWJLaXRXZWJzaXRlRGF0YVR5cGVzKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGUKICNlbmRpZgogICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkNvb2tpZXMpKQogICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRB
X0NPT0tJRVM7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNl
SWRIYXNoU2FsdCkpCisgICAgICAgIHJldHVyblZhbHVlIHw9IFdFQktJVF9XRUJTSVRFX0RBVEFf
REVWSUNFX0lEX0hBU0hfU0FMVDsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0
ZURhdGFUeXBlcz4ocmV0dXJuVmFsdWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcApp
bmRleCA4NmJmNDdmZDFhZTBlYWQyOTFlYjUwOWFjMTdmYTYzYTYxMTRlMTZiLi43ZWYyNWVmZDNk
NDYwZDhkOTY3NGY0MmJmYTU3YTViMzAyNTI4NjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5j
cHAKQEAgLTM3MSw2ICszNzEsNyBAQCBBUEk6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YU1hbgogICAgICAgICBj
b25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gIXByaXYtPndlYlNRTERpcmVj
dG9yeSA/CiAgICAgICAgICAgICBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRXZWJTUUxE
YXRhYmFzZURpcmVjdG9yeSgpIDogV2ViQ29yZTo6RmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwcml2LT53ZWJTUUxEaXJlY3RvcnkuZ2V0KCkpOwogICAgICAg
ICBjb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBBUEk6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgICAgIGNv
bmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gQVBJOjpXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7
CiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6
OmNyZWF0ZUxlZ2FjeShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pKTsKICAgICB9CiAKQEAgLTY0OSw2
ICs2NTAsOCBAQCBzdGF0aWMgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0
YVR5cGVzKFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZQogI2VuZGlmCiAgICAgaWYgKHR5cGVz
ICYgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKQogICAgICAgICByZXR1cm5WYWx1ZS5hZGQo
V2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKTsKKyAgICBpZiAodHlwZXMgJiBXRUJLSVRfV0VCU0lU
RV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpCisgICAgICAgIHJldHVyblZhbHVlLmFkZChXZWJz
aXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY4
YzQyZWNiNjA4NGViNWEzYzUyMzY0ZDg0MWRkYzRlMTVkYjg4NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWYgIWRlZmluZWQo
X19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHku
IgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0X2gK
KyNkZWZpbmUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0X2gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9O
X1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVz
dF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJ
T05fUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RFVklD
RV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVF
U1QpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBF
X0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgICAgICAgIFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcyAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdFByaXZhdGUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZTsKKwor
c3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgeworICAgIEdPYmplY3Qg
cGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2
b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5
cGUgICAgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaAppbmRleCAwNjUwNDdm
ZTE3YzU4NWUyODI2MTE5YWNkYjRiMzA3MGUxNDMyMzIxLi42NzQzMDVjYzAxZjBkOTRhYjBjZGQy
NDdhOTMyOTBlZjNiOWE1NTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCkBAIC00NCw2ICs0NCw3IEBAIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJzaXRlRGF0YSBXZWJLaXRXZWJzaXRlRGF0YTsKICAqIEBXRUJLSVRfV0VC
U0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVM6IEluZGV4ZWREQiBkYXRhYmFzZXMuCiAgKiBA
V0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQTogUGx1Z2lucyBkYXRhLgogICogQFdFQktJ
VF9XRUJTSVRFX0RBVEFfQ09PS0lFUzogQ29va2llcy4KKyAqIEBXRUJLSVRfV0VCU0lURV9EQVRB
X0RFVklDRV9JRF9IQVNIX1NBTFQ6IEhhc2ggc2FsdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkZXZp
Y2UgaWRzIHVzZWQgYnkgd2VicGFnZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9BTEw6IEFs
bCB0eXBlcy4KICAqCiAgKiBFbnVtIHZhbHVlcyB3aXRoIGZsYWdzIHJlcHJlc2VudGluZyB0eXBl
cyBvZiBXZWJzaXRlIGRhdGEuCkBAIC02MCw3ICs2MSw4IEBAIHR5cGVkZWYgZW51bSB7CiAgICAg
V0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTICAgICAgID0gMSA8PCA2LAog
ICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEEgICAgICAgICAgICAgICA9IDEgPDwg
NywKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDgsCi0gICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAgICAg
ID0gKDEgPDwgOSkgLSAxCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9T
QUxUICAgICAgID0gMSA8PCA5LAorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAg
ICAgICAgICAgICAgICA9ICgxIDw8IDEwKSAtIDEKIH0gV2ViS2l0V2Vic2l0ZURhdGFUeXBlczsK
IAogV0VCS0lUX0FQSSBHVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dpbi9BUElXZWJzaXRlRGF0YVN0b3JlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93aW4vQVBJV2Vic2l0ZURhdGFTdG9yZVdpbi5jcHAKaW5kZXggNTBkZjJhYWVlNjE0
ZTNkYmEyNzYwZGZlMjY0ZTkzNjcyODEzYjYxYi4uNWMwNTJjOWZlYThkMzAzZTliOWFkMTI4MTE2
Njg1Njg0YjAyZjE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dp
bi9BUElXZWJzaXRlRGF0YVN0b3JlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd2luL0FQSVdlYnNpdGVEYXRhU3RvcmVXaW4uY3BwCkBAIC02NSw2ICs2NSwxMiBAQCBT
dHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnko
KQogICAgIHJldHVybiBXZWJDb3JlOjpGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoV2ViQ29yZTo6RmlsZVN5c3RlbTo6bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5
KCksICJNZWRpYUtleVN0b3JhZ2UiKTsKIH0KIAorU3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQoreworICAgIC8vIE5vdCBJ
bXBsZW1lbnRlZC4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIFN0cmluZyBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKQogewogICAgIHJldHVybiBX
ZWJDb3JlOjpGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6Rmls
ZVN5c3RlbTo6bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCksICJXZWJTUUwiKTsK
QEAgLTEyMCw2ICsxMjYsMTIgQEAgU3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1
bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkKICAgICByZXR1cm4gV2ViQ29yZTo6RmlsZVN5
c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KFdlYkNvcmU6OkZpbGVTeXN0ZW06OmxvY2Fs
VXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpLCAiTWVkaWFLZXlTdG9yYWdlIik7CiB9CiAK
K1N0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpsZWdhY3lEZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSgpCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkLgorICAgIHJldHVybiBTdHJpbmco
KTsKK30KKwogU3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmxlZ2FjeURlZmF1bHRKYXZhU2NyaXB0
Q29uZmlndXJhdGlvbkRpcmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OkZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChXZWJDb3JlOjpGaWxlU3lzdGVtOjpsb2NhbFVz
ZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKSwgIkphdmFTY3JpcHRDb3JlRGVidWciKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3N2QxOGQ2OTE4
MDNjNzI5ZGM1MGQ5MDY4MjQ3Nzg5OTIxOGQyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9u
bHkgPHdwZS93ZWJraXQuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktp
dERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdwZS9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QgICAgICAgICAg
ICAod2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RFVklDRV9J
TkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
KSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9E
RVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05f
UkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJL
SVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1J
U1NJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JF
UVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZp
Y2VJbmZvUGVybWlzc2lvblJlcXVlc3QgICAgICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3RDbGFzcyAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXREZXZp
Y2VJbmZvUGVybWlzc2lvblJlcXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8
IHByaXZhdGUgPiovCisgICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2
b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUgICAgKHZvaWQpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaAppbmRleCAzYTQ2MmFhZmY5Yjg3YzZlMGU1N2Y5NjJj
MGU0NjMwOTI1OWRkZTAzLi4wM2RkNTg1ZDEyNjVhNmU0ZWVkYjk0MjY4NzUzZjM2MjRjNjIwYWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNp
dGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJz
aXRlRGF0YS5oCkBAIC00NCw2ICs0NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRl
RGF0YSBXZWJLaXRXZWJzaXRlRGF0YTsKICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRURE
Ql9EQVRBQkFTRVM6IEluZGV4ZWREQiBkYXRhYmFzZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFU
QV9QTFVHSU5fREFUQTogUGx1Z2lucyBkYXRhLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQ09P
S0lFUzogQ29va2llcy4KKyAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NB
TFQ6IEhhc2ggc2FsdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkZXZpY2UgaWRzIHVzZWQgYnkgd2Vi
cGFnZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9BTEw6IEFsbCB0eXBlcy4KICAqCiAgKiBF
bnVtIHZhbHVlcyB3aXRoIGZsYWdzIHJlcHJlc2VudGluZyB0eXBlcyBvZiBXZWJzaXRlIGRhdGEu
CkBAIC02MCw3ICs2MSw4IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX1dFQlNJVEVfREFU
QV9JTkRFWEVEREJfREFUQUJBU0VTICAgICAgID0gMSA8PCA2LAogICAgIFdFQktJVF9XRUJTSVRF
X0RBVEFfUExVR0lOX0RBVEEgICAgICAgICAgICAgICA9IDEgPDwgNywKICAgICBXRUJLSVRfV0VC
U0lURV9EQVRBX0NPT0tJRVMgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCi0gICAgV0VCS0lU
X1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAgICAgID0gKDEgPDwgOSkgLSAxCisg
ICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUICAgICAgID0gMSA8PCA5
LAorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgx
IDw8IDEwKSAtIDEKIH0gV2ViS2l0V2Vic2l0ZURhdGFUeXBlczsKIAogV0VCS0lUX0FQSSBHVHlw
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmEwN2RhODY0NTdjYzA3MzE5ZGQ0Njc3N2U3MWEzMTg0NWZlMTM3
ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5jcHAKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBjb25zdCBpbnQgaGFzaFNhbHRTaXplID0g
NDg7CitzdGF0aWMgY29uc3QgaW50IHJhbmRvbURhdGFTaXplID0gaGFzaFNhbHRTaXplIC8gMTY7
CisKK1JlZjxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBi
b29sIGlzUGVyc2lzdGVudCkKK3sKKyAgICBhdXRvIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlID0g
YWRvcHRSZWYoKm5ldyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZShkZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZURpcmVjdG9yeSwgaXNQZXJzaXN0ZW50KSk7CisgICAgZGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UtPmxvYWRTdG9yYWdlRnJvbURpc2soKTsKKyAgICByZXR1cm4gZGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2U7Cit9CisKK0RldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZShjb25zdCBTdHJpbmcmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBib29s
IGlzUGVyc2lzdGVudCkKKyAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UiKSkKKyAgICAsIG1faXNQZXJzaXN0ZW50
KGlzUGVyc2lzdGVudCkKKyAgICAsIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3Rvcnko
ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnkpCit7Cit9CisKK0RldmljZUlkSGFzaFNh
bHRTdG9yYWdlOjp+RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKQoreworfQorCit2b2lkIERldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOjpsb2FkU3RvcmFnZUZyb21EaXNrKCkKK3sKKyAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11dGFi
bGUgeworICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgICAgICBGaWxl
U3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVj
dG9yeSk7CisKKyAgICAgICAgYXV0byBvcmlnaW5QYXRocyA9IEZpbGVTeXN0ZW06Omxpc3REaXJl
Y3RvcnkobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeSwgIioiKTsKKyAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBvcmlnaW5QYXRoIDogb3JpZ2luUGF0aHMpIHsKKyAgICAgICAgICAg
IFVSTCB1cmw7CisgICAgICAgICAgICB1cmwuc2V0UHJvdG9jb2woImZpbGUiX3MpOworICAgICAg
ICAgICAgdXJsLnNldFBhdGgob3JpZ2luUGF0aCk7CisKKyAgICAgICAgICAgIGxvbmcgbG9uZyBm
aWxlU2l6ZSA9IDA7CisgICAgICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXplKG9y
aWdpblBhdGgsIGZpbGVTaXplKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGlzIGNvZGUgc29tZXdoZXJlIHRv
IHVzZSBpdCB3aXRoIG90aGVyIHN0b3JhZ2VzLgorICAgICAgICAgICAgYXV0byBoYW5kbGUgPSBG
aWxlU3lzdGVtOjpvcGVuQW5kTG9ja0ZpbGUob3JpZ2luUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9w
ZW5Nb2RlOjpSZWFkKTsKKyAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkOworICAgICAgICAgICAgaWYgKCFXVEY6OmNvbnZl
cnRTYWZlbHkoZmlsZVNpemUsIGJ5dGVzVG9SZWFkKSkgeworICAgICAgICAgICAgICAgIEZpbGVT
eXN0ZW06OnVubG9ja0FuZENsb3NlRmlsZShoYW5kbGUpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ5
dGVzVG9SZWFkKTsKKyAgICAgICAgICAgIHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVTeXN0
ZW06OnJlYWRGcm9tRmlsZShoYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwor
CisgICAgICAgICAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9zZUZpbGUoaGFuZGxlKTsKKwor
ICAgICAgICAgICAgaWYgKHRvdGFsQnl0ZXNSZWFkICE9IGJ5dGVzVG9SZWFkKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGRldmljZUlkSGFzaFNhbHRPcmln
aW4gPSBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CisKKyAgICAgICAgICAg
IGF1dG8gc2VjdXJpdHlPcmlnaW5EYXRhID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJh
c2VJZGVudGlmaWVyKGRldmljZUlkSGFzaFNhbHRPcmlnaW4pOworICAgICAgICAgICAgaWYgKCFz
ZWN1cml0eU9yaWdpbkRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFN0cmluZyBkZXZpY2VJZEhhc2hTYWx0ID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7Cisg
ICAgICAgICAgICBpZiAoaGFzaFNhbHRTaXplICE9IGRldmljZUlkSGFzaFNhbHQubGVuZ3RoKCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHNldERldmljZUlkZW50
aWZpZXJIYXNoU2FsdEZvck9yaWdpbihzZWN1cml0eU9yaWdpbkRhdGEtPnNlY3VyaXR5T3JpZ2lu
KCksIFdURk1vdmUoZGV2aWNlSWRIYXNoU2FsdCkpOworICAgICAgICB9CisgICAgfSk7Cit9CisK
K3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnN0b3JlSGFzaFNhbHRUb0Rpc2soSGFzaFNh
bHRGb3JPcmlnaW4mIGhhc2hTYWx0Rm9yT3JpZ2luKQoreworICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZoYXNoU2FsdEZvck9yaWdp
bl0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICAgICAgU3RyaW5nIGZpbGVGdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBoYXNoU2FsdEZvck9y
aWdpbi5kZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4udXRmOCgpLmRhdGEoKSk7CisK
KyAgICAgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IEZpbGVTeXN0
ZW06Om9wZW5BbmRMb2NrRmlsZShmaWxlRnVsbFBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9k
ZTo6V3JpdGUpOworICAgICAgICBpZiAoaGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBkYXRh
YmFzZUlkZW50aWZpZXIgPSBoYXNoU2FsdEZvck9yaWdpbi5kb2N1bWVudE9yaWdpbi0+ZGF0YSgp
LmRhdGFiYXNlSWRlbnRpZmllcigpOworICAgICAgICBpbnQgZGF0YWJhc2VJZGVudGlmaWVyTGVu
Z3RoID0gZGF0YWJhc2VJZGVudGlmaWVyLnV0ZjgoKS5sZW5ndGgoKTsKKyAgICAgICAgYXV0byB3
cml0dGVuQnl0ZXMgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGFiYXNlSWRl
bnRpZmllci51dGY4KCkuZGF0YSgpLCBkYXRhYmFzZUlkZW50aWZpZXJMZW5ndGgpOworICAgICAg
ICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9zZUZpbGUoaGFuZGxlKTsKKworICAgICAgICBpZiAo
d3JpdHRlbkJ5dGVzICE9IGRhdGFiYXNlSWRlbnRpZmllckxlbmd0aCkKKyAgICAgICAgICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZUZ1bGxQYXRoKTsKKyAgICB9KTsKK30KKworU3RyaW5n
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JP
cmlnaW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIGdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihyZXF1ZXN0LnRvcExldmVs
RG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKTsKK30KKworU3RyaW5nIERldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpyZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFVzZXJN
ZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0KQoreworICAgIHJldHVybiByZWdlbmVy
YXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHJlcXVlc3QudG9wTGV2ZWxEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKCkpOworfQorCitTdHJpbmcgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oU2VjdXJpdHlP
cmlnaW4mIGRvY3VtZW50T3JpZ2luKQoreworICAgIGF1dG8gZG9jdW1lbnRPcmlnaW5EYXRhID0g
ZG9jdW1lbnRPcmlnaW4uZGF0YSgpOworICAgIG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5y
ZW1vdmVJZihbdGhpcywgJmRvY3VtZW50T3JpZ2luRGF0YV0oYXV0byYga2V5QW5kVmFsdWUpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMtPmRlbGV0ZUhhc2hTYWx0RnJvbURpc2tJZk5lZWRlZCgqa2V5
QW5kVmFsdWUudmFsdWUuZ2V0KCksIGtleUFuZFZhbHVlLnZhbHVlLT5kb2N1bWVudE9yaWdpbi0+
ZGF0YSgpID09IGRvY3VtZW50T3JpZ2luRGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gZ2V0
RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKGRvY3VtZW50T3JpZ2luKTsKK30KKwor
U3RyaW5nIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZGVudGlmaWVySGFzaFNh
bHRGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4mIGRvY3VtZW50T3JpZ2luKQoreworICAgIGF1dG8g
ZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbiA9IG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5l
bnN1cmUoZG9jdW1lbnRPcmlnaW4udG9SYXdTdHJpbmcoKSwgW3RoaXMsICZkb2N1bWVudE9yaWdp
bl0gKCkgeworICAgICAgICB1aW50NjRfdCByYW5kb21EYXRhW3JhbmRvbURhdGFTaXplXTsKKyAg
ICAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMocmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ocmFuZG9tRGF0YSksIHNpemVvZihyYW5kb21EYXRhKSk7CisKKyAgICAgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eSho
YXNoU2FsdFNpemUpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhbmRvbURhdGFTaXpl
OyBpKyspCisgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZDY0QXNIZXgocmFuZG9tRGF0YVswXSwg
YnVpbGRlcik7CisKKyAgICAgICAgU3RyaW5nIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgICAgICBhdXRvIG5ld0hhc2hTYWx0Rm9y
T3JpZ2luID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2FsdEZvck9yaWdpbj4oZG9jdW1lbnRPcmln
aW4sIFdURk1vdmUoZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKSk7CisKKyAgICAg
ICAgaWYgKHRoaXMtPm1faXNQZXJzaXN0ZW50KQorICAgICAgICAgICAgc3RvcmVIYXNoU2FsdFRv
RGlzaygqbmV3SGFzaFNhbHRGb3JPcmlnaW4uZ2V0KCkpOworCisgICAgICAgIHJldHVybiBuZXdI
YXNoU2FsdEZvck9yaWdpbjsKKyAgICB9KTsKKworICAgIGRldmljZUlkSGFzaFNhbHRGb3JPcmln
aW4uaXRlcmF0b3ItPnZhbHVlLT5sYXN0VGltZVVzZWQgPSBXYWxsVGltZTo6bm93KCk7CisKKyAg
ICByZXR1cm4gZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbi5pdGVyYXRvci0+dmFsdWUtPmRldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZTo6c2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luJiBkb2N1bWVudE9yaWdpbiwgU3RyaW5nJiYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KQor
eworICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbiA9IG1fZGV2aWNlSWRIYXNoU2Fs
dGZvck9yaWdpbi5lbnN1cmUoZG9jdW1lbnRPcmlnaW4udG9SYXdTdHJpbmcoKSwgWyZkb2N1bWVu
dE9yaWdpbiwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0ID0gV1RGTW92ZShkZXZpY2VJZGVudGlm
aWVySGFzaFNhbHQpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8SGFzaFNhbHRGb3JPcmlnaW4+KGRvY3VtZW50T3JpZ2luLCBXVEZNb3ZlKGRldmljZUlkZW50
aWZpZXJIYXNoU2FsdCkpOworICAgIH0pOworCisgICAgZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdp
bi5pdGVyYXRvci0+dmFsdWUtPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKworICAg
IGlmICghZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbi5pc05ld0VudHJ5KQorICAgICAgICBkZXZp
Y2VJZEhhc2hTYWx0Rm9yT3JpZ2luLml0ZXJhdG9yLT52YWx1ZS0+ZGV2aWNlSWRlbnRpZmllckhh
c2hTYWx0Rm9yT3JpZ2luID0gV1RGTW92ZShkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpOworfQor
Cit2b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lu
cyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0
YT4gb3JpZ2luczsKKworICAgICAgICBmb3IgKGF1dG8mIGhhc2hTYWx0Rm9yT3JpZ2luIDogbV9k
ZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luKQorICAgICAgICAgICAgb3JpZ2lucy5hZGQoaGFzaFNh
bHRGb3JPcmlnaW4udmFsdWUtPmRvY3VtZW50T3JpZ2luLT5kYXRhKCkpOworCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbb3JpZ2lucyA9IFdURk1vdmUob3JpZ2lucyksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK2Jvb2wgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRlbGV0ZUhh
c2hTYWx0RnJvbURpc2tJZk5lZWRlZChIYXNoU2FsdEZvck9yaWdpbiYgaGFzaFNhbHRGb3JPcmln
aW4sIGJvb2wgbmVlZHNSZW1vdmFsKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKG5lZWRzUmVtb3ZhbCkgeworICAgICAgICBTdHJpbmcgZmlsZUZ1bGxQYXRo
ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2VEaXJlY3RvcnksIGhhc2hTYWx0Rm9yT3JpZ2luLmRldmljZUlkZW50aWZpZXJIYXNo
U2FsdEZvck9yaWdpbi51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShmaWxlRnVsbFBhdGgpOworICAgIH0KKworICAgIHJldHVybiBuZWVkc1JlbW92YWw7Cit9
CisKK3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRlbGV0ZURldmljZUlkSGFzaFNhbHRG
b3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBGdW5j
dGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgVmVjdG9yPFNlY3VyaXR5
T3JpZ2luRGF0YT4gY29waWVkT3JpZ2luczsKKyAgICBjb3BpZWRPcmlnaW5zLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkob3JpZ2lucy5zaXplKCkpOworCisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBv
cmlnaW5zKQorICAgICAgICBjb3BpZWRPcmlnaW5zLnVuY2hlY2tlZEFwcGVuZChvcmlnaW4uaXNv
bGF0ZWRDb3B5KCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29waWVkT3JpZ2lucyA9IFdURk1vdmUoY29waWVkT3JpZ2lu
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5yZW1vdmVJZihbdGhp
cywgJmNvcGllZE9yaWdpbnNdKGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy0+ZGVsZXRlSGFzaFNhbHRGcm9tRGlza0lmTmVlZGVkKCprZXlBbmRWYWx1ZS52YWx1
ZS5nZXQoKSwgY29waWVkT3JpZ2lucy5jb250YWlucyhrZXlBbmRWYWx1ZS52YWx1ZS0+ZG9jdW1l
bnRPcmlnaW4tPmRhdGEoKSkpOworICAgICAgICB9KTsKKworICAgICAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2
b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2lu
c01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZSwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIHRpbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdGZv
ck9yaWdpbi5yZW1vdmVJZihbdGhpcywgdGltZV0oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLT5kZWxldGVIYXNoU2FsdEZyb21EaXNrSWZOZWVkZWQoKmtleUFu
ZFZhbHVlLnZhbHVlLmdldCgpLCBrZXlBbmRWYWx1ZS52YWx1ZS0+bGFzdFRpbWVVc2VkID4gdGlt
ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9y
YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWEyMWNlMmRhMDUwNjE0ODk1MTdlYTkzNDA4YWU2NmJlY2NkZjAz
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFz
aFNhbHRTdG9yYWdlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4geworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBib29sIGlzUGVyc2lzdGVudCk7CisgICAgfkRl
dmljZUlkSGFzaFNhbHRTdG9yYWdlKCk7CisKKyAgICBzdHJ1Y3QgSGFzaFNhbHRGb3JPcmlnaW4g
eworICAgICAgICBIYXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2Vj
dXJpdHlPcmlnaW4sIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbikK
KyAgICAgICAgICAgIDogZG9jdW1lbnRPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCisgICAgICAgICAg
ICAsIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihXVEZNb3ZlKGRldmljZUlkZW50
aWZpZXJIYXNoU2FsdEZvck9yaWdpbikpCisgICAgICAgICAgICAsIGxhc3RUaW1lVXNlZChXYWxs
VGltZTo6bm93KCkpCisgICAgICAgIHsgfTsKKworICAgICAgICBSZWY8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+IGRvY3VtZW50T3JpZ2luOworICAgICAgICBTdHJpbmcgZGV2aWNlSWRlbnRpZmll
ckhhc2hTYWx0Rm9yT3JpZ2luOworICAgICAgICBXYWxsVGltZSBsYXN0VGltZVVzZWQ7CisgICAg
fTsKKworICAgIFN0cmluZyBnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmKTsKKyAgICBTdHJpbmcgcmVnZW5lcmF0ZURldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eSYpOworCisgICAgdm9pZCBnZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhGdW5jdGlvbjx2b2lk
KEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgdm9pZCBkZWxldGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2lu
c01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CisKKyAgICB2b2lkIGxvYWRTdG9yYWdlRnJvbURpc2soKTsKKworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZShjb25zdCBTdHJpbmcmIGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBib29sIGlzUGVyc2lzdGVudCk7CisKKyAgICBTdHJp
bmcgZ2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luJiBkb2N1bWVudE9yaWdpbik7CisgICAgU3RyaW5nIHJlZ2VuZXJhdGVEZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIGRvY3VtZW50
T3JpZ2luKTsKKyAgICB2b2lkIHN0b3JlSGFzaFNhbHRUb0Rpc2soSGFzaFNhbHRGb3JPcmlnaW4m
KTsKKyAgICBib29sIGRlbGV0ZUhhc2hTYWx0RnJvbURpc2tJZk5lZWRlZChIYXNoU2FsdEZvck9y
aWdpbiYsIGJvb2wgbmVlZHNSZW1vdmFsKTsKKyAgICB2b2lkIHNldERldmljZUlkZW50aWZpZXJI
YXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgZG9jdW1lbnRPcmlnaW4s
IFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbik7CisKKyAgICBSZWY8
V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8
SGFzaFNhbHRGb3JPcmlnaW4+PiBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW47CisgICAgYm9v
bCBtX2lzUGVyc2lzdGVudDsKKyAgICBjb25zdCBTdHJpbmcgbV9kZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZURpcmVjdG9yeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgK
aW5kZXggZjM3YmU3YWIyMWYzZjExZjU3NWIxY2ZjMTI3N2JjYTU2NmNjYzMwMS4uZmJjYzRjZmVl
M2E1YjRiZDBjMGEwYWM2MjFkYjA4ZjFmYTRjMGVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oCkBAIC0zNiw4
ICszNiw2IEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
Y2xhc3MgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk7Ci0KIGNsYXNzIFVz
ZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6
Ok9iamVjdDo6VHlwZTo6VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrPiB7CiBwdWJsaWM6CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHAKaW5kZXggYzJlN2UxYjg2OTNhOWNkNDMwYjMwYjAwODQ5MTMxZjc1M2NhNzIx
Ny4uNWVlOGJmMmZmNGI3NTc0MTY0ZjkxZGFkNzM3ZTBmYTRmMzAxZDVjOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVJlY29yZC5o
IgogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlICJBdXRoZW50aWNh
dG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAjaW5j
bHVkZSAiTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyLmgiCkBAIC05NSw2ICs5Niw3
IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uLCBQQUw6OlNlc3Npb25JRCBzCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQp
CiAgICAgLCBtX2NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSkKICAgICAsIG1f
c3RvcmFnZU1hbmFnZXIoU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShtX2NvbmZpZ3VyYXRpb24ubG9j
YWxTdG9yYWdlRGlyZWN0b3J5KSkKKyAgICAsIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmNyZWF0ZShBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKSwgaXNQZXJzaXN0ZW50KCkpKQog
ICAgICwgbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XZWJzaXRl
RGF0YVN0b3JlIikpCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKICAgICAsIG1fYXV0aGVudGljYXRv
ck1hbmFnZXIobWFrZVVuaXF1ZVJlZjxBdXRoZW50aWNhdG9yTWFuYWdlcj4oKSkKQEAgLTE3MSw2
ICsxNzMsOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVj
ZXNzYXJ5KCkKICAgICAgICAgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVj
dG9yeSA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5z
aW9uKG1fY29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5KTsKICAgICBpZiAoIW1fY29u
ZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAg
bV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IHJlc29s
dmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5zaW9uKG1fY29uZmln
dXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KTsKKyAgICBpZiAoIW1fY29uZmlndXJh
dGlvbi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAg
ICBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lv
bihtX2NvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KTsKICAg
ICBpZiAoIW1fY29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkp
CiAgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5
ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRlbnNpb24o
bV9jb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5KTsKICAgICBpZiAoIW1fY29u
ZmlndXJhdGlvbi5pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC00ODUs
NiArNDg5LDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgICAgIH0pOwogICAgIH0K
IAorICAgIGlmIChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlICYmIGRhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpKSB7CisgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CisKKyAgICAgICAgbV9kZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS0+Z2V0RGV2aWNlSWRIYXNoU2FsdE9yaWdpbnMoW2NhbGxiYWNrQWdncmVn
YXRvcl0oSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiYgb3JpZ2lucykgewor
ICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7CisKKyAgICAgICAgICAgIHdoaWxl
ICghb3JpZ2lucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmll
cy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55KCksIFdlYnNpdGVE
YXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9KTsKKworICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwor
ICAgICAgICB9KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlzUGVyc2lzdGVudCgpKSB7
CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CiAKQEAg
LTgwMCw2ICs4MTcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAgICAgICAgfSk7CiAg
ICAgfQogCisgICAgaWYgKG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgJiYgKGRhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpIHx8IChkYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKSkpKSB7CisgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CisKKyAgICAgICAgbV9kZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS0+ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNl
KG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAg
IH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKIApAQCAtMTA3NCw2ICsxMDk5LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGlm
IChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlICYmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSB8fCAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6Q29va2llcykpKSkgeworICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2Ut
PmRlbGV0ZURldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKG9yaWdpbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0Nh
bGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJz
aXN0ZW50KCkpIHsKICAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IG9yaWdpbnM7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNv
cmRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggYTQyMjYxZjA0MWY1OTdhYTJhYTRhOTQzMzFjZDM1OGNh
ODJiNWZiYS4uMTc1MDZhMjg3N2VjN2VjNjVkNWE3ZTZlMTlkZGM5ZWU1M2RmMmM3MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaApAQCAtNTUsNiArNTUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhl
bnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNzIFN0b3JhZ2VN
YW5hZ2VyOworY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CiBjbGFzcyBXZWJQYWdlUHJv
eHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTsKQEAgLTkyLDYgKzkzLDcgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgd2ViU1FM
RGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7
CiAgICAgICAgIFN0cmluZyBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OworICAgICAgICBTdHJp
bmcgZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKICAgICAgICAgU3RyaW5nIGphdmFTY3JpcHRD
b25maWd1cmF0aW9uRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgY29va2llU3RvcmFnZUZpbGU7
CkBAIC0xNTIsNiArMTU0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRB
cHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZp
Z3VyYXRpb24uYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeTsgfQogICAgIGNvbnN0IFN0cmluZyYg
cmVzb2x2ZWRNZWRpYUNhY2hlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENv
bmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVjdG9yeTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVz
b2x2ZWRNZWRpYUtleXNEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmln
dXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OyB9CisgICAgY29uc3QgU3RyaW5nJiBy
ZXNvbHZlZERldmljZUlkSGFzaFNhbHRzRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
bHZlZENvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5OyB9CiAg
ICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZERhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1
cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7IH0KICAg
ICBjb25zdCBTdHJpbmcmIHJlc29sdmVkSmF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJlY3Rvcnko
KSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5qYXZhU2NyaXB0Q29uZmln
dXJhdGlvbkRpcmVjdG9yeTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRDb29raWVTdG9y
YWdlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLmNvb2tpZVN0
b3JhZ2VGaWxlOyB9CkBAIC0xNjEsNiArMTY0LDggQEAgcHVibGljOgogCiAgICAgU3RvcmFnZU1h
bmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9zdG9yYWdlTWFuYWdlci5nZXQoKTsg
fQogCisgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UqIGRldmljZUlkSGFzaFNhbHRTdG9yYWdl
KCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQorCiAgICAgV2Vi
UHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKICAg
ICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7CiAK
QEAgLTIzNSw2ICsyNDAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNSZXNvbHZlZERpcmVj
dG9yaWVzIHsgZmFsc2UgfTsKIAogICAgIGNvbnN0IFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4gbV9z
dG9yYWdlTWFuYWdlcjsKKyAgICBjb25zdCBSZWZQdHI8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+
IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CiAgICAgUmVmUHRyPFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogICAgIGJvb2wgbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMWRiNmY2MjRkZDFmYjkx
NDQxMjA4ZjEwOWIzNzUyZWVhOTJhMGQwZi4uOTA2N2RmNjY4MTFlNTFmZjgzZThlNDc2YmRiNzUy
ZmQxOGNjMmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC03Niw2ICs3Niw4IEBACiAJCTAwQjk2NjE2MThFMjRDQkEwMENFMUY4OCAv
KiBBUElGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwMEI5NjYxNTE4RTI0Q0JBMDBDRTFGODggLyogQVBJRmluZENsaWVudC5oICovOyB9
OwogCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTY2MTgxOEUyNUFFMTAwQ0Ux
Rjg4IC8qIEZpbmRDbGllbnQuaCAqLzsgfTsKIAkJMDcyOTdGOUYxQzE3QkJFQTAwM0YwNzM1IC8q
IFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMDAzRjA3MzUgLyogVXNlck1l
ZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLzsgfTsKKwkJMDcyOTdGOUUxQzE3QkJFQTAxNEYw
NzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgKi87IH07CisJCTA3Mjk3RjlGMUMxN0JCRUEwMTVGMDcz
NSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGOUQxQzE3QkJFQTIyM0YwNzM1IC8qIERldmljZUlk
SGFzaFNhbHRTdG9yYWdlLmggKi87IH07CiAJCTA3Mjk3RkEzMUMxODZBREIwMDNGMDczNSAvKiBX
S1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGQTExQzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMDc0RTc1RkUxREYyMjExOTAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzRFNzVGQjFERjFGRDEzMDBEMzE4RUMgLyogVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCAqLzsg
fTsKIAkJMDc2RTg4NEUxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzZFODg0RDFB
MTNDQURGMDA1RTkwRkMgLyogQVBJQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKQEAgLTE4MzUs
NiArMTgzNyw4IEBACiAJCTAwQjk2NjE4MThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGOUMxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRp
YVBlcm1pc3Npb25DaGVja1Byb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDcyOTdGOUQxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1p
c3Npb25DaGVja1Byb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJN
ZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3Mjk3RjlEMUMxN0JCRUEy
MjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzI5N0ZBMDFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVkaWFQZXJt
aXNzaW9uQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyTWVkaWFQZXJtaXNzaW9u
Q2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0RTc1RkIxREYxRkQxMzAw
RDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03MTg5LDYgKzcxOTMsOCBAQAogCQkJCTQ2QTJCNjA3MUU1Njc1QTIwMEMz
REVEQSAvKiBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuaCAqLywKIAkJCQlF
MTUxM0M2NDE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuY3BwICovLAogCQkJ
CUUxNTEzQzY1MTY2RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5oICovLAorCQkJ
CTA3Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAg
Ki8sCisJCQkJMDcyOTdGOUQxQzE3QkJFQTIyM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9y
YWdlLmggKi8sCiAJCQkJQkMyNjUyMTIxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVhUHJv
eHkuY3BwICovLAogCQkJCUJDMjY1MjEzMTE4MjYwODEwMDI0M0UxMiAvKiBEcmF3aW5nQXJlYVBy
b3h5LmggKi8sCiAJCQkJMUE2NDIyRkMxMkREMDhGRTAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJv
eHkubWVzc2FnZXMuaW4gKi8sCkBAIC04ODY0LDYgKzg4NzAsNyBAQAogCQkJCTFBQzc1MzgwMTgz
QkU1MEYwMDcyQ0IxNSAvKiBEYXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAz
MkRBNjEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdE
Q0VEQUIyMTRDNjAwOTAwMTZCODQ3IC8qIERldmljZUlkZW50aXR5U1BJLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwNzI5N0Y5RjFDMTdCQkVBMDE1RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzODkxQjZDMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzE4MTczNjEyMDU4NDI0
NzAwREZEQTY1IC8qIERpc3BsYXlMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzE0MjcwMjFD
MjNGODRDMDBENDExODMgLyogRG93bmxvYWQuaCBpbiBIZWFkZXJzICovLApAQCAtMTA2MDIsNiAr
MTA2MDksNyBAQAogCQkJCTJEOTJBNzdEMjEyQjZBNzEwMEY0OTNGRCAvKiBDb25uZWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzdFMjEyQjZBNzEwMEY0OTNGRCAvKiBEYXRhUmVm
ZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzdGMjEyQjZBNzEwMEY0OTNGRCAv
KiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3Mjk3RjlFMUMxN0JCRUEwMTRGMDcz
NSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI3
RDYxOTEyODhCOUQ5MDBDRkQwOEMgLyogRG93bmxvYWRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjI5OTEyREQwMjkyMDBDQUFFMkMgLyogRHJhd2luZ0Fy
ZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDIzMDgxMkREMDlF
QjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggNTBjOTU3NTgwYmM2ODE0YzNiNmRlZGNiMjYyZmJlM2M4NzU5MjhlZi4uMDRiZDg2ZWYyZGIx
ZjE0MzVlOGQwMDY0NmJkZDA5OTUwNWM0N2VkZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE4LTEwLTAxICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyBBUEkgdGVzdCBmb3Ig
dGhlIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzOgorICAgICAgICB1c2VybWVkaWEtZW51
bWVyYXRlZGV2aWNlcy1wZXJtaXNzaW9uLWNoZWNrLiBBbmQgYSBuZXcgQVBJIHRlc3QKKyAgICAg
ICAgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3JlOiB0ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhhc2hT
YWx0LgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL21haW4uYzoKKyAgICAgICAgKGdvdFdl
YnNpdGVEYXRhQ2FsbGJhY2spOiBBZGRlZCBhIG5ldyBzZWN0aW9uIHRvIHRoZSBhYm91dDpkYXRh
CisgICAgICAgIHdlYnBhZ2UgdG8gaW5jbHVkZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhh
c2ggc2FsdC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJ
Q2xpZW50LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNl
c1Blcm1pc3Npb25DaGVjayk6IEFkZGVkIHRoZQorICAgICAgICBuZXcgdGVzdCBjaGVja2luZyB0
aGUgZW51bWVyYXRlRGV2aWNlcyBBUEkgd2hlbiBwZXJtaXNzaW9uIGlzCisgICAgICAgIGRlbmll
ZCBhbmQgd2hlbiBwZXJtaXNzaW9uIGlzIGFsbG93ZWQgZm9yIHRoZSBvcmlnaW4uCisgICAgICAg
IChiZWZvcmVBbGwpOiBEZWZpbmVkIHRoZSBuZXcgdGVzdC4KKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRhLmNwcDoKKyAgICAgICAgKHNlcnZl
ckNhbGxiYWNrKTogUmVnaXN0ZXIgYSBuZXcgVVJJIGZvciB0aGUgZW51bWVyYXRlRGV2aWNlcy4K
KyAgICAgICAgKHRlc3RXZWJzaXRlRGF0YUNvbmZpZ3VyYXRpb24pOiBSZW1vdmUgdGhlIGhhc2gg
c2FsdHMgZnJvbSB0aGUKKyAgICAgICAgZGlyZWN0b3JpZXMuCisgICAgICAgICh0ZXN0V2Vic2l0
ZURhdGFEZXZpY2VJZEhhc2hTYWx0KTogTmV3IHRlc3QgY2hla2luZyB0aGUKKyAgICAgICAgZW51
bWVyYXRlRGV2aWNlcyBBUEkuCisgICAgICAgIChiZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRl
c3QgdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdCB0bworICAgICAgICB0aGUgaW5pdCBz
dHJ1Y3R1cmUuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmll
d1Rlc3QuY3BwOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmluaXRpYWxpemVXZWJWaWV3KTogTWFr
ZSBzdXJlIHRoZSBtZWRpYS1zdHJlYW0gaXMKKyAgICAgICAgYWN0aXZhdGVkIGluIHRoZSB3ZWJW
aWV3LgorCiAyMDE4LTEwLTAzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEVuYWJsZSBzZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCBieSBk
ZWZhdWx0IGluIFdlYktpdExlZ2FjeQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKaW5kZXggNTg3MDFmYzg0MmNl
NTk1ZDI2ODQ3NjJhNGExM2ViMTg2NDg5YTQ5MC4uNTEzM2E0ZGQ2MWI5MmNkNTMxZGU5MzQ5ODA5
MzMxMTQ3MDgzZWIxNCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBAIC00MDIsNiArNDAyLDcgQEAgc3Rh
dGljIHZvaWQgZ290V2Vic2l0ZURhdGFDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIg
Km1hbmFnZXIsIEdBc3luY1Jlc3UKIAogICAgIGd1aW50NjQgcGFnZUlEID0gd2Via2l0X3dlYl92
aWV3X2dldF9wYWdlX2lkKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KGRh
dGFSZXF1ZXN0LT5yZXF1ZXN0KSk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0
YVJlcXVlc3QsIGRhdGFMaXN0LCAiQ29va2llcyIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lF
UywgTlVMTCwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVx
dWVzdCwgZGF0YUxpc3QsICJEZXZpY2UgSWQgSGFzaCBTYWx0IiwgV0VCS0lUX1dFQlNJVEVfREFU
QV9ERVZJQ0VfSURfSEFTSF9TQUxULCBOVUxMLCBwYWdlSUQpOwogICAgIGFib3V0RGF0YUZpbGxU
YWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIk1lbW9yeSBDYWNoZSIsIFdFQktJ
VF9XRUJTSVRFX0RBVEFfTUVNT1JZX0NBQ0hFLCBOVUxMLCBwYWdlSUQpOwogICAgIGFib3V0RGF0
YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkRpc2sgQ2FjaGUiLCBX
RUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdlciksIHBhZ2VJRCk7CiAgICAgYWJvdXRE
YXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiU2Vzc2lvbiBTdG9y
YWdlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9TRVNTSU9OX1NUT1JBR0UsIE5VTEwsIHBhZ2VJRCk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJ
Q2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlD
bGllbnQuY3BwCmluZGV4IDY2MTEzNzczZTNiNDM4MjE1OGY5ZDljNGVjYjcyYmM5NjgxMzA5NWQu
LmU1YjZhODllODQ1NWZjM2I1M2I4MDBmMmIwMDg0OGRlN2IxMmYxZTMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwCkBA
IC04MzQsNiArODM0LDQ3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3RwCiAjZW5kaWYgLy8gRU5B
QkxFKEdFT0xPQ0FUSU9OKQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25DaGVjayhVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0U2V0dGluZ3MqIHNl
dHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwor
ICAgIGdib29sZWFuIGVuYWJsZWQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYV9z
dHJlYW0oc2V0dGluZ3MpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX21lZGlhX3N0
cmVhbShzZXR0aW5ncywgVFJVRSk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdXNlck1lZGlhUmVxdWVzdEhUTUwgPQorICAgICAgICAiPGh0bWw+IgorICAgICAgICAi
ICA8c2NyaXB0PiIKKyAgICAgICAgIiAgZnVuY3Rpb24gcnVuVGVzdCgpIgorICAgICAgICAiICB7
IgorICAgICAgICAiICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygp
LnRoZW4oIgorICAgICAgICAiICAgICAgICBmdW5jdGlvbihkZXZpY2VzKSB7ICIKKyAgICAgICAg
IiAgICAgICAgICAgIGRldmljZXMuZm9yRWFjaChmdW5jdGlvbihkZXZpY2UpIHsiCisgICAgICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UubGFiZWwpIGRvY3Vt
ZW50LnRpdGxlID0gXCJPS1wiOyIKKyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgZG9jdW1lbnQudGl0bGUgPSBcIlBlcm1pc3Npb24gZGVu
aWVkXCI7IgorICAgICAgICAiICAgICAgICAgICAgfSkiCisgICAgICAgICIgICAgfSkiCisgICAg
ICAgICIgIH0iCisgICAgICAgICIgIDwvc2NyaXB0PiIKKyAgICAgICAgIiAgPGJvZHkgb25sb2Fk
PSdydW5UZXN0KCk7Jz48L2JvZHk+IgorICAgICAgICAiPC9odG1sPiI7CisKKyAgICB0ZXN0LT5t
X3ZlcmlmeU1lZGlhVHlwZXMgPSBUUlVFOworCisgICAgLy8gVGVzdCBkZW55aW5nIGEgcGVybWlz
c2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSBmYWxz
ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh1c2VyTWVkaWFSZXF1ZXN0SFRNTCwgbnVsbHB0cik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIlBlcm1pc3Npb24gZGVuaWVkIik7CisK
KyAgICAvLyBUZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1f
YWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSB0cnVlOworICAgIHRlc3QtPmxvYWRIdG1sKHVzZXJN
ZWRpYVJlcXVlc3RIVE1MLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5n
ZWRUbygiT0siKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX21lZGlhX3N0cmVh
bShzZXR0aW5ncywgZW5hYmxlZCk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3VXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
IHsKICAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nl
dHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CkBAIC0xMTU2LDYgKzExOTcsNyBAQCB2b2lkIGJlZm9y
ZUFsbCgpCiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZ2VvbG9jYXRp
b24tcGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3R2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMpOwogI2VuZGlmCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBVSUNsaWVu
dFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ1c2VybWVkaWEtZW51bWVyYXRlZGV2aWNlcy1w
ZXJtaXNzaW9uLWNoZWNrIiwgdGVzdFdlYlZpZXdVc2VyTWVkaWFFbnVtZXJhdGVEZXZpY2VzUGVy
bWlzc2lvbkNoZWNrKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ1
c2VybWVkaWEtcGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3VXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJh
dWRpby11c2VybWVkaWEtcGVybWlzc2lvbi1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdBdWRpb09ubHlV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdHMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRhLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3BwCmluZGV4
IDk3ZTE4OWI2ZjgyMzlmYmY3NWI3OWRkMDI2NWFiNzMxOGE4M2M4OTYuLjczYTFkMWI4OWMxM2Yz
NGFlZGZmYjFkNTk4ZjhjN2EzYWNkMWNlMmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3BwCkBAIC0yMSw2ICsy
MSw3IEBACiAKICNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViVmll
d1Rlc3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgogCiBzdGF0aWMgV2ViS2l0VGVzdFNl
cnZlcioga1NlcnZlcjsKIApAQCAtNjEsNiArNjIsMTEgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hh
cioKICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbG9jYWxTdG9yYWdlSFRNTCwgc3RybGVuKGxvY2FsU3Rv
cmFnZUhUTUwpKTsKICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSk7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZW51
bWVyYXRlZGV2aWNlcyIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGVudW1lcmF0ZURldmljZXNI
VE1MID0gIjxodG1sPjxib2R5IG9ubG9hZD1cIm5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVy
YXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcykgeyBkb2N1bWVudC50aXRsZSA9ICdG
aW5pc2hlZCc7IH0pXCI+PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBlbnVt
ZXJhdGVEZXZpY2VzSFRNTCwgc3RybGVuKGVudW1lcmF0ZURldmljZXNIVE1MKSk7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9GT1VORCk7CiB9CkBAIC0xNjMsNyArMTY5LDcgQEAgc3RhdGljIHZvaWQgdGVz
dFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiAKICAgICAvLyBDbGVhciBhbGwgcGVyc2lzdGVudCBjYWNoZXMsIHNpbmNlIHRoZSBk
YXRhIGRpciBpcyBjb21tb24gdG8gYWxsIHRlc3QgY2FzZXMuCiAgICAgc3RhdGljIGNvbnN0IFdl
YktpdFdlYnNpdGVEYXRhVHlwZXMgcGVyc2lzdGVudENhY2hlcyA9IHN0YXRpY19jYXN0PFdlYktp
dFdlYnNpdGVEYXRhVHlwZXM+KFdFQktJVF9XRUJTSVRFX0RBVEFfRElTS19DQUNIRSB8IFdFQktJ
VF9XRUJTSVRFX0RBVEFfTE9DQUxfU1RPUkFHRQotICAgICAgICB8IFdFQktJVF9XRUJTSVRFX0RB
VEFfV0VCU1FMX0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFC
QVNFUyB8IFdFQktJVF9XRUJTSVRFX0RBVEFfT0ZGTElORV9BUFBMSUNBVElPTl9DQUNIRSk7Cisg
ICAgICAgIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9XRUJTUUxfREFUQUJBU0VTIHwgV0VCS0lUX1dF
QlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9PRkZM
SU5FX0FQUExJQ0FUSU9OX0NBQ0hFIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFT
SF9TQUxUKTsKICAgICB0ZXN0LT5jbGVhcihwZXJzaXN0ZW50Q2FjaGVzLCAwKTsKICAgICBnX2Fz
c2VydCghdGVzdC0+ZmV0Y2gocGVyc2lzdGVudENhY2hlcykpOwogCkBAIC01MTcsNiArNTIzLDM5
IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YUNvb2tpZXMoV2Vic2l0ZURhdGFUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CiB9CiAKK3N0YXRp
YyB2b2lkIHRlc3RXZWJzaXRlRGF0YURldmljZUlkSGFzaFNhbHQoV2Vic2l0ZURhdGFUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmNsZWFyKFdFQktJVF9XRUJTSVRFX0RB
VEFfREVWSUNFX0lEX0hBU0hfU0FMVCwgMCk7CisKKyAgICBHTGlzdCogZGF0YUxpc3QgPSB0ZXN0
LT5mZXRjaChXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpOworICAgIGdf
YXNzZXJ0KCFkYXRhTGlzdCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9lbnVtZXJhdGVkZXZpY2VzIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxU
aXRsZUNoYW5nZWRUbygiRmluaXNoZWQiKTsKKworICAgIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2go
V0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKyAgICBnX2Fzc2VydChk
YXRhTGlzdCk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgoZGF0YUxpc3Qp
LCA9PSwgMSk7CisgICAgV2ViS2l0V2Vic2l0ZURhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJL
aXRXZWJzaXRlRGF0YSo+KGRhdGFMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydChkYXRhKTsKKyAg
ICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9u
ZXdfZm9yX3VyaShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSwgPT0sIHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSk7CisgICAgd2Via2l0X3NlY3VyaXR5
X29yaWdpbl91bnJlZihvcmlnaW4pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYnNp
dGVfZGF0YV9nZXRfdHlwZXMoZGF0YSksID09LCBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9J
RF9IQVNIX1NBTFQpOworCisgICAgR0xpc3QgcmVtb3ZlTGlzdCA9IHsgZGF0YSwgbnVsbHB0ciwg
bnVsbHB0ciB9OworICAgIHRlc3QtPnJlbW92ZShXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9J
RF9IQVNIX1NBTFQsICZyZW1vdmVMaXN0KTsKKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdF
QktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCk7CisgICAgZ19hc3NlcnQoIWRh
dGFMaXN0KTsKKworICAgIC8vIENsZWFyIGFsbC4KKyAgICBzdGF0aWMgY29uc3QgV2ViS2l0V2Vi
c2l0ZURhdGFUeXBlcyBjYWNoZUFuZEFwcGNhY2hlVHlwZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRX
ZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQp
OworICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kQXBwY2FjaGVUeXBlcywgMCk7CisgICAgZGF0YUxp
c3QgPSB0ZXN0LT5mZXRjaChjYWNoZUFuZEFwcGNhY2hlVHlwZXMpOworICAgIGdfYXNzZXJ0KCFk
YXRhTGlzdCk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAgICBrU2VydmVyID0gbmV3IFdl
YktpdFRlc3RTZXJ2ZXIoKTsKQEAgLTUyOSw2ICs1NjgsNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAg
ICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImRhdGFiYXNlcyIs
IHRlc3RXZWJzaXRlRGF0YURhdGFiYXNlcyk7CiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldl
YktpdFdlYnNpdGVEYXRhIiwgImFwcGNhY2hlIiwgdGVzdFdlYnNpdGVEYXRhQXBwY2FjaGUpOwog
ICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJjb29raWVzIiwg
dGVzdFdlYnNpdGVEYXRhQ29va2llcyk7CisgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktp
dFdlYnNpdGVEYXRhIiwgImRldmljZWlkaGFzaHNhbHQiLCB0ZXN0V2Vic2l0ZURhdGFEZXZpY2VJ
ZEhhc2hTYWx0KTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5jcHAKaW5kZXggM2MwOTVjMzdiNDJm
MzdkNGU1NjY2OGRjZmQ0NTI4MTMxMjRkMzM0Mi4uN2UzNTQwYjc4MWMyOWFkYmJhMzU3YmRmYmFi
OGU2NzQ2ZGNhYWY3YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktp
dEdMaWIvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJL
aXRHTGliL1dlYlZpZXdUZXN0LmNwcApAQCAtNDgsMTAgKzQ4LDE1IEBAIFdlYlZpZXdUZXN0Ojp+
V2ViVmlld1Rlc3QoKQogdm9pZCBXZWJWaWV3VGVzdDo6aW5pdGlhbGl6ZVdlYlZpZXcoKQogewog
ICAgIGdfYXNzZXJ0KCFtX3dlYlZpZXcpOworCisgICAgV2ViS2l0U2V0dGluZ3MqIHdlYmtpdFNl
dHRpbmdzID0gd2Via2l0X3NldHRpbmdzX25ldygpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZW5hYmxlX21lZGlhX3N0cmVhbSh3ZWJraXRTZXR0aW5ncywgVFJVRSk7CisKICAgICBtX3dlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAog
I2lmIFBMQVRGT1JNKFdQRSkKICAgICAgICAgImJhY2tlbmQiLCBUZXN0OjpjcmVhdGVXZWJWaWV3
QmFja2VuZCgpLAogI2VuZGlmCisgICAgICAgICJzZXR0aW5ncyIsIHdlYmtpdFNldHRpbmdzLAog
ICAgICAgICAid2ViLWNvbnRleHQiLCBtX3dlYkNvbnRleHQuZ2V0KCksCiAgICAgICAgICJ1c2Vy
LWNvbnRlbnQtbWFuYWdlciIsIG1fdXNlckNvbnRlbnRNYW5hZ2VyLmdldCgpLAogICAgICAgICBu
dWxscHRyKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMDRlNWQ0YzAzNWZhNjFjZmQ2NTJjMjIxMmVjZmY4M2UyMGM3MzJl
Yy4uZmQwNjA2OWIwYTYyMzViNzIwYWU4YzE0MzUyZTg0YWE4OWYxZjEwMiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIyIEBACisyMDE4LTEwLTAxICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZp
Y2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NTc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSB0aGUgZmFpbHVyZSBleHBlY3RhdGlvbiBmb3IgdGhlIHRlc3QKKyAgICAgICAg
bWVkaWEtZGV2aWNlcy1lbnVtZXJhdGUtZGV2aWNlcy5odG1sLiBKdXN0IGZvciB0aGUgcmVjb3Jk
IHdlIGhhdmUKKyAgICAgICAgYWxzbyBjaGVja2VkIHRoZSBmb2xsb3dpbmcgdGVzdHMuCisKKyAg
ICAgICAgZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0
bWwKKyAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9yZXNvdXJjZXMvZW51bWVyYXRlLWRldmljZXMt
ZnJhbWUuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9lbnVtZXJh
dGUtZGV2aWNlcy1zb3VyY2UtaWQuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlh
LXN0cmVhbS9lbnVtZXJhdGUtZGV2aWNlcy1zb3VyY2UtaWQtcGVyc2lzdGVudC5odG1sCisgICAg
ICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL3Jlc291cmNlcy9lbnVtZXJhdGUtZGV2
aWNlcy1zb3VyY2UtaWQtZnJhbWUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnM6CisKIDIwMTgtMTAtMDMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEVuYWJsZSBIMjY0IHNpbXVsY2FzdApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1MGI1NTIzZTk2YzIzM2I3NjU1NTc2M2U4YzE1
ZTJkNTMxYmI1NzJjLi42Zjk3MzA4MGY5MDg3NTFmOGU2NjI3MGIzMzRkZDg1YTUwODIyZWE3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjQwLDcgKzY0
MCw2IEBAIHdlYmtpdC5vcmcvYi83OTIwMyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L21lZGlhY2FwdHVyZS1zdHJlYW1zL01lZGlhU3RyCiB3ZWJraXQub3JnL2IvMTUxMzQ0IGZhc3Qv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRkLWVuZGVkLXRyYWNrcy5odG1sIFsgVGltZW91dCBd
CiAjIENyYXNoIGlzIGJ1ZyAjMTc2ODAxCiB3ZWJraXQub3JnL2IvMTYwOTk2IGZhc3QvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQuaHRt
bCBbIEltYWdlT25seUZhaWx1cmUgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE3MjI2OSBmYXN0L21l
ZGlhc3RyZWFtL21lZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmljZXMuaHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzE3MzI1NyBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ncmFu
dC1wZXJzaXN0ZW5jeTMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAKICMgQ2FudmFzIGNhcHR1cmVT
dHJlYW0gc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351531</attachid>
            <date>2018-10-03 10:19:33 -0700</date>
            <delta_ts>2018-10-03 10:25:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20181003191931.patch</filename>
            <type>text/plain</type>
            <size>66430</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2Nzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY5ZTE1YmJkMDAzZDA5
ZWQ2NDkyN2UzY2ViMTIyODQ4NDhkYzI4Yi4uZDU3MTViYWFmNzlhMjJjMDExYmU0M2ExOGE1NmJl
NWMyOTkzNjA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTEwLTAzICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMg
aWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lzdGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4K
KwogMjAxOC0xMC0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IGlucHV0LmNoZWNrZWQgaXMgaW5jb3JyZWN0IHdoaWxlIHdlJ3JlIHBhcnNpbmcgaXRzIGNoaWxk
cmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGI2ZmRkYTY1NjQyY2Y1ZTVhZTIxZWZmYWIxMjMwYWJhZTgzYzBlNGQu
LjY4YTQ5ZWMyYzI4Y2ZhYmYyYTMyZjNlNjI4MGY2NWVhZTQyODVjZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIwIEBACisyMDE4LTEwLTAzICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVE
ZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudGVkIHRoZSBlbnVtZXJhdGVEZXZpY2VzIEFQSSB1c2luZyBhIG5ldyBX
ZWJLaXQgY2xhc3MKKyAgICAgICAgKERldmljZUlkSGFzaFNhbHRTdG9yYWdlKSB0aGF0IGdlbmVy
YXRlcyBhbmQgc3RvcmVzIHRoZSBkZXZpY2UgaWRzCisgICAgICAgIGhhc2ggc2FsdHMgcGVyIG9y
aWdpbiwgdXNlZCB0byBhdm9pZCBmaW5nZXJwcmludGluZyBpbiB0aGUKKyAgICAgICAgd2VicGFn
ZXMuCisKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gYWRkcyBhIG5ldyB0eXBlIG9mIGRhdGEgZm9y
IHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICBUaGF0IHdheSB0aGUgdXNlcnMgY2FuIGNh
bGwgdGhlIFdlYnNpdGVEYXRhU3RvcmUgdG8gc2hvdyB3aGF0CisgICAgICAgIG9yaWdpbnMgaGF2
ZSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGFuZCByZW1vdmUgdGhlbSBhdCBzb21lIHBvaW50LgorCisg
ICAgICAgIEZvciB0aGUgbW9tZW50IGp1c3QgR1RLKyBhbmQgV1BFIHBvcnRzIGFyZSB1c2luZyB0
aGlzIGNsYXNzIHRvCisgICAgICAgIGdlbmVyYXRlIHRoZSBoYXNoIHNhbHRzLiBUaGUgcGF0Y2gg
YWRkcyBjb2RlIHRvIHRoZQorICAgICAgICBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmln
aW4gQVBJIGltcGxlbWVudGF0aW9uLCBpdCB3YXMgZW1wdHkKKyAgICAgICAgdW50aWwgbm93IGZv
ciB0aGVzZSBwb3J0cy4gSW4gdGhpcyBmdW5jdGlvbiB3ZSBjcmVhdGUgYW4gaW5zdGFuY2UKKyAg
ICAgICAgb2YgYSBuZXcgY2xhc3MgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHRo
YXQgaW1wbGVtZW50cworICAgICAgICB0aGUgV2ViS2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSBp
bnRlcmZhY2UsIHRoYXQgYWxsb3dzIHRoZSBwb3J0cworICAgICAgICB0byB1c2UgdGhlIGN1cnJl
bnQgcGVybWlzc2lvbiBtYW5hZ2VycyBpbXBsZW1lbnRlZCBpbiB0aGUKKyAgICAgICAgZW1iZWRk
ZXJzIHRvIGhhbmRsZSB0aGlzIG5ldyBraW5kIG9mIHJlcXVlc3QgdGhlIHdheSB0aGV5IGxpa2UK
KyAgICAgICAgaXQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGRlbnkuCisKKyAgICAg
ICAgVGhlIGNsYXNzIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCB0YWtlcyBjYXJl
IG9mCisgICAgICAgIGNvbnRhY3RpbmcgdGhlIERldmljZUlkSGFzaFNhbHRTdG9yYWdlIGFuZCBy
ZXF1ZXN0L3JlZ2VuZXJhdGUgdGhlCisgICAgICAgIGhhc2ggc2FsdHMgYWNjb3JkaW5nbHkuCisK
KyAgICAgICAgUGVyc2lzdGVuY3kgaXMgc3RpbGwgbm90IGltcGxlbWVudGVkLCB3ZSB3aWxsIGFk
ZCBpdCBpbiBhCisgICAgICAgIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICAqIFNoYXJlZC9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaDogQWRkZWQgdGhlIG5ldyB0eXBlIG9mCisgICAgICAg
IHdlYnNpZGUgZGF0YTogRGV2aWNlSWRIYXNoU2FsdC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDog
QWRkZWQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0
OiBEaXR0by4KKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDogRGl0dG8uCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHA6IEFk
ZGVkCisgICAgICAgIHRoaXMgY2xhc3MgdG8gcmVwcmVzZW50IGEgcmVxdWVzdCBvZiBwZXJtaXNz
aW9uIHRvIGFjY2VzcyB0aGUKKyAgICAgICAgZGV2aWNlcyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBz
cGVjaWZpYyBmb3IgZ2xpYiBwb3J0cyBhbmQgaW1wbGVtZW50cworICAgICAgICB0aGUgcG9saWNp
ZXMgcmVnYXJkaW5nIHRoZSBoYXNoIHNhbHRzIHdoZW4gdGhlIGVtYmVkZGVyIGFsbG93cyBvcgor
ICAgICAgICBkZW5pZXMgdGhlIGFjY2VzcyB1c2luZyB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UgY2xhc3MuCisgICAgICAgICh3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RBbGxv
dyk6IEdldCB0aGUgZGV2aWNlIGhhc2ggc2FsdAorICAgICAgICB3aGVuIHRoZSBvcmlnaW4gaXMg
YWxsb3dlZCBhbmQgc2V0IGl0IGluIHRoZSBvcmlnaW5hbCByZXF1ZXN0LgorICAgICAgICAod2Vi
a2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueSk6IFJlZ2VuZXJhdGUgdGhlIGRldmlj
ZSBpZAorICAgICAgICBoYXNoIHNhbHQgd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBhbGxvdyB0byBh
Y2Nlc3MgdGhlIGRldmljZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgKHdlYmtpdF9wZXJtaXNzaW9u
X3JlcXVlc3RfaW50ZXJmYWNlX2luaXQpOgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0RGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlz
c2lvbl9yZXF1ZXN0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0Q3JlYXRlKTogQ3JlYXRlIHRoZSBjbGFzcyB1c2luZworICAgICAgICB0aGUg
cHJveHkgcmVxdWVzdCBmcm9tIHRoZSB3ZWJwcm9jZXNzIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUK
KyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaDoKKyAgICAg
ICAgRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNw
cDogQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgIGZvciB0aGUgY2hlY2tVc2VyTWVk
aWFQZXJtaXNzaW9uRm9yT3JpZ2luIEFQSSBmb3IgdGhlIGdsaWIgcG9ydHMsCisgICAgICAgIGl0
IGNyZWF0ZXMgdGhlIGRldmljZSBpbmZvIHJlcXVlc3QgYW5kIGNhbGxzIHRoZSBwZXJtaXNzaW9u
CisgICAgICAgIHJlcXVlc3QgQVBJLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJzaXRlRGF0YS5jcHA6CisgICAgICAgICh0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMpOiBB
ZGRlZCB0aGUgY29udmVyc2lvbiBmcm9tIHRoZSBXZWJLaXQKKyAgICAgICAgdHlwZXMgdG8gdGhl
IGdsaWIgdHlwZXMgZm9yIHRoZSBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHA6
CisgICAgICAgICh0b1dlYnNpdGVEYXRhVHlwZXMpOiBBZGRlZCB0aGUgY29udmVyc2lvbiBmcm9t
IHRoZSBnbGliIHR5cGUKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFT
SF9TQUxUIHRvIHRoZSBXZWJLaXQgdHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaDogQWRkZWQKKyAgICAgICAgdGhpcyBu
ZXcgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgcGVybWlzc2lvbiByZXF1ZXN0IGZvciB0aGUgZGV2
aWNlCisgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBHVEsrIHBvcnQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaDogQWRkZWQgdGhlIG5ldyB0eXBlIG9m
CisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgR1RLKyBwb3J0OgorICAgICAgICBXRUJLSVRf
V0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmg6IEFkZGVkCisgICAgICAg
IHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHBlcm1pc3Npb24gcmVxdWVzdCBmb3Ig
dGhlIGRldmljZQorICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgV1BFIHBvcnQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaDogQWRkZWQgdGhlIG5ldyB0
eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgV1BFIHBvcnQ6CisgICAgICAgIFdF
QktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHA6IEFkZGVk
CisgICAgICAgIGFuIGluY2x1ZGUgdG8gc29sdmUgY29tcGlsYXRpb24gaXNzdWUgd2l0aCB0aGUg
dW5pZmllZCBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuY3BwOiBBZGRlZCB0aGlzIG5ldyBjbGFzcyB0aGF0CisgICAgICAgIGhhbmRsZXMg
aG93IHRvIGdlbmVyYXRlIGFuZCBzdG9yZSB0aGUgaGFzaCBzYWx0cyBpbnNpZGUKKyAgICAgICAg
V2ViS2l0LiBQZXJzaXN0ZW5jeSBpcyBzdGlsbCBub3QgaW1wbGVtZW50ZWQsIHdlIHdpbGwgYWRk
IGl0IGluIGEKKyAgICAgICAgZnV0dXJlIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKToK
KyAgICAgICAgQ2hlY2sgdGhlIG1hcCB0byBnZXQgdGhlIGhhc2ggc2FsdCBmb3IgYW4gb3JpZ2lu
LCBpZiB0aGVyZSBpcyBub25lCisgICAgICAgIGNyZWF0ZSBhIG5ldyByYW5kb20gb25lLgorICAg
ICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6cmVnZW5lcmF0ZURldmljZUlk
ZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbik6CisgICAgICAgIERlbGV0ZSB0aGUgaGFzaCBzYWx0
IG9mIGFuIG9yaWdpbiBpZiBpdCBhbHJlYWR5IGV4aXN0cyBhbmQgY3JlYXRlIGEgbmV3IG9uZS4K
KyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnNldERldmljZUlkZW50
aWZpZXJIYXNoU2FsdEZvck9yaWdpbik6CisgICAgICAgIFNldCB0aGUgaGFzaCBzYWx0IG9mIGFu
IG9yaWdpbiBpbiB0aGUgbWFwLCBpZiB0aGUgbWFwIGFscmVhZHkgaGFzCisgICAgICAgIHRoYXQg
b3JpZ2luIGl0IHJlcGxhY2VzIHRoZSBoYXNoIHNhbHQsIGluIG90aGVyIGNhc2UgaXQgY3JlYXRl
cyBhCisgICAgICAgIG5ldyByZWdpc3RlciBpbiB0aGUgbWFwLgorICAgICAgICAoV2ViS2l0OjpE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRIYXNoU2FsdE9yaWdpbnMpOgorICAg
ICAgICBSZXR1cm5zIHRoZSBsaXN0IG9mIG9yaWdpbnMgdGhhdCBoYXZlIGEgaGFzaCBzYWx0IGdl
bmVyYXRlZCBmb3IKKyAgICAgICAgdGhlbS4gSXQgaXMgdXNlZCBpbiB0aGUgV2Vic2l0ZURhdGFT
dG9yZS4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRlbGV0ZURl
dmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKToKKyAgICAgICAgRGVsZXRlcyB0aGUgaGFzaCBzYWx0
cyBpbiB0aGUgbWFwIGZvciBhbiBvcmlnaW4uCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFz
aFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2luc01vZGlmaWVkU2luY2Up
OgorICAgICAgICBEZWxldGUgdGhlIG9yaWdpbnMgdGhhdCBoYXZlIG5vdCBiZWVuIG1vZGlmaWVk
IHNpbmNlIGEgdGltZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVj
a1Byb3h5Lmg6IFJlbW92ZSB1bmVlZGVkIGNsYXNzCisgICAgICAgIGRlZmluaXRpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOiBBZGRlZCBz
dXBwb3J0IHRvCisgICAgICAgIHJldHVybiBhbmQgcmVtb3ZlIHRoZSBvcmlnaW5zIHdpdGggYSBn
ZW5lcmF0ZSBoYXNoIHNhbHQgdXNlZCB0bworICAgICAgICBnZW5lcmF0ZSB0aGUgZGV2aWNlIGlk
cy4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6
IEFkZGVkIHRoZSBuZXcKKyAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSBjbGFzcywgdXNlZCB0byBoYW5kbGUgdGhlCisgICAgICAgIGhhc2ggc2FsdHMuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KTogR2V0
IHRoZSBsaXN0IG9mCisgICAgICAgIG9yaWdpbnMgd2l0aCBhIGhhc2ggc2FsdHMgaW4gdGhlIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVEYXRhKTogUmVtb3ZlIHRoZSBoYXNoIHNhbHRzIGluCisgICAgICAgIERldmljZUlk
SGFzaFNhbHRTdG9yYWdlIGZvciBhbiBvcmlnaW4uCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRldmljZUlkSGFzaFNhbHRTdG9yYWdlKToKKyAgICAgICAgKiBXZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgdGhlCisgICAgICAgIERldmljZUlkSGFz
aFNhbHRTdG9yYWdlIHRvIHRoZSBjb21waWxhdGlvbi4KKwogMjAxOC0xMC0wMyAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV1bR1RLXSBF
bmFibGUgTVNFIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmluZGV4IGJlNTFhZTM0YTY5
ZTlmZDY1NTA1MDdmNWI4YTMyYzBkNjdkYTY4NGMuLjllNWYyMjc2Mzc2MWFjMTIyNDI3OTMyYjQ3
ZTQ2ZTY2YTc3YTE1N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAtODEsOSArODEsNyBAQCB2
b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQoKQogCiB2b2lkIE1lZGlh
RGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUlu
Zm8+PiYgZGV2aWNlcykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgVU5VU0VEX1BBUkFN
KGRldmljZXMpOwotI2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShXUEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAgQEAgdm9pZCBNZWRpYURl
dmljZXNSZXF1ZXN0OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZv
Pj4mIGRldmljZXMKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0Q2FtZXJhQ291bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXUEUpCisgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOworI2Vu
ZGlmCisKICAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwog
CiAgICAgaW50IGNhbWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUsOCBAQCB2b2lkIE1lZGlh
RGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUlu
Zm8+PiYgZGV2aWNlcwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAppbmRleCA5ZDUwMzYx
ZTgxYTM3YmQ5NDAyZGU5MWMxYzUzOTU4NGVhYWE2MmRlLi42MDFiYjQ0MzY3YmYxNWJlY2ViOWJi
MWI2ZGIzYmU3Nzc0NjY4YTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaApAQCAtNDksNiArNDksNyBAQCBlbnVtIGNsYXNzIFdl
YnNpdGVEYXRhVHlwZSB7CiAgICAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMgPSAxIDw8IDE0
LAogI2VuZGlmCiAgICAgRE9NQ2FjaGUgPSAxIDw8IDE1LAorICAgIERldmljZUlkSGFzaFNhbHQg
PSAxIDw8IDE2LAogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDEwMjQ5OWJhNGZkMTQ0MmRlODFk
ZTkwMmRiM2I5OGFiNTJhYzA4NTEuLjgwNjIxZDNhYTcxYTE5NWM1YWE1ZjM0YjRlZGEwOTBjZDQ1
NjUyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjI4LDYgKzIyOCw3IEBAIFVJUHJvY2Vzcy9GcmFtZUxv
YWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByb3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5j
cHAKIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorVUlQcm9jZXNzL0RldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3Mv
UHJvY2Vzc1Rocm90dGxlci5jcHAKIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IGUxMzgxOTQ5YjBmZDAzZjU2ODFlM2M4ZTJiYTE0Mzkz
YzJlMzY5ZmMuLmZjNWY1NWZiYjdmNjIyNzExZjE3ZWNjOTY0M2JhMjU1MDM3Y2FiY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzR1RLLnR4dApAQCAtMTMzLDYgKzEzMyw3IEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRDb250ZXh0TWVudUNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0Q29va2llTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
Q3JlZGVudGlhbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdERvd25sb2FkLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXREb3dubG9hZENsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0RWRpdG9yU3RhdGUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggYzU5
ZjhlYjE4NDg1OGQwZTUyNDA3MDJlNmE1ZWE1ZmY5N2ZmYWNmNC4uOTY1NWFlMmM4NWIxN2M3MjJh
ZjAxOTU5YjY3ZDFhMjk4YjlmYWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
V1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBAIC0xMjAsNiArMTIw
LDcgQEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmNwcCBAbm8t
dW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuY3BwIEBu
by11bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWQuY3Bw
IEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JTdGF0ZS5jcHAgQG5vLXVu
aWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MmU4NTUwMzNmMTM2MzdjNWMxODhlZGE5NmNjZDhmYjBkNDU2MTkzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0LmgiCisKKyNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIgorI2lu
Y2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmUuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dU
RkdUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjog
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246
IEEgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBhY2Nlc3NpbmcgdXNlcidzIGF1ZGlvL3ZpZGVvIGRl
dmljZXMuCisgKiBAVGl0bGU6IFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdAorICog
QFNlZV9hbHNvOiAjV2ViS2l0UGVybWlzc2lvblJlcXVlc3QsICNXZWJLaXRXZWJWaWV3CisgKgor
ICogV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QgcmVwcmVzZW50cyBhIHJlcXVlc3Qg
Zm9yCisgKiBwZXJtaXNzaW9uIHRvIHdoZXRoZXIgV2ViS2l0IHNob3VsZCBiZSBhbGxvd2VkIHRv
IGFjY2VzcyB0aGUgdXNlcidzCisgKiBkZXZpY2VzIGluZm9ybWF0aW9uIHdoZW4gcmVxdWVzdGVk
IHRocm91Z2ggdGhlIGVudW1lcmFjZURldmljZXMgQVBJLgorICoKKyAqIFdoZW4gYSBXZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgaXMgbm90IGhhbmRsZWQgYnkgdGhlIHVzZXIsCisg
KiBpdCBpcyBkZW5pZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBTaW5jZTogMi4yMgorICovCisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0
UGVybWlzc2lvblJlcXVlc3RJZmFjZSopOworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxVc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eT4gcmVxdWVzdDsKKyAgICBSZWZQdHI8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGRl
dmljZUlkSGFzaFNhbHRTdG9yYWdlOworICAgIGJvb2wgbWFkZURlY2lzaW9uOworfTsKKworV0VC
S0lUX0RFRklORV9UWVBFX1dJVEhfQ09ERSgKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QsIHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3QsIEdfVFlQRV9P
QkpFQ1QsCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9UWVBFX1BFUk1JU1NJT05f
UkVRVUVTVCwgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdCkpCisKK3N0
YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdEFsbG93KFdlYktpdFBl
cm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEFTU0VSVChXRUJLSVRfSVNfREVWSUNF
X0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpLT5wcml2OworCisgICAgLy8gT25seSBvbmUgZGVjaXNp
b24gYXQgYSB0aW1lLgorICAgIGlmIChwcml2LT5tYWRlRGVjaXNpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIHByaXYtPm1hZGVEZWNpc2lvbiA9IHRydWU7CisgICAgYXV0byBzYWx0ID0gcHJp
di0+ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZv
ck9yaWdpbigqcHJpdi0+cmVxdWVzdC5nZXQoKSk7CisgICAgcHJpdi0+cmVxdWVzdC0+c2V0VXNl
ck1lZGlhQWNjZXNzSW5mbyhXVEZNb3ZlKHNhbHQpLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueShXZWJLaXRQZXJtaXNzaW9uUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1J
U1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVR
VUVTVChyZXF1ZXN0KS0+cHJpdjsKKworICAgIC8vIE9ubHkgb25lIGRlY2lzaW9uIGF0IGEgdGlt
ZS4KKyAgICBpZiAocHJpdi0+bWFkZURlY2lzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBw
cml2LT5tYWRlRGVjaXNpb24gPSB0cnVlOworICAgIGF1dG8gc2FsdCA9IHByaXYtPmRldmljZUlk
SGFzaFNhbHRTdG9yYWdlLT5yZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3Jp
Z2luKCpwcml2LT5yZXF1ZXN0LmdldCgpKTsKKyAgICBwcml2LT5yZXF1ZXN0LT5zZXRVc2VyTWVk
aWFBY2Nlc3NJbmZvKFdURk1vdmUoc2FsdCksIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVx
dWVzdElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+YWxsb3cgPSB3ZWJraXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RBbGxvdzsKKyAgICBpZmFjZS0+ZGVueSA9IHdlYmtpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdERlbnk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIC8vIERl
ZmF1bHQgYmVoYXZpb3VyIHdoZW4gbm8gZGVjaXNpb24gaGFzIGJlZW4gbWFkZSBpcyBkZW55aW5n
IHRoZSByZXF1ZXN0LgorICAgIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnko
V0VCS0lUX1BFUk1JU1NJT05fUkVRVUVTVChvYmplY3QpKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bv
c2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Np
b25fcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENs
YXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZTsKK30KKworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoVXNlck1l
ZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHJlcXVlc3QsIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
KiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSkKK3sKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3QqIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCA9IFdFQktJVF9ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RFVklDRV9J
TkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgbnVsbHB0cikpOworCisgICAgZGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0LT5wcml2LT5yZXF1ZXN0ID0gJnJlcXVlc3Q7CisgICAgZGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LT5wcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSA9IGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlOworICAgIHJldHVybiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTM3MWIzZTQxNmExMmNkZDExMDc3ZjIyOTRlMDU1MmJjODEwOTg0ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIK
KyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIgorI2luY2x1ZGUgIldlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oIgorCitXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QqIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShXZWJLaXQ6
OlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiwgV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0VUlDbGllbnQuY3BwCmluZGV4IDAyNzU0MzEyN2FlZTFiMDg2ZDAzNjE1MWQxMThjZmM3OTY2
NmE0MmUuLjI3MmYzMTUyMDVkYWE4ODkyZWVjYTVlYzJhZDlhYTFjZjk5ZDMyOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAK
QEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAi
RHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oIgpAQCAtMzIs
NiArMzMsNyBAQAogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisj
aW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTE4OSw2ICsxOTEsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9vbCBjaGVja1VzZXJNZWRpYVBlcm1p
c3Npb25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpT
ZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIEFQSTo6U2VjdXJpdHlPcmln
aW4mIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5
JiBwZXJtaXNzaW9uUmVxdWVzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEdSZWZQdHI8V2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0PiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QgPSBhZG9wdEdSZWYod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBl
cm1pc3Npb25SZXF1ZXN0LCBwYWdlLndlYnNpdGVEYXRhU3RvcmUoKS5kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSgpKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3Qo
bV93ZWJWaWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKGRldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdC5nZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICB2b2lk
IGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94
eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXROb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdD4gbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QgPSBhZG9w
dEdSZWYod2Via2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3Q6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSku
cHRyKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhLmNwcAppbmRleCBhMjRkYTRkNmUxY2M4ODI2ZTRjZTIzZGE3YTc3NTdl
ZTVlMzA5NGRmLi43Yzk3ZTBiMWIyNGExYjNhNmFhMjEzM2Y4OTRhMWU4YTc4ZTAwMzlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGEuY3BwCkBAIC03Niw3ICs3Niw4IEBAIHN0YXRpYyBib29sIHJlY29yZENvbnRhaW5zU3Vw
cG9ydGVkRGF0YVR5cGVzKGNvbnN0IFdlYnNpdGVEYXRhUmVjb3JkJiByZWNvcmQpCiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0lu
RGF0YSwKICNlbmRpZgotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMKKyAgICAgICAg
V2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLAorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkRldmlj
ZUlkSGFzaFNhbHQKICAgICB9KTsKIH0KIApAQCAtMTAzLDYgKzEwNCw4IEBAIHN0YXRpYyBXZWJL
aXRXZWJzaXRlRGF0YVR5cGVzIHRvV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyhPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlCiAjZW5kaWYKICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpDb29raWVzKSkKICAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFU
QV9DT09LSUVTOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmlj
ZUlkSGFzaFNhbHQpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRB
X0RFVklDRV9JRF9IQVNIX1NBTFQ7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdFdlYnNp
dGVEYXRhVHlwZXM+KHJldHVyblZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAK
aW5kZXggODZiZjQ3ZmQxYWUwZWFkMjkxZWI1MDlhYzE3ZmE2M2E2MTE0ZTE2Yi4uZmFjOGYyNzE1
NTg1ZDUxNzIzNzVkZWJjMTJkYWViMGI0MGE0Y2QwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIu
Y3BwCkBAIC02NDksNiArNjQ5LDggQEAgc3RhdGljIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHRvV2Vic2l0ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5cGUKICNlbmRpZgog
ICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUykKICAgICAgICAgcmV0
dXJuVmFsdWUuYWRkKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcyk7CisgICAgaWYgKHR5cGVzICYg
V0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKQorICAgICAgICByZXR1cm5W
YWx1ZS5hZGQoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KTsKICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFmOGM0MmVjYjYwODRlYjVhM2M1MjM2NGQ4NDFkZGM0ZTE1ZGI4ODUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NP
TVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1
ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9o
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJt
aXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BF
Uk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJ
T05fUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBX
RUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BF
Uk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ICAg
ICAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgICBXZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RQcml2YXRlIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7Cisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9y
ZXF1ZXN0X2dldF90eXBlICAgICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRh
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgK
aW5kZXggMDY1MDQ3ZmUxN2M1ODVlMjgyNjExOWFjZGI0YjMwNzBlMTQzMjMyMS4uNjc0MzA1Y2Mw
MWYwZDk0YWIwY2RkMjQ3YTkzMjkwZWYzYjlhNTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaApAQCAtNDQsNiArNDQsNyBA
QCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGEgV2ViS2l0V2Vic2l0ZURhdGE7CiAg
KiBAV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTOiBJbmRleGVkREIgZGF0
YWJhc2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEE6IFBsdWdpbnMgZGF0
YS4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVM6IENvb2tpZXMuCisgKiBAV0VCS0lU
X1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUOiBIYXNoIHNhbHQgdXNlZCB0byBnZW5l
cmF0ZSB0aGUgZGV2aWNlIGlkcyB1c2VkIGJ5IHdlYnBhZ2VzLgogICogQFdFQktJVF9XRUJTSVRF
X0RBVEFfQUxMOiBBbGwgdHlwZXMuCiAgKgogICogRW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXBy
ZXNlbnRpbmcgdHlwZXMgb2YgV2Vic2l0ZSBkYXRhLgpAQCAtNjAsNyArNjEsOCBAQCB0eXBlZGVm
IGVudW0gewogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAg
ICA9IDEgPDwgNiwKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAg
ICAgICAgPSAxIDw8IDcsCiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTICAgICAgICAg
ICAgICAgICAgID0gMSA8PCA4LAotICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAg
ICAgICAgICAgICAgICA9ICgxIDw8IDkpIC0gMQorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVW
SUNFX0lEX0hBU0hfU0FMVCAgICAgICA9IDEgPDwgOSwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRB
X0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCAxMCkgLSAxCiB9IFdlYktpdFdlYnNp
dGVEYXRhVHlwZXM7CiAKIFdFQktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3N2QxOGQ2OTE4MDNjNzI5ZGM1MGQ5MDY4MjQ3Nzg5
OTIxOGQyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUX0hfSU5TSURFX18pICYmICFkZWZp
bmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdwZS93ZWJraXQuaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJL
aXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ERVZJ
Q0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2RldmljZV9pbmZv
X3Blcm1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVT
VCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RF
VklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9O
X1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5G
T19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVm
aW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RD
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QgICAgICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcyAgIFdlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2
b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNz
aW9uX3JlcXVlc3RfZ2V0X3R5cGUgICAgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0
ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURh
dGEuaAppbmRleCAzYTQ2MmFhZmY5Yjg3YzZlMGU1N2Y5NjJjMGU0NjMwOTI1OWRkZTAzLi4wM2Rk
NTg1ZDEyNjVhNmU0ZWVkYjk0MjY4NzUzZjM2MjRjNjIwYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJzaXRlRGF0YS5oCkBAIC00NCw2ICs0
NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YSBXZWJLaXRXZWJzaXRlRGF0
YTsKICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVM6IEluZGV4ZWRE
QiBkYXRhYmFzZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQTogUGx1Z2lu
cyBkYXRhLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzogQ29va2llcy4KKyAqIEBX
RUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQ6IEhhc2ggc2FsdCB1c2VkIHRv
IGdlbmVyYXRlIHRoZSBkZXZpY2UgaWRzIHVzZWQgYnkgd2VicGFnZXMuCiAgKiBAV0VCS0lUX1dF
QlNJVEVfREFUQV9BTEw6IEFsbCB0eXBlcy4KICAqCiAgKiBFbnVtIHZhbHVlcyB3aXRoIGZsYWdz
IHJlcHJlc2VudGluZyB0eXBlcyBvZiBXZWJzaXRlIGRhdGEuCkBAIC02MCw3ICs2MSw4IEBAIHR5
cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VT
ICAgICAgID0gMSA8PCA2LAogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEEgICAg
ICAgICAgICAgICA9IDEgPDwgNywKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDgsCi0gICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAg
ICAgICAgICAgICAgICAgICAgID0gKDEgPDwgOSkgLSAxCisgICAgV0VCS0lUX1dFQlNJVEVfREFU
QV9ERVZJQ0VfSURfSEFTSF9TQUxUICAgICAgID0gMSA8PCA5LAorICAgIFdFQktJVF9XRUJTSVRF
X0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgxIDw8IDEwKSAtIDEKIH0gV2ViS2l0
V2Vic2l0ZURhdGFUeXBlczsKIAogV0VCS0lUX0FQSSBHVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEz
Y2M3OGE4MDAxMmZkOWFiNmEzNzQ5ZjI4NTdjYTMzNjZjOWFkNjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAKQEAg
LTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4K
KyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisvLyBGSVhNRTog
SW1wbGVtZW50IHBlcnNpc3RlbmN5LgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgaW50IGhhc2hTYWx0U2l6ZSA9IDQ4Oworc3Rh
dGljIGNvbnN0IGludCByYW5kb21EYXRhU2l6ZSA9IGhhc2hTYWx0U2l6ZSAvIDE2OworCitSZWY8
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpjcmVhdGUo
Y29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeSwgYm9vbCBpc1Bl
cnNpc3RlbnQpCit7CisgICAgYXV0byBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSA9IGFkb3B0UmVm
KCpuZXcgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJl
Y3RvcnksIGlzUGVyc2lzdGVudCkpOworICAgIHJldHVybiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZTsKK30KKworRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdl
KGNvbnN0IFN0cmluZyYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2VEaXJlY3RvcnksIGJvb2wgaXNQ
ZXJzaXN0ZW50KQorICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldl
YktpdC5EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSIpKQorICAgICwgbV9pc1BlcnNpc3RlbnQoaXNQ
ZXJzaXN0ZW50KQorICAgICwgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeShkZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeSkKK3sKK30KKworRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2U6On5EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpCit7Cit9CisKK1N0cmluZyBEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFVz
ZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0KQoreworICAgIHJldHVybiBnZXRE
ZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVzdC50b3BMZXZlbERvY3VtZW50
U2VjdXJpdHlPcmlnaW4oKSk7Cit9CisKK1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6
cmVnZW5lcmF0ZURldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihVc2VyTWVkaWFQZXJt
aXNzaW9uQ2hlY2tQcm94eSYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVnZW5lcmF0ZURldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihyZXF1ZXN0LnRvcExldmVsRG9jdW1lbnRTZWN1
cml0eU9yaWdpbigpKTsKK30KKworU3RyaW5nIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpyZWdl
bmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luJiBk
b2N1bWVudE9yaWdpbikKK3sKKyAgICBhdXRvIGRvY3VtZW50T3JpZ2luRGF0YSA9IGRvY3VtZW50
T3JpZ2luLmRhdGEoKTsKKyAgICBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4ucmVtb3ZlSWYo
W3RoaXMsICZkb2N1bWVudE9yaWdpbkRhdGFdKGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAg
IHJldHVybiBrZXlBbmRWYWx1ZS52YWx1ZS0+ZG9jdW1lbnRPcmlnaW4tPmRhdGEoKSA9PSBkb2N1
bWVudE9yaWdpbkRhdGE7CisgICAgfSk7CisKKyAgICByZXR1cm4gZ2V0RGV2aWNlSWRlbnRpZmll
ckhhc2hTYWx0Rm9yT3JpZ2luKGRvY3VtZW50T3JpZ2luKTsKK30KKworU3RyaW5nIERldmljZUlk
SGFzaFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4mIGRvY3VtZW50T3JpZ2luKQoreworICAgIGF1dG8gZGV2aWNlSWRIYXNoU2Fs
dEZvck9yaWdpbiA9IG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5lbnN1cmUoZG9jdW1lbnRP
cmlnaW4udG9SYXdTdHJpbmcoKSwgW3RoaXMsICZkb2N1bWVudE9yaWdpbl0gKCkgeworICAgICAg
ICB1aW50NjRfdCByYW5kb21EYXRhW3JhbmRvbURhdGFTaXplXTsKKyAgICAgICAgY3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21WYWx1ZXMocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocmFu
ZG9tRGF0YSksIHNpemVvZihyYW5kb21EYXRhKSk7CisKKyAgICAgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgICAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShoYXNoU2FsdFNpemUpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhbmRvbURhdGFTaXplOyBpKyspCisgICAgICAg
ICAgICBhcHBlbmRVbnNpZ25lZDY0QXNIZXgocmFuZG9tRGF0YVswXSwgYnVpbGRlcik7CisKKyAg
ICAgICAgU3RyaW5nIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbiA9IGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKworICAgICAgICBhdXRvIG5ld0hhc2hTYWx0Rm9yT3JpZ2luID0gc3RkOjpt
YWtlX3VuaXF1ZTxIYXNoU2FsdEZvck9yaWdpbj4oZG9jdW1lbnRPcmlnaW4sIFdURk1vdmUoZGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKSk7CisKKyAgICAgICAgcmV0dXJuIG5ld0hh
c2hTYWx0Rm9yT3JpZ2luOworICAgIH0pOworCisgICAgZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdp
bi5pdGVyYXRvci0+dmFsdWUtPmxhc3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKworICAg
IHJldHVybiBkZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luLml0ZXJhdG9yLT52YWx1ZS0+ZGV2aWNl
SWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpzZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oU2VjdXJpdHlPcmln
aW4mIGRvY3VtZW50T3JpZ2luLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpCit7
CisgICAgYXV0byBkZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luID0gbV9kZXZpY2VJZEhhc2hTYWx0
Zm9yT3JpZ2luLmVuc3VyZShkb2N1bWVudE9yaWdpbi50b1Jhd1N0cmluZygpLCBbJmRvY3VtZW50
T3JpZ2luLCBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQgPSBXVEZNb3ZlKGRldmljZUlkZW50aWZp
ZXJIYXNoU2FsdCldICgpIG11dGFibGUgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxIYXNoU2FsdEZvck9yaWdpbj4oZG9jdW1lbnRPcmlnaW4sIFdURk1vdmUoZGV2aWNlSWRlbnRp
Zmllckhhc2hTYWx0KSk7CisgICAgfSk7CisKKyAgICBkZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lu
Lml0ZXJhdG9yLT52YWx1ZS0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworCisgICAg
aWYgKCFkZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luLmlzTmV3RW50cnkpCisgICAgICAgIGRldmlj
ZUlkSGFzaFNhbHRGb3JPcmlnaW4uaXRlcmF0b3ItPnZhbHVlLT5kZXZpY2VJZGVudGlmaWVySGFz
aFNhbHRGb3JPcmlnaW4gPSBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCk7Cit9CisK
K3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkSGFzaFNhbHRPcmlnaW5z
KEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRh
PiBvcmlnaW5zOworCisgICAgICAgIGZvciAoYXV0byYgaGFzaFNhbHRGb3JPcmlnaW4gOiBtX2Rl
dmljZUlkSGFzaFNhbHRmb3JPcmlnaW4pCisgICAgICAgICAgICBvcmlnaW5zLmFkZChoYXNoU2Fs
dEZvck9yaWdpbi52YWx1ZS0+ZG9jdW1lbnRPcmlnaW4tPmRhdGEoKSk7CisKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtvcmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykpOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2
aWNlSWRIYXNoU2FsdEZvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4m
IG9yaWdpbnMsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBW
ZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBjb3BpZWRPcmlnaW5zOworICAgIGNvcGllZE9yaWdp
bnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5zLnNpemUoKSk7CisKKyAgICBmb3IgKGF1
dG8mIG9yaWdpbiA6IG9yaWdpbnMpCisgICAgICAgIGNvcGllZE9yaWdpbnMudW5jaGVja2VkQXBw
ZW5kKG9yaWdpbi5pc29sYXRlZENvcHkoKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb3BpZWRPcmlnaW5zID0gV1RGTW92
ZShjb3BpZWRPcmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2lu
LnJlbW92ZUlmKFt0aGlzLCAmY29waWVkT3JpZ2luc10oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBjb3BpZWRPcmlnaW5zLmNvbnRhaW5zKGtleUFuZFZhbHVlLnZhbHVl
LT5kb2N1bWVudE9yaWdpbi0+ZGF0YSgpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsK
K30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNoU2Fs
dE9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0aW1lLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBtX2RldmljZUlkSGFz
aFNhbHRmb3JPcmlnaW4ucmVtb3ZlSWYoW3RoaXMsIHRpbWVdKGF1dG8mIGtleUFuZFZhbHVlKSB7
CisgICAgICAgICAgICByZXR1cm4ga2V5QW5kVmFsdWUudmFsdWUtPmxhc3RUaW1lVXNlZCA+IHRp
bWU7CisgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9y
YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjY4NWYxY2NmNmQ2YzkyMzE3NDRkNjIwMjYwNzcyM2EyYTFlOTY0
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFz
aFNhbHRTdG9yYWdlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4geworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlRGlyZWN0b3J5LCBib29sIGlzUGVyc2lzdGVudCk7CisgICAgfkRl
dmljZUlkSGFzaFNhbHRTdG9yYWdlKCk7CisKKyAgICBzdHJ1Y3QgSGFzaFNhbHRGb3JPcmlnaW4g
eworICAgICAgICBIYXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2Vj
dXJpdHlPcmlnaW4sIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbikK
KyAgICAgICAgICAgIDogZG9jdW1lbnRPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCisgICAgICAgICAg
ICAsIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihXVEZNb3ZlKGRldmljZUlkZW50
aWZpZXJIYXNoU2FsdEZvck9yaWdpbikpCisgICAgICAgICAgICAsIGxhc3RUaW1lVXNlZChXYWxs
VGltZTo6bm93KCkpCisgICAgICAgIHsgfTsKKworICAgICAgICBSZWY8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+IGRvY3VtZW50T3JpZ2luOworICAgICAgICBTdHJpbmcgZGV2aWNlSWRlbnRpZmll
ckhhc2hTYWx0Rm9yT3JpZ2luOworICAgICAgICBXYWxsVGltZSBsYXN0VGltZVVzZWQ7CisgICAg
fTsKKworICAgIFN0cmluZyBnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmKTsKKyAgICBTdHJpbmcgcmVnZW5lcmF0ZURldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eSYpOworCisgICAgdm9pZCBnZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhGdW5jdGlvbjx2b2lk
KEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgdm9pZCBkZWxldGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2lu
c01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2Uo
Y29uc3QgU3RyaW5nJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZURpcmVjdG9yeSwgYm9vbCBpc1Bl
cnNpc3RlbnQpOworCisgICAgU3RyaW5nIGdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgZG9jdW1lbnRPcmlnaW4pOworICAgIFN0cmlu
ZyByZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luJiBkb2N1bWVudE9yaWdpbik7CisgICAgdm9pZCBzZXREZXZpY2VJZGVudGlm
aWVySGFzaFNhbHRGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIGRvY3VtZW50T3Jp
Z2luLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOworCisgICAg
UmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVf
cHRyPEhhc2hTYWx0Rm9yT3JpZ2luPj4gbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luOworICAg
IGJvb2wgbV9pc1BlcnNpc3RlbnQ7CisgICAgY29uc3QgU3RyaW5nIG1fZGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2VEaXJlY3Rvcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eS5oCmluZGV4IGYzN2JlN2FiMjFmM2YxMWY1NzViMWNmYzEyNzdiY2E1NjZjY2MzMDEuLmZiY2M0
Y2ZlZTNhNWI0YmQwYzBhMGFjNjIxZGIwOGYxZmE0YzBlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaApAQCAt
MzYsOCArMzYsNiBAQCBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWNsYXNzIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OwotCiBjbGFz
cyBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8
QVBJOjpPYmplY3Q6OlR5cGU6OlVzZXJNZWRpYVBlcm1pc3Npb25DaGVjaz4gewogcHVibGljOgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCmluZGV4IGMyZTdlMWI4NjkzYTljZDQzMGIzMGIwMDg0OTEzMWY3NTNj
YTcyMTcuLjVlZThiZjJmZjRiNzU3NDE2NGY5MWRhZDczN2UwZmE0ZjMwMWQ1YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFSZWNv
cmQuaCIKICNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiQXV0aGVu
dGljYXRvck1hbmFnZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIgog
I2luY2x1ZGUgIk1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlci5oIgpAQCAtOTUsNiAr
OTYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKENvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiwgUEFMOjpTZXNzaW9uSUQgcwogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lv
bklEKQogICAgICwgbV9jb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbikpCiAgICAg
LCBtX3N0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUobV9jb25maWd1cmF0aW9u
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSkpCisgICAgLCBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdl
KERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpjcmVhdGUoQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCksIGlzUGVyc2lzdGVudCgp
KSkKICAgICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV2Vi
c2l0ZURhdGFTdG9yZSIpKQogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAgLCBtX2F1dGhlbnRp
Y2F0b3JNYW5hZ2VyKG1ha2VVbmlxdWVSZWY8QXV0aGVudGljYXRvck1hbmFnZXI+KCkpCkBAIC0x
NzEsNiArMTczLDggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJ
Zk5lY2Vzc2FyeSgpCiAgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVE
aXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4
dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVjdG9yeSk7CiAgICAgaWYgKCFt
X2NvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAg
ICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBy
ZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihtX2Nv
bmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSk7CisgICAgaWYgKCFtX2NvbmZp
Z3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGly
ZWN0b3J5ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRl
bnNpb24obV9jb25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSk7
CiAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0
eSgpKQogICAgICAgICBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVj
dG9yeSA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5z
aW9uKG1fY29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSk7CiAgICAgaWYgKCFt
X2NvbmZpZ3VyYXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAt
NDg1LDYgKzQ4OSwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgICAgICB9KTsKICAg
ICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiBkYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgeworICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkSGFzaFNhbHRPcmlnaW5zKFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdKEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmIG9yaWdpbnMp
IHsKKyAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOworCisgICAgICAgICAgICB3
aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVu
dHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJz
aXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQsIDAgfSk7CisKKyAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEp
KTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlKSAmJiBpc1BlcnNpc3RlbnQo
KSkgewogICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwog
CkBAIC04MDAsNiArODE3LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgIH0p
OwogICAgIH0KIAorICAgIGlmIChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlICYmIChkYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSB8fCAoZGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykpKSkgeworICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UtPmRlbGV0ZURldmljZUlkSGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRT
aW5jZShtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOworICAgICAgICB9KTsK
KyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIGNh
bGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CiAKQEAgLTEwNzQsNiArMTA5
OSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICB9KTsKICAgICB9CiAKKyAg
ICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkgfHwgKGRhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSkpIHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKKworICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRTdG9y
YWdlLT5kZWxldGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyhvcmlnaW5zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7CisgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRp
bmdDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlz
UGVyc2lzdGVudCgpKSB7CiAgICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiBvcmlnaW5zOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBkYXRh
UmVjb3JkcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IGE0MjI2MWYwNDFmNTk3YWEyYWE0YTk0MzMxY2Qz
NThjYTgyYjVmYmEuLjkxNjNkOTg5NDUxMTY0Y2ZiYmQzYTc4MDllMjI0YTk4NjFmZjc5NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmgKQEAgLTU1LDYgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBB
dXRoZW50aWNhdG9yTWFuYWdlcjsKIGNsYXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBTdG9y
YWdlTWFuYWdlcjsKK2NsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOwogY2xhc3MgV2ViUGFn
ZVByb3h5OwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU7CkBAIC05Miw2ICs5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5nIHdl
YlNRTERhdGFiYXNlRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgbG9jYWxTdG9yYWdlRGlyZWN0
b3J5OwogICAgICAgICBTdHJpbmcgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeTsKKyAgICAgICAg
U3RyaW5nIGRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeTsKICAgICAgICAgU3RyaW5n
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBqYXZhU2Ny
aXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeTsKICAgICAgICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VG
aWxlOwpAQCAtMTYxLDYgKzE2Myw4IEBAIHB1YmxpYzoKIAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBz
dG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KIAorICAg
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlKiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0
dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KKwogICAgIFdlYlByb2Nlc3NQ
b29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7CiAgICAgYm9vbCBp
c0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwogCkBAIC0yMzUs
NiArMjM5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcyB7
IGZhbHNlIH07CiAKICAgICBjb25zdCBSZWZQdHI8U3RvcmFnZU1hbmFnZXI+IG1fc3RvcmFnZU1h
bmFnZXI7CisgICAgY29uc3QgUmVmUHRyPERldmljZUlkSGFzaFNhbHRTdG9yYWdlPiBtX2Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOwogICAgIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU+IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljczsKICAgICBib29sIG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZSB7IGZhbHNlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFkYjZmNjI0ZGQxZmI5MTQ0MTIwOGYx
MDliMzc1MmVlYTkyYTBkMGYuLjkwNjdkZjY2ODExZTUxZmY4M2U4ZTQ3NmJkYjc1MmZkMThjYzJh
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNzYsNiArNzYsOCBAQAogCQkwMEI5NjYxNjE4RTI0Q0JBMDBDRTFGODggLyogQVBJRmlu
ZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDBCOTY2MTUxOEUyNENCQTAwQ0UxRjg4IC8qIEFQSUZpbmRDbGllbnQuaCAqLzsgfTsKIAkJMDBC
OTY2MUExOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjk2NjE4MThFMjVBRTEwMENFMUY4OCAvKiBG
aW5kQ2xpZW50LmggKi87IH07CiAJCTA3Mjk3RjlGMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDcyOTdGOUQxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1p
c3Npb25DaGVja1Byb3h5LmggKi87IH07CisJCTA3Mjk3RjlFMUMxN0JCRUEwMTRGMDczNSAvKiBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuY3BwICovOyB9OworCQkwNzI5N0Y5RjFDMTdCQkVBMDE1RjA3MzUgLyogRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5oICovOyB9OwogCQkwNzI5N0ZBMzFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3Mjk3RkExMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Np
b25DaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA3NEU3NUZFMURGMjIxMTkwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc0RTc1RkIx
REYxRkQxMzAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi87IH07CiAJCTA3
NkU4ODRFMUExM0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2RTg4NEQxQTEzQ0FERjAw
NUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50LmggKi87IH07CkBAIC0xODM1LDYgKzE4Mzcs
OCBAQAogCQkwMEI5NjYxODE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA3Mjk3RjlDMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3Mjk3RjlEMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFQZXJt
aXNzaW9uQ2hlY2tQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzI5N0Y5
QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUg
LyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDcyOTdGQTAxQzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNo
ZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdG
QTExQzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU3NUZCMURGMUZEMTMwMEQzMThFQyAv
KiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzE4OSw2ICs3MTkzLDggQEAKIAkJCQk0NkEyQjYwNzFFNTY3NUEyMDBDM0RFREEgLyog
QmFja2dyb3VuZFByb2Nlc3NSZXNwb25zaXZlbmVzc1RpbWVyLmggKi8sCiAJCQkJRTE1MTNDNjQx
NjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmNwcCAqLywKIAkJCQlFMTUxM0M2
NTE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuaCAqLywKKwkJCQkwNzI5N0Y5
QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovLAorCQkJ
CTA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICov
LAogCQkJCUJDMjY1MjEyMTE4MjYwODEwMDI0M0UxMiAvKiBEcmF3aW5nQXJlYVByb3h5LmNwcCAq
LywKIAkJCQlCQzI2NTIxMzExODI2MDgxMDAyNDNFMTIgLyogRHJhd2luZ0FyZWFQcm94eS5oICov
LAogCQkJCTFBNjQyMkZDMTJERDA4RkUwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5Lm1lc3Nh
Z2VzLmluICovLApAQCAtODg2NCw2ICs4ODcwLDcgQEAKIAkJCQkxQUM3NTM4MDE4M0JFNTBGMDA3
MkNCMTUgLyogRGF0YVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEQTYxMEY0
MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RENFREFCMjE0
QzYwMDkwMDE2Qjg0NyAvKiBEZXZpY2VJZGVudGl0eVNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MDcyOTdGOUYxQzE3QkJFQTAxNUYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4Mzg5MUI2QzFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxODE3MzYxMjA1ODQyNDcwMERGREE2
NSAvKiBEaXNwbGF5TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNDI3MDIxQzIzRjg0QzAw
RDQxMTgzIC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNjAyLDYgKzEwNjA5LDcg
QEAKIAkJCQkyRDkyQTc3RDIxMkI2QTcxMDBGNDkzRkQgLyogQ29ubmVjdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRDkyQTc3RTIxMkI2QTcxMDBGNDkzRkQgLyogRGF0YVJlZmVyZW5jZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3RjIxMkI2QTcxMDBGNDkzRkQgLyogRGVjb2Rl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzI5N0Y5RTFDMTdCQkVBMDE0RjA3MzUgLyogRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4
QjlEOTAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE2NDIyOTkxMkREMDI5MjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjQyMzA4MTJERDA5RUIwMENBQUUy
QyAvKiBEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUwYzk1
NzU4MGJjNjgxNGMzYjZkZWRjYjI2MmZiZTNjODc1OTI4ZWYuLjEzNDdlYWUxZGFmNGIxMDI5NDdh
YmY0MWM5YTQyNDg5MzU3ZGZlN2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxOC0xMC0wMyAgQWxlamFuZHJvIEcu
IENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRp
YURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQVBJIHRlc3QgZm9yIHRoZSBtZWRp
YURldmljZXMuZW51bWVyYXRlRGV2aWNlczoKKyAgICAgICAgdXNlcm1lZGlhLWVudW1lcmF0ZWRl
dmljZXMtcGVybWlzc2lvbi1jaGVjay4gQW5kIGEgbmV3IEFQSSB0ZXN0CisgICAgICAgIGZvciB0
aGUgV2Vic2l0ZURhdGFTdG9yZTogdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdC4KKwor
ICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9tYWluLmM6CisgICAgICAgIChnb3RXZWJzaXRlRGF0
YUNhbGxiYWNrKTogQWRkZWQgYSBuZXcgc2VjdGlvbiB0byB0aGUgYWJvdXQ6ZGF0YQorICAgICAg
ICB3ZWJwYWdlIHRvIGluY2x1ZGUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXNoIHNhbHQu
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5j
cHA6CisgICAgICAgICh0ZXN0V2ViVmlld1VzZXJNZWRpYUVudW1lcmF0ZURldmljZXNQZXJtaXNz
aW9uQ2hlY2spOiBBZGRlZCB0aGUKKyAgICAgICAgbmV3IHRlc3QgY2hlY2tpbmcgdGhlIGVudW1l
cmF0ZURldmljZXMgQVBJIHdoZW4gcGVybWlzc2lvbiBpcworICAgICAgICBkZW5pZWQgYW5kIHdo
ZW4gcGVybWlzc2lvbiBpcyBhbGxvd2VkIGZvciB0aGUgb3JpZ2luLgorICAgICAgICAoYmVmb3Jl
QWxsKTogRGVmaW5lZCB0aGUgbmV3IHRlc3QuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHTGliL1Rlc3RXZWJzaXRlRGF0YS5jcHA6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFj
ayk6IFJlZ2lzdGVyIGEgbmV3IFVSSSBmb3IgdGhlIGVudW1lcmF0ZURldmljZXMuCisgICAgICAg
ICh0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKTogUmVtb3ZlIHRoZSBoYXNoIHNhbHRzIGZy
b20gdGhlCisgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAodGVzdFdlYnNpdGVEYXRhRGV2
aWNlSWRIYXNoU2FsdCk6IE5ldyB0ZXN0IGNoZWtpbmcgdGhlCisgICAgICAgIGVudW1lcmF0ZURl
dmljZXMgQVBJLgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkZWQgdGhlIG5ldyB0ZXN0IHRlc3RX
ZWJzaXRlRGF0YURldmljZUlkSGFzaFNhbHQgdG8KKyAgICAgICAgdGhlIGluaXQgc3RydWN0dXJl
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1dlYlZpZXdUZXN0LmNw
cDoKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojppbml0aWFsaXplV2ViVmlldyk6IE1ha2Ugc3VyZSB0
aGUgbWVkaWEtc3RyZWFtIGlzCisgICAgICAgIGFjdGl2YXRlZCBpbiB0aGUgd2ViVmlldy4KKwog
MjAxOC0xMC0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBF
bmFibGUgc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQgYnkgZGVmYXVsdCBp
biBXZWJLaXRMZWdhY3kKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMg
Yi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCmluZGV4IDU4NzAxZmM4NDJjZTU5NWQyNjg0
NzYyYTRhMTNlYjE4NjQ4OWE0OTAuLjUxMzNhNGRkNjFiOTJjZDUzMWRlOTM0OTgwOTMzMTE0NzA4
M2ViMTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwpAQCAtNDAyLDYgKzQwMiw3IEBAIHN0YXRpYyB2b2lk
IGdvdFdlYnNpdGVEYXRhQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2Vy
LCBHQXN5bmNSZXN1CiAKICAgICBndWludDY0IHBhZ2VJRCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
cGFnZV9pZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhkYXRhUmVxdWVz
dC0+cmVxdWVzdCkpOwogICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0
LCBkYXRhTGlzdCwgIkNvb2tpZXMiLCBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMsIE5VTEws
IHBhZ2VJRCk7CisgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRh
dGFMaXN0LCAiRGV2aWNlIElkIEhhc2ggU2FsdCIsIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNF
X0lEX0hBU0hfU0FMVCwgTlVMTCwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVz
dWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJNZW1vcnkgQ2FjaGUiLCBXRUJLSVRfV0VCU0lU
RV9EQVRBX01FTU9SWV9DQUNIRSwgTlVMTCwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFi
bGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJEaXNrIENhY2hlIiwgV0VCS0lUX1dF
QlNJVEVfREFUQV9ESVNLX0NBQ0hFLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rp
c2tfY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpLCBwYWdlSUQpOwogICAgIGFib3V0RGF0YUZpbGxU
YWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIlNlc3Npb24gU3RvcmFnZSIsIFdF
QktJVF9XRUJTSVRFX0RBVEFfU0VTU0lPTl9TVE9SQUdFLCBOVUxMLCBwYWdlSUQpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNw
cAppbmRleCA2NjExMzc3M2UzYjQzODIxNThmOWQ5YzRlY2I3MmJjOTY4MTMwOTVkLi5lNWI2YTg5
ZTg0NTVmYzNiNTNiODAwZjJiMDA4NDhkZTdiMTJmMWUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcApAQCAtODM0LDYg
KzgzNCw0NyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cAogI2VuZGlmIC8vIEVOQUJMRShHRU9M
T0NBVElPTikKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1VzZXJNZWRpYUVudW1lcmF0ZURldmljZXNQZXJtaXNzaW9uQ2hlY2soVUlDbGllbnRUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnYm9v
bGVhbiBlbmFibGVkID0gd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNl
dHRpbmdzKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0
dGluZ3MsIFRSVUUpOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOworI2VuZGlmCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVz
ZXJNZWRpYVJlcXVlc3RIVE1MID0KKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPHNjcmlw
dD4iCisgICAgICAgICIgIGZ1bmN0aW9uIHJ1blRlc3QoKSIKKyAgICAgICAgIiAgeyIKKyAgICAg
ICAgIiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKCIK
KyAgICAgICAgIiAgICAgICAgZnVuY3Rpb24oZGV2aWNlcykgeyAiCisgICAgICAgICIgICAgICAg
ICAgICBkZXZpY2VzLmZvckVhY2goZnVuY3Rpb24oZGV2aWNlKSB7IgorICAgICAgICAiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlLmxhYmVsKSBkb2N1bWVudC50aXRs
ZSA9IFwiT0tcIjsiCisgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGRvY3VtZW50LnRpdGxlID0gXCJQZXJtaXNzaW9uIGRlbmllZFwiOyIK
KyAgICAgICAgIiAgICAgICAgICAgIH0pIgorICAgICAgICAiICAgIH0pIgorICAgICAgICAiICB9
IgorICAgICAgICAiICA8L3NjcmlwdD4iCisgICAgICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVz
dCgpOyc+PC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4iOworCisgICAgdGVzdC0+bV92ZXJpZnlN
ZWRpYVR5cGVzID0gVFJVRTsKKworICAgIC8vIFRlc3QgZGVueWluZyBhIHBlcm1pc3Npb24gcmVx
dWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0gZmFsc2U7CisgICAg
dGVzdC0+bG9hZEh0bWwodXNlck1lZGlhUmVxdWVzdEhUTUwsIG51bGxwdHIpOworICAgIHRlc3Qt
PndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKCJQZXJtaXNzaW9uIGRlbmllZCIpOworCisgICAgLy8g
VGVzdCBhbGxvd2luZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVy
bWlzc2lvblJlcXVlc3RzID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh1c2VyTWVkaWFSZXF1
ZXN0SFRNTCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIk9L
Iik7CisKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGlu
Z3MsIGVuYWJsZWQpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAg
V2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0
ZXN0LT5tX3dlYlZpZXcpOwpAQCAtMTE1Niw2ICsxMTk3LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQog
ICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImdlb2xvY2F0aW9uLXBlcm1p
c3Npb24tcmVxdWVzdHMiLCB0ZXN0V2ViVmlld0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3Rz
KTsKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgVUlDbGllbnRUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAidXNlcm1lZGlhLWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lv
bi1jaGVjayIsIHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25D
aGVjayk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidXNlcm1lZGlh
LXBlcm1pc3Npb24tcmVxdWVzdHMiLCB0ZXN0V2ViVmlld1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0cyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXVkaW8tdXNl
cm1lZGlhLXBlcm1pc3Npb24tcmVxdWVzdCIsIHRlc3RXZWJWaWV3QXVkaW9Pbmx5VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJzaXRlRGF0YS5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRhLmNwcAppbmRleCA5N2UxODli
NmY4MjM5ZmJmNzViNzlkZDAyNjVhYjczMThhODNjODk2Li43M2ExZDFiODljMTNmMzRhZWRmZmIx
ZDU5OGY4YzdhM2FjZDFjZTJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRhLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRhLmNwcApAQCAtMjEsNiArMjEsNyBAQAog
CiAjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgogI2luY2x1ZGUgIldlYlZpZXdUZXN0Lmgi
CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KIAogc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtT
ZXJ2ZXI7CiAKQEAgLTYxLDYgKzYyLDExIEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNv
dXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIGxvY2FsU3RvcmFnZUhUTUwsIHN0cmxlbihsb2NhbFN0b3JhZ2VIVE1M
KSk7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOwogICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NU
QVRVU19PSyk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2VudW1lcmF0ZWRl
dmljZXMiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBlbnVtZXJhdGVEZXZpY2VzSFRNTCA9ICI8
aHRtbD48Ym9keSBvbmxvYWQ9XCJuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmlj
ZXMoKS50aGVuKGZ1bmN0aW9uKGRldmljZXMpIHsgZG9jdW1lbnQudGl0bGUgPSAnRmluaXNoZWQn
OyB9KVwiPjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgZW51bWVyYXRlRGV2
aWNlc0hUTUwsIHN0cmxlbihlbnVtZXJhdGVEZXZpY2VzSFRNTCkpOworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwogICAgIH0gZWxz
ZQogICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfRk9VTkQpOwogfQpAQCAtMTYzLDcgKzE2OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRl
RGF0YUNvbmZpZ3VyYXRpb24oV2Vic2l0ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
CiAgICAgLy8gQ2xlYXIgYWxsIHBlcnNpc3RlbnQgY2FjaGVzLCBzaW5jZSB0aGUgZGF0YSBkaXIg
aXMgY29tbW9uIHRvIGFsbCB0ZXN0IGNhc2VzLgogICAgIHN0YXRpYyBjb25zdCBXZWJLaXRXZWJz
aXRlRGF0YVR5cGVzIHBlcnNpc3RlbnRDYWNoZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRl
RGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUgfCBXRUJLSVRfV0VCU0lU
RV9EQVRBX0xPQ0FMX1NUT1JBR0UKLSAgICAgICAgfCBXRUJLSVRfV0VCU0lURV9EQVRBX1dFQlNR
TF9EQVRBQkFTRVMgfCBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMgfCBX
RUJLSVRfV0VCU0lURV9EQVRBX09GRkxJTkVfQVBQTElDQVRJT05fQ0FDSEUpOworICAgICAgICB8
IFdFQktJVF9XRUJTSVRFX0RBVEFfV0VCU1FMX0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRFX0RB
VEFfSU5ERVhFRERCX0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRFX0RBVEFfT0ZGTElORV9BUFBM
SUNBVElPTl9DQUNIRSB8IFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCk7
CiAgICAgdGVzdC0+Y2xlYXIocGVyc2lzdGVudENhY2hlcywgMCk7CiAgICAgZ19hc3NlcnQoIXRl
c3QtPmZldGNoKHBlcnNpc3RlbnRDYWNoZXMpKTsKIApAQCAtNTE3LDYgKzUyMywzOSBAQCBzdGF0
aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb29raWVzKFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCghZGF0YUxpc3QpOwogfQogCitzdGF0aWMgdm9pZCB0
ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhhc2hTYWx0KFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5jbGVhcihXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklD
RV9JRF9IQVNIX1NBTFQsIDApOworCisgICAgR0xpc3QqIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2go
V0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKyAgICBnX2Fzc2VydCgh
ZGF0YUxpc3QpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
ZW51bWVyYXRlZGV2aWNlcyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFu
Z2VkVG8oIkZpbmlzaGVkIik7CisKKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdFQktJVF9X
RUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCk7CisgICAgZ19hc3NlcnQoZGF0YUxpc3Qp
OworCisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKGRhdGFMaXN0KSwgPT0sIDEp
OworICAgIFdlYktpdFdlYnNpdGVEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0
ZURhdGEqPihkYXRhTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnQoZGF0YSk7CisgICAgV2ViS2l0
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3X2Zvcl91
cmkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X25hbWUoZGF0YSksID09LCB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbikpOworICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5f
dW5yZWYob3JpZ2luKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFf
Z2V0X3R5cGVzKGRhdGEpLCA9PSwgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9T
QUxUKTsKKworICAgIEdMaXN0IHJlbW92ZUxpc3QgPSB7IGRhdGEsIG51bGxwdHIsIG51bGxwdHIg
fTsKKyAgICB0ZXN0LT5yZW1vdmUoV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9T
QUxULCAmcmVtb3ZlTGlzdCk7CisgICAgZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChXRUJLSVRfV0VC
U0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7
CisKKyAgICAvLyBDbGVhciBhbGwuCisgICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVEYXRh
VHlwZXMgY2FjaGVBbmRBcHBjYWNoZVR5cGVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURh
dGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKyAgICB0
ZXN0LT5jbGVhcihjYWNoZUFuZEFwcGNhY2hlVHlwZXMsIDApOworICAgIGRhdGFMaXN0ID0gdGVz
dC0+ZmV0Y2goY2FjaGVBbmRBcHBjYWNoZVR5cGVzKTsKKyAgICBnX2Fzc2VydCghZGF0YUxpc3Qp
OworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKCk7CkBAIC01MjksNiArNTY4LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFdlYnNp
dGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJkYXRhYmFzZXMiLCB0ZXN0V2Vi
c2l0ZURhdGFEYXRhYmFzZXMpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJz
aXRlRGF0YSIsICJhcHBjYWNoZSIsIHRlc3RXZWJzaXRlRGF0YUFwcGNhY2hlKTsKICAgICBXZWJz
aXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiY29va2llcyIsIHRlc3RXZWJz
aXRlRGF0YUNvb2tpZXMpOworICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRl
RGF0YSIsICJkZXZpY2VpZGhhc2hzYWx0IiwgdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2Fs
dCk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9n
bGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDNjMDk1YzM3YjQyZjM3ZDRlNTY2
NjhkY2ZkNDUyODEzMTI0ZDMzNDIuLjdlMzU0MGI3ODFjMjlhZGJiYTM1N2JkZmJhYjhlNjc0NmRj
YWFmN2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1dl
YlZpZXdUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9X
ZWJWaWV3VGVzdC5jcHAKQEAgLTQ4LDEwICs0OCwxNSBAQCBXZWJWaWV3VGVzdDo6fldlYlZpZXdU
ZXN0KCkKIHZvaWQgV2ViVmlld1Rlc3Q6OmluaXRpYWxpemVXZWJWaWV3KCkKIHsKICAgICBnX2Fz
c2VydCghbV93ZWJWaWV3KTsKKworICAgIFdlYktpdFNldHRpbmdzKiB3ZWJraXRTZXR0aW5ncyA9
IHdlYmtpdF9zZXR0aW5nc19uZXcoKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9t
ZWRpYV9zdHJlYW0od2Via2l0U2V0dGluZ3MsIFRSVUUpOworCiAgICAgbV93ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICNpZiBQTEFU
Rk9STShXUEUpCiAgICAgICAgICJiYWNrZW5kIiwgVGVzdDo6Y3JlYXRlV2ViVmlld0JhY2tlbmQo
KSwKICNlbmRpZgorICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRTZXR0aW5ncywKICAgICAgICAg
IndlYi1jb250ZXh0IiwgbV93ZWJDb250ZXh0LmdldCgpLAogICAgICAgICAidXNlci1jb250ZW50
LW1hbmFnZXIiLCBtX3VzZXJDb250ZW50TWFuYWdlci5nZXQoKSwKICAgICAgICAgbnVsbHB0cikp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDA0ZTVkNGMwMzVmYTYxY2ZkNjUyYzIyMTJlY2ZmODNlMjBjNzMyZWMuLmNiYzQ4
NjRlNjNiMzUyMmRjZTZjOGU1OWVmMzcxNTM3NTkxODUwMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBA
QAorMjAxOC0xMC0wMyAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBw
b3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3
NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1v
dmUgdGhlIGZhaWx1cmUgZXhwZWN0YXRpb24gZm9yIHRoZSB0ZXN0CisgICAgICAgIG1lZGlhLWRl
dmljZXMtZW51bWVyYXRlLWRldmljZXMuaHRtbC4gSnVzdCBmb3IgdGhlIHJlY29yZCB3ZSBoYXZl
CisgICAgICAgIGFsc28gY2hlY2tlZCB0aGUgZm9sbG93aW5nIHRlc3RzLgorCisgICAgICAgIGZh
c3QvbWVkaWFzdHJlYW0vbWVkaWEtZGV2aWNlcy1lbnVtZXJhdGUtZGV2aWNlcy5odG1sCisgICAg
ICAgIGZhc3QvbWVkaWFzdHJlYW0vcmVzb3VyY2VzL2VudW1lcmF0ZS1kZXZpY2VzLWZyYW1lLmh0
bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0vZW51bWVyYXRlLWRldmlj
ZXMtc291cmNlLWlkLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0v
ZW51bWVyYXRlLWRldmljZXMtc291cmNlLWlkLXBlcnNpc3RlbnQuaHRtbAorICAgICAgICBodHRw
L3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9yZXNvdXJjZXMvZW51bWVyYXRlLWRldmljZXMtc291
cmNlLWlkLWZyYW1lLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zOgorCiAyMDE4LTEwLTAzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBFbmFibGUgSDI2NCBzaW11bGNhc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKaW5kZXggNTBiNTUyM2U5NmMyMzNiNzY1NTU3NjNlOGMxNWUyZDUzMWJi
NTcyYy4uNmY5NzMwODBmOTA4NzUxZjhlNjYyNzBiMzM0ZGQ4NWE1MDgyMmVhNyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTY0MCw3ICs2NDAsNiBAQCB3
ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNh
cHR1cmUtc3RyZWFtcy9NZWRpYVN0cgogd2Via2l0Lm9yZy9iLzE1MTM0NCBmYXN0L21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLWFkZC1lbmRlZC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQogIyBDcmFz
aCBpcyBidWcgIzE3NjgwMQogd2Via2l0Lm9yZy9iLzE2MDk5NiBmYXN0L21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQtdmlkZW8tdHJhY2tzLWRpc2FibGVkLmh0bWwgWyBJbWFn
ZU9ubHlGYWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzIyNjkgZmFzdC9tZWRpYXN0cmVh
bS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi8xNzMyNTcgZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtZ3JhbnQtcGVyc2lz
dGVuY3kzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiAjIENhbnZhcyBjYXB0dXJlU3RyZWFtIHN1
cHBvcnQgaXMgbm90IGltcGxlbWVudGVkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351533</attachid>
            <date>2018-10-03 10:25:34 -0700</date>
            <delta_ts>2018-10-04 01:56:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20181003192532.patch</filename>
            <type>text/plain</type>
            <size>66007</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2Nzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY5ZTE1YmJkMDAzZDA5
ZWQ2NDkyN2UzY2ViMTIyODQ4NDhkYzI4Yi4uZDU3MTViYWFmNzlhMjJjMDExYmU0M2ExOGE1NmJl
NWMyOTkzNjA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTEwLTAzICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMg
aWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lzdGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4K
KwogMjAxOC0xMC0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IGlucHV0LmNoZWNrZWQgaXMgaW5jb3JyZWN0IHdoaWxlIHdlJ3JlIHBhcnNpbmcgaXRzIGNoaWxk
cmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGI2ZmRkYTY1NjQyY2Y1ZTVhZTIxZWZmYWIxMjMwYWJhZTgzYzBlNGQu
LjY4YTQ5ZWMyYzI4Y2ZhYmYyYTMyZjNlNjI4MGY2NWVhZTQyODVjZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIwIEBACisyMDE4LTEwLTAzICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVE
ZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudGVkIHRoZSBlbnVtZXJhdGVEZXZpY2VzIEFQSSB1c2luZyBhIG5ldyBX
ZWJLaXQgY2xhc3MKKyAgICAgICAgKERldmljZUlkSGFzaFNhbHRTdG9yYWdlKSB0aGF0IGdlbmVy
YXRlcyBhbmQgc3RvcmVzIHRoZSBkZXZpY2UgaWRzCisgICAgICAgIGhhc2ggc2FsdHMgcGVyIG9y
aWdpbiwgdXNlZCB0byBhdm9pZCBmaW5nZXJwcmludGluZyBpbiB0aGUKKyAgICAgICAgd2VicGFn
ZXMuCisKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gYWRkcyBhIG5ldyB0eXBlIG9mIGRhdGEgZm9y
IHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgICAgICBUaGF0IHdheSB0aGUgdXNlcnMgY2FuIGNh
bGwgdGhlIFdlYnNpdGVEYXRhU3RvcmUgdG8gc2hvdyB3aGF0CisgICAgICAgIG9yaWdpbnMgaGF2
ZSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGFuZCByZW1vdmUgdGhlbSBhdCBzb21lIHBvaW50LgorCisg
ICAgICAgIEZvciB0aGUgbW9tZW50IGp1c3QgR1RLKyBhbmQgV1BFIHBvcnRzIGFyZSB1c2luZyB0
aGlzIGNsYXNzIHRvCisgICAgICAgIGdlbmVyYXRlIHRoZSBoYXNoIHNhbHRzLiBUaGUgcGF0Y2gg
YWRkcyBjb2RlIHRvIHRoZQorICAgICAgICBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmln
aW4gQVBJIGltcGxlbWVudGF0aW9uLCBpdCB3YXMgZW1wdHkKKyAgICAgICAgdW50aWwgbm93IGZv
ciB0aGVzZSBwb3J0cy4gSW4gdGhpcyBmdW5jdGlvbiB3ZSBjcmVhdGUgYW4gaW5zdGFuY2UKKyAg
ICAgICAgb2YgYSBuZXcgY2xhc3MgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHRo
YXQgaW1wbGVtZW50cworICAgICAgICB0aGUgV2ViS2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSBp
bnRlcmZhY2UsIHRoYXQgYWxsb3dzIHRoZSBwb3J0cworICAgICAgICB0byB1c2UgdGhlIGN1cnJl
bnQgcGVybWlzc2lvbiBtYW5hZ2VycyBpbXBsZW1lbnRlZCBpbiB0aGUKKyAgICAgICAgZW1iZWRk
ZXJzIHRvIGhhbmRsZSB0aGlzIG5ldyBraW5kIG9mIHJlcXVlc3QgdGhlIHdheSB0aGV5IGxpa2UK
KyAgICAgICAgaXQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGRlbnkuCisKKyAgICAg
ICAgVGhlIGNsYXNzIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCB0YWtlcyBjYXJl
IG9mCisgICAgICAgIGNvbnRhY3RpbmcgdGhlIERldmljZUlkSGFzaFNhbHRTdG9yYWdlIGFuZCBy
ZXF1ZXN0L3JlZ2VuZXJhdGUgdGhlCisgICAgICAgIGhhc2ggc2FsdHMgYWNjb3JkaW5nbHkuCisK
KyAgICAgICAgUGVyc2lzdGVuY3kgaXMgc3RpbGwgbm90IGltcGxlbWVudGVkLCB3ZSB3aWxsIGFk
ZCBpdCBpbiBhCisgICAgICAgIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICAqIFNoYXJlZC9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaDogQWRkZWQgdGhlIG5ldyB0eXBlIG9mCisgICAgICAg
IHdlYnNpZGUgZGF0YTogRGV2aWNlSWRIYXNoU2FsdC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDog
QWRkZWQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0
OiBEaXR0by4KKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDogRGl0dG8uCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHA6IEFk
ZGVkCisgICAgICAgIHRoaXMgY2xhc3MgdG8gcmVwcmVzZW50IGEgcmVxdWVzdCBvZiBwZXJtaXNz
aW9uIHRvIGFjY2VzcyB0aGUKKyAgICAgICAgZGV2aWNlcyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBz
cGVjaWZpYyBmb3IgZ2xpYiBwb3J0cyBhbmQgaW1wbGVtZW50cworICAgICAgICB0aGUgcG9saWNp
ZXMgcmVnYXJkaW5nIHRoZSBoYXNoIHNhbHRzIHdoZW4gdGhlIGVtYmVkZGVyIGFsbG93cyBvcgor
ICAgICAgICBkZW5pZXMgdGhlIGFjY2VzcyB1c2luZyB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UgY2xhc3MuCisgICAgICAgICh3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RBbGxv
dyk6IEdldCB0aGUgZGV2aWNlIGhhc2ggc2FsdAorICAgICAgICB3aGVuIHRoZSBvcmlnaW4gaXMg
YWxsb3dlZCBhbmQgc2V0IGl0IGluIHRoZSBvcmlnaW5hbCByZXF1ZXN0LgorICAgICAgICAod2Vi
a2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueSk6IFJlZ2VuZXJhdGUgdGhlIGRldmlj
ZSBpZAorICAgICAgICBoYXNoIHNhbHQgd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBhbGxvdyB0byBh
Y2Nlc3MgdGhlIGRldmljZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgKHdlYmtpdF9wZXJtaXNzaW9u
X3JlcXVlc3RfaW50ZXJmYWNlX2luaXQpOgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0RGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlz
c2lvbl9yZXF1ZXN0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0Q3JlYXRlKTogQ3JlYXRlIHRoZSBjbGFzcyB1c2luZworICAgICAgICB0aGUg
cHJveHkgcmVxdWVzdCBmcm9tIHRoZSB3ZWJwcm9jZXNzIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUK
KyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaDoKKyAgICAg
ICAgRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNw
cDogQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgIGZvciB0aGUgY2hlY2tVc2VyTWVk
aWFQZXJtaXNzaW9uRm9yT3JpZ2luIEFQSSBmb3IgdGhlIGdsaWIgcG9ydHMsCisgICAgICAgIGl0
IGNyZWF0ZXMgdGhlIGRldmljZSBpbmZvIHJlcXVlc3QgYW5kIGNhbGxzIHRoZSBwZXJtaXNzaW9u
CisgICAgICAgIHJlcXVlc3QgQVBJLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJzaXRlRGF0YS5jcHA6CisgICAgICAgICh0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMpOiBB
ZGRlZCB0aGUgY29udmVyc2lvbiBmcm9tIHRoZSBXZWJLaXQKKyAgICAgICAgdHlwZXMgdG8gdGhl
IGdsaWIgdHlwZXMgZm9yIHRoZSBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHA6
CisgICAgICAgICh0b1dlYnNpdGVEYXRhVHlwZXMpOiBBZGRlZCB0aGUgY29udmVyc2lvbiBmcm9t
IHRoZSBnbGliIHR5cGUKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFT
SF9TQUxUIHRvIHRoZSBXZWJLaXQgdHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaDogQWRkZWQKKyAgICAgICAgdGhpcyBu
ZXcgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgcGVybWlzc2lvbiByZXF1ZXN0IGZvciB0aGUgZGV2
aWNlCisgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBHVEsrIHBvcnQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaDogQWRkZWQgdGhlIG5ldyB0eXBlIG9m
CisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgR1RLKyBwb3J0OgorICAgICAgICBXRUJLSVRf
V0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmg6IEFkZGVkCisgICAgICAg
IHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHBlcm1pc3Npb24gcmVxdWVzdCBmb3Ig
dGhlIGRldmljZQorICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgV1BFIHBvcnQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaDogQWRkZWQgdGhlIG5ldyB0
eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgV1BFIHBvcnQ6CisgICAgICAgIFdF
QktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHA6IEFkZGVk
CisgICAgICAgIGFuIGluY2x1ZGUgdG8gc29sdmUgY29tcGlsYXRpb24gaXNzdWUgd2l0aCB0aGUg
dW5pZmllZCBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuY3BwOiBBZGRlZCB0aGlzIG5ldyBjbGFzcyB0aGF0CisgICAgICAgIGhhbmRsZXMg
aG93IHRvIGdlbmVyYXRlIGFuZCBzdG9yZSB0aGUgaGFzaCBzYWx0cyBpbnNpZGUKKyAgICAgICAg
V2ViS2l0LiBQZXJzaXN0ZW5jeSBpcyBzdGlsbCBub3QgaW1wbGVtZW50ZWQsIHdlIHdpbGwgYWRk
IGl0IGluIGEKKyAgICAgICAgZnV0dXJlIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKToK
KyAgICAgICAgQ2hlY2sgdGhlIG1hcCB0byBnZXQgdGhlIGhhc2ggc2FsdCBmb3IgYW4gb3JpZ2lu
LCBpZiB0aGVyZSBpcyBub25lCisgICAgICAgIGNyZWF0ZSBhIG5ldyByYW5kb20gb25lLgorICAg
ICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6cmVnZW5lcmF0ZURldmljZUlk
ZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbik6CisgICAgICAgIERlbGV0ZSB0aGUgaGFzaCBzYWx0
IG9mIGFuIG9yaWdpbiBpZiBpdCBhbHJlYWR5IGV4aXN0cyBhbmQgY3JlYXRlIGEgbmV3IG9uZS4K
KyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnNldERldmljZUlkZW50
aWZpZXJIYXNoU2FsdEZvck9yaWdpbik6CisgICAgICAgIFNldCB0aGUgaGFzaCBzYWx0IG9mIGFu
IG9yaWdpbiBpbiB0aGUgbWFwLCBpZiB0aGUgbWFwIGFscmVhZHkgaGFzCisgICAgICAgIHRoYXQg
b3JpZ2luIGl0IHJlcGxhY2VzIHRoZSBoYXNoIHNhbHQsIGluIG90aGVyIGNhc2UgaXQgY3JlYXRl
cyBhCisgICAgICAgIG5ldyByZWdpc3RlciBpbiB0aGUgbWFwLgorICAgICAgICAoV2ViS2l0OjpE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRIYXNoU2FsdE9yaWdpbnMpOgorICAg
ICAgICBSZXR1cm5zIHRoZSBsaXN0IG9mIG9yaWdpbnMgdGhhdCBoYXZlIGEgaGFzaCBzYWx0IGdl
bmVyYXRlZCBmb3IKKyAgICAgICAgdGhlbS4gSXQgaXMgdXNlZCBpbiB0aGUgV2Vic2l0ZURhdGFT
dG9yZS4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRlbGV0ZURl
dmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKToKKyAgICAgICAgRGVsZXRlcyB0aGUgaGFzaCBzYWx0
cyBpbiB0aGUgbWFwIGZvciBhbiBvcmlnaW4uCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFz
aFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2luc01vZGlmaWVkU2luY2Up
OgorICAgICAgICBEZWxldGUgdGhlIG9yaWdpbnMgdGhhdCBoYXZlIG5vdCBiZWVuIG1vZGlmaWVk
IHNpbmNlIGEgdGltZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVj
a1Byb3h5Lmg6IFJlbW92ZSB1bmVlZGVkIGNsYXNzCisgICAgICAgIGRlZmluaXRpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOiBBZGRlZCBz
dXBwb3J0IHRvCisgICAgICAgIHJldHVybiBhbmQgcmVtb3ZlIHRoZSBvcmlnaW5zIHdpdGggYSBn
ZW5lcmF0ZSBoYXNoIHNhbHQgdXNlZCB0bworICAgICAgICBnZW5lcmF0ZSB0aGUgZGV2aWNlIGlk
cy4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6
IEFkZGVkIHRoZSBuZXcKKyAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSBjbGFzcywgdXNlZCB0byBoYW5kbGUgdGhlCisgICAgICAgIGhhc2ggc2FsdHMuCisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KTogR2V0
IHRoZSBsaXN0IG9mCisgICAgICAgIG9yaWdpbnMgd2l0aCBhIGhhc2ggc2FsdHMgaW4gdGhlIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVEYXRhKTogUmVtb3ZlIHRoZSBoYXNoIHNhbHRzIGluCisgICAgICAgIERldmljZUlk
SGFzaFNhbHRTdG9yYWdlIGZvciBhbiBvcmlnaW4uCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRldmljZUlkSGFzaFNhbHRTdG9yYWdlKToKKyAgICAgICAgKiBXZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgdGhlCisgICAgICAgIERldmljZUlkSGFz
aFNhbHRTdG9yYWdlIHRvIHRoZSBjb21waWxhdGlvbi4KKwogMjAxOC0xMC0wMyAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV1bR1RLXSBF
bmFibGUgTVNFIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmluZGV4IGJlNTFhZTM0YTY5
ZTlmZDY1NTA1MDdmNWI4YTMyYzBkNjdkYTY4NGMuLjllNWYyMjc2Mzc2MWFjMTIyNDI3OTMyYjQ3
ZTQ2ZTY2YTc3YTE1N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAtODEsOSArODEsNyBAQCB2
b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQoKQogCiB2b2lkIE1lZGlh
RGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUlu
Zm8+PiYgZGV2aWNlcykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgVU5VU0VEX1BBUkFN
KGRldmljZXMpOwotI2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShXUEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAgQEAgdm9pZCBNZWRpYURl
dmljZXNSZXF1ZXN0OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZv
Pj4mIGRldmljZXMKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0Q2FtZXJhQ291bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXUEUpCisgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOworI2Vu
ZGlmCisKICAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwog
CiAgICAgaW50IGNhbWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUsOCBAQCB2b2lkIE1lZGlh
RGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUlu
Zm8+PiYgZGV2aWNlcwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAppbmRleCA5ZDUwMzYx
ZTgxYTM3YmQ5NDAyZGU5MWMxYzUzOTU4NGVhYWE2MmRlLi42MDFiYjQ0MzY3YmYxNWJlY2ViOWJi
MWI2ZGIzYmU3Nzc0NjY4YTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaApAQCAtNDksNiArNDksNyBAQCBlbnVtIGNsYXNzIFdl
YnNpdGVEYXRhVHlwZSB7CiAgICAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMgPSAxIDw8IDE0
LAogI2VuZGlmCiAgICAgRE9NQ2FjaGUgPSAxIDw8IDE1LAorICAgIERldmljZUlkSGFzaFNhbHQg
PSAxIDw8IDE2LAogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDEwMjQ5OWJhNGZkMTQ0MmRlODFk
ZTkwMmRiM2I5OGFiNTJhYzA4NTEuLjgwNjIxZDNhYTcxYTE5NWM1YWE1ZjM0YjRlZGEwOTBjZDQ1
NjUyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjI4LDYgKzIyOCw3IEBAIFVJUHJvY2Vzcy9GcmFtZUxv
YWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByb3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5j
cHAKIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorVUlQcm9jZXNzL0RldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3Mv
UHJvY2Vzc1Rocm90dGxlci5jcHAKIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IGUxMzgxOTQ5YjBmZDAzZjU2ODFlM2M4ZTJiYTE0Mzkz
YzJlMzY5ZmMuLmZjNWY1NWZiYjdmNjIyNzExZjE3ZWNjOTY0M2JhMjU1MDM3Y2FiY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzR1RLLnR4dApAQCAtMTMzLDYgKzEzMyw3IEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRDb250ZXh0TWVudUNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0Q29va2llTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
Q3JlZGVudGlhbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdERvd25sb2FkLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXREb3dubG9hZENsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0RWRpdG9yU3RhdGUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggYzU5
ZjhlYjE4NDg1OGQwZTUyNDA3MDJlNmE1ZWE1ZmY5N2ZmYWNmNC4uOTY1NWFlMmM4NWIxN2M3MjJh
ZjAxOTU5YjY3ZDFhMjk4YjlmYWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
V1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBAIC0xMjAsNiArMTIw
LDcgQEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmNwcCBAbm8t
dW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuY3BwIEBu
by11bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWQuY3Bw
IEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JTdGF0ZS5jcHAgQG5vLXVu
aWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MmU4NTUwMzNmMTM2MzdjNWMxODhlZGE5NmNjZDhmYjBkNDU2MTkzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0LmgiCisKKyNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIgorI2lu
Y2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmUuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dU
RkdUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjog
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246
IEEgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBhY2Nlc3NpbmcgdXNlcidzIGF1ZGlvL3ZpZGVvIGRl
dmljZXMuCisgKiBAVGl0bGU6IFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdAorICog
QFNlZV9hbHNvOiAjV2ViS2l0UGVybWlzc2lvblJlcXVlc3QsICNXZWJLaXRXZWJWaWV3CisgKgor
ICogV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QgcmVwcmVzZW50cyBhIHJlcXVlc3Qg
Zm9yCisgKiBwZXJtaXNzaW9uIHRvIHdoZXRoZXIgV2ViS2l0IHNob3VsZCBiZSBhbGxvd2VkIHRv
IGFjY2VzcyB0aGUgdXNlcidzCisgKiBkZXZpY2VzIGluZm9ybWF0aW9uIHdoZW4gcmVxdWVzdGVk
IHRocm91Z2ggdGhlIGVudW1lcmFjZURldmljZXMgQVBJLgorICoKKyAqIFdoZW4gYSBXZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgaXMgbm90IGhhbmRsZWQgYnkgdGhlIHVzZXIsCisg
KiBpdCBpcyBkZW5pZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBTaW5jZTogMi4yMgorICovCisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0
UGVybWlzc2lvblJlcXVlc3RJZmFjZSopOworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxVc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eT4gcmVxdWVzdDsKKyAgICBSZWZQdHI8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGRl
dmljZUlkSGFzaFNhbHRTdG9yYWdlOworICAgIGJvb2wgbWFkZURlY2lzaW9uOworfTsKKworV0VC
S0lUX0RFRklORV9UWVBFX1dJVEhfQ09ERSgKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QsIHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3QsIEdfVFlQRV9P
QkpFQ1QsCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9UWVBFX1BFUk1JU1NJT05f
UkVRVUVTVCwgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdCkpCisKK3N0
YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdEFsbG93KFdlYktpdFBl
cm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEFTU0VSVChXRUJLSVRfSVNfREVWSUNF
X0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpLT5wcml2OworCisgICAgLy8gT25seSBvbmUgZGVjaXNp
b24gYXQgYSB0aW1lLgorICAgIGlmIChwcml2LT5tYWRlRGVjaXNpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIHByaXYtPm1hZGVEZWNpc2lvbiA9IHRydWU7CisgICAgYXV0byBzYWx0ID0gcHJp
di0+ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZv
ck9yaWdpbigqcHJpdi0+cmVxdWVzdC5nZXQoKSk7CisgICAgcHJpdi0+cmVxdWVzdC0+c2V0VXNl
ck1lZGlhQWNjZXNzSW5mbyhXVEZNb3ZlKHNhbHQpLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueShXZWJLaXRQZXJtaXNzaW9uUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1J
U1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVR
VUVTVChyZXF1ZXN0KS0+cHJpdjsKKworICAgIC8vIE9ubHkgb25lIGRlY2lzaW9uIGF0IGEgdGlt
ZS4KKyAgICBpZiAocHJpdi0+bWFkZURlY2lzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBw
cml2LT5tYWRlRGVjaXNpb24gPSB0cnVlOworICAgIGF1dG8gc2FsdCA9IHByaXYtPmRldmljZUlk
SGFzaFNhbHRTdG9yYWdlLT5yZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3Jp
Z2luKCpwcml2LT5yZXF1ZXN0LmdldCgpKTsKKyAgICBwcml2LT5yZXF1ZXN0LT5zZXRVc2VyTWVk
aWFBY2Nlc3NJbmZvKFdURk1vdmUoc2FsdCksIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVx
dWVzdElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+YWxsb3cgPSB3ZWJraXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RBbGxvdzsKKyAgICBpZmFjZS0+ZGVueSA9IHdlYmtpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdERlbnk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIC8vIERl
ZmF1bHQgYmVoYXZpb3VyIHdoZW4gbm8gZGVjaXNpb24gaGFzIGJlZW4gbWFkZSBpcyBkZW55aW5n
IHRoZSByZXF1ZXN0LgorICAgIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnko
V0VCS0lUX1BFUk1JU1NJT05fUkVRVUVTVChvYmplY3QpKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bv
c2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Np
b25fcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENs
YXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZTsKK30KKworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoVXNlck1l
ZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHJlcXVlc3QsIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
KiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSkKK3sKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3QqIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCA9IFdFQktJVF9ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RFVklDRV9J
TkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgbnVsbHB0cikpOworCisgICAgZGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0LT5wcml2LT5yZXF1ZXN0ID0gJnJlcXVlc3Q7CisgICAgZGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LT5wcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSA9IGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlOworICAgIHJldHVybiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTM3MWIzZTQxNmExMmNkZDExMDc3ZjIyOTRlMDU1MmJjODEwOTg0ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIK
KyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIgorI2luY2x1ZGUgIldlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oIgorCitXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3QqIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShXZWJLaXQ6
OlVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiwgV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0VUlDbGllbnQuY3BwCmluZGV4IDAyNzU0MzEyN2FlZTFiMDg2ZDAzNjE1MWQxMThjZmM3OTY2
NmE0MmUuLjI3MmYzMTUyMDVkYWE4ODkyZWVjYTVlYzJhZDlhYTFjZjk5ZDMyOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAK
QEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAi
RHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oIgpAQCAtMzIs
NiArMzMsNyBAQAogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisj
aW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTE4OSw2ICsxOTEsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9vbCBjaGVja1VzZXJNZWRpYVBlcm1p
c3Npb25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpT
ZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIEFQSTo6U2VjdXJpdHlPcmln
aW4mIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5
JiBwZXJtaXNzaW9uUmVxdWVzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEdSZWZQdHI8V2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0PiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QgPSBhZG9wdEdSZWYod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBl
cm1pc3Npb25SZXF1ZXN0LCBwYWdlLndlYnNpdGVEYXRhU3RvcmUoKS5kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSgpKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3Qo
bV93ZWJWaWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKGRldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdC5nZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICB2b2lk
IGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94
eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXROb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdD4gbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QgPSBhZG9w
dEdSZWYod2Via2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3Q6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSku
cHRyKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhLmNwcAppbmRleCBhMjRkYTRkNmUxY2M4ODI2ZTRjZTIzZGE3YTc3NTdl
ZTVlMzA5NGRmLi43Yzk3ZTBiMWIyNGExYjNhNmFhMjEzM2Y4OTRhMWU4YTc4ZTAwMzlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGEuY3BwCkBAIC03Niw3ICs3Niw4IEBAIHN0YXRpYyBib29sIHJlY29yZENvbnRhaW5zU3Vw
cG9ydGVkRGF0YVR5cGVzKGNvbnN0IFdlYnNpdGVEYXRhUmVjb3JkJiByZWNvcmQpCiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0lu
RGF0YSwKICNlbmRpZgotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMKKyAgICAgICAg
V2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLAorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkRldmlj
ZUlkSGFzaFNhbHQKICAgICB9KTsKIH0KIApAQCAtMTAzLDYgKzEwNCw4IEBAIHN0YXRpYyBXZWJL
aXRXZWJzaXRlRGF0YVR5cGVzIHRvV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyhPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlCiAjZW5kaWYKICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpDb29raWVzKSkKICAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFU
QV9DT09LSUVTOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmlj
ZUlkSGFzaFNhbHQpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRB
X0RFVklDRV9JRF9IQVNIX1NBTFQ7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdFdlYnNp
dGVEYXRhVHlwZXM+KHJldHVyblZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAK
aW5kZXggODZiZjQ3ZmQxYWUwZWFkMjkxZWI1MDlhYzE3ZmE2M2E2MTE0ZTE2Yi4uZmFjOGYyNzE1
NTg1ZDUxNzIzNzVkZWJjMTJkYWViMGI0MGE0Y2QwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIu
Y3BwCkBAIC02NDksNiArNjQ5LDggQEAgc3RhdGljIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHRvV2Vic2l0ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5cGUKICNlbmRpZgog
ICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUykKICAgICAgICAgcmV0
dXJuVmFsdWUuYWRkKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcyk7CisgICAgaWYgKHR5cGVzICYg
V0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKQorICAgICAgICByZXR1cm5W
YWx1ZS5hZGQoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KTsKICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFmOGM0MmVjYjYwODRlYjVhM2M1MjM2NGQ4NDFkZGM0ZTE1ZGI4ODUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NP
TVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1
ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9o
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJt
aXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BF
Uk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJ
T05fUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBX
RUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BF
Uk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ICAg
ICAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgICBXZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RQcml2YXRlIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7Cisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9y
ZXF1ZXN0X2dldF90eXBlICAgICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRh
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgK
aW5kZXggMDY1MDQ3ZmUxN2M1ODVlMjgyNjExOWFjZGI0YjMwNzBlMTQzMjMyMS4uNjc0MzA1Y2Mw
MWYwZDk0YWIwY2RkMjQ3YTkzMjkwZWYzYjlhNTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaApAQCAtNDQsNiArNDQsNyBA
QCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGEgV2ViS2l0V2Vic2l0ZURhdGE7CiAg
KiBAV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTOiBJbmRleGVkREIgZGF0
YWJhc2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEE6IFBsdWdpbnMgZGF0
YS4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVM6IENvb2tpZXMuCisgKiBAV0VCS0lU
X1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUOiBIYXNoIHNhbHQgdXNlZCB0byBnZW5l
cmF0ZSB0aGUgZGV2aWNlIGlkcyB1c2VkIGJ5IHdlYnBhZ2VzLgogICogQFdFQktJVF9XRUJTSVRF
X0RBVEFfQUxMOiBBbGwgdHlwZXMuCiAgKgogICogRW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXBy
ZXNlbnRpbmcgdHlwZXMgb2YgV2Vic2l0ZSBkYXRhLgpAQCAtNjAsNyArNjEsOCBAQCB0eXBlZGVm
IGVudW0gewogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAg
ICA9IDEgPDwgNiwKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAg
ICAgICAgPSAxIDw8IDcsCiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTICAgICAgICAg
ICAgICAgICAgID0gMSA8PCA4LAotICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAg
ICAgICAgICAgICAgICA9ICgxIDw8IDkpIC0gMQorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVW
SUNFX0lEX0hBU0hfU0FMVCAgICAgICA9IDEgPDwgOSwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRB
X0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCAxMCkgLSAxCiB9IFdlYktpdFdlYnNp
dGVEYXRhVHlwZXM7CiAKIFdFQktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3N2QxOGQ2OTE4MDNjNzI5ZGM1MGQ5MDY4MjQ3Nzg5
OTIxOGQyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUX0hfSU5TSURFX18pICYmICFkZWZp
bmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdwZS93ZWJraXQuaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJL
aXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ERVZJ
Q0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2RldmljZV9pbmZv
X3Blcm1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVT
VCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RF
VklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9O
X1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5G
T19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVm
aW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RD
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QgICAgICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcyAgIFdlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2
b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNz
aW9uX3JlcXVlc3RfZ2V0X3R5cGUgICAgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0
ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURh
dGEuaAppbmRleCAzYTQ2MmFhZmY5Yjg3YzZlMGU1N2Y5NjJjMGU0NjMwOTI1OWRkZTAzLi4wM2Rk
NTg1ZDEyNjVhNmU0ZWVkYjk0MjY4NzUzZjM2MjRjNjIwYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJzaXRlRGF0YS5oCkBAIC00NCw2ICs0
NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YSBXZWJLaXRXZWJzaXRlRGF0
YTsKICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVM6IEluZGV4ZWRE
QiBkYXRhYmFzZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQTogUGx1Z2lu
cyBkYXRhLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzogQ29va2llcy4KKyAqIEBX
RUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQ6IEhhc2ggc2FsdCB1c2VkIHRv
IGdlbmVyYXRlIHRoZSBkZXZpY2UgaWRzIHVzZWQgYnkgd2VicGFnZXMuCiAgKiBAV0VCS0lUX1dF
QlNJVEVfREFUQV9BTEw6IEFsbCB0eXBlcy4KICAqCiAgKiBFbnVtIHZhbHVlcyB3aXRoIGZsYWdz
IHJlcHJlc2VudGluZyB0eXBlcyBvZiBXZWJzaXRlIGRhdGEuCkBAIC02MCw3ICs2MSw4IEBAIHR5
cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VT
ICAgICAgID0gMSA8PCA2LAogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEEgICAg
ICAgICAgICAgICA9IDEgPDwgNywKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDgsCi0gICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAg
ICAgICAgICAgICAgICAgICAgID0gKDEgPDwgOSkgLSAxCisgICAgV0VCS0lUX1dFQlNJVEVfREFU
QV9ERVZJQ0VfSURfSEFTSF9TQUxUICAgICAgID0gMSA8PCA5LAorICAgIFdFQktJVF9XRUJTSVRF
X0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgxIDw8IDEwKSAtIDEKIH0gV2ViS2l0
V2Vic2l0ZURhdGFUeXBlczsKIAogV0VCS0lUX0FQSSBHVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRh
ZDViZjVhYTk1OWRlYWIzMTU1ZDdjZmJiMjJkZWMwYjk3NmNkOWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAKQEAg
LTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4K
KyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisvLyBGSVhNRTog
SW1wbGVtZW50IHBlcnNpc3RlbmN5LgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgaW50IGhhc2hTYWx0U2l6ZSA9IDQ4Oworc3Rh
dGljIGNvbnN0IGludCByYW5kb21EYXRhU2l6ZSA9IGhhc2hTYWx0U2l6ZSAvIDE2OworCitSZWY8
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpjcmVhdGUo
Ym9vbCBpc1BlcnNpc3RlbnQpCit7CisgICAgYXV0byBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSA9
IGFkb3B0UmVmKCpuZXcgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoaXNQZXJzaXN0ZW50KSk7Cisg
ICAgcmV0dXJuIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlOworfQorCitEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZTo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoYm9vbCBpc1BlcnNpc3RlbnQpCisgICAg
OiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkRldmljZUlkSGFz
aFNhbHRTdG9yYWdlIikpCisgICAgLCBtX2lzUGVyc2lzdGVudChpc1BlcnNpc3RlbnQpCit7Cit9
CisKK0RldmljZUlkSGFzaFNhbHRTdG9yYWdlOjp+RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKQor
eworfQorCitTdHJpbmcgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkZW50aWZp
ZXJIYXNoU2FsdEZvck9yaWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYgcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gZ2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKHJl
cXVlc3QudG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpOworfQorCitTdHJpbmcgRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRG
b3JPcmlnaW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVz
dC50b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSk7Cit9CisKK1N0cmluZyBEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZTo6cmVnZW5lcmF0ZURldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9y
aWdpbihTZWN1cml0eU9yaWdpbiYgZG9jdW1lbnRPcmlnaW4pCit7CisgICAgYXV0byBkb2N1bWVu
dE9yaWdpbkRhdGEgPSBkb2N1bWVudE9yaWdpbi5kYXRhKCk7CisgICAgbV9kZXZpY2VJZEhhc2hT
YWx0Zm9yT3JpZ2luLnJlbW92ZUlmKFt0aGlzLCAmZG9jdW1lbnRPcmlnaW5EYXRhXShhdXRvJiBr
ZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4ga2V5QW5kVmFsdWUudmFsdWUtPmRvY3VtZW50
T3JpZ2luLT5kYXRhKCkgPT0gZG9jdW1lbnRPcmlnaW5EYXRhOworICAgIH0pOworCisgICAgcmV0
dXJuIGdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihkb2N1bWVudE9yaWdpbik7
Cit9CisKK1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmll
ckhhc2hTYWx0Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luJiBkb2N1bWVudE9yaWdpbikKK3sKKyAg
ICBhdXRvIGRldmljZUlkSGFzaFNhbHRGb3JPcmlnaW4gPSBtX2RldmljZUlkSGFzaFNhbHRmb3JP
cmlnaW4uZW5zdXJlKGRvY3VtZW50T3JpZ2luLnRvUmF3U3RyaW5nKCksIFt0aGlzLCAmZG9jdW1l
bnRPcmlnaW5dICgpIHsKKyAgICAgICAgdWludDY0X3QgcmFuZG9tRGF0YVtyYW5kb21EYXRhU2l6
ZV07CisgICAgICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhcio+KHJhbmRvbURhdGEpLCBzaXplb2YocmFuZG9tRGF0YSkpOworCisg
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5yZXNlcnZlQ2Fw
YWNpdHkoaGFzaFNhbHRTaXplKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5kb21E
YXRhU2l6ZTsgaSsrKQorICAgICAgICAgICAgYXBwZW5kVW5zaWduZWQ2NEFzSGV4KHJhbmRvbURh
dGFbMF0sIGJ1aWxkZXIpOworCisgICAgICAgIFN0cmluZyBkZXZpY2VJZGVudGlmaWVySGFzaFNh
bHRGb3JPcmlnaW4gPSBidWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgYXV0byBuZXdIYXNo
U2FsdEZvck9yaWdpbiA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNhbHRGb3JPcmlnaW4+KGRvY3Vt
ZW50T3JpZ2luLCBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbikpOwor
CisgICAgICAgIHJldHVybiBuZXdIYXNoU2FsdEZvck9yaWdpbjsKKyAgICB9KTsKKworICAgIGRl
dmljZUlkSGFzaFNhbHRGb3JPcmlnaW4uaXRlcmF0b3ItPnZhbHVlLT5sYXN0VGltZVVzZWQgPSBX
YWxsVGltZTo6bm93KCk7CisKKyAgICByZXR1cm4gZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbi5p
dGVyYXRvci0+dmFsdWUtPmRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsKK30KKwor
dm9pZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6c2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0
Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luJiBkb2N1bWVudE9yaWdpbiwgU3RyaW5nJiYgZGV2aWNl
SWRlbnRpZmllckhhc2hTYWx0KQoreworICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdp
biA9IG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5lbnN1cmUoZG9jdW1lbnRPcmlnaW4udG9S
YXdTdHJpbmcoKSwgWyZkb2N1bWVudE9yaWdpbiwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0ID0g
V1RGTW92ZShkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNhbHRGb3JPcmlnaW4+KGRvY3VtZW50T3JpZ2lu
LCBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCkpOworICAgIH0pOworCisgICAgZGV2
aWNlSWRIYXNoU2FsdEZvck9yaWdpbi5pdGVyYXRvci0+dmFsdWUtPmxhc3RUaW1lVXNlZCA9IFdh
bGxUaW1lOjpub3coKTsKKworICAgIGlmICghZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbi5pc05l
d0VudHJ5KQorICAgICAgICBkZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luLml0ZXJhdG9yLT52YWx1
ZS0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luID0gV1RGTW92ZShkZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHQpOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpnZXRE
ZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8U2VjdXJpdHlPcmln
aW5EYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBIYXNo
U2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKKworICAgICAgICBmb3IgKGF1dG8mIGhh
c2hTYWx0Rm9yT3JpZ2luIDogbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luKQorICAgICAgICAg
ICAgb3JpZ2lucy5hZGQoaGFzaFNhbHRGb3JPcmlnaW4udmFsdWUtPmRvY3VtZW50T3JpZ2luLT5k
YXRhKCkpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbb3JpZ2lucyA9IFdU
Rk1vdmUob3JpZ2lucyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KG9yaWdpbnMpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2U6OmRlbGV0ZURldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKGNvbnN0IFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gY29waWVkT3Jp
Z2luczsKKyAgICBjb3BpZWRPcmlnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3JpZ2lucy5z
aXplKCkpOworCisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKQorICAgICAgICBjb3Bp
ZWRPcmlnaW5zLnVuY2hlY2tlZEFwcGVuZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCkpOworCisgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29waWVkT3JpZ2lucyA9IFdURk1vdmUoY29waWVkT3JpZ2lucyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIG1fZGV2
aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5yZW1vdmVJZihbdGhpcywgJmNvcGllZE9yaWdpbnNdKGF1
dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gY29waWVkT3JpZ2lucy5jb250
YWlucyhrZXlBbmRWYWx1ZS52YWx1ZS0+ZG9jdW1lbnRPcmlnaW4tPmRhdGEoKSk7CisgICAgICAg
IH0pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6
OmRlbGV0ZURldmljZUlkSGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1l
LCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGltZSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luLnJlbW92ZUlmKFt0aGlzLCB0aW1l
XShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGtleUFuZFZhbHVlLnZh
bHVlLT5sYXN0VGltZVVzZWQgPiB0aW1lOworICAgICAgICB9KTsKKworICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1MTI5ZjQxODBjYjczZmEx
OTVjNDFjNGM2MmQ2MmQ4YTRjYWJjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9u
Q2hlY2tQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERldmljZUlkSGFz
aFNhbHRTdG9yYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERldmljZUlkSGFzaFNhbHRTdG9yYWdlPiBjcmVh
dGUoYm9vbCBpc1BlcnNpc3RlbnQpOworICAgIH5EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpOwor
CisgICAgc3RydWN0IEhhc2hTYWx0Rm9yT3JpZ2luIHsKKyAgICAgICAgSGFzaFNhbHRGb3JPcmln
aW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBTdHJpbmcmJiBkZXZp
Y2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pCisgICAgICAgICAgICA6IGRvY3VtZW50T3Jp
Z2luKHNlY3VyaXR5T3JpZ2luKQorICAgICAgICAgICAgLCBkZXZpY2VJZGVudGlmaWVySGFzaFNh
bHRGb3JPcmlnaW4oV1RGTW92ZShkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pKQor
ICAgICAgICAgICAgLCBsYXN0VGltZVVzZWQoV2FsbFRpbWU6Om5vdygpKQorICAgICAgICB7IH07
CisKKyAgICAgICAgUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBkb2N1bWVudE9yaWdpbjsK
KyAgICAgICAgU3RyaW5nIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsKKyAgICAg
ICAgV2FsbFRpbWUgbGFzdFRpbWVVc2VkOworICAgIH07CisKKyAgICBTdHJpbmcgZ2V0RGV2aWNl
SWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5
Jik7CisgICAgU3RyaW5nIHJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmln
aW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmKTsKKworICAgIHZvaWQgZ2V0RGV2aWNl
SWRIYXNoU2FsdE9yaWdpbnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZGVsZXRlRGV2
aWNlSWRIYXNoU2FsdEZvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4mLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZv
aWQgZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBG
dW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IERldmljZUlkSGFzaFNhbHRTdG9yYWdlKGJvb2wgaXNQZXJzaXN0ZW50KTsKKworICAg
IFN0cmluZyBnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4mIGRvY3VtZW50T3JpZ2luKTsKKyAgICBTdHJpbmcgcmVnZW5lcmF0ZURldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgZG9j
dW1lbnRPcmlnaW4pOworICAgIHZvaWQgc2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3Jp
Z2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBkb2N1bWVudE9yaWdpbiwgU3RyaW5nJiYgZGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKTsKKworICAgIFJlZjxXb3JrUXVldWU+IG1f
cXVldWU7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2FsdEZvck9y
aWdpbj4+IG1fZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbjsKKyAgICBib29sIG1faXNQZXJzaXN0
ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaAppbmRleCBmMzdi
ZTdhYjIxZjNmMTFmNTc1YjFjZmMxMjc3YmNhNTY2Y2NjMzAxLi5mYmNjNGNmZWUzYTViNGJkMGMw
YTBhYzYyMWRiMDhmMWZhNGMwZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgKQEAgLTM2LDggKzM2LDYgQEAg
Y2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTsKLQogY2xhc3MgVXNlck1lZGlhUGVy
bWlzc2lvbkNoZWNrUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2s+IHsKIHB1YmxpYzoKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cAppbmRleCBjMmU3ZTFiODY5M2E5Y2Q0MzBiMzBiMDA4NDkxMzFmNzUzY2E3MjE3Li4xOTI4Y2Qz
YTM0YzEzOWUyY2RkOTBmZjRlOWQ2YmE1MGZkOGE1NGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhUmVjb3JkLmgiCiAjaW5jbHVk
ZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0b3JNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIKICNpbmNsdWRlICJNb2Nr
QXV0aGVudGljYXRvck1hbmFnZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKQEAgLTk1LDYgKzk2LDcgQEAgV2Vic2l0
ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24s
IFBBTDo6U2Vzc2lvbklEIHMKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1f
Y29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pKQogICAgICwgbV9zdG9yYWdlTWFu
YWdlcihTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKG1fY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpKQorICAgICwgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZShEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZTo6Y3JlYXRlKGlzUGVyc2lzdGVudCgpKSkKICAgICAsIG1fcXVldWUoV29ya1F1
ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV2Vic2l0ZURhdGFTdG9yZSIpKQogI2lmIEVO
QUJMRShXRUJfQVVUSE4pCiAgICAgLCBtX2F1dGhlbnRpY2F0b3JNYW5hZ2VyKG1ha2VVbmlxdWVS
ZWY8QXV0aGVudGljYXRvck1hbmFnZXI+KCkpCkBAIC0xNzEsNiArMTczLDggQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpCiAgICAgICAgIG1f
cmVzb2x2ZWRDb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3RvcnkgPSByZXNvbHZlQW5kQ3Jl
YXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24u
bWVkaWFDYWNoZURpcmVjdG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24ubWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0
aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRl
RGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3Rv
cmFnZURpcmVjdG9yeSk7CisgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2Fs
dHNTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXNvbHZlZENvbmZpZ3Vy
YXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gcmVzb2x2ZUFuZENyZWF0
ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRlbnNpb24obV9jb25maWd1cmF0aW9uLmRl
dmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3VyYXRp
b24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAgICAgICBtX3Jlc29sdmVk
Q29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVBbmRDcmVhdGVS
ZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5zaW9uKG1fY29uZmlndXJhdGlvbi53ZWJT
UUxEYXRhYmFzZURpcmVjdG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24uaW5kZXhlZERC
RGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtNDg1LDYgKzQ4OSwxOSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgTwogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZSAmJiBkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpE
ZXZpY2VJZEhhc2hTYWx0KSkgeworICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRp
bmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERl
dmljZUlkSGFzaFNhbHRPcmlnaW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3JdKEhhc2hTZXQ8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmIG9yaWdpbnMpIHsKKyAgICAgICAgICAgIFdlYnNpdGVE
YXRhIHdlYnNpdGVEYXRhOworCisgICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRh
OjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQsIDAgfSk7CisKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVu
ZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKKyAgICAgICAgfSk7CisgICAgfQor
CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBjYWxsYmFja0Fn
Z3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwogCkBAIC04MDAsNiArODE3LDE0IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGlmIChtX2Rl
dmljZUlkSGFzaFNhbHRTdG9yYWdlICYmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpEZXZpY2VJZEhhc2hTYWx0KSB8fCAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6Q29va2llcykpKSkgeworICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRp
bmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmRlbGV0
ZURldmljZUlkSGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZShtb2RpZmllZFNpbmNlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92
ZVBlbmRpbmdDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUp
ICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVu
ZGluZ0NhbGxiYWNrKCk7CiAKQEAgLTEwNzQsNiArMTA5OSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBj
b25zdCBWZQogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSAmJiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRI
YXNoU2FsdCkgfHwgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMp
KSkpIHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsK
KworICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5kZWxldGVEZXZpY2VJZEhhc2hT
YWx0Rm9yT3JpZ2lucyhvcmlnaW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOworICAgICAgICB9
KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAg
IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBkYXRhUmVjb3JkcykgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmlu
ZGV4IGE0MjI2MWYwNDFmNTk3YWEyYWE0YTk0MzMxY2QzNThjYTgyYjVmYmEuLjkxNjNkOTg5NDUx
MTY0Y2ZiYmQzYTc4MDllMjI0YTk4NjFmZjc5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTU1LDYgKzU1
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFuYWdlcjsKIGNs
YXNzIFNlY0tleVByb3h5U3RvcmU7CiBjbGFzcyBTdG9yYWdlTWFuYWdlcjsKK2NsYXNzIERldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlOwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViUHJvY2Vz
c1Bvb2w7CiBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CkBAIC05Miw2ICs5
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5nIHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5Owog
ICAgICAgICBTdHJpbmcgbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgbWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeTsKKyAgICAgICAgU3RyaW5nIGRldmljZUlkSGFzaFNhbHRz
U3RvcmFnZURpcmVjdG9yeTsKICAgICAgICAgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBqYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9y
eTsKICAgICAgICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VGaWxlOwpAQCAtMTYxLDYgKzE2Myw4IEBA
IHB1YmxpYzoKIAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJu
IG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KIAorICAgIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
KiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuZ2V0KCk7IH0KKwogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7CiAgICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChX
ZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwogCkBAIC0yMzUsNiArMjM5LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcyB7IGZhbHNlIH07CiAKICAgICBjb25zdCBS
ZWZQdHI8U3RvcmFnZU1hbmFnZXI+IG1fc3RvcmFnZU1hbmFnZXI7CisgICAgY29uc3QgUmVmUHRy
PERldmljZUlkSGFzaFNhbHRTdG9yYWdlPiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlOwogICAg
IFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fcmVzb3VyY2VMb2FkU3Rh
dGlzdGljczsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSB7IGZh
bHNlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDFkYjZmNjI0ZGQxZmI5MTQ0MTIwOGYxMDliMzc1MmVlYTkyYTBkMGYuLjkwNjdk
ZjY2ODExZTUxZmY4M2U4ZTQ3NmJkYjc1MmZkMThjYzJhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzYsNiArNzYsOCBAQAogCQkw
MEI5NjYxNjE4RTI0Q0JBMDBDRTFGODggLyogQVBJRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTY2MTUxOEUyNENCQTAwQ0UxRjg4
IC8qIEFQSUZpbmRDbGllbnQuaCAqLzsgfTsKIAkJMDBCOTY2MUExOEUyNUFFMTAwQ0UxRjg4IC8q
IEZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDAwQjk2NjE4MThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggKi87IH07CiAJCTA3
Mjk3RjlGMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGOUQx
QzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggKi87IH07
CisJCTA3Mjk3RjlFMUMxN0JCRUEwMTRGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5
QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovOyB9Owor
CQkwNzI5N0Y5RjFDMTdCQkVBMDE1RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RjlEMUMx
N0JCRUEyMjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICovOyB9OwogCQkwNzI5
N0ZBMzFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RkExMUMxODZB
REIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3NEU3NUZFMURGMjIxMTkwMEQz
MThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc0RTc1RkIxREYxRkQxMzAwRDMxOEVDIC8qIFVzZXJN
ZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi87IH07CiAJCTA3NkU4ODRFMUExM0NBREYwMDVFOTBGQyAv
KiBBUElDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDc2RTg4NEQxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRleHRNZW51
Q2xpZW50LmggKi87IH07CkBAIC0xODM1LDYgKzE4MzcsOCBAQAogCQkwMEI5NjYxODE4RTI1QUUx
MDBDRTFGODggLyogRmluZENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlDMUMx
N0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQ
cm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlEMUMxN0JCRUEw
MDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTAxQzE4NkFEQjAw
M0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTExQzE4NkFEQjAwM0YwNzM1IC8qIFdL
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3NEU3NUZCMURGMUZEMTMwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFQcm9jZXNzTWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE4OSw2ICs3MTkzLDggQEAK
IAkJCQk0NkEyQjYwNzFFNTY3NUEyMDBDM0RFREEgLyogQmFja2dyb3VuZFByb2Nlc3NSZXNwb25z
aXZlbmVzc1RpbWVyLmggKi8sCiAJCQkJRTE1MTNDNjQxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxk
UHJvY2Vzc1Byb3h5LmNwcCAqLywKIAkJCQlFMTUxM0M2NTE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hp
bGRQcm9jZXNzUHJveHkuaCAqLywKKwkJCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovLAorCQkJCTA3Mjk3RjlEMUMxN0JCRUEyMjNGMDcz
NSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICovLAogCQkJCUJDMjY1MjEyMTE4MjYwODEw
MDI0M0UxMiAvKiBEcmF3aW5nQXJlYVByb3h5LmNwcCAqLywKIAkJCQlCQzI2NTIxMzExODI2MDgx
MDAyNDNFMTIgLyogRHJhd2luZ0FyZWFQcm94eS5oICovLAogCQkJCTFBNjQyMkZDMTJERDA4RkUw
MENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtODg2NCw2ICs4
ODcwLDcgQEAKIAkJCQkxQUM3NTM4MDE4M0JFNTBGMDA3MkNCMTUgLyogRGF0YVJlZmVyZW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEQTYxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTU3RENFREFCMjE0QzYwMDkwMDE2Qjg0NyAvKiBEZXZpY2VJ
ZGVudGl0eVNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcyOTdGOUYxQzE3QkJFQTAxNUYwNzM1
IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzg5MUI2
QzFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMxODE3MzYxMjA1ODQyNDcwMERGREE2NSAvKiBEaXNwbGF5TGluay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxNDI3MDIxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwNjAyLDYgKzEwNjA5LDcgQEAKIAkJCQkyRDkyQTc3RDIxMkI2QTcx
MDBGNDkzRkQgLyogQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3RTIx
MkI2QTcxMDBGNDkzRkQgLyogRGF0YVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
RDkyQTc3RjIxMkI2QTcxMDBGNDkzRkQgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwNzI5N0Y5RTFDMTdCQkVBMDE0RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhDIC8qIERvd25sb2Fk
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDIyOTkxMkRE
MDI5MjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBNjQyMzA4MTJERDA5RUIwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUwYzk1NzU4MGJjNjgxNGMzYjZkZWRjYjI2MmZi
ZTNjODc1OTI4ZWYuLjEzNDdlYWUxZGFmNGIxMDI5NDdhYmY0MWM5YTQyNDg5MzU3ZGZlN2YgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNCBAQAorMjAxOC0xMC0wMyAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNl
cyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBuZXcgQVBJIHRlc3QgZm9yIHRoZSBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNl
czoKKyAgICAgICAgdXNlcm1lZGlhLWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjay4g
QW5kIGEgbmV3IEFQSSB0ZXN0CisgICAgICAgIGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZTogdGVz
dFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2d0
ay9tYWluLmM6CisgICAgICAgIChnb3RXZWJzaXRlRGF0YUNhbGxiYWNrKTogQWRkZWQgYSBuZXcg
c2VjdGlvbiB0byB0aGUgYWJvdXQ6ZGF0YQorICAgICAgICB3ZWJwYWdlIHRvIGluY2x1ZGUgdGhl
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXNoIHNhbHQuCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHA6CisgICAgICAgICh0ZXN0V2ViVmll
d1VzZXJNZWRpYUVudW1lcmF0ZURldmljZXNQZXJtaXNzaW9uQ2hlY2spOiBBZGRlZCB0aGUKKyAg
ICAgICAgbmV3IHRlc3QgY2hlY2tpbmcgdGhlIGVudW1lcmF0ZURldmljZXMgQVBJIHdoZW4gcGVy
bWlzc2lvbiBpcworICAgICAgICBkZW5pZWQgYW5kIHdoZW4gcGVybWlzc2lvbiBpcyBhbGxvd2Vk
IGZvciB0aGUgb3JpZ2luLgorICAgICAgICAoYmVmb3JlQWxsKTogRGVmaW5lZCB0aGUgbmV3IHRl
c3QuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJzaXRl
RGF0YS5jcHA6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6IFJlZ2lzdGVyIGEgbmV3IFVSSSBm
b3IgdGhlIGVudW1lcmF0ZURldmljZXMuCisgICAgICAgICh0ZXN0V2Vic2l0ZURhdGFDb25maWd1
cmF0aW9uKTogUmVtb3ZlIHRoZSBoYXNoIHNhbHRzIGZyb20gdGhlCisgICAgICAgIGRpcmVjdG9y
aWVzLgorICAgICAgICAodGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdCk6IE5ldyB0ZXN0
IGNoZWtpbmcgdGhlCisgICAgICAgIGVudW1lcmF0ZURldmljZXMgQVBJLgorICAgICAgICAoYmVm
b3JlQWxsKTogQWRkZWQgdGhlIG5ldyB0ZXN0IHRlc3RXZWJzaXRlRGF0YURldmljZUlkSGFzaFNh
bHQgdG8KKyAgICAgICAgdGhlIGluaXQgc3RydWN0dXJlLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvZ2xpYi9XZWJLaXRHTGliL1dlYlZpZXdUZXN0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdUZXN0
Ojppbml0aWFsaXplV2ViVmlldyk6IE1ha2Ugc3VyZSB0aGUgbWVkaWEtc3RyZWFtIGlzCisgICAg
ICAgIGFjdGl2YXRlZCBpbiB0aGUgd2ViVmlldy4KKwogMjAxOC0xMC0wMyAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBFbmFibGUgc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQgYnkgZGVmYXVsdCBpbiBXZWJLaXRMZWdhY3kKZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsv
bWFpbi5jCmluZGV4IDU4NzAxZmM4NDJjZTU5NWQyNjg0NzYyYTRhMTNlYjE4NjQ4OWE0OTAuLjUx
MzNhNGRkNjFiOTJjZDUzMWRlOTM0OTgwOTMzMTE0NzA4M2ViMTQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL2d0ay9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4u
YwpAQCAtNDAyLDYgKzQwMiw3IEBAIHN0YXRpYyB2b2lkIGdvdFdlYnNpdGVEYXRhQ2FsbGJhY2so
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1CiAKICAgICBndWlu
dDY0IHBhZ2VJRCA9IHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhkYXRhUmVxdWVzdC0+cmVxdWVzdCkpOwogICAgIGFib3V0
RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkNvb2tpZXMiLCBX
RUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMsIE5VTEwsIHBhZ2VJRCk7CisgICAgYWJvdXREYXRh
RmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiRGV2aWNlIElkIEhhc2gg
U2FsdCIsIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCwgTlVMTCwgcGFn
ZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxp
c3QsICJNZW1vcnkgQ2FjaGUiLCBXRUJLSVRfV0VCU0lURV9EQVRBX01FTU9SWV9DQUNIRSwgTlVM
TCwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwg
ZGF0YUxpc3QsICJEaXNrIENhY2hlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hFLCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KG1hbmFn
ZXIpLCBwYWdlSUQpOwogICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0
LCBkYXRhTGlzdCwgIlNlc3Npb24gU3RvcmFnZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFfU0VTU0lP
Tl9TVE9SQUdFLCBOVUxMLCBwYWdlSUQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcAppbmRleCA2NjExMzc3M2UzYjQzODIx
NThmOWQ5YzRlY2I3MmJjOTY4MTMwOTVkLi5lNWI2YTg5ZTg0NTVmYzNiNTNiODAwZjJiMDA4NDhk
ZTdiMTJmMWUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdM
aWIvVGVzdFVJQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEdMaWIvVGVzdFVJQ2xpZW50LmNwcApAQCAtODM0LDYgKzgzNCw0NyBAQCBzdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVz
dCwgZ2NvbnN0cAogI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKIAogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1VzZXJNZWRpYUVudW1lcmF0ZURl
dmljZXNQZXJtaXNzaW9uQ2hlY2soVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnYm9vbGVhbiBlbmFibGVkID0gd2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzKTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIFRSVUUpOworCisjaWYgUExB
VEZPUk0oR1RLKQorICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwor
I2VuZGlmCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJNZWRpYVJlcXVlc3RIVE1MID0KKyAg
ICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPHNjcmlwdD4iCisgICAgICAgICIgIGZ1bmN0aW9u
IHJ1blRlc3QoKSIKKyAgICAgICAgIiAgeyIKKyAgICAgICAgIiAgICBuYXZpZ2F0b3IubWVkaWFE
ZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKCIKKyAgICAgICAgIiAgICAgICAgZnVuY3Rp
b24oZGV2aWNlcykgeyAiCisgICAgICAgICIgICAgICAgICAgICBkZXZpY2VzLmZvckVhY2goZnVu
Y3Rpb24oZGV2aWNlKSB7IgorICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZGV2aWNlLmxhYmVsKSBkb2N1bWVudC50aXRsZSA9IFwiT0tcIjsiCisgICAgICAgICIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRvY3VtZW50
LnRpdGxlID0gXCJQZXJtaXNzaW9uIGRlbmllZFwiOyIKKyAgICAgICAgIiAgICAgICAgICAgIH0p
IgorICAgICAgICAiICAgIH0pIgorICAgICAgICAiICB9IgorICAgICAgICAiICA8L3NjcmlwdD4i
CisgICAgICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKKyAgICAgICAg
IjwvaHRtbD4iOworCisgICAgdGVzdC0+bV92ZXJpZnlNZWRpYVR5cGVzID0gVFJVRTsKKworICAg
IC8vIFRlc3QgZGVueWluZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93
UGVybWlzc2lvblJlcXVlc3RzID0gZmFsc2U7CisgICAgdGVzdC0+bG9hZEh0bWwodXNlck1lZGlh
UmVxdWVzdEhUTUwsIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRv
KCJQZXJtaXNzaW9uIGRlbmllZCIpOworCisgICAgLy8gVGVzdCBhbGxvd2luZyBhIHBlcm1pc3Np
b24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0gdHJ1ZTsK
KyAgICB0ZXN0LT5sb2FkSHRtbCh1c2VyTWVkaWFSZXF1ZXN0SFRNTCwgbnVsbHB0cik7CisgICAg
dGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIk9LIik7CisKKyAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIGVuYWJsZWQpOworfQorCiBzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdz
ID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwpAQCAtMTE1
Niw2ICsxMTk3LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImdlb2xvY2F0aW9uLXBlcm1pc3Npb24tcmVxdWVzdHMiLCB0ZXN0V2Vi
Vmlld0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKICNlbmRpZgogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidXNl
cm1lZGlhLWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjayIsIHRlc3RXZWJWaWV3VXNl
ck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25DaGVjayk7CiAgICAgVUlDbGllbnRUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAidXNlcm1lZGlhLXBlcm1pc3Npb24tcmVxdWVzdHMiLCB0
ZXN0V2ViVmlld1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyk7CiAgICAgVUlDbGllbnRUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXVkaW8tdXNlcm1lZGlhLXBlcm1pc3Npb24tcmVxdWVz
dCIsIHRlc3RXZWJWaWV3QXVkaW9Pbmx5VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RzKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rl
c3RXZWJzaXRlRGF0YS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFdlYnNpdGVEYXRhLmNwcAppbmRleCA5N2UxODliNmY4MjM5ZmJmNzViNzlkZDAyNjVhYjcz
MThhODNjODk2Li43M2ExZDFiODljMTNmMzRhZWRmZmIxZDU5OGY4YzdhM2FjZDFjZTJmIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVE
YXRhLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdl
YnNpdGVEYXRhLmNwcApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiV2ViS2l0VGVzdFNl
cnZlci5oIgogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8u
aD4KIAogc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CiAKQEAgLTYxLDYgKzYyLDEx
IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1l
c3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGxvY2FsU3Rv
cmFnZUhUTUwsIHN0cmxlbihsb2NhbFN0b3JhZ2VIVE1MKSk7CiAgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwogICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL2VudW1lcmF0ZWRldmljZXMiKSkgeworICAgICAgICBjb25z
dCBjaGFyKiBlbnVtZXJhdGVEZXZpY2VzSFRNTCA9ICI8aHRtbD48Ym9keSBvbmxvYWQ9XCJuYXZp
Z2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZXMpIHsgZG9jdW1lbnQudGl0bGUgPSAnRmluaXNoZWQnOyB9KVwiPjwvYm9keT48L2h0bWw+IjsK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1NUQVRJQywgZW51bWVyYXRlRGV2aWNlc0hUTUwsIHN0cmxlbihlbnVtZXJh
dGVEZXZpY2VzSFRNTCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfT0spOwogICAgIH0gZWxzZQogICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwogfQpAQCAtMTYzLDcg
KzE2OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YUNvbmZpZ3VyYXRpb24oV2Vic2l0
ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogCiAgICAgLy8gQ2xlYXIgYWxsIHBlcnNp
c3RlbnQgY2FjaGVzLCBzaW5jZSB0aGUgZGF0YSBkaXIgaXMgY29tbW9uIHRvIGFsbCB0ZXN0IGNh
c2VzLgogICAgIHN0YXRpYyBjb25zdCBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHBlcnNpc3RlbnRD
YWNoZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lU
RV9EQVRBX0RJU0tfQ0FDSEUgfCBXRUJLSVRfV0VCU0lURV9EQVRBX0xPQ0FMX1NUT1JBR0UKLSAg
ICAgICAgfCBXRUJLSVRfV0VCU0lURV9EQVRBX1dFQlNRTF9EQVRBQkFTRVMgfCBXRUJLSVRfV0VC
U0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMgfCBXRUJLSVRfV0VCU0lURV9EQVRBX09GRkxJ
TkVfQVBQTElDQVRJT05fQ0FDSEUpOworICAgICAgICB8IFdFQktJVF9XRUJTSVRFX0RBVEFfV0VC
U1FMX0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyB8
IFdFQktJVF9XRUJTSVRFX0RBVEFfT0ZGTElORV9BUFBMSUNBVElPTl9DQUNIRSB8IFdFQktJVF9X
RUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCk7CiAgICAgdGVzdC0+Y2xlYXIocGVyc2lz
dGVudENhY2hlcywgMCk7CiAgICAgZ19hc3NlcnQoIXRlc3QtPmZldGNoKHBlcnNpc3RlbnRDYWNo
ZXMpKTsKIApAQCAtNTE3LDYgKzUyMywzOSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFD
b29raWVzKFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2Vy
dCghZGF0YUxpc3QpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhh
c2hTYWx0KFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5jbGVhcihXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQsIDApOworCisg
ICAgR0xpc3QqIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJ
Q0VfSURfSEFTSF9TQUxUKTsKKyAgICBnX2Fzc2VydCghZGF0YUxpc3QpOworCisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW51bWVyYXRlZGV2aWNlcyIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIkZpbmlzaGVkIik7CisKKyAg
ICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hB
U0hfU0FMVCk7CisgICAgZ19hc3NlcnQoZGF0YUxpc3QpOworCisgICAgZ19hc3NlcnRfY21wdWlu
dChnX2xpc3RfbGVuZ3RoKGRhdGFMaXN0KSwgPT0sIDEpOworICAgIFdlYktpdFdlYnNpdGVEYXRh
KiBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGEqPihkYXRhTGlzdC0+ZGF0YSk7
CisgICAgZ19hc3NlcnQoZGF0YSk7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3X2Zvcl91cmkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiLyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFf
Z2V0X25hbWUoZGF0YSksID09LCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdp
bikpOworICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYob3JpZ2luKTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGVzKGRhdGEpLCA9PSwgV0VC
S0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKworICAgIEdMaXN0IHJlbW92
ZUxpc3QgPSB7IGRhdGEsIG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB0ZXN0LT5yZW1vdmUoV0VC
S0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxULCAmcmVtb3ZlTGlzdCk7CisgICAg
ZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNI
X1NBTFQpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CisKKyAgICAvLyBDbGVhciBhbGwuCisg
ICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgY2FjaGVBbmRBcHBjYWNoZVR5
cGVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVf
REFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKyAgICB0ZXN0LT5jbGVhcihjYWNoZUFuZEFwcGNh
Y2hlVHlwZXMsIDApOworICAgIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goY2FjaGVBbmRBcHBjYWNo
ZVR5cGVzKTsKKyAgICBnX2Fzc2VydCghZGF0YUxpc3QpOworfQorCiB2b2lkIGJlZm9yZUFsbCgp
CiB7CiAgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CkBAIC01MjksNiArNTY4
LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRX
ZWJzaXRlRGF0YSIsICJkYXRhYmFzZXMiLCB0ZXN0V2Vic2l0ZURhdGFEYXRhYmFzZXMpOwogICAg
IFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJhcHBjYWNoZSIsIHRl
c3RXZWJzaXRlRGF0YUFwcGNhY2hlKTsKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0
V2Vic2l0ZURhdGEiLCAiY29va2llcyIsIHRlc3RXZWJzaXRlRGF0YUNvb2tpZXMpOworICAgIFdl
YnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJkZXZpY2VpZGhhc2hzYWx0
IiwgdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdCk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmll
d1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rl
c3QuY3BwCmluZGV4IDNjMDk1YzM3YjQyZjM3ZDRlNTY2NjhkY2ZkNDUyODEzMTI0ZDMzNDIuLjdl
MzU0MGI3ODFjMjlhZGJiYTM1N2JkZmJhYjhlNjc0NmRjYWFmN2IgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5jcHAKQEAgLTQ4LDEw
ICs0OCwxNSBAQCBXZWJWaWV3VGVzdDo6fldlYlZpZXdUZXN0KCkKIHZvaWQgV2ViVmlld1Rlc3Q6
OmluaXRpYWxpemVXZWJWaWV3KCkKIHsKICAgICBnX2Fzc2VydCghbV93ZWJWaWV3KTsKKworICAg
IFdlYktpdFNldHRpbmdzKiB3ZWJraXRTZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5nc19uZXcoKTsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0od2Via2l0U2V0dGlu
Z3MsIFRSVUUpOworCiAgICAgbV93ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICNpZiBQTEFURk9STShXUEUpCiAgICAgICAgICJiYWNr
ZW5kIiwgVGVzdDo6Y3JlYXRlV2ViVmlld0JhY2tlbmQoKSwKICNlbmRpZgorICAgICAgICAic2V0
dGluZ3MiLCB3ZWJraXRTZXR0aW5ncywKICAgICAgICAgIndlYi1jb250ZXh0IiwgbV93ZWJDb250
ZXh0LmdldCgpLAogICAgICAgICAidXNlci1jb250ZW50LW1hbmFnZXIiLCBtX3VzZXJDb250ZW50
TWFuYWdlci5nZXQoKSwKICAgICAgICAgbnVsbHB0cikpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDA0ZTVkNGMwMzVmYTYx
Y2ZkNjUyYzIyMTJlY2ZmODNlMjBjNzMyZWMuLmNiYzQ4NjRlNjNiMzUyMmRjZTZjOGU1OWVmMzcx
NTM3NTkxODUwMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxOC0xMC0wMyAgQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBt
ZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIGZhaWx1cmUgZXhwZWN0YXRp
b24gZm9yIHRoZSB0ZXN0CisgICAgICAgIG1lZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmljZXMu
aHRtbC4gSnVzdCBmb3IgdGhlIHJlY29yZCB3ZSBoYXZlCisgICAgICAgIGFsc28gY2hlY2tlZCB0
aGUgZm9sbG93aW5nIHRlc3RzLgorCisgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vbWVkaWEtZGV2
aWNlcy1lbnVtZXJhdGUtZGV2aWNlcy5odG1sCisgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vcmVz
b3VyY2VzL2VudW1lcmF0ZS1kZXZpY2VzLWZyYW1lLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9t
ZWRpYS9tZWRpYS1zdHJlYW0vZW51bWVyYXRlLWRldmljZXMtc291cmNlLWlkLmh0bWwKKyAgICAg
ICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0vZW51bWVyYXRlLWRldmljZXMtc291cmNl
LWlkLXBlcnNpc3RlbnQuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVh
bS9yZXNvdXJjZXMvZW51bWVyYXRlLWRldmljZXMtc291cmNlLWlkLWZyYW1lLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE4LTEwLTAzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgSDI2NCBzaW11
bGNhc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNTBi
NTUyM2U5NmMyMzNiNzY1NTU3NjNlOGMxNWUyZDUzMWJiNTcyYy4uNmY5NzMwODBmOTA4NzUxZjhl
NjYyNzBiMzM0ZGQ4NWE1MDgyMmVhNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTY0MCw3ICs2NDAsNiBAQCB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cgog
d2Via2l0Lm9yZy9iLzE1MTM0NCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1lbmRl
ZC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQogIyBDcmFzaCBpcyBidWcgIzE3NjgwMQogd2Via2l0
Lm9yZy9iLzE2MDk5NiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQt
dmlkZW8tdHJhY2tzLWRpc2FibGVkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIENyYXNoIF0KLXdl
YmtpdC5vcmcvYi8xNzIyNjkgZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0
ZS1kZXZpY2VzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNzMyNTcgZmFzdC9tZWRp
YXN0cmVhbS9nZXRVc2VyTWVkaWEtZ3JhbnQtcGVyc2lzdGVuY3kzLmh0bWwgWyBQYXNzIEZhaWx1
cmUgXQogCiAjIENhbnZhcyBjYXB0dXJlU3RyZWFtIHN1cHBvcnQgaXMgbm90IGltcGxlbWVudGVk
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351591</attachid>
            <date>2018-10-04 01:56:42 -0700</date>
            <delta_ts>2018-10-10 04:41:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20181004105640.patch</filename>
            <type>text/plain</type>
            <size>65945</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmIzN2Y1NWIyNGVkZGQ4
ZjQ0NjMyZmZjNTgzOWM2MDI2NTAxYzEzZi4uY2YyY2Q5YTY3Zjg5MmRhYzZjYWViMDYwYzEyMjdk
MzM0MWM0MjZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgR1RLIGFuZCBXUEUgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMg
aWYgdGhlcmUgaXMgbm8KKyAgICAgICAgcGVyc2lzdGVudCBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4K
KwogMjAxOC0xMC0wMyAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVnaXN0ZXJlZCBjdXN0b20gcHJvcGVydGllcyBzaG91bGQgYWxsb3cgaW5o
ZXJpdGFuY2UgdG8gYmUgY29udHJvbGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1NjNkYmJkYmE5ZDk5YmI3YWUx
MzhmNTAyYTA1M2RkYzhmNmUzMWUyLi40ZTE4NzUyNWNiNGNkODQ5MGI5ZjhhOTJmMGY3YjViZmM0
MjNhMjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxOC0xMC0wNCAgQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBt
ZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCB0aGUgZW51bWVyYXRlRGV2
aWNlcyBBUEkgdXNpbmcgYSBuZXcgV2ViS2l0IGNsYXNzCisgICAgICAgIChEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZSkgdGhhdCBnZW5lcmF0ZXMgYW5kIHN0b3JlcyB0aGUgZGV2aWNlIGlkcworICAg
ICAgICBoYXNoIHNhbHRzIHBlciBvcmlnaW4sIHVzZWQgdG8gYXZvaWQgZmluZ2VycHJpbnRpbmcg
aW4gdGhlCisgICAgICAgIHdlYnBhZ2VzLgorCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIGFkZHMg
YSBuZXcgdHlwZSBvZiBkYXRhIGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAgICAgVGhh
dCB3YXkgdGhlIHVzZXJzIGNhbiBjYWxsIHRoZSBXZWJzaXRlRGF0YVN0b3JlIHRvIHNob3cgd2hh
dAorICAgICAgICBvcmlnaW5zIGhhdmUgaGFzaCBzYWx0IGdlbmVyYXRlZCBhbmQgcmVtb3ZlIHRo
ZW0gYXQgc29tZSBwb2ludC4KKworICAgICAgICBGb3IgdGhlIG1vbWVudCBqdXN0IEdUSysgYW5k
IFdQRSBwb3J0cyBhcmUgdXNpbmcgdGhpcyBjbGFzcyB0bworICAgICAgICBnZW5lcmF0ZSB0aGUg
aGFzaCBzYWx0cy4gVGhlIHBhdGNoIGFkZHMgY29kZSB0byB0aGUKKyAgICAgICAgY2hlY2tVc2Vy
TWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luIEFQSSBpbXBsZW1lbnRhdGlvbiwgaXQgd2FzIGVtcHR5
CisgICAgICAgIHVudGlsIG5vdyBmb3IgdGhlc2UgcG9ydHMuIEluIHRoaXMgZnVuY3Rpb24gd2Ug
Y3JlYXRlIGFuIGluc3RhbmNlCisgICAgICAgIG9mIGEgbmV3IGNsYXNzIFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdCB0aGF0IGltcGxlbWVudHMKKyAgICAgICAgdGhlIFdlYktpdFBl
cm1pc3Npb25SZXF1ZXN0SWZhY2UgaW50ZXJmYWNlLCB0aGF0IGFsbG93cyB0aGUgcG9ydHMKKyAg
ICAgICAgdG8gdXNlIHRoZSBjdXJyZW50IHBlcm1pc3Npb24gbWFuYWdlcnMgaW1wbGVtZW50ZWQg
aW4gdGhlCisgICAgICAgIGVtYmVkZGVycyB0byBoYW5kbGUgdGhpcyBuZXcga2luZCBvZiByZXF1
ZXN0IHRoZSB3YXkgdGhleSBsaWtlCisgICAgICAgIGl0LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiBpcyBkZW55LgorCisgICAgICAgIFRoZSBjbGFzcyBXZWJLaXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3QgdGFrZXMgY2FyZSBvZgorICAgICAgICBjb250YWN0aW5nIHRoZSBEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZSBhbmQgcmVxdWVzdC9yZWdlbmVyYXRlIHRoZQorICAgICAgICBoYXNo
IHNhbHRzIGFjY29yZGluZ2x5LgorCisgICAgICAgIFBlcnNpc3RlbmN5IGlzIHN0aWxsIG5vdCBp
bXBsZW1lbnRlZCwgd2Ugd2lsbCBhZGQgaXQgaW4gYQorICAgICAgICBmdXR1cmUgcGF0Y2guCisK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmg6IEFkZGVkIHRo
ZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaWRlIGRhdGE6IERldmljZUlkSGFzaFNhbHQuCisg
ICAgICAgICogU291cmNlcy50eHQ6IEFkZGVkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAg
ICAgICAgKiBTb3VyY2VzR1RLLnR4dDogRGl0dG8uCisgICAgICAgICogU291cmNlc1dQRS50eHQ6
IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QuY3BwOiBBZGRlZAorICAgICAgICB0aGlzIGNsYXNzIHRvIHJlcHJlc2Vu
dCBhIHJlcXVlc3Qgb2YgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlCisgICAgICAgIGRldmljZXMg
aW5mb3JtYXRpb24uIFRoaXMgaXMgc3BlY2lmaWMgZm9yIGdsaWIgcG9ydHMgYW5kIGltcGxlbWVu
dHMKKyAgICAgICAgdGhlIHBvbGljaWVzIHJlZ2FyZGluZyB0aGUgaGFzaCBzYWx0cyB3aGVuIHRo
ZSBlbWJlZGRlciBhbGxvd3Mgb3IKKyAgICAgICAgZGVuaWVzIHRoZSBhY2Nlc3MgdXNpbmcgdGhl
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlIGNsYXNzLgorICAgICAgICAod2Via2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0QWxsb3cpOiBHZXQgdGhlIGRldmljZSBoYXNoIHNhbHQKKyAgICAg
ICAgd2hlbiB0aGUgb3JpZ2luIGlzIGFsbG93ZWQgYW5kIHNldCBpdCBpbiB0aGUgb3JpZ2luYWwg
cmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnkp
OiBSZWdlbmVyYXRlIHRoZSBkZXZpY2UgaWQKKyAgICAgICAgaGFzaCBzYWx0IHdoZW4gdGhlIHVz
ZXIgZG9lcyBub3QgYWxsb3cgdG8gYWNjZXNzIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24uCisgICAg
ICAgICh3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2ludGVyZmFjZV9pbml0KToKKyAgICAgICAg
KHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERpc3Bvc2UpOgorICAgICAgICAod2Vi
a2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9jbGFzc19pbml0KToKKyAgICAgICAg
KHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZSk6IENyZWF0ZSB0aGUgY2xh
c3MgdXNpbmcKKyAgICAgICAgdGhlIHByb3h5IHJlcXVlc3QgZnJvbSB0aGUgd2VicHJvY2VzcyBh
bmQgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJl
cXVlc3RQcml2YXRlLmg6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRVSUNsaWVudC5jcHA6IEFkZGVkIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAg
ICBmb3IgdGhlIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbiBBUEkgZm9yIHRoZSBn
bGliIHBvcnRzLAorICAgICAgICBpdCBjcmVhdGVzIHRoZSBkZXZpY2UgaW5mbyByZXF1ZXN0IGFu
ZCBjYWxscyB0aGUgcGVybWlzc2lvbgorICAgICAgICByZXF1ZXN0IEFQSS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGEuY3BwOgorICAgICAgICAodG9XZWJL
aXRXZWJzaXRlRGF0YVR5cGVzKTogQWRkZWQgdGhlIGNvbnZlcnNpb24gZnJvbSB0aGUgV2ViS2l0
CisgICAgICAgIHR5cGVzIHRvIHRoZSBnbGliIHR5cGVzIGZvciB0aGUgV2Vic2l0ZURhdGFUeXBl
OjpEZXZpY2VJZEhhc2hTYWx0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAodG9XZWJzaXRlRGF0YVR5cGVzKTogQWRk
ZWQgdGhlIGNvbnZlcnNpb24gZnJvbSB0aGUgZ2xpYiB0eXBlCisgICAgICAgIFdFQktJVF9XRUJT
SVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCB0byB0aGUgV2ViS2l0IHR5cGUuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmg6
IEFkZGVkCisgICAgICAgIHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHBlcm1pc3Np
b24gcmVxdWVzdCBmb3IgdGhlIGRldmljZQorICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgR1RL
KyBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmg6
IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaXRlIHRoYXQgaW4gdGhlIEdUSysg
cG9ydDoKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxULgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdC5oOiBBZGRlZAorICAgICAgICB0aGlzIG5ldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBw
ZXJtaXNzaW9uIHJlcXVlc3QgZm9yIHRoZSBkZXZpY2UKKyAgICAgICAgaW5mb3JtYXRpb24gaW4g
dGhlIFdQRSBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVE
YXRhLmg6IEFkZGVkIHRoZSBuZXcgdHlwZSBvZgorICAgICAgICB3ZWJzaXRlIHRoYXQgaW4gdGhl
IFdQRSBwb3J0OgorICAgICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NB
TFQuCisgICAgICAgICogVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkuY3BwOiBBZGRlZAorICAgICAgICBhbiBpbmNsdWRlIHRvIHNvbHZlIGNvbXBp
bGF0aW9uIGlzc3VlIHdpdGggdGhlIHVuaWZpZWQgY29tcGlsYXRpb24uCisgICAgICAgICogVUlQ
cm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcDogQWRkZWQgdGhpcyBuZXcgY2xhc3Mg
dGhhdAorICAgICAgICBoYW5kbGVzIGhvdyB0byBnZW5lcmF0ZSBhbmQgc3RvcmUgdGhlIGhhc2gg
c2FsdHMgaW5zaWRlCisgICAgICAgIFdlYktpdC4gUGVyc2lzdGVuY3kgaXMgc3RpbGwgbm90IGlt
cGxlbWVudGVkLCB3ZSB3aWxsIGFkZCBpdCBpbiBhCisgICAgICAgIGZ1dHVyZSBwYXRjaC4KKyAg
ICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkZW50aWZp
ZXJIYXNoU2FsdEZvck9yaWdpbik6CisgICAgICAgIENoZWNrIHRoZSBtYXAgdG8gZ2V0IHRoZSBo
YXNoIHNhbHQgZm9yIGFuIG9yaWdpbiwgaWYgdGhlcmUgaXMgbm9uZQorICAgICAgICBjcmVhdGUg
YSBuZXcgcmFuZG9tIG9uZS4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAg
ICBEZWxldGUgdGhlIGhhc2ggc2FsdCBvZiBhbiBvcmlnaW4gaWYgaXQgYWxyZWFkeSBleGlzdHMg
YW5kIGNyZWF0ZSBhIG5ldyBvbmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpzZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgorICAgICAgICBT
ZXQgdGhlIGhhc2ggc2FsdCBvZiBhbiBvcmlnaW4gaW4gdGhlIG1hcCwgaWYgdGhlIG1hcCBhbHJl
YWR5IGhhcworICAgICAgICB0aGF0IG9yaWdpbiBpdCByZXBsYWNlcyB0aGUgaGFzaCBzYWx0LCBp
biBvdGhlciBjYXNlIGl0IGNyZWF0ZXMgYQorICAgICAgICBuZXcgcmVnaXN0ZXIgaW4gdGhlIG1h
cC4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlk
SGFzaFNhbHRPcmlnaW5zKToKKyAgICAgICAgUmV0dXJucyB0aGUgbGlzdCBvZiBvcmlnaW5zIHRo
YXQgaGF2ZSBhIGhhc2ggc2FsdCBnZW5lcmF0ZWQgZm9yCisgICAgICAgIHRoZW0uIEl0IGlzIHVz
ZWQgaW4gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFz
aFNhbHRTdG9yYWdlOjpkZWxldGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyk6CisgICAgICAg
IERlbGV0ZXMgdGhlIGhhc2ggc2FsdHMgaW4gdGhlIG1hcCBmb3IgYW4gb3JpZ2luLgorICAgICAg
ICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNoU2Fs
dE9yaWdpbnNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgRGVsZXRlIHRoZSBvcmlnaW5zIHRoYXQg
aGF2ZSBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSBhIHRpbWUuCisgICAgICAgICogVUlQcm9jZXNz
L0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmg6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9V
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oOiBSZW1vdmUgdW5lZWRlZCBjbGFzcworICAg
ICAgICBkZWZpbml0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcDogQWRkZWQgc3VwcG9ydCB0bworICAgICAgICByZXR1cm4gYW5kIHJlbW92
ZSB0aGUgb3JpZ2lucyB3aXRoIGEgZ2VuZXJhdGUgaGFzaCBzYWx0IHVzZWQgdG8KKyAgICAgICAg
Z2VuZXJhdGUgdGhlIGRldmljZSBpZHMuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OldlYnNpdGVEYXRhU3RvcmUpOiBBZGRlZCB0aGUgbmV3CisgICAgICAgIHJlZmVyZW5jZSB0
byB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgY2xhc3MsIHVzZWQgdG8gaGFuZGxlIHRoZQor
ICAgICAgICBoYXNoIHNhbHRzLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpm
ZXRjaERhdGFBbmRBcHBseSk6IEdldCB0aGUgbGlzdCBvZgorICAgICAgICBvcmlnaW5zIHdpdGgg
YSBoYXNoIHNhbHRzIGluIHRoZSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6IFJlbW92ZSB0aGUgaGFzaCBzYWx0
cyBpbgorICAgICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBmb3IgYW4gb3JpZ2luLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHRo
ZQorICAgICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSB0byB0aGUgY29tcGlsYXRpb24uCisK
IDIwMTgtMTAtMDMgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBU
cmllZCB0byBmaXggbm9uLUNvY29hLCBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKSBidWlsZHMg
YWZ0ZXIgcjIzNjgyMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmluZGV4IGJlNTFhZTM0YTY5ZTlmZDY1
NTA1MDdmNWI4YTMyYzBkNjdkYTY4NGMuLjllNWYyMjc2Mzc2MWFjMTIyNDI3OTMyYjQ3ZTQ2ZTY2
YTc3YTE1N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAtODEsOSArODEsNyBAQCB2b2lkIE1l
ZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQoKQogCiB2b2lkIE1lZGlhRGV2aWNl
c1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+PiYg
ZGV2aWNlcykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgVU5VU0VEX1BBUkFNKGRldmlj
ZXMpOwotI2Vsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXUEUpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0Q2FtZXJhQ291bnQgPSAyOwpAQCAtOTEsNiArODksMTAgQEAgdm9pZCBNZWRpYURldmljZXNS
ZXF1ZXN0OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZvPj4mIGRl
dmljZXMKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2Ft
ZXJhQ291bnQgPSAxOwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUp
CisgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOworI2VuZGlmCisK
ICAgICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwogCiAgICAg
aW50IGNhbWVyYUNvdW50ID0gMDsKQEAgLTEwMyw3ICsxMDUsOCBAQCB2b2lkIE1lZGlhRGV2aWNl
c1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJlZjxNZWRpYURldmljZUluZm8+PiYg
ZGV2aWNlcwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oZGV2aWNlcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAppbmRleCA5ZDUwMzYxZTgxYTM3
YmQ5NDAyZGU5MWMxYzUzOTU4NGVhYWE2MmRlLi42MDFiYjQ0MzY3YmYxNWJlY2ViOWJiMWI2ZGIz
YmU3Nzc0NjY4YTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVR5cGUuaApAQCAtNDksNiArNDksNyBAQCBlbnVtIGNsYXNzIFdlYnNpdGVE
YXRhVHlwZSB7CiAgICAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMgPSAxIDw8IDE0LAogI2Vu
ZGlmCiAgICAgRE9NQ2FjaGUgPSAxIDw8IDE1LAorICAgIERldmljZUlkSGFzaFNhbHQgPSAxIDw8
IDE2LAogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDEwMjQ5OWJhNGZkMTQ0MmRlODFkZTkwMmRi
M2I5OGFiNTJhYzA4NTEuLjgwNjIxZDNhYTcxYTE5NWM1YWE1ZjM0YjRlZGEwOTBjZDQ1NjUyODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dApAQCAtMjI4LDYgKzIyOCw3IEBAIFVJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0
ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAKIFVJ
UHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9y
YWdlLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3MvUHJvY2Vz
c1Rocm90dGxlci5jcHAKIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNHVEsudHh0CmluZGV4IGUxMzgxOTQ5YjBmZDAzZjU2ODFlM2M4ZTJiYTE0MzkzYzJlMzY5
ZmMuLmZjNWY1NWZiYjdmNjIyNzExZjE3ZWNjOTY0M2JhMjU1MDM3Y2FiY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dApAQCAtMTMzLDYgKzEzMyw3IEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb250
ZXh0TWVudUNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29v
a2llTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q3JlZGVu
dGlhbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdERvd25sb2FkLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXREb3dubG9hZENsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
RWRpdG9yU3RhdGUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggYzU5ZjhlYjE4
NDg1OGQwZTUyNDA3MDJlNmE1ZWE1ZmY5N2ZmYWNmNC4uOTY1NWFlMmM4NWIxN2M3MjJhZjAxOTU5
YjY3ZDFhMjk4YjlmYWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBAIC0xMjAsNiArMTIwLDcgQEAg
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmNwcCBAbm8tdW5pZnkK
IFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuY3BwIEBuby11bmlm
eQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5j
cHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWQuY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JTdGF0ZS5jcHAgQG5vLXVuaWZ5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmU4
NTUwMzNmMTM2MzdjNWMxODhlZGE5NmNjZDhmYjBkNDU2MTkzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0LmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmgi
CisKKyNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIgorI2luY2x1ZGUg
IldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIK
KyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IEEgcGVy
bWlzc2lvbiByZXF1ZXN0IGZvciBhY2Nlc3NpbmcgdXNlcidzIGF1ZGlvL3ZpZGVvIGRldmljZXMu
CisgKiBAVGl0bGU6IFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdAorICogQFNlZV9h
bHNvOiAjV2ViS2l0UGVybWlzc2lvblJlcXVlc3QsICNXZWJLaXRXZWJWaWV3CisgKgorICogV2Vi
S2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QgcmVwcmVzZW50cyBhIHJlcXVlc3QgZm9yCisg
KiBwZXJtaXNzaW9uIHRvIHdoZXRoZXIgV2ViS2l0IHNob3VsZCBiZSBhbGxvd2VkIHRvIGFjY2Vz
cyB0aGUgdXNlcidzCisgKiBkZXZpY2VzIGluZm9ybWF0aW9uIHdoZW4gcmVxdWVzdGVkIHRocm91
Z2ggdGhlIGVudW1lcmFjZURldmljZXMgQVBJLgorICoKKyAqIFdoZW4gYSBXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3QgaXMgbm90IGhhbmRsZWQgYnkgdGhlIHVzZXIsCisgKiBpdCBp
cyBkZW5pZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBTaW5jZTogMi4yMgorICovCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0UGVybWlz
c2lvblJlcXVlc3RJZmFjZSopOworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eT4gcmVxdWVzdDsKKyAgICBSZWZQdHI8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGRldmljZUlk
SGFzaFNhbHRTdG9yYWdlOworICAgIGJvb2wgbWFkZURlY2lzaW9uOworfTsKKworV0VCS0lUX0RF
RklORV9UWVBFX1dJVEhfQ09ERSgKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QsIHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1Qs
CisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9UWVBFX1BFUk1JU1NJT05fUkVRVUVT
VCwgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdCkpCisKK3N0YXRpYyB2
b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdEFsbG93KFdlYktpdFBlcm1pc3Np
b25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEFTU0VSVChXRUJLSVRfSVNfREVWSUNFX0lORk9f
UEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIFdlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lP
Tl9SRVFVRVNUKHJlcXVlc3QpLT5wcml2OworCisgICAgLy8gT25seSBvbmUgZGVjaXNpb24gYXQg
YSB0aW1lLgorICAgIGlmIChwcml2LT5tYWRlRGVjaXNpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHByaXYtPm1hZGVEZWNpc2lvbiA9IHRydWU7CisgICAgYXV0byBzYWx0ID0gcHJpdi0+ZGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdp
bigqcHJpdi0+cmVxdWVzdC5nZXQoKSk7CisgICAgcHJpdi0+cmVxdWVzdC0+c2V0VXNlck1lZGlh
QWNjZXNzSW5mbyhXVEZNb3ZlKHNhbHQpLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVueShXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05f
UkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChy
ZXF1ZXN0KS0+cHJpdjsKKworICAgIC8vIE9ubHkgb25lIGRlY2lzaW9uIGF0IGEgdGltZS4KKyAg
ICBpZiAocHJpdi0+bWFkZURlY2lzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5t
YWRlRGVjaXNpb24gPSB0cnVlOworICAgIGF1dG8gc2FsdCA9IHByaXYtPmRldmljZUlkSGFzaFNh
bHRTdG9yYWdlLT5yZWdlbmVyYXRlRGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKCpw
cml2LT5yZXF1ZXN0LmdldCgpKTsKKyAgICBwcml2LT5yZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nl
c3NJbmZvKFdURk1vdmUoc2FsdCksIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3Bl
cm1pc3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElm
YWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+YWxsb3cgPSB3ZWJraXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3RBbGxvdzsKKyAgICBpZmFjZS0+ZGVueSA9IHdlYmtpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdERlbnk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIC8vIERlZmF1bHQg
YmVoYXZpb3VyIHdoZW4gbm8gZGVjaXNpb24gaGFzIGJlZW4gbWFkZSBpcyBkZW55aW5nIHRoZSBy
ZXF1ZXN0LgorICAgIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnkoV0VCS0lU
X1BFUk1JU1NJT05fUkVRVUVTVChvYmplY3QpKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVx
dWVzdF9jbGFzc19pbml0KFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKiBr
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
a2xhc3MpOworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0RGlzcG9zZTsKK30KKworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoVXNlck1lZGlhUGVy
bWlzc2lvbkNoZWNrUHJveHkmIHJlcXVlc3QsIERldmljZUlkSGFzaFNhbHRTdG9yYWdlKiBkZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZSkKK3sKKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJl
cXVlc3QqIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCA9IFdFQktJVF9ERVZJQ0VfSU5GT19Q
RVJNSVNTSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BF
Uk1JU1NJT05fUkVRVUVTVCwgbnVsbHB0cikpOworCisgICAgZGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0LT5wcml2LT5yZXF1ZXN0ID0gJnJlcXVlc3Q7CisgICAgZGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0LT5wcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSA9IGRldmljZUlkSGFzaFNh
bHRTdG9yYWdlOworICAgIHJldHVybiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTM3MWIzZTQxNmExMmNkZDExMDc3ZjIyOTRlMDU1MmJjODEwOTg0ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNs
dWRlICJEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIgorI2luY2x1ZGUgIldlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdC5oIgorCitXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QqIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShXZWJLaXQ6OlVzZXJN
ZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiwgV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlD
bGllbnQuY3BwCmluZGV4IDAyNzU0MzEyN2FlZTFiMDg2ZDAzNjE1MWQxMThjZmM3OTY2NmE0MmUu
LjI3MmYzMTUyMDVkYWE4ODkyZWVjYTVlYzJhZDlhYTFjZjk5ZDMyOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oIgpAQCAtMzIsNiArMzMs
NyBAQAogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAog
I2lmIFBMQVRGT1JNKEdUSykKQEAgLTE4OSw2ICsxOTEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9vbCBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25G
b3JPcmlnaW4oV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0
eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHRv
cExldmVsRG9jdW1lbnRPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiBwZXJt
aXNzaW9uUmVxdWVzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0PiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgPSBh
ZG9wdEdSZWYod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBlcm1pc3Np
b25SZXF1ZXN0LCBwYWdlLndlYnNpdGVEYXRhU3RvcmUoKS5kZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSgpKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3QobV93ZWJW
aWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dC5nZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICB2b2lkIGRlY2lk
ZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYsIEFQ
STo6U2VjdXJpdHlPcmlnaW4mLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXROb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdD4gbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QgPSBhZG9wdEdSZWYo
d2Via2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3Q6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkucHRyKCkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YnNpdGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YnNpdGVEYXRhLmNwcAppbmRleCBhMjRkYTRkNmUxY2M4ODI2ZTRjZTIzZGE3YTc3NTdlZTVlMzA5
NGRmLi43Yzk3ZTBiMWIyNGExYjNhNmFhMjEzM2Y4OTRhMWU4YTc4ZTAwMzlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGEu
Y3BwCkBAIC03Niw3ICs3Niw4IEBAIHN0YXRpYyBib29sIHJlY29yZENvbnRhaW5zU3VwcG9ydGVk
RGF0YVR5cGVzKGNvbnN0IFdlYnNpdGVEYXRhUmVjb3JkJiByZWNvcmQpCiAjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSwK
ICNlbmRpZgotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMKKyAgICAgICAgV2Vic2l0
ZURhdGFUeXBlOjpDb29raWVzLAorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQKICAgICB9KTsKIH0KIApAQCAtMTAzLDYgKzEwNCw4IEBAIHN0YXRpYyBXZWJLaXRXZWJz
aXRlRGF0YVR5cGVzIHRvV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyhPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlCiAjZW5kaWYKICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpD
b29raWVzKSkKICAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFUQV9DT09L
SUVTOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklD
RV9JRF9IQVNIX1NBTFQ7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRh
VHlwZXM+KHJldHVyblZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKaW5kZXgg
ODZiZjQ3ZmQxYWUwZWFkMjkxZWI1MDlhYzE3ZmE2M2E2MTE0ZTE2Yi4uZmFjOGYyNzE1NTg1ZDUx
NzIzNzVkZWJjMTJkYWViMGI0MGE0Y2QwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBA
IC02NDksNiArNjQ5LDggQEAgc3RhdGljIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vi
c2l0ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5cGUKICNlbmRpZgogICAgIGlm
ICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUykKICAgICAgICAgcmV0dXJuVmFs
dWUuYWRkKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcyk7CisgICAgaWYgKHR5cGVzICYgV0VCS0lU
X1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKQorICAgICAgICByZXR1cm5WYWx1ZS5h
ZGQoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KTsKICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFmOGM0MmVjYjYwODRlYjVhM2M1MjM2NGQ4NDFkZGM0ZTE1ZGI4ODUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFU
SU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdF9oCisjZGVmaW5lIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdF9oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9u
X3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJ
T05fUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19Q
RVJNSVNTSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lP
Tl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVR
VUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRf
REVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJ
T05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ICAgICAgICBX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgICBXZWJLaXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3RQcml2YXRlIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZh
dGU7CisKK3N0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHsKKyAgICBH
T2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0
X2dldF90eXBlICAgICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgKaW5kZXgg
MDY1MDQ3ZmUxN2M1ODVlMjgyNjExOWFjZGI0YjMwNzBlMTQzMjMyMS4uNjc0MzA1Y2MwMWYwZDk0
YWIwY2RkMjQ3YTkzMjkwZWYzYjlhNTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaApAQCAtNDQsNiArNDQsNyBAQCB0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGEgV2ViS2l0V2Vic2l0ZURhdGE7CiAgKiBAV0VC
S0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTOiBJbmRleGVkREIgZGF0YWJhc2Vz
LgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEE6IFBsdWdpbnMgZGF0YS4KICAq
IEBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVM6IENvb2tpZXMuCisgKiBAV0VCS0lUX1dFQlNJ
VEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUOiBIYXNoIHNhbHQgdXNlZCB0byBnZW5lcmF0ZSB0
aGUgZGV2aWNlIGlkcyB1c2VkIGJ5IHdlYnBhZ2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFf
QUxMOiBBbGwgdHlwZXMuCiAgKgogICogRW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXByZXNlbnRp
bmcgdHlwZXMgb2YgV2Vic2l0ZSBkYXRhLgpAQCAtNjAsNyArNjEsOCBAQCB0eXBlZGVmIGVudW0g
ewogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAgICA9IDEg
PDwgNiwKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAgICAgICAg
PSAxIDw8IDcsCiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTICAgICAgICAgICAgICAg
ICAgID0gMSA8PCA4LAotICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAgICAg
ICAgICAgICA9ICgxIDw8IDkpIC0gMQorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lE
X0hBU0hfU0FMVCAgICAgICA9IDEgPDwgOSwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAg
ICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCAxMCkgLSAxCiB9IFdlYktpdFdlYnNpdGVEYXRh
VHlwZXM7CiAKIFdFQktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE3N2QxOGQ2OTE4MDNjNzI5ZGM1MGQ5MDY4MjQ3Nzg5OTIxOGQy
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdF
QktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdwZS93ZWJraXQuaD4gY2FuIGJlIGlu
Y2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdwZS9XZWJLaXREZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5G
T19QRVJNSVNTSU9OX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2RldmljZV9pbmZvX3Blcm1p
c3Npb25fcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9J
TkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVF
U1QsIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJN
SVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lP
Tl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdF
QktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVS
TUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgICAg
ICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcyAgIFdlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Qgewor
ICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAg
ICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9y
ZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3Jl
cXVlc3RfZ2V0X3R5cGUgICAgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaApp
bmRleCAzYTQ2MmFhZmY5Yjg3YzZlMGU1N2Y5NjJjMGU0NjMwOTI1OWRkZTAzLi4wM2RkNTg1ZDEy
NjVhNmU0ZWVkYjk0MjY4NzUzZjM2MjRjNjIwYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJzaXRlRGF0YS5oCkBAIC00NCw2ICs0NCw3IEBA
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YSBXZWJLaXRXZWJzaXRlRGF0YTsKICAq
IEBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVM6IEluZGV4ZWREQiBkYXRh
YmFzZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQTogUGx1Z2lucyBkYXRh
LgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzogQ29va2llcy4KKyAqIEBXRUJLSVRf
V0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQ6IEhhc2ggc2FsdCB1c2VkIHRvIGdlbmVy
YXRlIHRoZSBkZXZpY2UgaWRzIHVzZWQgYnkgd2VicGFnZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVf
REFUQV9BTEw6IEFsbCB0eXBlcy4KICAqCiAgKiBFbnVtIHZhbHVlcyB3aXRoIGZsYWdzIHJlcHJl
c2VudGluZyB0eXBlcyBvZiBXZWJzaXRlIGRhdGEuCkBAIC02MCw3ICs2MSw4IEBAIHR5cGVkZWYg
ZW51bSB7CiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTICAgICAg
ID0gMSA8PCA2LAogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEEgICAgICAgICAg
ICAgICA9IDEgPDwgNywKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDgsCi0gICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAg
ICAgICAgICAgICAgID0gKDEgPDwgOSkgLSAxCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJ
Q0VfSURfSEFTSF9TQUxUICAgICAgID0gMSA8PCA5LAorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFf
QUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgxIDw8IDEwKSAtIDEKIH0gV2ViS2l0V2Vic2l0
ZURhdGFUeXBlczsKIAogV0VCS0lUX0FQSSBHVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiZDYyZDNl
NzMwNjY2YjZjYTJmYjRjNDBiNmE4NzhjZmYyZmYwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAKQEAgLTAsMCAr
MSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisvLyBGSVhNRTogSW1wbGVt
ZW50IHBlcnNpc3RlbmN5LgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitzdGF0aWMgY29uc3QgaW50IGhhc2hTYWx0U2l6ZSA9IDQ4Oworc3RhdGljIGNv
bnN0IGludCByYW5kb21EYXRhU2l6ZSA9IGhhc2hTYWx0U2l6ZSAvIDE2OworCitSZWY8RGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2U+IERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpjcmVhdGUoKQorewor
ICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgPSBhZG9wdFJlZigqbmV3IERldmljZUlk
SGFzaFNhbHRTdG9yYWdlKCkpOworICAgIHJldHVybiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsK
K30KKworRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkK
KyAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuRGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UiKSkKK3sKK30KKworRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6On5E
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpCit7Cit9CisKK1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZTo6Z2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFVzZXJNZWRpYVBl
cm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0KQoreworICAgIHJldHVybiBnZXREZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHRGb3JPcmlnaW4ocmVxdWVzdC50b3BMZXZlbERvY3VtZW50U2VjdXJpdHlP
cmlnaW4oKSk7Cit9CisKK1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6cmVnZW5lcmF0
ZURldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eSYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVnZW5lcmF0ZURldmljZUlkZW50aWZp
ZXJIYXNoU2FsdEZvck9yaWdpbihyZXF1ZXN0LnRvcExldmVsRG9jdW1lbnRTZWN1cml0eU9yaWdp
bigpKTsKK30KKworU3RyaW5nIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpyZWdlbmVyYXRlRGV2
aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luJiBkb2N1bWVudE9y
aWdpbikKK3sKKyAgICBhdXRvIGRvY3VtZW50T3JpZ2luRGF0YSA9IGRvY3VtZW50T3JpZ2luLmRh
dGEoKTsKKyAgICBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4ucmVtb3ZlSWYoWyZkb2N1bWVu
dE9yaWdpbkRhdGFdKGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgIHJldHVybiBrZXlBbmRW
YWx1ZS52YWx1ZS0+ZG9jdW1lbnRPcmlnaW4tPmRhdGEoKSA9PSBkb2N1bWVudE9yaWdpbkRhdGE7
CisgICAgfSk7CisKKyAgICByZXR1cm4gZ2V0RGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3Jp
Z2luKGRvY3VtZW50T3JpZ2luKTsKK30KKworU3RyaW5nIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
OjpnZXREZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4mIGRv
Y3VtZW50T3JpZ2luKQoreworICAgIGF1dG8gZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbiA9IG1f
ZGV2aWNlSWRIYXNoU2FsdGZvck9yaWdpbi5lbnN1cmUoZG9jdW1lbnRPcmlnaW4udG9SYXdTdHJp
bmcoKSwgWyZkb2N1bWVudE9yaWdpbl0gKCkgeworICAgICAgICB1aW50NjRfdCByYW5kb21EYXRh
W3JhbmRvbURhdGFTaXplXTsKKyAgICAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMo
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocmFuZG9tRGF0YSksIHNpemVvZihyYW5k
b21EYXRhKSk7CisKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWls
ZGVyLnJlc2VydmVDYXBhY2l0eShoYXNoU2FsdFNpemUpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJhbmRvbURhdGFTaXplOyBpKyspCisgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZDY0
QXNIZXgocmFuZG9tRGF0YVswXSwgYnVpbGRlcik7CisKKyAgICAgICAgU3RyaW5nIGRldmljZUlk
ZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgICAg
ICBhdXRvIG5ld0hhc2hTYWx0Rm9yT3JpZ2luID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2FsdEZv
ck9yaWdpbj4oZG9jdW1lbnRPcmlnaW4sIFdURk1vdmUoZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0
Rm9yT3JpZ2luKSk7CisKKyAgICAgICAgcmV0dXJuIG5ld0hhc2hTYWx0Rm9yT3JpZ2luOworICAg
IH0pOworCisgICAgZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbi5pdGVyYXRvci0+dmFsdWUtPmxh
c3RUaW1lVXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKworICAgIHJldHVybiBkZXZpY2VJZEhhc2hT
YWx0Rm9yT3JpZ2luLml0ZXJhdG9yLT52YWx1ZS0+ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9y
T3JpZ2luOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpzZXREZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4mIGRvY3VtZW50T3JpZ2luLCBT
dHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpCit7CisgICAgYXV0byBkZXZpY2VJZEhh
c2hTYWx0Rm9yT3JpZ2luID0gbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luLmVuc3VyZShkb2N1
bWVudE9yaWdpbi50b1Jhd1N0cmluZygpLCBbJmRvY3VtZW50T3JpZ2luLCBkZXZpY2VJZGVudGlm
aWVySGFzaFNhbHQgPSBXVEZNb3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCldICgpIG11dGFi
bGUgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2FsdEZvck9yaWdpbj4o
ZG9jdW1lbnRPcmlnaW4sIFdURk1vdmUoZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KSk7CisgICAg
fSk7CisKKyAgICBkZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luLml0ZXJhdG9yLT52YWx1ZS0+bGFz
dFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygpOworCisgICAgaWYgKCFkZXZpY2VJZEhhc2hTYWx0
Rm9yT3JpZ2luLmlzTmV3RW50cnkpCisgICAgICAgIGRldmljZUlkSGFzaFNhbHRGb3JPcmlnaW4u
aXRlcmF0b3ItPnZhbHVlLT5kZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4gPSBXVEZN
b3ZlKGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCk7Cit9CisKK3ZvaWQgRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2U6OmdldERldmljZUlkSGFzaFNhbHRPcmlnaW5zKEZ1bmN0aW9uPHZvaWQoSGFzaFNl
dDxTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CisgICAgICAgIEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOworCisgICAgICAg
IGZvciAoYXV0byYgaGFzaFNhbHRGb3JPcmlnaW4gOiBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmln
aW4pCisgICAgICAgICAgICBvcmlnaW5zLmFkZChoYXNoU2FsdEZvck9yaWdpbi52YWx1ZS0+ZG9j
dW1lbnRPcmlnaW4tPmRhdGEoKSk7CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtvcmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUob3JpZ2lucykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9p
ZCBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdEZvck9yaWdp
bnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIEZ1bmN0aW9uPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5E
YXRhPiBjb3BpZWRPcmlnaW5zOworICAgIGNvcGllZE9yaWdpbnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShvcmlnaW5zLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMp
CisgICAgICAgIGNvcGllZE9yaWdpbnMudW5jaGVja2VkQXBwZW5kKG9yaWdpbi5pc29sYXRlZENv
cHkoKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb3BpZWRPcmlnaW5zID0gV1RGTW92ZShjb3BpZWRPcmlnaW5zKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0Zm9yT3JpZ2luLnJlbW92ZUlmKFsmY29waWVkT3Jp
Z2luc10oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiBjb3BpZWRPcmln
aW5zLmNvbnRhaW5zKGtleUFuZFZhbHVlLnZhbHVlLT5kb2N1bWVudE9yaWdpbi0+ZGF0YSgpKTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxU
aW1lIHRpbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0
aW1lLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmlnaW4ucmVtb3ZlSWYoW3Rp
bWVdKGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5QW5kVmFsdWUu
dmFsdWUtPmxhc3RUaW1lVXNlZCA+IHRpbWU7CisgICAgICAgIH0pOworCisgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjU3YmE5ODQ1OTIyYWYz
MTg0MDA0YmQ1MzdkNTc1NWE2MjFiNDcwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Np
b25DaGVja1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGNy
ZWF0ZSgpOworICAgIH5EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpOworCisgICAgc3RydWN0IEhh
c2hTYWx0Rm9yT3JpZ2luIHsKKyAgICAgICAgSGFzaFNhbHRGb3JPcmlnaW4oV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFz
aFNhbHRGb3JPcmlnaW4pCisgICAgICAgICAgICA6IGRvY3VtZW50T3JpZ2luKHNlY3VyaXR5T3Jp
Z2luKQorICAgICAgICAgICAgLCBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV1RG
TW92ZShkZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pKQorICAgICAgICAgICAgLCBs
YXN0VGltZVVzZWQoV2FsbFRpbWU6Om5vdygpKQorICAgICAgICB7IH07CisKKyAgICAgICAgUmVm
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBkb2N1bWVudE9yaWdpbjsKKyAgICAgICAgU3RyaW5n
IGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbjsKKyAgICAgICAgV2FsbFRpbWUgbGFz
dFRpbWVVc2VkOworICAgIH07CisKKyAgICBTdHJpbmcgZ2V0RGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0Rm9yT3JpZ2luKFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5Jik7CisgICAgU3RyaW5n
IHJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oVXNlck1lZGlhUGVy
bWlzc2lvbkNoZWNrUHJveHkmKTsKKworICAgIHZvaWQgZ2V0RGV2aWNlSWRIYXNoU2FsdE9yaWdp
bnMoRnVuY3Rpb248dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZGVsZXRlRGV2aWNlSWRIYXNoU2FsdEZv
ck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5j
dGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZGVsZXRlRGV2aWNl
SWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IERldmljZUlk
SGFzaFNhbHRTdG9yYWdlKCk7CisKKyAgICBTdHJpbmcgZ2V0RGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBkb2N1bWVudE9yaWdpbik7Cisg
ICAgU3RyaW5nIHJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4oV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4mIGRvY3VtZW50T3JpZ2luKTsKKyAgICB2b2lkIHNldERldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgZG9j
dW1lbnRPcmlnaW4sIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbik7
CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6
OnVuaXF1ZV9wdHI8SGFzaFNhbHRGb3JPcmlnaW4+PiBtX2RldmljZUlkSGFzaFNhbHRmb3JPcmln
aW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oCmluZGV4IGYzN2Jl
N2FiMjFmM2YxMWY1NzViMWNmYzEyNzdiY2E1NjZjY2MzMDEuLmZiY2M0Y2ZlZTNhNWI0YmQwYzBh
MGFjNjIxZGIwOGYxZmE0YzBlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaApAQCAtMzYsOCArMzYsNiBAQCBj
bGFzcyBTZWN1cml0eU9yaWdpbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OwotCiBjbGFzcyBVc2VyTWVkaWFQZXJt
aXNzaW9uQ2hlY2tQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OlVzZXJNZWRpYVBlcm1pc3Npb25DaGVjaz4gewogcHVibGljOgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
CmluZGV4IGMyZTdlMWI4NjkzYTljZDQzMGIzMGIwMDg0OTEzMWY3NTNjYTcyMTcuLjYxMmNkMWJh
MWE0ZTc3OWE4YWM2MDg5YzQ3MDM4MDU3NDA0MjczZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFSZWNvcmQuaCIKICNpbmNsdWRl
ICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRvck1hbmFnZXIu
aCIKKyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIgogI2luY2x1ZGUgIk1vY2tB
dXRoZW50aWNhdG9yTWFuYWdlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlci5oIgpAQCAtOTUsNiArOTYsNyBAQCBXZWJzaXRl
RGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwg
UEFMOjpTZXNzaW9uSUQgcwogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9j
b25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbikpCiAgICAgLCBtX3N0b3JhZ2VNYW5h
Z2VyKFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUobV9jb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURp
cmVjdG9yeSkpCisgICAgLCBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlKERldmljZUlkSGFzaFNh
bHRTdG9yYWdlOjpjcmVhdGUoKSkKICAgICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNv
bS5hcHBsZS5XZWJLaXQuV2Vic2l0ZURhdGFTdG9yZSIpKQogI2lmIEVOQUJMRShXRUJfQVVUSE4p
CiAgICAgLCBtX2F1dGhlbnRpY2F0b3JNYW5hZ2VyKG1ha2VVbmlxdWVSZWY8QXV0aGVudGljYXRv
ck1hbmFnZXI+KCkpCkBAIC0xNzEsNiArMTczLDggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpCiAgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1
cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGly
ZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVj
dG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpCiAgICAgICAgIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2Fu
ZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSk7
CisgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24uZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uZGV2aWNlSWRI
YXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVj
dG9yeUZvclNhbmRib3hFeHRlbnNpb24obV9jb25maWd1cmF0aW9uLmRldmljZUlkSGFzaFNhbHRz
U3RvcmFnZURpcmVjdG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJh
c2VEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAgICAgICBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi53
ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3Rv
cnlGb3JTYW5kYm94RXh0ZW5zaW9uKG1fY29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVj
dG9yeSk7CiAgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rv
cnkuaXNFbXB0eSgpKQpAQCAtNDg1LDYgKzQ4OSwxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywg
TwogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSAmJiBkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0
KSkgeworICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwor
CisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkSGFzaFNhbHRP
cmlnaW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3JdKEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhPiYmIG9yaWdpbnMpIHsKKyAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRh
OworCisgICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdp
bnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQsIDAgfSk7CisK
KyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdU
Rk1vdmUod2Vic2l0ZURhdGEpKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgaWYgKGRhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hl
KSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBl
bmRpbmdDYWxsYmFjaygpOwogCkBAIC04MDAsNiArODE3LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdh
bGxUaW1lCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGlmIChtX2RldmljZUlkSGFzaFNhbHRT
dG9yYWdlICYmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhh
c2hTYWx0KSB8fCAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykp
KSkgeworICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwor
CisgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmRlbGV0ZURldmljZUlkSGFzaFNh
bHRPcmlnaW5zTW9kaWZpZWRTaW5jZShtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7CisgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFj
aygpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlzUGVyc2lzdGVu
dCgpKSB7CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7
CiAKQEAgLTEwNzQsNiArMTA5OSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAg
ICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiAoZGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkgfHwgKGRh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKSkpIHsKKyAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKKworICAgICAgICBtX2Rl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLT5kZWxldGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyhv
cmlnaW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9CisKICAg
ICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGUpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGRhdGFSZWNvcmQgOiBkYXRhUmVjb3JkcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IGE0MjI2MWYwNDFm
NTk3YWEyYWE0YTk0MzMxY2QzNThjYTgyYjVmYmEuLjkxNjNkOTg5NDUxMTY0Y2ZiYmQzYTc4MDll
MjI0YTk4NjFmZjc5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTU1LDYgKzU1LDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBBdXRoZW50aWNhdG9yTWFuYWdlcjsKIGNsYXNzIFNlY0tleVByb3h5
U3RvcmU7CiBjbGFzcyBTdG9yYWdlTWFuYWdlcjsKK2NsYXNzIERldmljZUlkSGFzaFNhbHRTdG9y
YWdlOwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CkBAIC05Miw2ICs5Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgU3RyaW5nIHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcg
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeTsKKyAgICAgICAgU3RyaW5nIGRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9y
eTsKICAgICAgICAgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnk7CiAgICAg
ICAgIFN0cmluZyBqYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeTsKICAgICAgICAgU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VGaWxlOwpAQCAtMTYxLDYgKzE2Myw4IEBAIHB1YmxpYzoKIAogICAg
IFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFn
ZXIuZ2V0KCk7IH0KIAorICAgIERldmljZUlkSGFzaFNhbHRTdG9yYWdlKiBkZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0K
KwogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCk7CiAgICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYp
IGNvbnN0OwogCkBAIC0yMzUsNiArMjM5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzUmVz
b2x2ZWREaXJlY3RvcmllcyB7IGZhbHNlIH07CiAKICAgICBjb25zdCBSZWZQdHI8U3RvcmFnZU1h
bmFnZXI+IG1fc3RvcmFnZU1hbmFnZXI7CisgICAgY29uc3QgUmVmUHRyPERldmljZUlkSGFzaFNh
bHRTdG9yYWdlPiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlOwogICAgIFJlZlB0cjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljczsKICAgICBi
b29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSB7IGZhbHNlIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFkYjZm
NjI0ZGQxZmI5MTQ0MTIwOGYxMDliMzc1MmVlYTkyYTBkMGYuLjkwNjdkZjY2ODExZTUxZmY4M2U4
ZTQ3NmJkYjc1MmZkMThjYzJhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzYsNiArNzYsOCBAQAogCQkwMEI5NjYxNjE4RTI0Q0JB
MDBDRTFGODggLyogQVBJRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDBCOTY2MTUxOEUyNENCQTAwQ0UxRjg4IC8qIEFQSUZpbmRDbGll
bnQuaCAqLzsgfTsKIAkJMDBCOTY2MUExOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjk2NjE4MThF
MjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggKi87IH07CiAJCTA3Mjk3RjlGMUMxN0JCRUEw
MDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGOUQxQzE3QkJFQTAwM0YwNzM1
IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggKi87IH07CisJCTA3Mjk3RjlFMUMx
N0JCRUEwMTRGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3
MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovOyB9OworCQkwNzI5N0Y5RjFDMTdC
QkVBMDE1RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAv
KiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICovOyB9OwogCQkwNzI5N0ZBMzFDMTg2QURCMDAz
RjA3MzUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RkExMUMxODZBREIwMDNGMDczNSAvKiBX
S1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTA3NEU3NUZFMURGMjIxMTkwMEQzMThFQyAvKiBVc2VyTWVk
aWFQcm9jZXNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDc0RTc1RkIxREYxRkQxMzAwRDMxOEVDIC8qIFVzZXJNZWRpYVByb2Nlc3NNYW5h
Z2VyLmggKi87IH07CiAJCTA3NkU4ODRFMUExM0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVu
dUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDc2RTg4NEQxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50LmggKi87IH07
CkBAIC0xODM1LDYgKzE4MzcsOCBAQAogCQkwMEI5NjYxODE4RTI1QUUxMDBDRTFGODggLyogRmlu
ZENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlDMUMxN0JCRUEwMDNGMDczNSAv
KiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlEMUMxN0JCRUEwMDNGMDczNSAvKiBVc2Vy
TWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzI5N0Y5
RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTAxQzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDcyOTdGQTExQzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlz
c2lvbkNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU3NUZC
MURGMUZEMTMwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE4OSw2ICs3MTkzLDggQEAKIAkJCQk0NkEyQjYwNzFF
NTY3NUEyMDBDM0RFREEgLyogQmFja2dyb3VuZFByb2Nlc3NSZXNwb25zaXZlbmVzc1RpbWVyLmgg
Ki8sCiAJCQkJRTE1MTNDNjQxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmNw
cCAqLywKIAkJCQlFMTUxM0M2NTE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHku
aCAqLywKKwkJCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuY3BwICovLAorCQkJCTA3Mjk3RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5oICovLAogCQkJCUJDMjY1MjEyMTE4MjYwODEwMDI0M0UxMiAvKiBEcmF3
aW5nQXJlYVByb3h5LmNwcCAqLywKIAkJCQlCQzI2NTIxMzExODI2MDgxMDAyNDNFMTIgLyogRHJh
d2luZ0FyZWFQcm94eS5oICovLAogCQkJCTFBNjQyMkZDMTJERDA4RkUwMENBQUUyQyAvKiBEcmF3
aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtODg2NCw2ICs4ODcwLDcgQEAKIAkJCQkx
QUM3NTM4MDE4M0JFNTBGMDA3MkNCMTUgLyogRGF0YVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMwMzJEQTYxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3RENFREFCMjE0QzYwMDkwMDE2Qjg0NyAvKiBEZXZpY2VJZGVudGl0eVNQSS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMDcyOTdGOUYxQzE3QkJFQTAxNUYwNzM1IC8qIERldmljZUlkSGFz
aFNhbHRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzg5MUI2QzFBNjhDMzBCMDAzMEYz
ODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxODE3
MzYxMjA1ODQyNDcwMERGREE2NSAvKiBEaXNwbGF5TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUMxNDI3MDIxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNjAyLDYgKzEwNjA5LDcgQEAKIAkJCQkyRDkyQTc3RDIxMkI2QTcxMDBGNDkzRkQgLyogQ29u
bmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3RTIxMkI2QTcxMDBGNDkzRkQg
LyogRGF0YVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3RjIxMkI2QTcx
MDBGNDkzRkQgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzI5N0Y5RTFDMTdC
QkVBMDE0RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDIyOTkxMkREMDI5MjAwQ0FBRTJDIC8q
IERyYXdpbmdBcmVhTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjQy
MzA4MTJERDA5RUIwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDQyNWYyNzI1Y2NjNDU0NjRhYzg4OThiM2UyYzk2Yzk1MWJhNzc3ODIuLmNi
NzQ1ZGY5YTU2MWE1YWYxMzBiZmJjODY3NzVhNmEyNDAwMzgzZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxOC0x
MC0wNCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBb
R1RLXVtXUEVdIEFkZCBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQVBJ
IHRlc3QgZm9yIHRoZSBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlczoKKyAgICAgICAgdXNl
cm1lZGlhLWVudW1lcmF0ZWRldmljZXMtcGVybWlzc2lvbi1jaGVjay4gQW5kIGEgbmV3IEFQSSB0
ZXN0CisgICAgICAgIGZvciB0aGUgV2Vic2l0ZURhdGFTdG9yZTogdGVzdFdlYnNpdGVEYXRhRGV2
aWNlSWRIYXNoU2FsdC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9tYWluLmM6CisgICAg
ICAgIChnb3RXZWJzaXRlRGF0YUNhbGxiYWNrKTogQWRkZWQgYSBuZXcgc2VjdGlvbiB0byB0aGUg
YWJvdXQ6ZGF0YQorICAgICAgICB3ZWJwYWdlIHRvIGluY2x1ZGUgdGhlIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBoYXNoIHNhbHQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
TGliL1Rlc3RVSUNsaWVudC5jcHA6CisgICAgICAgICh0ZXN0V2ViVmlld1VzZXJNZWRpYUVudW1l
cmF0ZURldmljZXNQZXJtaXNzaW9uQ2hlY2spOiBBZGRlZCB0aGUKKyAgICAgICAgbmV3IHRlc3Qg
Y2hlY2tpbmcgdGhlIGVudW1lcmF0ZURldmljZXMgQVBJIHdoZW4gcGVybWlzc2lvbiBpcworICAg
ICAgICBkZW5pZWQgYW5kIHdoZW4gcGVybWlzc2lvbiBpcyBhbGxvd2VkIGZvciB0aGUgb3JpZ2lu
LgorICAgICAgICAoYmVmb3JlQWxsKTogRGVmaW5lZCB0aGUgbmV3IHRlc3QuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJzaXRlRGF0YS5jcHA6CisgICAg
ICAgIChzZXJ2ZXJDYWxsYmFjayk6IFJlZ2lzdGVyIGEgbmV3IFVSSSBmb3IgdGhlIGVudW1lcmF0
ZURldmljZXMuCisgICAgICAgICh0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKTogUmVtb3Zl
IHRoZSBoYXNoIHNhbHRzIGZyb20gdGhlCisgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAo
dGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdCk6IE5ldyB0ZXN0IGNoZWtpbmcgdGhlCisg
ICAgICAgIGVudW1lcmF0ZURldmljZXMgQVBJLgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkZWQg
dGhlIG5ldyB0ZXN0IHRlc3RXZWJzaXRlRGF0YURldmljZUlkSGFzaFNhbHQgdG8KKyAgICAgICAg
dGhlIGluaXQgc3RydWN0dXJlLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRH
TGliL1dlYlZpZXdUZXN0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojppbml0aWFsaXplV2Vi
Vmlldyk6IE1ha2Ugc3VyZSB0aGUgbWVkaWEtc3RyZWFtIGlzCisgICAgICAgIGFjdGl2YXRlZCBp
biB0aGUgd2ViVmlldy4KKwogMjAxOC0xMC0wMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtDb2NvYV0gTGV0IGNsaWVudHMgc3BlY2lmeSBhbiBOU0ZpbGVXcmFw
cGVyIHN1YmNsYXNzZWQgdG8gYmUgdXNlZCBmb3IgX1dLQXR0YWNobWVudApkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWlu
LmMKaW5kZXggNTg3MDFmYzg0MmNlNTk1ZDI2ODQ3NjJhNGExM2ViMTg2NDg5YTQ5MC4uNTEzM2E0
ZGQ2MWI5MmNkNTMxZGU5MzQ5ODA5MzMxMTQ3MDgzZWIxNCAxMDA2NDQKLS0tIGEvVG9vbHMvTWlu
aUJyb3dzZXIvZ3RrL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBA
IC00MDIsNiArNDAyLDcgQEAgc3RhdGljIHZvaWQgZ290V2Vic2l0ZURhdGFDYWxsYmFjayhXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3UKIAogICAgIGd1aW50NjQg
cGFnZUlEID0gd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHdlYmtpdF91cmlfc2NoZW1lX3Jl
cXVlc3RfZ2V0X3dlYl92aWV3KGRhdGFSZXF1ZXN0LT5yZXF1ZXN0KSk7CiAgICAgYWJvdXREYXRh
RmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiQ29va2llcyIsIFdFQktJ
VF9XRUJTSVRFX0RBVEFfQ09PS0lFUywgTlVMTCwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxs
VGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJEZXZpY2UgSWQgSGFzaCBTYWx0
IiwgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxULCBOVUxMLCBwYWdlSUQp
OwogICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwg
Ik1lbW9yeSBDYWNoZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFfTUVNT1JZX0NBQ0hFLCBOVUxMLCBw
YWdlSUQpOwogICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRh
TGlzdCwgIkRpc2sgQ2FjaGUiLCBXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUsIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdlciks
IHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRh
dGFMaXN0LCAiU2Vzc2lvbiBTdG9yYWdlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9TRVNTSU9OX1NU
T1JBR0UsIE5VTEwsIHBhZ2VJRCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwCmluZGV4IDY2MTEzNzczZTNiNDM4MjE1OGY5
ZDljNGVjYjcyYmM5NjgxMzA5NWQuLmU1YjZhODllODQ1NWZjM2I1M2I4MDBmMmIwMDg0OGRlN2Ix
MmYxZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0VUlDbGllbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0VUlDbGllbnQuY3BwCkBAIC04MzQsNiArODM0LDQ3IEBAIHN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoVUlDbGllbnRUZXN0KiB0ZXN0LCBn
Y29uc3RwCiAjZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQogCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNl
c1Blcm1pc3Npb25DaGVjayhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdib29sZWFuIGVuYWJsZWQgPSB3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncywgVFJVRSk7CisKKyNpZiBQTEFURk9S
TShHVEspCisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisjZW5k
aWYKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdXNlck1lZGlhUmVxdWVzdEhUTUwgPQorICAgICAg
ICAiPGh0bWw+IgorICAgICAgICAiICA8c2NyaXB0PiIKKyAgICAgICAgIiAgZnVuY3Rpb24gcnVu
VGVzdCgpIgorICAgICAgICAiICB7IgorICAgICAgICAiICAgIG5hdmlnYXRvci5tZWRpYURldmlj
ZXMuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oIgorICAgICAgICAiICAgICAgICBmdW5jdGlvbihk
ZXZpY2VzKSB7ICIKKyAgICAgICAgIiAgICAgICAgICAgIGRldmljZXMuZm9yRWFjaChmdW5jdGlv
bihkZXZpY2UpIHsiCisgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChkZXZpY2UubGFiZWwpIGRvY3VtZW50LnRpdGxlID0gXCJPS1wiOyIKKyAgICAgICAgIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZG9jdW1lbnQudGl0
bGUgPSBcIlBlcm1pc3Npb24gZGVuaWVkXCI7IgorICAgICAgICAiICAgICAgICAgICAgfSkiCisg
ICAgICAgICIgICAgfSkiCisgICAgICAgICIgIH0iCisgICAgICAgICIgIDwvc2NyaXB0PiIKKyAg
ICAgICAgIiAgPGJvZHkgb25sb2FkPSdydW5UZXN0KCk7Jz48L2JvZHk+IgorICAgICAgICAiPC9o
dG1sPiI7CisKKyAgICB0ZXN0LT5tX3ZlcmlmeU1lZGlhVHlwZXMgPSBUUlVFOworCisgICAgLy8g
VGVzdCBkZW55aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJt
aXNzaW9uUmVxdWVzdHMgPSBmYWxzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh1c2VyTWVkaWFSZXF1
ZXN0SFRNTCwgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIlBl
cm1pc3Npb24gZGVuaWVkIik7CisKKyAgICAvLyBUZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiBy
ZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSB0cnVlOworICAg
IHRlc3QtPmxvYWRIdG1sKHVzZXJNZWRpYVJlcXVlc3RIVE1MLCBudWxscHRyKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxUaXRsZUNoYW5nZWRUbygiT0siKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncywgZW5hYmxlZCk7Cit9CisKIHN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CkBAIC0xMTU2LDYg
KzExOTcsNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiZ2VvbG9jYXRpb24tcGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOwogI2VuZGlmCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ1c2VybWVk
aWEtZW51bWVyYXRlZGV2aWNlcy1wZXJtaXNzaW9uLWNoZWNrIiwgdGVzdFdlYlZpZXdVc2VyTWVk
aWFFbnVtZXJhdGVEZXZpY2VzUGVybWlzc2lvbkNoZWNrKTsKICAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJ1c2VybWVkaWEtcGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RX
ZWJWaWV3VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJhdWRpby11c2VybWVkaWEtcGVybWlzc2lvbi1yZXF1ZXN0Iiwg
dGVzdFdlYlZpZXdBdWRpb09ubHlVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdHMpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdl
YnNpdGVEYXRhLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
V2Vic2l0ZURhdGEuY3BwCmluZGV4IDk3ZTE4OWI2ZjgyMzlmYmY3NWI3OWRkMDI2NWFiNzMxOGE4
M2M4OTYuLjczYTFkMWI4OWMxM2YzNGFlZGZmYjFkNTk4ZjhjN2EzYWNkMWNlMmYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0
ZURhdGEuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVy
LmgiCiAjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgog
CiBzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKIApAQCAtNjEsNiArNjIsMTEgQEAg
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhcioKICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbG9jYWxTdG9yYWdl
SFRNTCwgc3RybGVuKGxvY2FsU3RvcmFnZUhUTUwpKTsKICAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CiAgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvZW51bWVyYXRlZGV2aWNlcyIpKSB7CisgICAgICAgIGNvbnN0IGNo
YXIqIGVudW1lcmF0ZURldmljZXNIVE1MID0gIjxodG1sPjxib2R5IG9ubG9hZD1cIm5hdmlnYXRv
ci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcykg
eyBkb2N1bWVudC50aXRsZSA9ICdGaW5pc2hlZCc7IH0pXCI+PC9ib2R5PjwvaHRtbD4iOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfU1RBVElDLCBlbnVtZXJhdGVEZXZpY2VzSFRNTCwgc3RybGVuKGVudW1lcmF0ZURl
dmljZXNIVE1MKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHkpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19PSyk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CiB9CkBAIC0xNjMsNyArMTY5
LDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0
YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAKICAgICAvLyBDbGVhciBhbGwgcGVyc2lzdGVu
dCBjYWNoZXMsIHNpbmNlIHRoZSBkYXRhIGRpciBpcyBjb21tb24gdG8gYWxsIHRlc3QgY2FzZXMu
CiAgICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgcGVyc2lzdGVudENhY2hl
cyA9IHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhVHlwZXM+KFdFQktJVF9XRUJTSVRFX0RB
VEFfRElTS19DQUNIRSB8IFdFQktJVF9XRUJTSVRFX0RBVEFfTE9DQUxfU1RPUkFHRQotICAgICAg
ICB8IFdFQktJVF9XRUJTSVRFX0RBVEFfV0VCU1FMX0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRF
X0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRFX0RBVEFfT0ZGTElORV9B
UFBMSUNBVElPTl9DQUNIRSk7CisgICAgICAgIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9XRUJTUUxf
REFUQUJBU0VTIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTIHwgV0VC
S0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NBQ0hFIHwgV0VCS0lUX1dFQlNJ
VEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKICAgICB0ZXN0LT5jbGVhcihwZXJzaXN0ZW50
Q2FjaGVzLCAwKTsKICAgICBnX2Fzc2VydCghdGVzdC0+ZmV0Y2gocGVyc2lzdGVudENhY2hlcykp
OwogCkBAIC01MTcsNiArNTIzLDM5IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YUNvb2tp
ZXMoV2Vic2l0ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KCFk
YXRhTGlzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YURldmljZUlkSGFzaFNh
bHQoV2Vic2l0ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmNs
ZWFyKFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCwgMCk7CisKKyAgICBH
TGlzdCogZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9J
RF9IQVNIX1NBTFQpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CisKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbnVtZXJhdGVkZXZpY2VzIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWRUbygiRmluaXNoZWQiKTsKKworICAgIGRh
dGFMaXN0ID0gdGVzdC0+ZmV0Y2goV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9T
QUxUKTsKKyAgICBnX2Fzc2VydChkYXRhTGlzdCk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdf
bGlzdF9sZW5ndGgoZGF0YUxpc3QpLCA9PSwgMSk7CisgICAgV2ViS2l0V2Vic2l0ZURhdGEqIGRh
dGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGRhdGFMaXN0LT5kYXRhKTsKKyAg
ICBnX2Fzc2VydChkYXRhKTsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9uZXdfZm9yX3VyaShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
IikuZGF0YSgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRf
bmFtZShkYXRhKSwgPT0sIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSk7
CisgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZihvcmlnaW4pOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSksID09LCBXRUJLSVRf
V0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpOworCisgICAgR0xpc3QgcmVtb3ZlTGlz
dCA9IHsgZGF0YSwgbnVsbHB0ciwgbnVsbHB0ciB9OworICAgIHRlc3QtPnJlbW92ZShXRUJLSVRf
V0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQsICZyZW1vdmVMaXN0KTsKKyAgICBkYXRh
TGlzdCA9IHRlc3QtPmZldGNoKFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FM
VCk7CisgICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKKworICAgIC8vIENsZWFyIGFsbC4KKyAgICBz
dGF0aWMgY29uc3QgV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyBjYWNoZUFuZEFwcGNhY2hlVHlwZXMg
PSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9EQVRB
X0RFVklDRV9JRF9IQVNIX1NBTFQpOworICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kQXBwY2FjaGVU
eXBlcywgMCk7CisgICAgZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChjYWNoZUFuZEFwcGNhY2hlVHlw
ZXMpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsK
ICAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKQEAgLTUyOSw2ICs1NjgsNyBA
QCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNp
dGVEYXRhIiwgImRhdGFiYXNlcyIsIHRlc3RXZWJzaXRlRGF0YURhdGFiYXNlcyk7CiAgICAgV2Vi
c2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImFwcGNhY2hlIiwgdGVzdFdl
YnNpdGVEYXRhQXBwY2FjaGUpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJz
aXRlRGF0YSIsICJjb29raWVzIiwgdGVzdFdlYnNpdGVEYXRhQ29va2llcyk7CisgICAgV2Vic2l0
ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImRldmljZWlkaGFzaHNhbHQiLCB0
ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhhc2hTYWx0KTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVz
dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5j
cHAKaW5kZXggM2MwOTVjMzdiNDJmMzdkNGU1NjY2OGRjZmQ0NTI4MTMxMjRkMzM0Mi4uN2UzNTQw
Yjc4MWMyOWFkYmJhMzU3YmRmYmFiOGU2NzQ2ZGNhYWY3YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1dlYlZpZXdUZXN0LmNwcApAQCAtNDgsMTAgKzQ4
LDE1IEBAIFdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QoKQogdm9pZCBXZWJWaWV3VGVzdDo6aW5p
dGlhbGl6ZVdlYlZpZXcoKQogewogICAgIGdfYXNzZXJ0KCFtX3dlYlZpZXcpOworCisgICAgV2Vi
S2l0U2V0dGluZ3MqIHdlYmtpdFNldHRpbmdzID0gd2Via2l0X3NldHRpbmdzX25ldygpOworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX21lZGlhX3N0cmVhbSh3ZWJraXRTZXR0aW5ncywg
VFJVRSk7CisKICAgICBtX3dlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX1dFQl9WSUVXLAogI2lmIFBMQVRGT1JNKFdQRSkKICAgICAgICAgImJhY2tlbmQi
LCBUZXN0OjpjcmVhdGVXZWJWaWV3QmFja2VuZCgpLAogI2VuZGlmCisgICAgICAgICJzZXR0aW5n
cyIsIHdlYmtpdFNldHRpbmdzLAogICAgICAgICAid2ViLWNvbnRleHQiLCBtX3dlYkNvbnRleHQu
Z2V0KCksCiAgICAgICAgICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIsIG1fdXNlckNvbnRlbnRNYW5h
Z2VyLmdldCgpLAogICAgICAgICBudWxscHRyKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGI0MDhkMWE4ZWM5NTgxZWQw
NTM1ZDZjNTMxYzFkODFhMGU0NTZjYi4uNDgzYmIxMDI4NjMyNGRhN2Q3ODc3MTY2ZTZjMGZiYmM3
NWI5MjNjYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisxOC0xMC0wNCAgQWxlamFuZHJvIEcuIENh
c3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURl
dmljZXMuZW51bWVyYXRlRGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIGZhaWx1cmUgZXhwZWN0YXRpb24gZm9y
IHRoZSB0ZXN0CisgICAgICAgIG1lZGlhLWRldmljZXMtZW51bWVyYXRlLWRldmljZXMuaHRtbC4g
SnVzdCBmb3IgdGhlIHJlY29yZCB3ZSBoYXZlCisgICAgICAgIGFsc28gY2hlY2tlZCB0aGUgZm9s
bG93aW5nIHRlc3RzLgorCisgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vbWVkaWEtZGV2aWNlcy1l
bnVtZXJhdGUtZGV2aWNlcy5odG1sCisgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vcmVzb3VyY2Vz
L2VudW1lcmF0ZS1kZXZpY2VzLWZyYW1lLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9t
ZWRpYS1zdHJlYW0vZW51bWVyYXRlLWRldmljZXMtc291cmNlLWlkLmh0bWwKKyAgICAgICAgaHR0
cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0vZW51bWVyYXRlLWRldmljZXMtc291cmNlLWlkLXBl
cnNpc3RlbnQuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9yZXNv
dXJjZXMvZW51bWVyYXRlLWRldmljZXMtc291cmNlLWlkLWZyYW1lLmh0bWwKKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE4LTEwLTAzICBKdXN0aW4gTWlj
aGF1ZCAgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWdpc3RlcmVkIGN1
c3RvbSBwcm9wZXJ0aWVzIHNob3VsZCBhbGxvdyBpbmhlcml0YW5jZSB0byBiZSBjb250cm9sbGVk
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDUwYjU1MjNl
OTZjMjMzYjc2NTU1NzYzZThjMTVlMmQ1MzFiYjU3MmMuLjZmOTczMDgwZjkwODc1MWY4ZTY2Mjcw
YjMzNGRkODVhNTA4MjJlYTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0
YXRpb25zCkBAIC02NDAsNyArNjQwLDYgQEAgd2Via2l0Lm9yZy9iLzc5MjAzIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFjYXB0dXJlLXN0cmVhbXMvTWVkaWFTdHIKIHdlYmtp
dC5vcmcvYi8xNTEzNDQgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS1hZGQtZW5kZWQtdHJh
Y2tzLmh0bWwgWyBUaW1lb3V0IF0KICMgQ3Jhc2ggaXMgYnVnICMxNzY4MDEKIHdlYmtpdC5vcmcv
Yi8xNjA5OTYgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50LXZpZGVv
LXRyYWNrcy1kaXNhYmxlZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBDcmFzaCBdCi13ZWJraXQu
b3JnL2IvMTcyMjY5IGZhc3QvbWVkaWFzdHJlYW0vbWVkaWEtZGV2aWNlcy1lbnVtZXJhdGUtZGV2
aWNlcy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTczMjU3IGZhc3QvbWVkaWFzdHJl
YW0vZ2V0VXNlck1lZGlhLWdyYW50LXBlcnNpc3RlbmN5My5odG1sIFsgUGFzcyBGYWlsdXJlIF0K
IAogIyBDYW52YXMgY2FwdHVyZVN0cmVhbSBzdXBwb3J0IGlzIG5vdCBpbXBsZW1lbnRlZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351952</attachid>
            <date>2018-10-10 04:41:51 -0700</date>
            <delta_ts>2018-10-11 02:47:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185761-20181010134149.patch</filename>
            <type>text/plain</type>
            <size>63385</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2OTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIzYjJjYTUyYWRhOGM4
NzY1MjQ0ZjVjMjFkOGY0M2E4YWQ5MzU4OS4uM2M3NjQ3MDY0ODU1ZDk2ZTk2ZDBjYmFhZDI2NTk5
NTRmMmY1ZGU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTEwLTA5ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZG9wdGluZyB0aGUgc2Ft
ZSBwb2xpY3kgQ09DT0EgaXMgdXNpbmcgd2hlbiByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgbWVkaWEgZGV2aWNlcyBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcnNpc3RlbnQKKyAg
ICAgICAgYWNjZXNzLiBOYW1lbHksIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBtZWRpYSBkZXZp
Y2UgZm9yIGF1ZGlvCisgICAgICAgIGFuZCB2aWRlbyBjYXB0dXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc1JlcXVlc3Q6OmZpbHRlckRldmljZUxpc3QpOiBBZGQgc3VwcG9ydCBm
b3IKKyAgICAgICAgb3RoZXIgcGxhdGZvcm1zIHdoZW4gZmlsdGVyaW5nIGRldmljZXMgaWYgdGhl
cmUgaXMgbm8gcGVyc2lzdGVudAorICAgICAgICBhY2Nlc3MgdG8gdGhlIG9yaWdpbi4KKwogMjAx
OC0xMC0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUHJl
d2FybSBGb250RGF0YWJhc2Ugb24gcHJvY2VzcyBzd2FwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVmZWMyOTk2ODVk
YmRhZTQ2MzBkMDgyMGMwZGVlNTY2ODc3MDJhMGYuLjU0Zjg0OGE3MjE2MjI5NzY0NGYzZWQ0ZTA5
ZjgyNDEwNmMwMDg2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE5IEBACisyMDE4LTEwLTA5ICBB
bGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQ
RV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHRoZSBlbnVt
ZXJhdGVEZXZpY2VzIEFQSSB1c2luZyBhIG5ldyBXZWJLaXQgY2xhc3MKKyAgICAgICAgKERldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlKSB0aGF0IGdlbmVyYXRlcyBhbmQgc3RvcmVzIHRoZSBkZXZpY2Ug
aWRzCisgICAgICAgIGhhc2ggc2FsdHMgcGVyIG9yaWdpbiwgdXNlZCB0byBhdm9pZCBmaW5nZXJw
cmludGluZyBpbiB0aGUKKyAgICAgICAgd2VicGFnZXMuCisKKyAgICAgICAgVGhlIHBhdGNoIGFs
c28gYWRkcyBhIG5ldyB0eXBlIG9mIGRhdGEgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAg
ICAgICBUaGF0IHdheSB0aGUgdXNlcnMgY2FuIGNhbGwgdGhlIFdlYnNpdGVEYXRhU3RvcmUgdG8g
c2hvdyB3aGF0CisgICAgICAgIG9yaWdpbnMgaGF2ZSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGFuZCBy
ZW1vdmUgdGhlbSBhdCBzb21lIHBvaW50LgorCisgICAgICAgIEZvciB0aGUgbW9tZW50IGp1c3Qg
R1RLKyBhbmQgV1BFIHBvcnRzIGFyZSB1c2luZyB0aGlzIGNsYXNzIHRvCisgICAgICAgIGdlbmVy
YXRlIHRoZSBoYXNoIHNhbHRzLiBUaGUgcGF0Y2ggYWRkcyBjb2RlIHRvIHRoZQorICAgICAgICBj
aGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4gQVBJIGltcGxlbWVudGF0aW9uLCBpdCB3
YXMgZW1wdHkKKyAgICAgICAgdW50aWwgbm93IGZvciB0aGVzZSBwb3J0cy4gSW4gdGhpcyBmdW5j
dGlvbiB3ZSBjcmVhdGUgYW4gaW5zdGFuY2UKKyAgICAgICAgb2YgYSBuZXcgY2xhc3MgV2ViS2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHRoYXQgaW1wbGVtZW50cworICAgICAgICB0aGUg
V2ViS2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSBpbnRlcmZhY2UsIHRoYXQgYWxsb3dzIHRoZSBw
b3J0cworICAgICAgICB0byB1c2UgdGhlIGN1cnJlbnQgcGVybWlzc2lvbiBtYW5hZ2VycyBpbXBs
ZW1lbnRlZCBpbiB0aGUKKyAgICAgICAgZW1iZWRkZXJzIHRvIGhhbmRsZSB0aGlzIG5ldyBraW5k
IG9mIHJlcXVlc3QgdGhlIHdheSB0aGV5IGxpa2UKKyAgICAgICAgaXQuIFRoZSBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIGlzIGRlbnkuCisKKyAgICAgICAgVGhlIGNsYXNzIFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdCB0YWtlcyBjYXJlIG9mCisgICAgICAgIGNvbnRhY3RpbmcgdGhl
IERldmljZUlkSGFzaFNhbHRTdG9yYWdlIGFuZCByZXF1ZXN0L3JlZ2VuZXJhdGUgdGhlCisgICAg
ICAgIGhhc2ggc2FsdHMgYWNjb3JkaW5nbHkuCisKKyAgICAgICAgUGVyc2lzdGVuY3kgaXMgc3Rp
bGwgbm90IGltcGxlbWVudGVkLCB3ZSB3aWxsIGFkZCBpdCBpbiBhCisgICAgICAgIGZ1dHVyZSBw
YXRjaC4KKworICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaDog
QWRkZWQgdGhlIG5ldyB0eXBlIG9mCisgICAgICAgIHdlYnNpZGUgZGF0YTogRGV2aWNlSWRIYXNo
U2FsdC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDogQWRkZWQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0
aW9uLgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OiBEaXR0by4KKyAgICAgICAgKiBTb3VyY2Vz
V1BFLnR4dDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmlj
ZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHA6IEFkZGVkCisgICAgICAgIHRoaXMgY2xhc3MgdG8g
cmVwcmVzZW50IGEgcmVxdWVzdCBvZiBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUKKyAgICAgICAg
ZGV2aWNlcyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBzcGVjaWZpYyBmb3IgZ2xpYiBwb3J0cyBhbmQg
aW1wbGVtZW50cworICAgICAgICB0aGUgcG9saWNpZXMgcmVnYXJkaW5nIHRoZSBoYXNoIHNhbHRz
IHdoZW4gdGhlIGVtYmVkZGVyIGFsbG93cyBvcgorICAgICAgICBkZW5pZXMgdGhlIGFjY2VzcyB1
c2luZyB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgY2xhc3MuCisgICAgICAgICh3ZWJraXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RBbGxvdyk6IEdldCB0aGUgZGV2aWNlIGhhc2ggc2Fs
dAorICAgICAgICB3aGVuIHRoZSBvcmlnaW4gaXMgYWxsb3dlZCBhbmQgc2V0IGl0IGluIHRoZSBv
cmlnaW5hbCByZXF1ZXN0LgorICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0RGVueSk6IFJlZ2VuZXJhdGUgdGhlIGRldmljZSBpZAorICAgICAgICBoYXNoIHNhbHQgd2hl
biB0aGUgdXNlciBkb2VzIG5vdCBhbGxvdyB0byBhY2Nlc3MgdGhlIGRldmljZSBpbmZvcm1hdGlv
bi4KKyAgICAgICAgKHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQpOgor
ICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGlzcG9zZSk6CisgICAg
ICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKTogQ3JlYXRl
IHRoZSBjbGFzcyB1c2luZworICAgICAgICB0aGUgcHJveHkgcmVxdWVzdCBmcm9tIHRoZSB3ZWJw
cm9jZXNzIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUKKyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJt
aXNzaW9uUmVxdWVzdFByaXZhdGUuaDoKKyAgICAgICAgRGl0dG8uCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcDogQWRkZWQgdGhlIGltcGxlbWVudGF0aW9u
CisgICAgICAgIGZvciB0aGUgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luIEFQSSBm
b3IgdGhlIGdsaWIgcG9ydHMsCisgICAgICAgIGl0IGNyZWF0ZXMgdGhlIGRldmljZSBpbmZvIHJl
cXVlc3QgYW5kIGNhbGxzIHRoZSBwZXJtaXNzaW9uCisgICAgICAgIHJlcXVlc3QgQVBJLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YS5jcHA6CisgICAgICAg
IChyZWNvcmRDb250YWluc1N1cHBvcnRlZERhdGFUeXBlcyk6IEFkZGVkIHRoZSBEZXZpY2VJZEhh
c2hTYWx0CisgICAgICAgIHR5cGUuCisgICAgICAgICh0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMp
OiBBZGRlZCB0aGUgY29udmVyc2lvbiBmcm9tIHRoZSBXZWJLaXQKKyAgICAgICAgdHlwZXMgdG8g
dGhlIGdsaWIgdHlwZXMgZm9yIHRoZSBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5j
cHA6CisgICAgICAgICh0b1dlYnNpdGVEYXRhVHlwZXMpOiBBZGRlZCB0aGUgY29udmVyc2lvbiBm
cm9tIHRoZSBnbGliIHR5cGUKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURf
SEFTSF9TQUxUIHRvIHRoZSBXZWJLaXQgdHlwZS4KKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9yZW1vdmUpOiBNYWtlIHN1cmUgd2UgcmVtb3RlIHRoZQorICAgICAgICBEZXZp
Y2VJZEhhc2hTYWx0IGlmIHRoZSBDb29raWVzIGFyZSBzZWxlY3RlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaDogQWRkZWQK
KyAgICAgICAgdGhpcyBuZXcgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgcGVybWlzc2lvbiByZXF1
ZXN0IGZvciB0aGUgZGV2aWNlCisgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBHVEsrIHBvcnQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaDogQWRkZWQg
dGhlIG5ldyB0eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgR1RLKyBwb3J0Ogor
ICAgICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Lmg6
IEFkZGVkCisgICAgICAgIHRoaXMgbmV3IGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHBlcm1pc3Np
b24gcmVxdWVzdCBmb3IgdGhlIGRldmljZQorICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgV1BF
IHBvcnQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaDog
QWRkZWQgdGhlIG5ldyB0eXBlIG9mCisgICAgICAgIHdlYnNpdGUgdGhhdCBpbiB0aGUgV1BFIHBv
cnQ6CisgICAgICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwOiBBZGRlZCB0aGlz
IG5ldyBjbGFzcyB0aGF0CisgICAgICAgIGhhbmRsZXMgaG93IHRvIGdlbmVyYXRlIGFuZCBzdG9y
ZSB0aGUgaGFzaCBzYWx0cyBpbnNpZGUKKyAgICAgICAgV2ViS2l0LiBQZXJzaXN0ZW5jeSBpcyBz
dGlsbCBub3QgaW1wbGVtZW50ZWQsIHdlIHdpbGwgYWRkIGl0IGluIGEKKyAgICAgICAgZnV0dXJl
IHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlk
ZW50aWZpZXJIYXNoU2FsdEZvck9yaWdpbik6CisgICAgICAgIENoZWNrIHRoZSBtYXAgdG8gZ2V0
IHRoZSBoYXNoIHNhbHQgZm9yIGFuIG9yaWdpbiwgaWYgdGhlcmUgaXMgbm9uZQorICAgICAgICBj
cmVhdGUgYSBuZXcgcmFuZG9tIG9uZS4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2U6OnJlZ2VuZXJhdGVEZXZpY2VJZGVudGlmaWVySGFzaFNhbHRGb3JPcmlnaW4pOgor
ICAgICAgICBEZWxldGUgdGhlIGhhc2ggc2FsdCBvZiBhbiBvcmlnaW4gaWYgaXQgYWxyZWFkeSBl
eGlzdHMgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFz
aFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyk6CisgICAgICAgIFJldHVy
bnMgdGhlIGxpc3Qgb2Ygb3JpZ2lucyB0aGF0IGhhdmUgYSBoYXNoIHNhbHQgZ2VuZXJhdGVkIGZv
cgorICAgICAgICB0aGVtLiBJdCBpcyB1c2VkIGluIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAg
ICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNo
U2FsdEZvck9yaWdpbnMpOgorICAgICAgICBEZWxldGVzIHRoZSBoYXNoIHNhbHRzIGluIHRoZSBt
YXAgZm9yIGFuIG9yaWdpbi4KKyAgICAgICAgKFdlYktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2U6OmRlbGV0ZURldmljZUlkSGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZSk6CisgICAgICAg
IERlbGV0ZSB0aGUgb3JpZ2lucyB0aGF0IGhhdmUgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgYSB0
aW1lLgorICAgICAgICAqIFVJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oOiBEaXR0
by4KKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaDog
UmVtb3ZlIHVuZWVkZWQgY2xhc3MKKyAgICAgICAgZGVmaW5pdGlvbi4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6IEFkZGVkIHN1cHBvcnQgdG8K
KyAgICAgICAgcmV0dXJuIGFuZCByZW1vdmUgdGhlIG9yaWdpbnMgd2l0aCBhIGdlbmVyYXRlIGhh
c2ggc2FsdCB1c2VkIHRvCisgICAgICAgIGdlbmVyYXRlIHRoZSBkZXZpY2UgaWRzLgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKTogQWRkZWQgdGhl
IG5ldworICAgICAgICByZWZlcmVuY2UgdG8gdGhlIERldmljZUlkSGFzaFNhbHRTdG9yYWdlIGNs
YXNzLCB1c2VkIHRvIGhhbmRsZSB0aGUKKyAgICAgICAgaGFzaCBzYWx0cy4KKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOiBHZXQgdGhlIGxpc3Qg
b2YKKyAgICAgICAgb3JpZ2lucyB3aXRoIGEgaGFzaCBzYWx0cyBpbiB0aGUgRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOiBSZW1vdmUgdGhlIGhhc2ggc2FsdHMgaW4KKyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UgZm9yIGFuIG9yaWdpbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZCB0aGUKKyAgICAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UgdG8gdGhlIGNvbXBpbGF0aW9uLgorCiAyMDE4LTEwLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmV3YXJtIEZvbnREYXRhYmFzZSBvbiBwcm9jZXNz
IHN3YXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwCmluZGV4IGJlNTFhZTM0YTY5ZTlmZDY1NTA1MDdmNWI4
YTMyYzBkNjdkYTY4NGMuLmQ3MjQ1NDA3NTM4ZDVjMGVmMzgwNTFhMjc1MzgxODNkNzdjNjM5MDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZp
Y2VzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYURldmljZXNSZXF1ZXN0LmNwcApAQCAtODEsMTYgKzgxLDEyIEBAIHZvaWQgTWVkaWFEZXZp
Y2VzUmVxdWVzdDo6Y29udGV4dERlc3Ryb3llZCgpCiAKIHZvaWQgTWVkaWFEZXZpY2VzUmVxdWVz
dDo6ZmlsdGVyRGV2aWNlTGlzdChWZWN0b3I8UmVmPE1lZGlhRGV2aWNlSW5mbz4+JiBkZXZpY2Vz
KQogewotI2lmICFQTEFURk9STShDT0NPQSkKLSAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7Ci0j
ZWxzZQotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdENh
bWVyYUNvdW50ID0gMjsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKKyNlbHNlCiAgICAgc3Rh
dGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJhQ291bnQgPSAxOwogI2VuZGlmCisKICAgICBzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwogCiAgICAgaW50IGNhbWVy
YUNvdW50ID0gMDsKQEAgLTEwMyw4ICs5OSw2IEBAIHZvaWQgTWVkaWFEZXZpY2VzUmVxdWVzdDo6
ZmlsdGVyRGV2aWNlTGlzdChWZWN0b3I8UmVmPE1lZGlhRGV2aWNlSW5mbz4+JiBkZXZpY2VzCiAK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwotCi0jZW5kaWYKIH0KIAogdm9pZCBNZWRp
YURldmljZXNSZXF1ZXN0OjpzdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oCmluZGV4IDlkNTAzNjFlODFhMzdiZDk0MDJkZTkx
YzFjNTM5NTg0ZWFhYTYyZGUuLjYwMWJiNDQzNjdiZjE1YmVjZWI5YmIxYjZkYjNiZTc3NzQ2Njhh
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhVHlwZS5oCkBAIC00OSw2ICs0OSw3IEBAIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIHsK
ICAgICBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucyA9IDEgPDwgMTQsCiAjZW5kaWYKICAgICBE
T01DYWNoZSA9IDEgPDwgMTUsCisgICAgRGV2aWNlSWRIYXNoU2FsdCA9IDEgPDwgMTYsCiB9Owog
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKaW5kZXggMDM5Y2NhMzRmNTNjYWQ4OTdlN2IwMTZiYTAyMjQwMTRjMmMx
ZDNiYy4uYjcxYWQ0OTgzNDVlZDljYTQyOGIwYTM0YzRiYWU5YjgzYjk1YjBkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0CkBAIC0yMjgsNiArMjI4LDcgQEAgVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAogVUlQ
cm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiBVSVBy
b2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcAogVUlQcm9jZXNzL1Bh
Z2VMb2FkU3RhdGUuY3BwCitVSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwCiBV
SVByb2Nlc3MvUHJvY2Vzc0Fzc2VydGlvbi5jcHAKIFVJUHJvY2Vzcy9Qcm9jZXNzVGhyb3R0bGVy
LmNwcAogVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50
eHQKaW5kZXggZTEzODE5NDliMGZkMDNmNTY4MWUzYzhlMmJhMTQzOTNjMmUzNjlmYy4uZmM1ZjU1
ZmJiN2Y2MjI3MTFmMTdlY2M5NjQzYmEyNTUwMzdjYWJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBA
IC0xMzMsNiArMTMzLDcgQEAgVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvbnRleHRNZW51Q2xp
ZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDcmVkZW50aWFsLmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
RG93bmxvYWQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2Fk
Q2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRFZGl0b3JTdGF0
ZS5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAppbmRleCBjNTlmOGViMTg0ODU4ZDBlNTI0
MDcwMmU2YTVlYTVmZjk3ZmZhY2Y0Li45NjU1YWUyYzg1YjE3YzcyMmFmMDE5NTliNjdkMWEyOThi
OWZhYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKQEAgLTEyMCw2ICsxMjAsNyBAQCBVSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENyZWRlbnRpYWwuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5jcHAgQG5vLXVuaWZ5CitVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREb3dubG9hZC5jcHAgQG5vLXVuaWZ5CiBVSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwIEBuby11bmlmeQogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdEVkaXRvclN0YXRlLmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MzljYWUzMDA2MDk2
MWM5MDlhMThmZGE5NGI0ODM1NmY2YTg0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3Qu
Y3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBT
LkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCIKKworI2luY2x1
ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCisjaW5jbHVkZSAiVXNlck1lZGlhUGVybWlz
c2lvbkNoZWNrUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJl
cXVlc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaCIKKyNp
bmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4K
KyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdAor
ICogQFNob3J0X2Rlc2NyaXB0aW9uOiBBIHBlcm1pc3Npb24gcmVxdWVzdCBmb3IgYWNjZXNzaW5n
IHVzZXIncyBhdWRpby92aWRlbyBkZXZpY2VzLgorICogQFRpdGxlOiBXZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0
LCAjV2ViS2l0V2ViVmlldworICoKKyAqIFdlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
IHJlcHJlc2VudHMgYSByZXF1ZXN0IGZvcgorICogcGVybWlzc2lvbiB0byB3aGV0aGVyIFdlYktp
dCBzaG91bGQgYmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHVzZXIncworICogZGV2aWNlcyBpbmZv
cm1hdGlvbiB3aGVuIHJlcXVlc3RlZCB0aHJvdWdoIHRoZSBlbnVtZXJhY2VEZXZpY2VzIEFQSS4K
KyAqCisgKiBXaGVuIGEgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IGlzIG5vdCBo
YW5kbGVkIGJ5IHRoZSB1c2VyLAorICogaXQgaXMgZGVuaWVkIGJ5IGRlZmF1bHQuCisgKgorICog
U2luY2U6IDIuMjIKKyAqLworCitzdGF0aWMgdm9pZCB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0
X2ludGVyZmFjZV9pbml0KFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0SWZhY2UqKTsKKworc3RydWN0
IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHk+IHJlcXVlc3Q7CisgICAgUmVmUHRyPERldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlPiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKKyAgICBib29sIG1h
ZGVEZWNpc2lvbjsKK307CisKK1dFQktJVF9ERUZJTkVfVFlQRV9XSVRIX0NPREUoCisgICAgV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LCB3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlz
c2lvbl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAorICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfVFlQRV9QRVJNSVNTSU9OX1JFUVVFU1QsIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3Rf
aW50ZXJmYWNlX2luaXQpKQorCitzdGF0aWMgdm9pZCB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RBbGxvdyhXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBB
U1NFUlQoV0VCS0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7
CisKKyAgICBhdXRvJiBwcml2ID0gV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVT
VChyZXF1ZXN0KS0+cHJpdjsKKworICAgIGlmICghcHJpdi0+ZGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UpIHsKKyAgICAgICAgcHJpdi0+cmVxdWVzdC0+c2V0VXNlck1lZGlhQWNjZXNzSW5mbyhTdHJp
bmcoKSwgZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT25seSBvbmUg
ZGVjaXNpb24gYXQgYSB0aW1lLgorICAgIGlmIChwcml2LT5tYWRlRGVjaXNpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIHByaXYtPm1hZGVEZWNpc2lvbiA9IHRydWU7CisgICAgYXV0byBzYWx0
ID0gcHJpdi0+ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkSGFzaFNhbHRGb3JP
cmlnaW4oKnByaXYtPnJlcXVlc3QpOworICAgIHByaXYtPnJlcXVlc3QtPnNldFVzZXJNZWRpYUFj
Y2Vzc0luZm8oV1RGTW92ZShzYWx0KSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnkoV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgQVNTRVJUKFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JF
UVVFU1QocmVxdWVzdCkpOworCisgICAgYXV0byYgcHJpdiA9IFdFQktJVF9ERVZJQ0VfSU5GT19Q
RVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCktPnByaXY7CisKKyAgICBpZiAoIXByaXYtPmRldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlKSB7CisgICAgICAgIHByaXYtPnJlcXVlc3QtPnNldFVzZXJNZWRp
YUFjY2Vzc0luZm8oU3RyaW5nKCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIE9ubHkgb25lIGRlY2lzaW9uIGF0IGEgdGltZS4KKyAgICBpZiAocHJpdi0+bWFkZURl
Y2lzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5tYWRlRGVjaXNpb24gPSB0cnVl
OworICAgIGF1dG8gc2FsdCA9IHByaXYtPmRldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5yZWdlbmVy
YXRlRGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbigqcHJpdi0+cmVxdWVzdCk7CisgICAgcHJpdi0+
cmVxdWVzdC0+c2V0VXNlck1lZGlhQWNjZXNzSW5mbyhXVEZNb3ZlKHNhbHQpLCBmYWxzZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfaW50ZXJmYWNlX2luaXQo
V2ViS2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmFsbG93
ID0gd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0QWxsb3c7CisgICAgaWZhY2UtPmRl
bnkgPSB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REZW55OworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3REaXNwb3NlKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICAvLyBEZWZhdWx0IGJlaGF2aW91ciB3aGVuIG5vIGRlY2lzaW9uIGhhcyBi
ZWVuIG1hZGUgaXMgZGVueWluZyB0aGUgcmVxdWVzdC4KKyAgICB3ZWJraXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3REZW55KFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1Qob2JqZWN0KSk7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9w
YXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
ZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfY2xhc3NfaW5pdChXZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3RDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9z
ZSA9IHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERpc3Bvc2U7Cit9CisKK1dlYktp
dERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCogd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25S
ZXF1ZXN0Q3JlYXRlKFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0LCBEZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZSogZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpCit7CisgICAgYXV0
byogZGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ID0gV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1J
U1NJT05fUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlT
U0lPTl9SRVFVRVNULCBudWxscHRyKSk7CisKKyAgICBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QtPnByaXYtPnJlcXVlc3QgPSAmcmVxdWVzdDsKKyAgICBkZXZpY2VJbmZvUGVybWlzc2lvblJl
cXVlc3QtPnByaXYtPmRldmljZUlkSGFzaFNhbHRTdG9yYWdlID0gZGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2U7CisgICAgcmV0dXJuIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMDYwYjJlMGNjZDZiYTg1YzA0YjdhODlmMGE2ZTg3ODc2NTE0ZjdlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IFdlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdDsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZTsKK307CisKK1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dCogd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6VXNlck1l
ZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmLCBXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdl
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRV
SUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNs
aWVudC5jcHAKaW5kZXggMDI3NTQzMTI3YWVlMWIwODZkMDM2MTUxZDExOGNmYzc5NjY2YTQyZS4u
NThiZDdiZTRiYmM1ZjJmY2UzZWNlZTEzYjY1MzBkMzUwZWQ4MTViZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcApAQCAtMjIs
NiArMjIsNyBAQAogCiAjaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKICNpbmNsdWRlICJEcmF3aW5n
QXJlYVByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgiCkBAIC0zMiw2ICszMyw3
IEBACiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogCiAj
aWYgUExBVEZPUk0oR1RLKQpAQCAtMTg5LDYgKzE5MSwxMyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBib29sIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZv
ck9yaWdpbihXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5
T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9w
TGV2ZWxEb2N1bWVudE9yaWdpbiwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHBlcm1p
c3Npb25SZXF1ZXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBkZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0Q3JlYXRlKHBlcm1pc3Npb25SZXF1ZXN0LCBwYWdlLndlYnNpdGVEYXRhU3RvcmUoKS5kZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZSgpKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlz
c2lvblJlcXVlc3QobV93ZWJWaWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKGRldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdC5nZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
KFdlYlBhZ2VQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBGdW5jdGlvbjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJL
aXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdD4gbm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QgPSBhZG9wdEdSZWYod2Via2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVh
dGUoTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Q6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSkucHRyKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhLmNwcAppbmRleCBhMjRkYTRkNmUxY2M4ODI2ZTRj
ZTIzZGE3YTc3NTdlZTVlMzA5NGRmLi43Yzk3ZTBiMWIyNGExYjNhNmFhMjEzM2Y4OTRhMWU4YTc4
ZTAwMzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJzaXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2Vic2l0ZURhdGEuY3BwCkBAIC03Niw3ICs3Niw4IEBAIHN0YXRpYyBib29sIHJlY29y
ZENvbnRhaW5zU3VwcG9ydGVkRGF0YVR5cGVzKGNvbnN0IFdlYnNpdGVEYXRhUmVjb3JkJiByZWNv
cmQpCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIFdlYnNpdGVEYXRh
VHlwZTo6UGx1Z0luRGF0YSwKICNlbmRpZgotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkNvb2tp
ZXMKKyAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLAorICAgICAgICBXZWJzaXRlRGF0
YVR5cGU6OkRldmljZUlkSGFzaFNhbHQKICAgICB9KTsKIH0KIApAQCAtMTAzLDYgKzEwNCw4IEBA
IHN0YXRpYyBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHRvV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyhP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlCiAjZW5kaWYKICAgICBpZiAodHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKSkKICAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lU
X1dFQlNJVEVfREFUQV9DT09LSUVTOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRf
V0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQ7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYktpdFdlYnNpdGVEYXRhVHlwZXM+KHJldHVyblZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlci5jcHAKaW5kZXggODZiZjQ3ZmQxYWUwZWFkMjkxZWI1MDlhYzE3ZmE2M2E2MTE0ZTE2
Yi4uNDQ5MTUyNDZmMjQ0ZmU0MzE5ZDM2M2Y4ZGViMjliZjM1Y2YyY2I3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIuY3BwCkBAIC02NDksNiArNjQ5LDggQEAgc3RhdGljIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5
cGUKICNlbmRpZgogICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUykK
ICAgICAgICAgcmV0dXJuVmFsdWUuYWRkKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcyk7CisgICAg
aWYgKHR5cGVzICYgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKQorICAg
ICAgICByZXR1cm5WYWx1ZS5hZGQoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KTsK
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKQEAgLTczMiw3ICs3MzQsMTIgQEAgdm9pZCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfcmVtb3ZlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciogbWFuYWdlciwgV2ViS2kKICAgICBmb3IgKEdMaXN0KiBpdGVtID0gd2Vic2l0ZURhdGE7IGl0
ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgewogICAgICAgICBXZWJLaXRXZWJzaXRlRGF0
YSogZGF0YSA9IHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhKj4oaXRlbS0+ZGF0YSk7CiAK
LSAgICAgICAgaWYgKHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGVzKGRhdGEpICYgdHlwZXMp
CisgICAgICAgIC8vIFdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBoYXNoIHNhbHRzIHdoZW4gY29va2ll
cyBhcmUgcmVtb3ZlZC4KKyAgICAgICAgYXV0byBkYXRhVHlwZXMgPSB3ZWJraXRfd2Vic2l0ZV9k
YXRhX2dldF90eXBlcyhkYXRhKTsKKyAgICAgICAgaWYgKGRhdGFUeXBlcyAmIFdFQktJVF9XRUJT
SVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCkKKyAgICAgICAgICAgIGRhdGFUeXBlcyA9IHN0
YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhVHlwZXM+KGRhdGFUeXBlcyB8IFdFQktJVF9XRUJT
SVRFX0RBVEFfQ09PS0lFUyk7CisKKyAgICAgICAgaWYgKGRhdGFUeXBlcyAmIHR5cGVzKQogICAg
ICAgICAgICAgcmVjb3Jkcy5hcHBlbmQod2Via2l0V2Vic2l0ZURhdGFHZXRSZWNvcmQoZGF0YSkp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWY4YzQyZWNiNjA4NGViNWEzYzUyMzY0ZDg0MWRkYzRlMTVkYjg4NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJ
T04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGly
ZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0X2gKKyNkZWZpbmUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0X2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJN
SVNTSU9OX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25f
cmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lP
Tl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BF
Uk1JU1NJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9O
X1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9E
RVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lP
Tl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgICAgICAgIFdl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
ZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcyAgIFdlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0
ZTsKKworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgeworICAgIEdP
YmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0RGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3Rf
Z2V0X3R5cGUgICAgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaAppbmRleCAw
NjUwNDdmZTE3YzU4NWUyODI2MTE5YWNkYjRiMzA3MGUxNDMyMzIxLi42NzQzMDVjYzAxZjBkOTRh
YjBjZGQyNDdhOTMyOTBlZjNiOWE1NTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCkBAIC00NCw2ICs0NCw3IEBAIHR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YSBXZWJLaXRXZWJzaXRlRGF0YTsKICAqIEBXRUJL
SVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVM6IEluZGV4ZWREQiBkYXRhYmFzZXMu
CiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQTogUGx1Z2lucyBkYXRhLgogICog
QFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzogQ29va2llcy4KKyAqIEBXRUJLSVRfV0VCU0lU
RV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQ6IEhhc2ggc2FsdCB1c2VkIHRvIGdlbmVyYXRlIHRo
ZSBkZXZpY2UgaWRzIHVzZWQgYnkgd2VicGFnZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9B
TEw6IEFsbCB0eXBlcy4KICAqCiAgKiBFbnVtIHZhbHVlcyB3aXRoIGZsYWdzIHJlcHJlc2VudGlu
ZyB0eXBlcyBvZiBXZWJzaXRlIGRhdGEuCkBAIC02MCw3ICs2MSw4IEBAIHR5cGVkZWYgZW51bSB7
CiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTICAgICAgID0gMSA8
PCA2LAogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEEgICAgICAgICAgICAgICA9
IDEgPDwgNywKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDgsCi0gICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAg
ICAgICAgID0gKDEgPDwgOSkgLSAxCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURf
SEFTSF9TQUxUICAgICAgID0gMSA8PCA5LAorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMICAg
ICAgICAgICAgICAgICAgICAgICA9ICgxIDw8IDEwKSAtIDEKIH0gV2ViS2l0V2Vic2l0ZURhdGFU
eXBlczsKIAogV0VCS0lUX0FQSSBHVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTc3ZDE4ZDY5MTgwM2M3MjlkYzUwZDkwNjgyNDc3ODk5MjE4ZDI0
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VC
S0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d3BlL3dlYmtpdC5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RGV2aWNlSW5mb1Blcm1p
c3Npb25SZXF1ZXN0X2gKKyNkZWZpbmUgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d3BlL1dlYktpdERlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0RFVklDRV9JTkZP
X1BFUk1JU1NJT05fUkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfZGV2aWNlX2luZm9fcGVybWlz
c2lvbl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJN
SVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lO
Rk9fUEVSTUlTU0lPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVT
VCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1J
U1NJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9O
X1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VC
S0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJN
SVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCAgICAg
ICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzICAgV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQ
cml2YXRlOworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCB7Cisg
ICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXREZXZp
Y2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVx
dWVzdF9nZXRfdHlwZSAgICAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJzaXRlRGF0YS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJzaXRlRGF0YS5oCmlu
ZGV4IDNhNDYyYWFmZjliODdjNmUwZTU3Zjk2MmMwZTQ2MzA5MjU5ZGRlMDMuLjAzZGQ1ODVkMTI2
NWE2ZTRlZWRiOTQyNjg3NTNmMzYyNGM2MjBhZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKQEAgLTQ0LDYgKzQ0LDcgQEAg
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhIFdlYktpdFdlYnNpdGVEYXRhOwogICog
QFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUzogSW5kZXhlZERCIGRhdGFi
YXNlcy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBOiBQbHVnaW5zIGRhdGEu
CiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTOiBDb29raWVzLgorICogQFdFQktJVF9X
RUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVDogSGFzaCBzYWx0IHVzZWQgdG8gZ2VuZXJh
dGUgdGhlIGRldmljZSBpZHMgdXNlZCBieSB3ZWJwYWdlcy4KICAqIEBXRUJLSVRfV0VCU0lURV9E
QVRBX0FMTDogQWxsIHR5cGVzLgogICoKICAqIEVudW0gdmFsdWVzIHdpdGggZmxhZ3MgcmVwcmVz
ZW50aW5nIHR5cGVzIG9mIFdlYnNpdGUgZGF0YS4KQEAgLTYwLDcgKzYxLDggQEAgdHlwZWRlZiBl
bnVtIHsKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMgICAgICAg
PSAxIDw8IDYsCiAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQSAgICAgICAgICAg
ICAgID0gMSA8PCA3LAogICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUyAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgOCwKLSAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAg
ICAgICAgICAgICAgPSAoMSA8PCA5KSAtIDEKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklD
RV9JRF9IQVNIX1NBTFQgICAgICAgPSAxIDw8IDksCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9B
TEwgICAgICAgICAgICAgICAgICAgICAgID0gKDEgPDwgMTApIC0gMQogfSBXZWJLaXRXZWJzaXRl
RGF0YVR5cGVzOwogCiBXRUJLSVRfQVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRiODcwZmUy
NmZlZTkwNDBjMmFhZGVhZmYyYzc1YTU3NGFmNDA2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcApAQCAtMCwwICsx
LDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5o
PgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1
ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKy8vIEZJWE1FOiBJbXBsZW1l
bnQgcGVyc2lzdGVuY3kuCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3N0YXRpYyBjb25zdCBpbnQgaGFzaFNhbHRTaXplID0gNDg7CitzdGF0aWMgY29u
c3QgaW50IHJhbmRvbURhdGFTaXplID0gaGFzaFNhbHRTaXplIC8gMTY7CisKK1JlZjxEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZT4gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmNyZWF0ZSgpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSk7Cit9CisK
K1N0cmluZyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRIYXNoU2FsdEZvck9y
aWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYgcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gZ2V0RGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbihyZXF1ZXN0LnRvcExldmVsRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbigpKTsKK30KKworU3RyaW5nIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpy
ZWdlbmVyYXRlRGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbihVc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eSYgcmVxdWVzdCkKK3sKKyAgICBhdXRvJiBkb2N1bWVudE9yaWdpbiA9IHJlcXVlc3Qu
dG9wTGV2ZWxEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBhdXRvIGRvY3VtZW50T3Jp
Z2luRGF0YSA9IGRvY3VtZW50T3JpZ2luLmRhdGEoKTsKKyAgICBtX2RldmljZUlkSGFzaFNhbHRG
b3JPcmlnaW5zLnJlbW92ZUlmKFsmZG9jdW1lbnRPcmlnaW5EYXRhXShhdXRvJiBrZXlBbmRWYWx1
ZSkgeworICAgICAgICByZXR1cm4ga2V5QW5kVmFsdWUudmFsdWUtPmRvY3VtZW50T3JpZ2luID09
IGRvY3VtZW50T3JpZ2luRGF0YTsKKyAgICB9KTsKKworICAgIHJldHVybiBnZXREZXZpY2VJZEhh
c2hTYWx0Rm9yT3JpZ2luKGRvY3VtZW50T3JpZ2luKTsKK30KKworU3RyaW5nIERldmljZUlkSGFz
aFNhbHRTdG9yYWdlOjpnZXREZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
JiBkb2N1bWVudE9yaWdpbikKK3sKKyAgICBhdXRvJiBkZXZpY2VJZEhhc2hTYWx0ID0gbV9kZXZp
Y2VJZEhhc2hTYWx0Rm9yT3JpZ2lucy5lbnN1cmUoZG9jdW1lbnRPcmlnaW4udG9SYXdTdHJpbmco
KSwgWyZkb2N1bWVudE9yaWdpbl0gKCkgeworICAgICAgICB1aW50NjRfdCByYW5kb21EYXRhW3Jh
bmRvbURhdGFTaXplXTsKKyAgICAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocmFuZG9tRGF0YSksIHNpemVvZihyYW5kb21E
YXRhKSk7CisKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVy
LnJlc2VydmVDYXBhY2l0eShoYXNoU2FsdFNpemUpOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJhbmRvbURhdGFTaXplOyBpKyspCisgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZDY0QXNI
ZXgocmFuZG9tRGF0YVswXSwgYnVpbGRlcik7CisKKyAgICAgICAgU3RyaW5nIGRldmljZUlkSGFz
aFNhbHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8SGFzaFNhbHRGb3JPcmlnaW4+KGRvY3VtZW50T3JpZ2luLmRhdGEoKS5pc29sYXRlZENv
cHkoKSwgV1RGTW92ZShkZXZpY2VJZEhhc2hTYWx0KSk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVl
OworCisgICAgZGV2aWNlSWRIYXNoU2FsdC0+bGFzdFRpbWVVc2VkID0gV2FsbFRpbWU6Om5vdygp
OworCisgICAgcmV0dXJuIGRldmljZUlkSGFzaFNhbHQtPmRldmljZUlkSGFzaFNhbHQ7Cit9CisK
K3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkSGFzaFNhbHRPcmlnaW5z
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiBv
cmlnaW5zOworCisgICAgZm9yIChhdXRvJiBoYXNoU2FsdEZvck9yaWdpbiA6IG1fZGV2aWNlSWRI
YXNoU2FsdEZvck9yaWdpbnMpCisgICAgICAgIG9yaWdpbnMuYWRkKGhhc2hTYWx0Rm9yT3JpZ2lu
LnZhbHVlLT5kb2N1bWVudE9yaWdpbik7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W29yaWdpbnMgPSBXVEZNb3ZlKG9yaWdpbnMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICB9KTsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX2RldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zLnJl
bW92ZUlmKFsmb3JpZ2luc10oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIG9y
aWdpbnMuY29udGFpbnMoa2V5QW5kVmFsdWUudmFsdWUtPmRvY3VtZW50T3JpZ2luKTsKKyAgICB9
KTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Cit9CisKK3ZvaWQgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRlbGV0ZURldmljZUlk
SGFzaFNhbHRPcmlnaW5zTW9kaWZpZWRTaW5jZShXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9kZXZpY2VJZEhhc2hT
YWx0Rm9yT3JpZ2lucy5yZW1vdmVJZihbdGltZV0oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAg
ICAgcmV0dXJuIGtleUFuZFZhbHVlLnZhbHVlLT5sYXN0VGltZVVzZWQgPiB0aW1lOworICAgIH0p
OworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTc1MGIwYjQz
MDRhZTZmNjNhNGE1MzZhOWM5ZDkxYzNjMzFjYTJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVXNlck1lZGlhUGVy
bWlzc2lvbkNoZWNrUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPERldmljZUlkSGFzaFNhbHRT
dG9yYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZT4gY3JlYXRlKCk7CisgICAgfkRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgPSBkZWZhdWx0Owor
CisgICAgU3RyaW5nIGdldERldmljZUlkSGFzaFNhbHRGb3JPcmlnaW4oVXNlck1lZGlhUGVybWlz
c2lvbkNoZWNrUHJveHkmKTsKKyAgICBTdHJpbmcgcmVnZW5lcmF0ZURldmljZUlkSGFzaFNhbHRG
b3JPcmlnaW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmKTsKKworICAgIHZvaWQgZ2V0
RGV2aWNlSWRIYXNoU2FsdE9yaWdpbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNoU2V0PFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mJik+JiYpOworICAgIHZvaWQgZGVsZXRlRGV2aWNl
SWRIYXNoU2FsdEZvck9yaWdpbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgZGVsZXRlRGV2
aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBIYXNoU2FsdEZvck9yaWdp
biB7CisgICAgICAgIEhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYmIHNlY3VyaXR5T3JpZ2luLCBTdHJpbmcmJiBkZXZpY2VJZEhhc2hTYWx0KQorICAgICAgICAg
ICAgOiBkb2N1bWVudE9yaWdpbihzZWN1cml0eU9yaWdpbikKKyAgICAgICAgICAgICwgZGV2aWNl
SWRIYXNoU2FsdChXVEZNb3ZlKGRldmljZUlkSGFzaFNhbHQpKQorICAgICAgICAgICAgLCBsYXN0
VGltZVVzZWQoV2FsbFRpbWU6Om5vdygpKQorICAgICAgICB7IH07CisKKyAgICAgICAgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhIGRvY3VtZW50T3JpZ2luOworICAgICAgICBTdHJpbmcgZGV2
aWNlSWRIYXNoU2FsdDsKKyAgICAgICAgV2FsbFRpbWUgbGFzdFRpbWVVc2VkOworICAgIH07CisK
KyAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpID0gZGVmYXVsdDsKKworICAgIFN0cmluZyBn
ZXREZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJik7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEhhc2hTYWx0Rm9yT3JpZ2luPj4g
bV9kZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2luczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lv
bkNoZWNrUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Np
b25DaGVja1Byb3h5LmgKaW5kZXggZjM3YmU3YWIyMWYzZjExZjU3NWIxY2ZjMTI3N2JjYTU2NmNj
YzMwMS4uZmJjYzRjZmVlM2E1YjRiZDBjMGEwYWM2MjFkYjA4ZjFmYTRjMGVmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQ
cm94eS5oCkBAIC0zNiw4ICszNiw2IEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotY2xhc3MgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHk7Ci0KIGNsYXNzIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5IDogcHVibGljIEFQSTo6
T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrPiB7
CiBwdWJsaWM6CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggYzJlN2UxYjg2OTNhOWNkNDMwYjMwYjAw
ODQ5MTMxZjc1M2NhNzIxNy4uZjQwNzQ2Yzk0MWY4OGUxMGNkMDYyZWE3ODNkZGZkYWQ3YmYxMTk2
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBUElXZWJz
aXRlRGF0YVJlY29yZC5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNs
dWRlICJBdXRoZW50aWNhdG9yTWFuYWdlci5oIgorI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlLmgiCiAjaW5jbHVkZSAiTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyLmgi
CkBAIC05NSw2ICs5Niw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLCBQQUw6OlNlc3Npb25JRCBzCiAgICAgOiBtX3Nlc3Np
b25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0
aW9uKSkKICAgICAsIG1fc3RvcmFnZU1hbmFnZXIoU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShtX2Nv
bmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkKKyAgICAsIG1fZGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UoRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmNyZWF0ZSgpKQogICAgICwgbV9x
dWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XZWJzaXRlRGF0YVN0b3Jl
IikpCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKICAgICAsIG1fYXV0aGVudGljYXRvck1hbmFnZXIo
bWFrZVVuaXF1ZVJlZjxBdXRoZW50aWNhdG9yTWFuYWdlcj4oKSkKQEAgLTQ4NSw2ICs0ODcsMTkg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgfSk7CiAgICAgfQogCisgICAgaWYg
KG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgJiYgZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkpIHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKKworICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRTdG9y
YWdlLT5nZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRv
JiYgb3JpZ2lucykgeworICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7CisKKyAg
ICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgd2Vi
c2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtl
QW55KCksIFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9KTsKKworICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3
ZWJzaXRlRGF0YSkpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBpZiAoZGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpICYmIGlz
UGVyc2lzdGVudCgpKSB7CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0Nh
bGxiYWNrKCk7CiAKQEAgLTgwMCw2ICs4MTUsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUK
ICAgICAgICAgfSk7CiAgICAgfQogCisgICAgaWYgKG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2Ug
JiYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQp
IHx8IChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzKSkpKSB7Cisg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CisKKyAgICAg
ICAgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdp
bnNNb2RpZmllZFNpbmNlKG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Cisg
ICAgICAgIH0pOworICAgIH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsK
ICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKIApAQCAt
MTA3NCw2ICsxMDk3LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIH0pOwog
ICAgIH0KIAorICAgIGlmIChtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlICYmIChkYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSB8fCAoZGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykpKSkgeworICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAgICAgIG1fZGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UtPmRlbGV0ZURldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zKG9yaWdpbnMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIGlmIChk
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25D
YWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZGF0YVJl
Y29yZCA6IGRhdGFSZWNvcmRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggYTQyMjYxZjA0MWY1OTdhYTJh
YTRhOTQzMzFjZDM1OGNhODJiNWZiYS4uOTE2M2Q5ODk0NTExNjRjZmJiZDNhNzgwOWUyMjRhOTg2
MWZmNzk3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtNTUsNiArNTUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5UHJveHlTdG9yZTsK
IGNsYXNzIFN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CiBj
bGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKQEAgLTkyLDYgKzkzLDcgQEAgcHVibGljOgogICAgICAg
ICBTdHJpbmcgd2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBsb2NhbFN0
b3JhZ2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
OworICAgICAgICBTdHJpbmcgZGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5OwogICAg
ICAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKICAgICAgICAgU3Ry
aW5nIGphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgY29v
a2llU3RvcmFnZUZpbGU7CkBAIC0xNjEsNiArMTYzLDggQEAgcHVibGljOgogCiAgICAgU3RvcmFn
ZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9zdG9yYWdlTWFuYWdlci5nZXQo
KTsgfQogCisgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UqIGRldmljZUlkSGFzaFNhbHRTdG9y
YWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQorCiAgICAg
V2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
ICAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7
CiAKQEAgLTIzNSw2ICsyMzksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNSZXNvbHZlZERp
cmVjdG9yaWVzIHsgZmFsc2UgfTsKIAogICAgIGNvbnN0IFJlZlB0cjxTdG9yYWdlTWFuYWdlcj4g
bV9zdG9yYWdlTWFuYWdlcjsKKyAgICBjb25zdCBSZWZQdHI8RGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2U+IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CiAgICAgUmVmUHRyPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogICAgIGJvb2wgbV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjM5NjQ1M2Y3ODZl
NGE1NmVkNjUwYTU2MWFkMjFkYzBiNThhZWRmNi4uZmQxY2JlODA4YTBjZjIwZTYwNDcxYzRjYTBi
YjgwMmU2ZTVhNjlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC03Niw2ICs3Niw3IEBACiAJCTAwQjk2NjE2MThFMjRDQkEwMENFMUY4
OCAvKiBBUElGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwMEI5NjYxNTE4RTI0Q0JBMDBDRTFGODggLyogQVBJRmluZENsaWVudC5oICov
OyB9OwogCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTY2MTgxOEUyNUFFMTAw
Q0UxRjg4IC8qIEZpbmRDbGllbnQuaCAqLzsgfTsKIAkJMDcyOTdGOUYxQzE3QkJFQTAwM0YwNzM1
IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMDAzRjA3MzUgLyogVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLzsgfTsKKwkJMDcyOTdGOUYxQzE3QkJFQTAx
NUYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCAqLzsgfTsKIAkJMDcyOTdGQTMxQzE4NkFEQjAwM0YwNzM1
IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2Vy
TWVkaWFQZXJtaXNzaW9uQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwNzRFNzVGRTFERjIyMTE5MDBEMzE4RUMgLyogVXNlck1lZGlhUHJv
Y2Vzc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3NEU3NUZCMURGMUZEMTMwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5o
ICovOyB9OwogCQkwNzZFODg0RTFBMTNDQURGMDA1RTkwRkMgLyogQVBJQ29udGV4dE1lbnVDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NkU4
ODREMUExM0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5oICovOyB9OwpAQCAt
MTgzNCw2ICsxODM1LDggQEAKIAkJMDBCOTY2MTgxOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZENsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0Y5QzFDMTdCQkVBMDAzRjA3MzUgLyogVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0Y5RDFDMTdCQkVBMDAzRjA3MzUgLyogVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMDcyOTdGOUMxQzE3MTFFQTAwM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcyOTdGOUQxQzE3
QkJFQTIyM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RkEwMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRp
YVBlcm1pc3Npb25DaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3Mjk3RkExMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJNZWRpYVBlcm1p
c3Npb25DaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzRFNzVGQjFERjFG
RDEzMDBEMzE4RUMgLyogVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTcxODUsNiArNzE4OCw4IEBACiAJCQkJNDZBMkI2MDcxRTU2NzVB
MjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovLAog
CQkJCUUxNTEzQzY0MTY2RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAgKi8s
CiAJCQkJRTE1MTNDNjUxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmggKi8s
CisJCQkJMDcyOTdGOUMxQzE3MTFFQTAwM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
LmNwcCAqLywKKwkJCQkwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuaCAqLywKIAkJCQlCQzI2NTIxMjExODI2MDgxMDAyNDNFMTIgLyogRHJhd2luZ0Fy
ZWFQcm94eS5jcHAgKi8sCiAJCQkJQkMyNjUyMTMxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdB
cmVhUHJveHkuaCAqLywKIAkJCQkxQTY0MjJGQzEyREQwOEZFMDBDQUFFMkMgLyogRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTg4NTcsNiArODg2Miw3IEBACiAJCQkJMUFDNzUz
ODAxODNCRTUwRjAwNzJDQjE1IC8qIERhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDMyREE2MTBGNDM3RDEwMDU4QzE1QSAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1N0RDRURBQjIxNEM2MDA5MDAxNkI4NDcgLyogRGV2aWNlSWRlbnRpdHlTUEkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTA3Mjk3RjlGMUMxN0JCRUEwMTVGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM4OTFCNkMxQTY4QzMwQjAwMzBGMzg2IC8q
IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMTgxNzM2MTIw
NTg0MjQ3MDBERkRBNjUgLyogRGlzcGxheUxpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQy
NzAyMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDU5
NCw2ICsxMDYwMCw3IEBACiAJCQkJMkQ5MkE3N0QyMTJCNkE3MTAwRjQ5M0ZEIC8qIENvbm5lY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3N0UyMTJCNkE3MTAwRjQ5M0ZEIC8qIERh
dGFSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3N0YyMTJCNkE3MTAwRjQ5
M0ZEIC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcyOTdGOUUxQzE3QkJFQTAx
NEYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQjdENjE5MTI4OEI5RDkwMENGRDA4QyAvKiBEb3dubG9hZFByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjQyMjk5MTJERDAyOTIwMENBQUUyQyAvKiBEcmF3
aW5nQXJlYU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjMwODEy
REQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAzM2YxZjEyMTE3NTdkYjI1MjgzNmRmOWFkNjY1OGJhYTVmNzc3OGU5Li4wNTY5MDUz
YjAyY2RhM2RmM2FkMzQxNzQ1NmVjMjI2YmM0MWU0MTZmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTgtMTAtMDkg
IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11b
V1BFXSBBZGQgbWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMgc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1NzYxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSB0ZXN0
IGZvciB0aGUgbWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXM6CisgICAgICAgIHVzZXJtZWRp
YS1lbnVtZXJhdGVkZXZpY2VzLXBlcm1pc3Npb24tY2hlY2suIEFuZCBhIG5ldyBBUEkgdGVzdAor
ICAgICAgICBmb3IgdGhlIFdlYnNpdGVEYXRhU3RvcmU6IHRlc3RXZWJzaXRlRGF0YURldmljZUlk
SGFzaFNhbHQuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvbWFpbi5jOgorICAgICAgICAo
Z290V2Vic2l0ZURhdGFDYWxsYmFjayk6IEFkZGVkIGEgbmV3IHNlY3Rpb24gdG8gdGhlIGFib3V0
OmRhdGEKKyAgICAgICAgd2VicGFnZSB0byBpbmNsdWRlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgaGFzaCBzYWx0LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0VUlDbGllbnQuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdVc2VyTWVkaWFFbnVtZXJhdGVE
ZXZpY2VzUGVybWlzc2lvbkNoZWNrKTogQWRkZWQgdGhlCisgICAgICAgIG5ldyB0ZXN0IGNoZWNr
aW5nIHRoZSBlbnVtZXJhdGVEZXZpY2VzIEFQSSB3aGVuIHBlcm1pc3Npb24gaXMKKyAgICAgICAg
ZGVuaWVkIGFuZCB3aGVuIHBlcm1pc3Npb24gaXMgYWxsb3dlZCBmb3IgdGhlIG9yaWdpbi4KKyAg
ICAgICAgKGJlZm9yZUFsbCk6IERlZmluZWQgdGhlIG5ldyB0ZXN0LgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3BwOgorICAgICAgICAo
c2VydmVyQ2FsbGJhY2spOiBSZWdpc3RlciBhIG5ldyBVUkkgZm9yIHRoZSBlbnVtZXJhdGVEZXZp
Y2VzLgorICAgICAgICAodGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbik6IFJlbW92ZSB0aGUg
aGFzaCBzYWx0cyBmcm9tIHRoZQorICAgICAgICBkaXJlY3Rvcmllcy4KKyAgICAgICAgKHRlc3RX
ZWJzaXRlRGF0YURldmljZUlkSGFzaFNhbHQpOiBOZXcgdGVzdCBjaGVraW5nIHRoZQorICAgICAg
ICBlbnVtZXJhdGVEZXZpY2VzIEFQSS4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZGVkIHRoZSBu
ZXcgdGVzdCB0ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhhc2hTYWx0IHRvCisgICAgICAgIHRoZSBp
bml0IHN0cnVjdHVyZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9X
ZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6aW5pdGlhbGl6ZVdlYlZpZXcp
OiBNYWtlIHN1cmUgdGhlIG1lZGlhLXN0cmVhbSBpcworICAgICAgICBhY3RpdmF0ZWQgaW4gdGhl
IHdlYlZpZXcuCisKIDIwMTgtMTAtMDggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBUEkgdGVzdCBEcmFnQW5kRHJvcFRlc3RzLkRyb3BD
b2xvciBpcyBmYWlsaW5nIG9uIG1hY09TIDEwLjEyCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwppbmRleCA1ODcw
MWZjODQyY2U1OTVkMjY4NDc2MmE0YTEzZWIxODY0ODlhNDkwLi41MTMzYTRkZDYxYjkyY2Q1MzFk
ZTkzNDk4MDkzMzExNDcwODNlYjE0IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsv
bWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKQEAgLTQwMiw2ICs0MDIs
NyBAQCBzdGF0aWMgdm9pZCBnb3RXZWJzaXRlRGF0YUNhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdQogCiAgICAgZ3VpbnQ2NCBwYWdlSUQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2Vi
X3ZpZXcoZGF0YVJlcXVlc3QtPnJlcXVlc3QpKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUocmVz
dWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJDb29raWVzIiwgV0VCS0lUX1dFQlNJVEVfREFU
QV9DT09LSUVTLCBOVUxMLCBwYWdlSUQpOworICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQs
IGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkRldmljZSBJZCBIYXNoIFNhbHQiLCBXRUJLSVRfV0VC
U0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQsIE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXRE
YXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiTWVtb3J5IENhY2hl
IiwgV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUsIE5VTEwsIHBhZ2VJRCk7CiAgICAg
YWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiRGlzayBD
YWNoZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFfRElTS19DQUNIRSwgd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShtYW5hZ2VyKSwgcGFnZUlEKTsKICAg
ICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJTZXNz
aW9uIFN0b3JhZ2UiLCBXRUJLSVRfV0VCU0lURV9EQVRBX1NFU1NJT05fU1RPUkFHRSwgTlVMTCwg
cGFnZUlEKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0VUlDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RVSUNsaWVudC5jcHAKaW5kZXggNjYxMTM3NzNlM2I0MzgyMTU4ZjlkOWM0ZWNiNzJiYzk2
ODEzMDk1ZC4uZTViNmE4OWU4NDU1ZmMzYjUzYjgwMGYyYjAwODQ4ZGU3YjEyZjFlMyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVu
dC5jcHAKQEAgLTgzNCw2ICs4MzQsNDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHAKICNlbmRp
ZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdVc2VyTWVkaWFFbnVtZXJhdGVEZXZpY2VzUGVybWlzc2lvbkNo
ZWNrKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0
aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2Vi
Vmlldyk7CisgICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X21lZGlhX3N0cmVhbShzZXR0aW5ncyk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
bWVkaWFfc3RyZWFtKHNldHRpbmdzLCBUUlVFKTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICB0
ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyNlbmRpZgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB1c2VyTWVkaWFSZXF1ZXN0SFRNTCA9CisgICAgICAgICI8aHRtbD4iCisg
ICAgICAgICIgIDxzY3JpcHQ+IgorICAgICAgICAiICBmdW5jdGlvbiBydW5UZXN0KCkiCisgICAg
ICAgICIgIHsiCisgICAgICAgICIgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVE
ZXZpY2VzKCkudGhlbigiCisgICAgICAgICIgICAgICAgIGZ1bmN0aW9uKGRldmljZXMpIHsgIgor
ICAgICAgICAiICAgICAgICAgICAgZGV2aWNlcy5mb3JFYWNoKGZ1bmN0aW9uKGRldmljZSkgeyIK
KyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZS5sYWJl
bCkgZG9jdW1lbnQudGl0bGUgPSBcIk9LXCI7IgorICAgICAgICAiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBkb2N1bWVudC50aXRsZSA9IFwiUGVybWlz
c2lvbiBkZW5pZWRcIjsiCisgICAgICAgICIgICAgICAgICAgICB9KSIKKyAgICAgICAgIiAgICB9
KSIKKyAgICAgICAgIiAgfSIKKyAgICAgICAgIiAgPC9zY3JpcHQ+IgorICAgICAgICAiICA8Ym9k
eSBvbmxvYWQ9J3J1blRlc3QoKTsnPjwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IjsKKworICAg
IHRlc3QtPm1fdmVyaWZ5TWVkaWFUeXBlcyA9IFRSVUU7CisKKyAgICAvLyBUZXN0IGRlbnlpbmcg
YSBwZXJtaXNzaW9uIHJlcXVlc3QuCisgICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0
cyA9IGZhbHNlOworICAgIHRlc3QtPmxvYWRIdG1sKHVzZXJNZWRpYVJlcXVlc3RIVE1MLCBudWxs
cHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWRUbygiUGVybWlzc2lvbiBkZW5p
ZWQiKTsKKworICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCisgICAg
dGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRydWU7CisgICAgdGVzdC0+bG9hZEh0
bWwodXNlck1lZGlhUmVxdWVzdEhUTUwsIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbFRp
dGxlQ2hhbmdlZFRvKCJPSyIpOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfbWVk
aWFfc3RyZWFtKHNldHRpbmdzLCBlbmFibGVkKTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdHMoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQogewogICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKQEAgLTExNTYsNiArMTE5Nyw3IEBAIHZv
aWQgYmVmb3JlQWxsKCkKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJn
ZW9sb2NhdGlvbi1wZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0cyk7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAg
IFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInVzZXJtZWRpYS1lbnVtZXJhdGVk
ZXZpY2VzLXBlcm1pc3Npb24tY2hlY2siLCB0ZXN0V2ViVmlld1VzZXJNZWRpYUVudW1lcmF0ZURl
dmljZXNQZXJtaXNzaW9uQ2hlY2spOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgInVzZXJtZWRpYS1wZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdHMpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImF1ZGlvLXVzZXJtZWRpYS1wZXJtaXNzaW9uLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0F1
ZGlvT25seVVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJzaXRlRGF0YS5j
cHAKaW5kZXggOTdlMTg5YjZmODIzOWZiZjc1Yjc5ZGQwMjY1YWI3MzE4YTgzYzg5Ni4uZDZhMzJi
NzQ2NGM3ODE2NTE5OGUxOGNiMmRjYjZhOWNiMTJmYTg0MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJzaXRlRGF0YS5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJzaXRlRGF0YS5jcHAKQEAg
LTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAKIHN0YXRpYyBXZWJL
aXRUZXN0U2VydmVyKiBrU2VydmVyOwogCkBAIC02MSw2ICs2MiwxMSBAQCBzdGF0aWMgdm9pZCBz
ZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBj
b25zdCBjaGFyKgogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBsb2NhbFN0b3JhZ2VIVE1MLCBzdHJsZW4o
bG9jYWxTdG9yYWdlSFRNTCkpOwogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9lbnVtZXJhdGVkZXZpY2VzIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogZW51bWVyYXRl
RGV2aWNlc0hUTUwgPSAiPGh0bWw+PGJvZHkgb25sb2FkPVwibmF2aWdhdG9yLm1lZGlhRGV2aWNl
cy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbihkZXZpY2VzKSB7IGRvY3VtZW50LnRp
dGxlID0gJ0ZpbmlzaGVkJzsgfSlcIj48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIGVudW1lcmF0ZURldmljZXNIVE1MLCBzdHJsZW4oZW51bWVyYXRlRGV2aWNlc0hUTUwpKTsK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X09LKTsKICAgICB9IGVsc2UKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKIH0KQEAgLTE2Myw3ICsxNjksNyBAQCBzdGF0aWMg
dm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRhVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKIAogICAgIC8vIENsZWFyIGFsbCBwZXJzaXN0ZW50IGNhY2hlcywgc2lu
Y2UgdGhlIGRhdGEgZGlyIGlzIGNvbW1vbiB0byBhbGwgdGVzdCBjYXNlcy4KICAgICBzdGF0aWMg
Y29uc3QgV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyBwZXJzaXN0ZW50Q2FjaGVzID0gc3RhdGljX2Nh
c3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hF
IHwgV0VCS0lUX1dFQlNJVEVfREFUQV9MT0NBTF9TVE9SQUdFCi0gICAgICAgIHwgV0VCS0lUX1dF
QlNJVEVfREFUQV9XRUJTUUxfREFUQUJBU0VTIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVE
REJfREFUQUJBU0VTIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NB
Q0hFKTsKKyAgICAgICAgfCBXRUJLSVRfV0VCU0lURV9EQVRBX1dFQlNRTF9EQVRBQkFTRVMgfCBX
RUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMgfCBXRUJLSVRfV0VCU0lURV9E
QVRBX09GRkxJTkVfQVBQTElDQVRJT05fQ0FDSEUgfCBXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklD
RV9JRF9IQVNIX1NBTFQpOwogICAgIHRlc3QtPmNsZWFyKHBlcnNpc3RlbnRDYWNoZXMsIDApOwog
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5mZXRjaChwZXJzaXN0ZW50Q2FjaGVzKSk7CiAKQEAgLTUxNyw2
ICs1MjMsNTMgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29va2llcyhXZWJzaXRlRGF0
YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKIH0K
IAorc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdChXZWJzaXRlRGF0
YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+Y2xlYXIoV0VCS0lUX1dF
QlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxULCAwKTsKKworICAgIEdMaXN0KiBkYXRhTGlz
dCA9IHRlc3QtPmZldGNoKFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCk7
CisgICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2VudW1lcmF0ZWRldmljZXMiKS5kYXRhKCkpOworICAgIHRlc3QtPndh
aXRVbnRpbFRpdGxlQ2hhbmdlZFRvKCJGaW5pc2hlZCIpOworCisgICAgZGF0YUxpc3QgPSB0ZXN0
LT5mZXRjaChXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpOworICAgIGdf
YXNzZXJ0KGRhdGFMaXN0KTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChk
YXRhTGlzdCksID09LCAxKTsKKyAgICBXZWJLaXRXZWJzaXRlRGF0YSogZGF0YSA9IHN0YXRpY19j
YXN0PFdlYktpdFdlYnNpdGVEYXRhKj4oZGF0YUxpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0KGRh
dGEpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX25ld19mb3JfdXJpKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9uYW1lKGRhdGEpLCA9
PSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pKTsKKyAgICB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3VucmVmKG9yaWdpbik7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfd2Vic2l0ZV9kYXRhX2dldF90eXBlcyhkYXRhKSwgPT0sIFdFQktJVF9XRUJTSVRFX0RBVEFf
REVWSUNFX0lEX0hBU0hfU0FMVCk7CisKKyAgICBHTGlzdCByZW1vdmVMaXN0ID0geyBkYXRhLCBu
dWxscHRyLCBudWxscHRyIH07CisgICAgdGVzdC0+cmVtb3ZlKFdFQktJVF9XRUJTSVRFX0RBVEFf
REVWSUNFX0lEX0hBU0hfU0FMVCwgJnJlbW92ZUxpc3QpOworICAgIGRhdGFMaXN0ID0gdGVzdC0+
ZmV0Y2goV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKyAgICBnX2Fz
c2VydCghZGF0YUxpc3QpOworCisgICAgLy8gVGVzdCByZW1vdmluZyB0aGUgY29va2llcy4KKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbnVtZXJhdGVkZXZpY2Vz
IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWRUbygiRmluaXNoZWQi
KTsKKworICAgIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJ
Q0VfSURfSEFTSF9TQUxUKTsKKyAgICBnX2Fzc2VydChkYXRhTGlzdCk7CisgICAgZGF0YSA9IHN0
YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhKj4oZGF0YUxpc3QtPmRhdGEpOworICAgIGdfYXNz
ZXJ0KGRhdGEpOworCisgICAgR0xpc3QgcmVtb3ZlQ29va2llTGlzdCA9IHsgZGF0YSwgbnVsbHB0
ciwgbnVsbHB0ciB9OworICAgIHRlc3QtPnJlbW92ZShXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJ
RVMsICZyZW1vdmVDb29raWVMaXN0KTsKKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdFQktJ
VF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCk7CisgICAgZ19hc3NlcnQoIWRhdGFM
aXN0KTsKKworICAgIC8vIENsZWFyIGFsbC4KKyAgICBzdGF0aWMgY29uc3QgV2ViS2l0V2Vic2l0
ZURhdGFUeXBlcyBjYWNoZUFuZEFwcGNhY2hlVHlwZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJz
aXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpOwor
ICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kQXBwY2FjaGVUeXBlcywgMCk7CisgICAgZGF0YUxpc3Qg
PSB0ZXN0LT5mZXRjaChjYWNoZUFuZEFwcGNhY2hlVHlwZXMpOworICAgIGdfYXNzZXJ0KCFkYXRh
TGlzdCk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAgICBrU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoKTsKQEAgLTUyOSw2ICs1ODIsNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAg
V2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImRhdGFiYXNlcyIsIHRl
c3RXZWJzaXRlRGF0YURhdGFiYXNlcyk7CiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktp
dFdlYnNpdGVEYXRhIiwgImFwcGNhY2hlIiwgdGVzdFdlYnNpdGVEYXRhQXBwY2FjaGUpOwogICAg
IFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJjb29raWVzIiwgdGVz
dFdlYnNpdGVEYXRhQ29va2llcyk7CisgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdl
YnNpdGVEYXRhIiwgImRldmljZWlkaGFzaHNhbHQiLCB0ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhh
c2hTYWx0KTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5jcHAKaW5kZXggM2MwOTVjMzdiNDJmMzdk
NGU1NjY2OGRjZmQ0NTI4MTMxMjRkMzM0Mi4uN2UzNTQwYjc4MWMyOWFkYmJhMzU3YmRmYmFiOGU2
NzQ2ZGNhYWY3YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdM
aWIvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRH
TGliL1dlYlZpZXdUZXN0LmNwcApAQCAtNDgsMTAgKzQ4LDE1IEBAIFdlYlZpZXdUZXN0Ojp+V2Vi
Vmlld1Rlc3QoKQogdm9pZCBXZWJWaWV3VGVzdDo6aW5pdGlhbGl6ZVdlYlZpZXcoKQogewogICAg
IGdfYXNzZXJ0KCFtX3dlYlZpZXcpOworCisgICAgV2ViS2l0U2V0dGluZ3MqIHdlYmtpdFNldHRp
bmdzID0gd2Via2l0X3NldHRpbmdzX25ldygpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX21lZGlhX3N0cmVhbSh3ZWJraXRTZXR0aW5ncywgVFJVRSk7CisKICAgICBtX3dlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAogI2lm
IFBMQVRGT1JNKFdQRSkKICAgICAgICAgImJhY2tlbmQiLCBUZXN0OjpjcmVhdGVXZWJWaWV3QmFj
a2VuZCgpLAogI2VuZGlmCisgICAgICAgICJzZXR0aW5ncyIsIHdlYmtpdFNldHRpbmdzLAogICAg
ICAgICAid2ViLWNvbnRleHQiLCBtX3dlYkNvbnRleHQuZ2V0KCksCiAgICAgICAgICJ1c2VyLWNv
bnRlbnQtbWFuYWdlciIsIG1fdXNlckNvbnRlbnRNYW5hZ2VyLmdldCgpLAogICAgICAgICBudWxs
cHRyKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYjZhMDYxMjUzYTZhZTQwZjIzYzJjYjQyNTY4NmM3OTY1MzgzZGZkZS4u
OWI3YzQwMDgzM2JiMWQ0NzIwMjZkNDI5NmFlZWJkY2IwZmFkMzZkOCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIyIEBACisyMDE4LTEwLTA5ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2Vz
IHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NTc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSB0aGUgZmFpbHVyZSBleHBlY3RhdGlvbiBmb3IgdGhlIHRlc3QKKyAgICAgICAgbWVk
aWEtZGV2aWNlcy1lbnVtZXJhdGUtZGV2aWNlcy5odG1sLiBKdXN0IGZvciB0aGUgcmVjb3JkIHdl
IGhhdmUKKyAgICAgICAgYWxzbyBjaGVja2VkIHRoZSBmb2xsb3dpbmcgdGVzdHMuCisKKyAgICAg
ICAgZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwK
KyAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9yZXNvdXJjZXMvZW51bWVyYXRlLWRldmljZXMtZnJh
bWUuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9lbnVtZXJhdGUt
ZGV2aWNlcy1zb3VyY2UtaWQuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0
cmVhbS9lbnVtZXJhdGUtZGV2aWNlcy1zb3VyY2UtaWQtcGVyc2lzdGVudC5odG1sCisgICAgICAg
IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL3Jlc291cmNlcy9lbnVtZXJhdGUtZGV2aWNl
cy1zb3VyY2UtaWQtZnJhbWUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnM6CisKIDIwMTgtMTAtMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBpbnNwZWN0b3IvY2FudmFzL3JlY29yZGluZy5odG1sIGFmdGVyIHIy
MzY5NTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNDI2
YTFmMzZlYTdiMTU2ZDk2ODc2ZmM2OTU5OTg2NjgzNWIwODA1OC4uYTNkYzMwNWFhYmM0MDU1ZTYx
NTY2YzNhNjUyYzM0NDY4MDA5N2U3OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTY0MCw3ICs2NDAsNiBAQCB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cgog
d2Via2l0Lm9yZy9iLzE1MTM0NCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1lbmRl
ZC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQogIyBDcmFzaCBpcyBidWcgIzE3NjgwMQogd2Via2l0
Lm9yZy9iLzE2MDk5NiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQt
dmlkZW8tdHJhY2tzLWRpc2FibGVkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIENyYXNoIF0KLXdl
YmtpdC5vcmcvYi8xNzIyNjkgZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0
ZS1kZXZpY2VzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNzMyNTcgZmFzdC9tZWRp
YXN0cmVhbS9nZXRVc2VyTWVkaWEtZ3JhbnQtcGVyc2lzdGVuY3kzLmh0bWwgWyBQYXNzIEZhaWx1
cmUgXQogCiAjIENhbnZhcyBjYXB0dXJlU3RyZWFtIHN1cHBvcnQgaXMgbm90IGltcGxlbWVudGVk
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352030</attachid>
            <date>2018-10-11 02:47:24 -0700</date>
            <delta_ts>2018-10-11 03:26:59 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-185761-20181011114722.patch</filename>
            <type>text/plain</type>
            <size>63112</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MDI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFmOGM3ZDJiMTdlOTcz
ODgzZTRhNDU3ZTZmODI0NTVkOWJmODZlOC4uNDRiYjVjMzcyNmUxNGEwNTQxMjUyMzljMDljYjA1
M2U0ZTY4MTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTEwLTExICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
QWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgV2UgYXJlIGFkb3B0aW5nIHRoZSBzYW1l
IHBvbGljeSBDT0NPQSBpcyB1c2luZyB3aGVuIHJldHVybmluZyB0aGUKKyAgICAgICAgbGlzdCBv
ZiBtZWRpYSBkZXZpY2VzIGlmIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgcGVyc2lzdGVudAorICAg
ICAgICBhY2Nlc3MuIE5hbWVseSwgd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IG1lZGlhIGRldmlj
ZSBmb3IgYXVkaW8KKyAgICAgICAgYW5kIHZpZGVvIGNhcHR1cmUuCisKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFEZXZpY2VzUmVxdWVzdDo6ZmlsdGVyRGV2aWNlTGlzdCk6IEFkZCBzdXBwb3J0IGZv
cgorICAgICAgICBvdGhlciBwbGF0Zm9ybXMgd2hlbiBmaWx0ZXJpbmcgZGV2aWNlcyBpZiB0aGVy
ZSBpcyBubyBwZXJzaXN0ZW50CisgICAgICAgIGFjY2VzcyB0byB0aGUgb3JpZ2luLgorCiAyMDE4
LTEwLTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1l
IGEgY291cGxlIG9mIERPTVdpbmRvd1Byb3BlcnR5IHZpcnR1YWwgZnVuY3Rpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDc3NjlmMDk1NmQzZWE4YTdjMjA0NmVmMmE2YzNiMDQzMDVkMjIwZTMuLmM0ZjM4MjJlMzk0
YTcwMzI5YTI3NjQ5YTNiZjhhOTNhZjBjZTdlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE5IEBA
CisyMDE4LTEwLTExICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdW1dQRV0gQWRkIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc2
MQorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgSW1wbGVt
ZW50ZWQgdGhlIGVudW1lcmF0ZURldmljZXMgQVBJIHVzaW5nIGEgbmV3IFdlYktpdCBjbGFzcwor
ICAgICAgICAoRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpIHRoYXQgZ2VuZXJhdGVzIGFuZCBzdG9y
ZXMgdGhlIGRldmljZSBpZHMKKyAgICAgICAgaGFzaCBzYWx0cyBwZXIgb3JpZ2luLCB1c2VkIHRv
IGF2b2lkIGZpbmdlcnByaW50aW5nIGluIHRoZQorICAgICAgICB3ZWJwYWdlcy4KKworICAgICAg
ICBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgbmV3IHR5cGUgb2YgZGF0YSBmb3IgdGhlIFdlYnNpdGVE
YXRhU3RvcmUuCisgICAgICAgIFRoYXQgd2F5IHRoZSB1c2VycyBjYW4gY2FsbCB0aGUgV2Vic2l0
ZURhdGFTdG9yZSB0byBzaG93IHdoYXQKKyAgICAgICAgb3JpZ2lucyBoYXZlIGhhc2ggc2FsdCBn
ZW5lcmF0ZWQgYW5kIHJlbW92ZSB0aGVtIGF0IHNvbWUgcG9pbnQuCisKKyAgICAgICAgRm9yIHRo
ZSBtb21lbnQganVzdCBHVEsrIGFuZCBXUEUgcG9ydHMgYXJlIHVzaW5nIHRoaXMgY2xhc3MgdG8K
KyAgICAgICAgZ2VuZXJhdGUgdGhlIGhhc2ggc2FsdHMuIFRoZSBwYXRjaCBhZGRzIGNvZGUgdG8g
dGhlCisgICAgICAgIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbiBBUEkgaW1wbGVt
ZW50YXRpb24sIGl0IHdhcyBlbXB0eQorICAgICAgICB1bnRpbCBub3cgZm9yIHRoZXNlIHBvcnRz
LiBJbiB0aGlzIGZ1bmN0aW9uIHdlIGNyZWF0ZSBhbiBpbnN0YW5jZQorICAgICAgICBvZiBhIG5l
dyBjbGFzcyBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgdGhhdCBpbXBsZW1lbnRz
CisgICAgICAgIHRoZSBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElmYWNlIGludGVyZmFjZSwgdGhh
dCBhbGxvd3MgdGhlIHBvcnRzCisgICAgICAgIHRvIHVzZSB0aGUgY3VycmVudCBwZXJtaXNzaW9u
IG1hbmFnZXJzIGltcGxlbWVudGVkIGluIHRoZQorICAgICAgICBlbWJlZGRlcnMgdG8gaGFuZGxl
IHRoaXMgbmV3IGtpbmQgb2YgcmVxdWVzdCB0aGUgd2F5IHRoZXkgbGlrZQorICAgICAgICBpdC4g
VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZGVueS4KKworICAgICAgICBUaGUgY2xhc3Mg
V2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHRha2VzIGNhcmUgb2YKKyAgICAgICAg
Y29udGFjdGluZyB0aGUgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgYW5kIHJlcXVlc3QvcmVnZW5l
cmF0ZSB0aGUKKyAgICAgICAgaGFzaCBzYWx0cyBhY2NvcmRpbmdseS4KKworICAgICAgICBQZXJz
aXN0ZW5jeSBpcyBzdGlsbCBub3QgaW1wbGVtZW50ZWQsIHdlIHdpbGwgYWRkIGl0IGluIGEKKyAg
ICAgICAgZnV0dXJlIHBhdGNoLgorCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhVHlwZS5oOiBBZGRlZCB0aGUgbmV3IHR5cGUgb2YKKyAgICAgICAgd2Vic2lkZSBkYXRh
OiBEZXZpY2VJZEhhc2hTYWx0LgorICAgICAgICAqIFNvdXJjZXMudHh0OiBBZGRlZCBuZXcgZmls
ZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogU291cmNlc0dUSy50eHQ6IERpdHRvLgorICAg
ICAgICAqIFNvdXJjZXNXUEUudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmNwcDogQWRkZWQKKyAgICAgICAg
dGhpcyBjbGFzcyB0byByZXByZXNlbnQgYSByZXF1ZXN0IG9mIHBlcm1pc3Npb24gdG8gYWNjZXNz
IHRoZQorICAgICAgICBkZXZpY2VzIGluZm9ybWF0aW9uLiBUaGlzIGlzIHNwZWNpZmljIGZvciBn
bGliIHBvcnRzIGFuZCBpbXBsZW1lbnRzCisgICAgICAgIHRoZSBwb2xpY2llcyByZWdhcmRpbmcg
dGhlIGhhc2ggc2FsdHMgd2hlbiB0aGUgZW1iZWRkZXIgYWxsb3dzIG9yCisgICAgICAgIGRlbmll
cyB0aGUgYWNjZXNzIHVzaW5nIHRoZSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSBjbGFzcy4KKyAg
ICAgICAgKHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdEFsbG93KTogR2V0IHRoZSBk
ZXZpY2UgaGFzaCBzYWx0CisgICAgICAgIHdoZW4gdGhlIG9yaWdpbiBpcyBhbGxvd2VkIGFuZCBz
ZXQgaXQgaW4gdGhlIG9yaWdpbmFsIHJlcXVlc3QuCisgICAgICAgICh3ZWJraXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3REZW55KTogUmVnZW5lcmF0ZSB0aGUgZGV2aWNlIGlkCisgICAgICAg
IGhhc2ggc2FsdCB3aGVuIHRoZSB1c2VyIGRvZXMgbm90IGFsbG93IHRvIGFjY2VzcyB0aGUgZGV2
aWNlIGluZm9ybWF0aW9uLgorICAgICAgICAod2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9pbnRl
cmZhY2VfaW5pdCk6CisgICAgICAgICh3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RE
aXNwb3NlKToKKyAgICAgICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3Rf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RD
cmVhdGUpOiBDcmVhdGUgdGhlIGNsYXNzIHVzaW5nCisgICAgICAgIHRoZSBwcm94eSByZXF1ZXN0
IGZyb20gdGhlIHdlYnByb2Nlc3MgYW5kIGEgcmVmZXJlbmNlIHRvIHRoZQorICAgICAgICBEZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oOgorICAgICAgICBEaXR0by4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwOiBBZGRlZCB0aGUg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgZm9yIHRoZSBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25G
b3JPcmlnaW4gQVBJIGZvciB0aGUgZ2xpYiBwb3J0cywKKyAgICAgICAgaXQgY3JlYXRlcyB0aGUg
ZGV2aWNlIGluZm8gcmVxdWVzdCBhbmQgY2FsbHMgdGhlIHBlcm1pc3Npb24KKyAgICAgICAgcmVx
dWVzdCBBUEkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRh
LmNwcDoKKyAgICAgICAgKHJlY29yZENvbnRhaW5zU3VwcG9ydGVkRGF0YVR5cGVzKTogQWRkZWQg
dGhlIERldmljZUlkSGFzaFNhbHQKKyAgICAgICAgdHlwZS4KKyAgICAgICAgKHRvV2ViS2l0V2Vi
c2l0ZURhdGFUeXBlcyk6IEFkZGVkIHRoZSBjb252ZXJzaW9uIGZyb20gdGhlIFdlYktpdAorICAg
ICAgICB0eXBlcyB0byB0aGUgZ2xpYiB0eXBlcyBmb3IgdGhlIFdlYnNpdGVEYXRhVHlwZTo6RGV2
aWNlSWRIYXNoU2FsdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHRvV2Vic2l0ZURhdGFUeXBlcyk6IEFkZGVkIHRo
ZSBjb252ZXJzaW9uIGZyb20gdGhlIGdsaWIgdHlwZQorICAgICAgICBXRUJLSVRfV0VCU0lURV9E
QVRBX0RFVklDRV9JRF9IQVNIX1NBTFQgdG8gdGhlIFdlYktpdCB0eXBlLgorICAgICAgICAod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3JlbW92ZSk6IE1ha2Ugc3VyZSB3ZSByZW1vdGUgdGhl
CisgICAgICAgIERldmljZUlkSGFzaFNhbHQgaWYgdGhlIENvb2tpZXMgYXJlIHNlbGVjdGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdC5oOiBBZGRlZAorICAgICAgICB0aGlzIG5ldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBw
ZXJtaXNzaW9uIHJlcXVlc3QgZm9yIHRoZSBkZXZpY2UKKyAgICAgICAgaW5mb3JtYXRpb24gaW4g
dGhlIEdUSysgcG9ydC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRl
RGF0YS5oOiBBZGRlZCB0aGUgbmV3IHR5cGUgb2YKKyAgICAgICAgd2Vic2l0ZSB0aGF0IGluIHRo
ZSBHVEsrIHBvcnQ6CisgICAgICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hf
U0FMVC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXREZXZpY2VJbmZvUGVybWlz
c2lvblJlcXVlc3QuaDogQWRkZWQKKyAgICAgICAgdGhpcyBuZXcgY2xhc3MgdGhhdCByZXByZXNl
bnRzIGEgcGVybWlzc2lvbiByZXF1ZXN0IGZvciB0aGUgZGV2aWNlCisgICAgICAgIGluZm9ybWF0
aW9uIGluIHRoZSBXUEUgcG9ydC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRX
ZWJzaXRlRGF0YS5oOiBBZGRlZCB0aGUgbmV3IHR5cGUgb2YKKyAgICAgICAgd2Vic2l0ZSB0aGF0
IGluIHRoZSBXUEUgcG9ydDoKKyAgICAgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURf
SEFTSF9TQUxULgorICAgICAgICAqIFVJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5j
cHA6IEFkZGVkIHRoaXMgbmV3IGNsYXNzIHRoYXQKKyAgICAgICAgaGFuZGxlcyBob3cgdG8gZ2Vu
ZXJhdGUgYW5kIHN0b3JlIHRoZSBoYXNoIHNhbHRzIGluc2lkZQorICAgICAgICBXZWJLaXQuIFBl
cnNpc3RlbmN5IGlzIHN0aWxsIG5vdCBpbXBsZW1lbnRlZCwgd2Ugd2lsbCBhZGQgaXQgaW4gYQor
ICAgICAgICBmdXR1cmUgcGF0Y2guCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZTo6ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0Rm9yT3JpZ2luKToKKyAgICAgICAgQ2hlY2sgdGhl
IG1hcCB0byBnZXQgdGhlIGhhc2ggc2FsdCBmb3IgYW4gb3JpZ2luLCBpZiB0aGVyZSBpcyBub25l
CisgICAgICAgIGNyZWF0ZSBhIG5ldyByYW5kb20gb25lLgorICAgICAgICAoV2ViS2l0OjpEZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZTo6cmVnZW5lcmF0ZURldmljZUlkZW50aWZpZXJIYXNoU2FsdEZv
ck9yaWdpbik6CisgICAgICAgIERlbGV0ZSB0aGUgaGFzaCBzYWx0IG9mIGFuIG9yaWdpbiBpZiBp
dCBhbHJlYWR5IGV4aXN0cyBhbmQgY3JlYXRlIGEgbmV3IG9uZS4KKyAgICAgICAgKFdlYktpdDo6
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmdldERldmljZUlkSGFzaFNhbHRPcmlnaW5zKToKKyAg
ICAgICAgUmV0dXJucyB0aGUgbGlzdCBvZiBvcmlnaW5zIHRoYXQgaGF2ZSBhIGhhc2ggc2FsdCBn
ZW5lcmF0ZWQgZm9yCisgICAgICAgIHRoZW0uIEl0IGlzIHVzZWQgaW4gdGhlIFdlYnNpdGVEYXRh
U3RvcmUuCisgICAgICAgIChXZWJLaXQ6OkRldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVE
ZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyk6CisgICAgICAgIERlbGV0ZXMgdGhlIGhhc2ggc2Fs
dHMgaW4gdGhlIG1hcCBmb3IgYW4gb3JpZ2luLgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2RpZmllZFNpbmNl
KToKKyAgICAgICAgRGVsZXRlIHRoZSBvcmlnaW5zIHRoYXQgaGF2ZSBub3QgYmVlbiBtb2RpZmll
ZCBzaW5jZSBhIHRpbWUuCisgICAgICAgICogVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9y
YWdlLmg6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hl
Y2tQcm94eS5oOiBSZW1vdmUgdW5lZWRlZCBjbGFzcworICAgICAgICBkZWZpbml0aW9uLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDogQWRkZWQg
c3VwcG9ydCB0bworICAgICAgICByZXR1cm4gYW5kIHJlbW92ZSB0aGUgb3JpZ2lucyB3aXRoIGEg
Z2VuZXJhdGUgaGFzaCBzYWx0IHVzZWQgdG8KKyAgICAgICAgZ2VuZXJhdGUgdGhlIGRldmljZSBp
ZHMuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUp
OiBBZGRlZCB0aGUgbmV3CisgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UgY2xhc3MsIHVzZWQgdG8gaGFuZGxlIHRoZQorICAgICAgICBoYXNoIHNhbHRzLgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6IEdl
dCB0aGUgbGlzdCBvZgorICAgICAgICBvcmlnaW5zIHdpdGggYSBoYXNoIHNhbHRzIGluIHRoZSBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YSk6IFJlbW92ZSB0aGUgaGFzaCBzYWx0cyBpbgorICAgICAgICBEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZSBmb3IgYW4gb3JpZ2luLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSk6CisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHRoZQorICAgICAgICBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZSB0byB0aGUgY29tcGlsYXRpb24uCisKIDIwMTgtMTAtMTAgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2FmYXJpIGNyYXNoZXMg
d2hlbiBhdHRlbXB0aW5nIHRvIHNoYXJlIGEgWW91VHViZSB2aWRlbyB3aGlsZSBpbiBmdWxsLXNj
cmVlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YURldmljZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKaW5kZXggYmU1MWFlMzRhNjllOWZkNjU1MDUwN2Y1Yjhh
MzJjMGQ2N2RhNjg0Yy4uZDcyNDU0MDc1MzhkNWMwZWYzODA1MWEyNzUzODE4M2Q3N2M2MzkwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZXNSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRGV2aWNlc1JlcXVlc3QuY3BwCkBAIC04MSwxNiArODEsMTIgQEAgdm9pZCBNZWRpYURldmlj
ZXNSZXF1ZXN0Ojpjb250ZXh0RGVzdHJveWVkKCkKIAogdm9pZCBNZWRpYURldmljZXNSZXF1ZXN0
OjpmaWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZvPj4mIGRldmljZXMp
CiB7Ci0jaWYgIVBMQVRGT1JNKENPQ09BKQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VzKTsKLSNl
bHNlCi0KICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2Ft
ZXJhQ291bnQgPSAyOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQorI2Vsc2UKICAgICBzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRDYW1lcmFDb3VudCA9IDE7CiAjZW5kaWYKKwogICAgIHN0YXRp
YyBjb25zdCBpbnQgZGVmYXVsdE1pY3JvcGhvbmVDb3VudCA9IDE7CiAKICAgICBpbnQgY2FtZXJh
Q291bnQgPSAwOwpAQCAtMTAzLDggKzk5LDYgQEAgdm9pZCBNZWRpYURldmljZXNSZXF1ZXN0Ojpm
aWx0ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWY8TWVkaWFEZXZpY2VJbmZvPj4mIGRldmljZXMKIAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0KLSNlbmRpZgogfQogCiB2b2lkIE1lZGlh
RGV2aWNlc1JlcXVlc3Q6OnN0YXJ0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmgKaW5kZXggOWQ1MDM2MWU4MWEzN2JkOTQwMmRlOTFj
MWM1Mzk1ODRlYWFhNjJkZS4uNjAxYmI0NDM2N2JmMTViZWNlYjliYjFiNmRiM2JlNzc3NDY2OGE2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFUeXBlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFUeXBlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGUgewog
ICAgIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zID0gMSA8PCAxNCwKICNlbmRpZgogICAgIERP
TUNhY2hlID0gMSA8PCAxNSwKKyAgICBEZXZpY2VJZEhhc2hTYWx0ID0gMSA8PCAxNiwKIH07CiAK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dAppbmRleCAwMzljY2EzNGY1M2NhZDg5N2U3YjAxNmJhMDIyNDAxNGMyYzFk
M2JjLi5iNzFhZDQ5ODM0NWVkOWNhNDI4YjBhMzRjNGJhZTliODNiOTViMGQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKQEAgLTIyOCw2ICsyMjgsNyBAQCBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCiBVSVBy
b2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJUHJv
Y2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwCiBVSVByb2Nlc3MvUGFn
ZUxvYWRTdGF0ZS5jcHAKK1VJUHJvY2Vzcy9EZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAKIFVJ
UHJvY2Vzcy9Qcm9jZXNzQXNzZXJ0aW9uLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIu
Y3BwCiBVSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4
dAppbmRleCBlMTM4MTk0OWIwZmQwM2Y1NjgxZTNjOGUyYmExNDM5M2MyZTM2OWZjLi5mYzVmNTVm
YmI3ZjYyMjcxMWYxN2VjYzk2NDNiYTI1NTAzN2NhYmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAg
LTEzMyw2ICsxMzMsNyBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29udGV4dE1lbnVDbGll
bnQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENyZWRlbnRpYWwuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudC5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Bl
cm1pc3Npb25SZXF1ZXN0LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
b3dubG9hZC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWRD
bGllbnQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEVkaXRvclN0YXRl
LmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CmluZGV4IGM1OWY4ZWIxODQ4NThkMGU1MjQw
NzAyZTZhNWVhNWZmOTdmZmFjZjQuLjk2NTVhZTJjODViMTdjNzIyYWYwMTk1OWI2N2QxYTI5OGI5
ZmFjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMTIwLDYgKzEyMCw3IEBAIFVJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0Q3JlZGVudGlhbC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlm
eQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkLmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXREb3dubG9hZENsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0RWRpdG9yU3RhdGUuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERl
dmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y5NDg1ZWYyZDA5YjIw
OTdmY2IyZjc3YjQ3ZmY4N2Q1N2Y3MTYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5j
cHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC5oIgorCisjaW5jbHVk
ZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Cisg
KiBAU2hvcnRfZGVzY3JpcHRpb246IEEgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBhY2Nlc3Npbmcg
dXNlcidzIGF1ZGlvL3ZpZGVvIGRldmljZXMuCisgKiBAVGl0bGU6IFdlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdAorICogQFNlZV9hbHNvOiAjV2ViS2l0UGVybWlzc2lvblJlcXVlc3Qs
ICNXZWJLaXRXZWJWaWV3CisgKgorICogV2ViS2l0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3Qg
cmVwcmVzZW50cyBhIHJlcXVlc3QgZm9yCisgKiBwZXJtaXNzaW9uIHRvIHdoZXRoZXIgV2ViS2l0
IHNob3VsZCBiZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgdXNlcidzCisgKiBkZXZpY2VzIGluZm9y
bWF0aW9uIHdoZW4gcmVxdWVzdGVkIHRocm91Z2ggdGhlIGVudW1lcmFjZURldmljZXMgQVBJLgor
ICoKKyAqIFdoZW4gYSBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QgaXMgbm90IGhh
bmRsZWQgYnkgdGhlIHVzZXIsCisgKiBpdCBpcyBkZW5pZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBT
aW5jZTogMi4yMgorICovCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3Rf
aW50ZXJmYWNlX2luaXQoV2ViS2l0UGVybWlzc2lvblJlcXVlc3RJZmFjZSopOworCitzdHJ1Y3Qg
X1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eT4gcmVxdWVzdDsKKyAgICBSZWZQdHI8RGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2U+IGRldmljZUlkSGFzaFNhbHRTdG9yYWdlOworICAgIGJvb2wgbWFk
ZURlY2lzaW9uOworfTsKKworV0VCS0lUX0RFRklORV9UWVBFX1dJVEhfQ09ERSgKKyAgICBXZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QsIHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNz
aW9uX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QsCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdF
QktJVF9UWVBFX1BFUk1JU1NJT05fUkVRVUVTVCwgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9p
bnRlcmZhY2VfaW5pdCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9u
UmVxdWVzdEFsbG93KFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEFT
U0VSVChXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKTsK
KworICAgIGF1dG8mIHByaXYgPSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNU
KHJlcXVlc3QpLT5wcml2OworCisgICAgaWYgKCFwcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZSkgeworICAgICAgICBwcml2LT5yZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKFN0cmlu
ZygpLCBmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPbmx5IG9uZSBk
ZWNpc2lvbiBhdCBhIHRpbWUuCisgICAgaWYgKHByaXYtPm1hZGVEZWNpc2lvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgcHJpdi0+bWFkZURlY2lzaW9uID0gdHJ1ZTsKKyAgICBhdXRvIHNhbHQg
PSBwcml2LT5kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+ZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdp
bihwcml2LT5yZXF1ZXN0LT50b3BMZXZlbERvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSk7CisgICAg
cHJpdi0+cmVxdWVzdC0+c2V0VXNlck1lZGlhQWNjZXNzSW5mbyhXVEZNb3ZlKHNhbHQpLCB0cnVl
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0RGVu
eShXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoV0VCS0lU
X0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBhdXRv
JiBwcml2ID0gV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KS0+
cHJpdjsKKworICAgIGlmICghcHJpdi0+ZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UpIHsKKyAgICAg
ICAgcHJpdi0+cmVxdWVzdC0+c2V0VXNlck1lZGlhQWNjZXNzSW5mbyhTdHJpbmcoKSwgZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT25seSBvbmUgZGVjaXNpb24gYXQg
YSB0aW1lLgorICAgIGlmIChwcml2LT5tYWRlRGVjaXNpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHByaXYtPm1hZGVEZWNpc2lvbiA9IHRydWU7CisgICAgYXV0byBzYWx0ID0gcHJpdi0+ZGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPnJlZ2VuZXJhdGVEZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lu
KCpwcml2LT5yZXF1ZXN0KTsKKyAgICBwcml2LT5yZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nlc3NJ
bmZvKFdURk1vdmUoc2FsdCksIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3Blcm1p
c3Npb25fcmVxdWVzdF9pbnRlcmZhY2VfaW5pdChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdElmYWNl
KiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+YWxsb3cgPSB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RBbGxvdzsKKyAgICBpZmFjZS0+ZGVueSA9IHdlYmtpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdERlbnk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERldmljZUluZm9QZXJtaXNz
aW9uUmVxdWVzdERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIC8vIERlZmF1bHQgYmVo
YXZpb3VyIHdoZW4gbm8gZGVjaXNpb24gaGFzIGJlZW4gbWFkZSBpcyBkZW55aW5nIHRoZSByZXF1
ZXN0LgorICAgIHdlYmtpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdERlbnkoV0VCS0lUX1BF
Uk1JU1NJT05fUkVRVUVTVChvYmplY3QpKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZGV2
aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RldmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVz
dF9jbGFzc19pbml0KFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENsYXNzKiBrbGFz
cykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xh
c3MpOworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0RGlzcG9zZTsKK30KKworV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0
KiB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUoVXNlck1lZGlhUGVybWlz
c2lvbkNoZWNrUHJveHkmIHJlcXVlc3QsIERldmljZUlkSGFzaFNhbHRTdG9yYWdlKiBkZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZSkKK3sKKyAgICBhdXRvKiBkZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QgPSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIG51bGxwdHIpKTsKKwor
ICAgIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC0+cHJpdi0+cmVxdWVzdCA9ICZyZXF1ZXN0
OworICAgIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdC0+cHJpdi0+ZGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UgPSBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKKyAgICByZXR1cm4gZGV2aWNlSW5m
b1Blcm1pc3Npb25SZXF1ZXN0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Np
b25SZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNjBiMmUwY2NkNmJhODVjMDRiN2E4OWYw
YTZlODc4NzY1MTRmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgKQEAg
LTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFQ
SVNlY3VyaXR5T3JpZ2luLmgiCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVy
bWlzc2lvblJlcXVlc3QgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0OworCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworfTsKKworV2Vi
S2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0KiB3ZWJraXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RDcmVhdGUoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYsIFdl
YktpdDo6RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAppbmRleCAwMjc1NDMxMjdhZWUx
YjA4NmQwMzYxNTFkMTE4Y2ZjNzk2NjZhNDJlLi41OGJkN2JlNGJiYzVmMmZjZTNlY2VlMTNiNjUz
MGQzNTBlZDgxNWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRVSUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0VUlDbGllbnQuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJBUElV
SUNsaWVudC5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJXZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFj
dGlvblByaXZhdGUuaCIKQEAgLTMyLDYgKzMzLDcgQEAKICNpbmNsdWRlICJXZWJLaXRXaW5kb3dQ
cm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKICNpZiBQTEFURk9STShHVEspCkBAIC0xODksNiAr
MTkxLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIGJv
b2wgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdlYlBhZ2VQcm94eSYgcGFnZSwg
V2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3Jp
Z2luLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYgcGVybWlzc2lvblJlcXVlc3QpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBhdXRvIGRldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3
ZWJraXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDcmVhdGUocGVybWlzc2lvblJlcXVlc3Qs
IHBhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpLmRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkpKTsKKyAg
ICAgICAgd2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdChtX3dlYlZpZXcsIFdFQktJ
VF9QRVJNSVNTSU9OX1JFUVVFU1QoZGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0LmdldCgpKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9y
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgQVBJOjpTZWN1cml0
eU9yaWdpbiYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFs
CiAgICAgewogICAgICAgICBHUmVmUHRyPFdlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0PiBub3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXROb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdDo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKS5wdHIoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGEu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGEu
Y3BwCmluZGV4IGEyNGRhNGQ2ZTFjYzg4MjZlNGNlMjNkYTdhNzc1N2VlNWUzMDk0ZGYuLjdjOTdl
MGIxYjI0YTFiM2E2YWEyMTMzZjg5NGExZThhNzhlMDAzOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YS5jcHAKQEAgLTc2
LDcgKzc2LDggQEAgc3RhdGljIGJvb2wgcmVjb3JkQ29udGFpbnNTdXBwb3J0ZWREYXRhVHlwZXMo
Y29uc3QgV2Vic2l0ZURhdGFSZWNvcmQmIHJlY29yZCkKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKICAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhLAogI2VuZGlmCi0g
ICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcworICAgICAgICBXZWJzaXRlRGF0YVR5cGU6
OkNvb2tpZXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdAogICAg
IH0pOwogfQogCkBAIC0xMDMsNiArMTA0LDggQEAgc3RhdGljIFdlYktpdFdlYnNpdGVEYXRhVHlw
ZXMgdG9XZWJLaXRXZWJzaXRlRGF0YVR5cGVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGUKICNl
bmRpZgogICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMpKQog
ICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVM7CisgICAg
aWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkpCisg
ICAgICAgIHJldHVyblZhbHVlIHw9IFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hf
U0FMVDsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4ocmV0
dXJuVmFsdWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAppbmRleCA4NmJmNDdmZDFh
ZTBlYWQyOTFlYjUwOWFjMTdmYTYzYTYxMTRlMTZiLi40NDkxNTI0NmYyNDRmZTQzMTlkMzYzZjhk
ZWIyOWJmMzVjZjJjYjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKQEAgLTY0OSw2ICs2
NDksOCBAQCBzdGF0aWMgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5
cGVzKFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZQogI2VuZGlmCiAgICAgaWYgKHR5cGVzICYg
V0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKQogICAgICAgICByZXR1cm5WYWx1ZS5hZGQoV2Vi
c2l0ZURhdGFUeXBlOjpDb29raWVzKTsKKyAgICBpZiAodHlwZXMgJiBXRUJLSVRfV0VCU0lURV9E
QVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpCisgICAgICAgIHJldHVyblZhbHVlLmFkZChXZWJzaXRl
RGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0K
IApAQCAtNzMyLDcgKzczNCwxMiBAQCB2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9y
ZW1vdmUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogICAgIGZvciAo
R0xpc3QqIGl0ZW0gPSB3ZWJzaXRlRGF0YTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0p
KSB7CiAgICAgICAgIFdlYktpdFdlYnNpdGVEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0
V2Vic2l0ZURhdGEqPihpdGVtLT5kYXRhKTsKIAotICAgICAgICBpZiAod2Via2l0X3dlYnNpdGVf
ZGF0YV9nZXRfdHlwZXMoZGF0YSkgJiB0eXBlcykKKyAgICAgICAgLy8gV2UgaGF2ZSB0byByZW1v
dmUgdGhlIGhhc2ggc2FsdHMgd2hlbiBjb29raWVzIGFyZSByZW1vdmVkLgorICAgICAgICBhdXRv
IGRhdGFUeXBlcyA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGVzKGRhdGEpOworICAgICAg
ICBpZiAoZGF0YVR5cGVzICYgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxU
KQorICAgICAgICAgICAgZGF0YVR5cGVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFU
eXBlcz4oZGF0YVR5cGVzIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKTsKKworICAgICAg
ICBpZiAoZGF0YVR5cGVzICYgdHlwZXMpCiAgICAgICAgICAgICByZWNvcmRzLmFwcGVuZCh3ZWJr
aXRXZWJzaXRlRGF0YUdldFJlY29yZChkYXRhKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVx
dWVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZXZpY2VJbmZv
UGVybWlzc2lvblJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjhjNDJlY2I2MDg0ZWI1YTNjNTIzNjRk
ODQxZGRjNGUxNWRiODg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93
ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorI2RlZmluZSBXZWJLaXREZXZpY2VJ
bmZvUGVybWlzc2lvblJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCAgICAgICAgICAgICh3
ZWJraXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9f
UEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QpKQor
I2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RFVklD
RV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFV
RVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9J
U19ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lP
Tl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVT
VF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmljZUluZm9Q
ZXJtaXNzaW9uUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdCAgICAgICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdENs
YXNzICAgV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZSBXZWJLaXREZXZp
Y2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJp
dmF0ZSA+Ki8KKyAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlICpw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFz
cyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQp
OworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Vi
a2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rl
dmljZV9pbmZvX3Blcm1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZSAgICAodm9pZCk7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJzaXRlRGF0YS5oCmluZGV4IDA2NTA0N2ZlMTdjNTg1ZTI4MjYxMTlhY2RiNGIz
MDcwZTE0MzIzMjEuLjY3NDMwNWNjMDFmMGQ5NGFiMGNkZDI0N2E5MzI5MGVmM2I5YTU1NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVE
YXRhLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRh
IFdlYktpdFdlYnNpdGVEYXRhOwogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RB
VEFCQVNFUzogSW5kZXhlZERCIGRhdGFiYXNlcy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX1BM
VUdJTl9EQVRBOiBQbHVnaW5zIGRhdGEuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVT
OiBDb29raWVzLgorICogQFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVDog
SGFzaCBzYWx0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRldmljZSBpZHMgdXNlZCBieSB3ZWJwYWdl
cy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTDogQWxsIHR5cGVzLgogICoKICAqIEVudW0g
dmFsdWVzIHdpdGggZmxhZ3MgcmVwcmVzZW50aW5nIHR5cGVzIG9mIFdlYnNpdGUgZGF0YS4KQEAg
LTYwLDcgKzYxLDggQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0lO
REVYRUREQl9EQVRBQkFTRVMgICAgICAgPSAxIDw8IDYsCiAgICAgV0VCS0lUX1dFQlNJVEVfREFU
QV9QTFVHSU5fREFUQSAgICAgICAgICAgICAgID0gMSA8PCA3LAogICAgIFdFQktJVF9XRUJTSVRF
X0RBVEFfQ09PS0lFUyAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKLSAgICBXRUJLSVRfV0VC
U0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCA5KSAtIDEKKyAgICBX
RUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQgICAgICAgPSAxIDw8IDksCisg
ICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAgICAgID0gKDEgPDwg
MTApIC0gMQogfSBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzOwogCiBXRUJLSVRfQVBJIEdUeXBlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdERldmljZUlu
Zm9QZXJtaXNzaW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzdkMThkNjkx
ODAzYzcyOWRjNTBkOTA2ODI0Nzc4OTkyMThkMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVl
c3QuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBT
LkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJ
VF9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJP
bmx5IDx3cGUvd2Via2l0Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorI2RlZmluZSBXZWJL
aXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUICAgICAgICAg
ICAgKHdlYmtpdF9kZXZpY2VfaW5mb19wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ERVZJQ0Vf
SU5GT19QRVJNSVNTSU9OX1JFUVVFU1QsIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dCkpCisjZGVmaW5lIFdFQktJVF9ERVZJQ0VfSU5GT19QRVJNSVNTSU9OX1JFUVVFU1RfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
REVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNULCBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ERVZJQ0VfSU5GT19QRVJNSVNTSU9O
X1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX1RZUEVfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ERVZJQ0VfSU5GT19QRVJN
SVNTSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfREVWSUNFX0lORk9fUEVSTUlTU0lPTl9S
RVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX0RFVklDRV9JTkZPX1BFUk1JU1NJT05fUkVRVUVTVCwgV2ViS2l0RGV2aWNl
SW5mb1Blcm1pc3Npb25SZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0ICAgICAgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lv
blJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGV2aWNlSW5mb1Blcm1pc3Npb25SZXF1
ZXN0Q2xhc3MgICBXZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXREZXZpY2VJbmZvUGVybWlzc2lvblJlcXVlc3RQcml2YXRlIFdlYktp
dERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RGV2
aWNlSW5mb1Blcm1pc3Npb25SZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8q
PCBwcml2YXRlID4qLworICAgIFdlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVzdFByaXZh
dGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERldmljZUluZm9QZXJtaXNzaW9uUmVxdWVz
dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZGV2aWNlX2luZm9fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBlICAgICh2b2lkKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhLmgKaW5kZXggM2E0NjJhYWZmOWI4N2M2ZTBlNTdmOTYy
YzBlNDYzMDkyNTlkZGUwMy4uMDNkZDU4NWQxMjY1YTZlNGVlZGI5NDI2ODc1M2YzNjI0YzYyMGFk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJz
aXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vi
c2l0ZURhdGEuaApAQCAtNDQsNiArNDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vic2l0
ZURhdGEgV2ViS2l0V2Vic2l0ZURhdGE7CiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVE
REJfREFUQUJBU0VTOiBJbmRleGVkREIgZGF0YWJhc2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RB
VEFfUExVR0lOX0RBVEE6IFBsdWdpbnMgZGF0YS4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0NP
T0tJRVM6IENvb2tpZXMuCisgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9T
QUxUOiBIYXNoIHNhbHQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGV2aWNlIGlkcyB1c2VkIGJ5IHdl
YnBhZ2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMOiBBbGwgdHlwZXMuCiAgKgogICog
RW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXByZXNlbnRpbmcgdHlwZXMgb2YgV2Vic2l0ZSBkYXRh
LgpAQCAtNjAsNyArNjEsOCBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9XRUJTSVRFX0RB
VEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAgICA9IDEgPDwgNiwKICAgICBXRUJLSVRfV0VCU0lU
RV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAgICAgICAgPSAxIDw8IDcsCiAgICAgV0VCS0lUX1dF
QlNJVEVfREFUQV9DT09LSUVTICAgICAgICAgICAgICAgICAgID0gMSA8PCA4LAotICAgIFdFQktJ
VF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgxIDw8IDkpIC0gMQor
ICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCAgICAgICA9IDEgPDwg
OSwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAo
MSA8PCAxMCkgLSAxCiB9IFdlYktpdFdlYnNpdGVEYXRhVHlwZXM7CiAKIFdFQktJVF9BUEkgR1R5
cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRT
dG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9y
YWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMmMxMDBkNTRjZWFhOTFmYjliYjcwYzk3MmRhYTEyOTdjZDgx
MDZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworLy8gRklYTUU6IEltcGxlbWVudCBw
ZXJzaXN0ZW5jeS4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RhdGljIGNvbnN0IGludCBoYXNoU2FsdFNpemUgPSA0ODsKK3N0YXRpYyBjb25zdCBp
bnQgcmFuZG9tRGF0YVNpemUgPSBoYXNoU2FsdFNpemUgLyAxNjsKKworUmVmPERldmljZUlkSGFz
aFNhbHRTdG9yYWdlPiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Y3JlYXRlKCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpKTsKK30KKworY29u
c3QgU3RyaW5nJiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6cmVnZW5lcmF0ZURldmljZUlkSGFz
aFNhbHRGb3JPcmlnaW4oVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmIHJlcXVlc3QpCit7
CisgICAgYXV0byYgZG9jdW1lbnRPcmlnaW4gPSByZXF1ZXN0LnRvcExldmVsRG9jdW1lbnRTZWN1
cml0eU9yaWdpbigpOworCisgICAgYXV0byBkb2N1bWVudE9yaWdpbkRhdGEgPSBkb2N1bWVudE9y
aWdpbi5kYXRhKCk7CisgICAgbV9kZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucy5yZW1vdmVJZihb
JmRvY3VtZW50T3JpZ2luRGF0YV0oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJu
IGtleUFuZFZhbHVlLnZhbHVlLT5kb2N1bWVudE9yaWdpbiA9PSBkb2N1bWVudE9yaWdpbkRhdGE7
CisgICAgfSk7CisKKyAgICByZXR1cm4gZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbihkb2N1bWVu
dE9yaWdpbik7Cit9CisKK2NvbnN0IFN0cmluZyYgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U6OmRl
dmljZUlkSGFzaFNhbHRGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4mIGRvY3VtZW50T3JpZ2luKQor
eworICAgIGF1dG8mIGRldmljZUlkSGFzaFNhbHQgPSBtX2RldmljZUlkSGFzaFNhbHRGb3JPcmln
aW5zLmVuc3VyZShkb2N1bWVudE9yaWdpbi50b1Jhd1N0cmluZygpLCBbJmRvY3VtZW50T3JpZ2lu
XSAoKSB7CisgICAgICAgIHVpbnQ2NF90IHJhbmRvbURhdGFbcmFuZG9tRGF0YVNpemVdOworICAg
ICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihyYW5kb21EYXRhKSwgc2l6ZW9mKHJhbmRvbURhdGEpKTsKKworICAgICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGhh
c2hTYWx0U2l6ZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmFuZG9tRGF0YVNpemU7
IGkrKykKKyAgICAgICAgICAgIGFwcGVuZFVuc2lnbmVkNjRBc0hleChyYW5kb21EYXRhWzBdLCBi
dWlsZGVyKTsKKworICAgICAgICBTdHJpbmcgZGV2aWNlSWRIYXNoU2FsdCA9IGJ1aWxkZXIudG9T
dHJpbmcoKTsKKworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2FsdEZvck9y
aWdpbj4oZG9jdW1lbnRPcmlnaW4uZGF0YSgpLmlzb2xhdGVkQ29weSgpLCBXVEZNb3ZlKGRldmlj
ZUlkSGFzaFNhbHQpKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBkZXZpY2VJZEhh
c2hTYWx0LT5sYXN0VGltZVVzZWQgPSBXYWxsVGltZTo6bm93KCk7CisKKyAgICByZXR1cm4gZGV2
aWNlSWRIYXNoU2FsdC0+ZGV2aWNlSWRIYXNoU2FsdDsKK30KKwordm9pZCBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZTo6Z2V0RGV2aWNlSWRIYXNoU2FsdE9yaWdpbnMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CisKKyAgICBmb3Ig
KGF1dG8mIGhhc2hTYWx0Rm9yT3JpZ2luIDogbV9kZXZpY2VJZEhhc2hTYWx0Rm9yT3JpZ2lucykK
KyAgICAgICAgb3JpZ2lucy5hZGQoaGFzaFNhbHRGb3JPcmlnaW4udmFsdWUtPmRvY3VtZW50T3Jp
Z2luKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbb3JpZ2lucyA9IFdURk1vdmUo
b3JpZ2lucyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykp
OworICAgIH0pOworfQorCit2b2lkIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpkZWxldGVEZXZp
Y2VJZEhhc2hTYWx0Rm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYg
b3JpZ2lucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIG1fZGV2aWNlSWRIYXNoU2FsdEZvck9yaWdpbnMucmVtb3ZlSWYoWyZvcmlnaW5zXShh
dXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4gb3JpZ2lucy5jb250YWlucyhrZXlB
bmRWYWx1ZS52YWx1ZS0+ZG9jdW1lbnRPcmlnaW4pOworICAgIH0pOworCisgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6ZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdpbnNNb2Rp
ZmllZFNpbmNlKFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX2RldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zLnJlbW92
ZUlmKFt0aW1lXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4ga2V5QW5kVmFs
dWUudmFsdWUtPmxhc3RUaW1lVXNlZCA+IHRpbWU7CisgICAgfSk7CisKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4YWI4MzIwNmNjYzczOGQ3NzQwZjVlYzY1MmM1
YWFiZGZkOGIwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U+IGNyZWF0ZSgpOworICAgIH5EZXZp
Y2VJZEhhc2hTYWx0U3RvcmFnZSgpID0gZGVmYXVsdDsKKworICAgIGNvbnN0IFN0cmluZyYgZGV2
aWNlSWRIYXNoU2FsdEZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYpOworICAgIGNv
bnN0IFN0cmluZyYgcmVnZW5lcmF0ZURldmljZUlkSGFzaFNhbHRGb3JPcmlnaW4oVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrUHJveHkmKTsKKworICAgIHZvaWQgZ2V0RGV2aWNlSWRIYXNoU2FsdE9y
aWdpbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4mJik+JiYpOworICAgIHZvaWQgZGVsZXRlRGV2aWNlSWRIYXNoU2FsdEZvck9yaWdp
bnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgZGVsZXRlRGV2aWNlSWRIYXNoU2FsdE9yaWdp
bnNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
Citwcml2YXRlOgorICAgIHN0cnVjdCBIYXNoU2FsdEZvck9yaWdpbiB7CisgICAgICAgIEhhc2hT
YWx0Rm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2lu
LCBTdHJpbmcmJiBkZXZpY2VJZEhhc2hTYWx0KQorICAgICAgICAgICAgOiBkb2N1bWVudE9yaWdp
bihzZWN1cml0eU9yaWdpbikKKyAgICAgICAgICAgICwgZGV2aWNlSWRIYXNoU2FsdChXVEZNb3Zl
KGRldmljZUlkSGFzaFNhbHQpKQorICAgICAgICAgICAgLCBsYXN0VGltZVVzZWQoV2FsbFRpbWU6
Om5vdygpKQorICAgICAgICB7IH07CisKKyAgICAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhIGRvY3VtZW50T3JpZ2luOworICAgICAgICBTdHJpbmcgZGV2aWNlSWRIYXNoU2FsdDsKKyAg
ICAgICAgV2FsbFRpbWUgbGFzdFRpbWVVc2VkOworICAgIH07CisKKyAgICBEZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZSgpID0gZGVmYXVsdDsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1
ZV9wdHI8SGFzaFNhbHRGb3JPcmlnaW4+PiBtX2RldmljZUlkSGFzaFNhbHRGb3JPcmlnaW5zOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaAppbmRleCBmMzdiZTdhYjIx
ZjNmMTFmNTc1YjFjZmMxMjc3YmNhNTY2Y2NjMzAxLi5mYmNjNGNmZWUzYTViNGJkMGMwYTBhYzYy
MWRiMDhmMWZhNGMwZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2Vy
TWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmgKQEAgLTM2LDggKzM2LDYgQEAgY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTsKLQogY2xhc3MgVXNlck1lZGlhUGVybWlzc2lv
bkNoZWNrUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2s+IHsKIHB1YmxpYzoKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRl
eCBjMmU3ZTFiODY5M2E5Y2Q0MzBiMzBiMDA4NDkxMzFmNzUzY2E3MjE3Li5mNDA3NDZjOTQxZjg4
ZTEwY2QwNjJlYTc4M2RkZmRhZDdiZjExOTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhUmVjb3JkLmgiCiAjaW5jbHVkZSAiQVBJ
V2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCisj
aW5jbHVkZSAiRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCIKICNpbmNsdWRlICJNb2NrQXV0aGVu
dGljYXRvck1hbmFnZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKQEAgLTk1LDYgKzk2LDcgQEAgV2Vic2l0ZURhdGFT
dG9yZTo6V2Vic2l0ZURhdGFTdG9yZShDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIFBBTDo6
U2Vzc2lvbklEIHMKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fY29uZmln
dXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pKQogICAgICwgbV9zdG9yYWdlTWFuYWdlcihT
dG9yYWdlTWFuYWdlcjo6Y3JlYXRlKG1fY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkpKQorICAgICwgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZShEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBw
bGUuV2ViS2l0LldlYnNpdGVEYXRhU3RvcmUiKSkKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogICAg
ICwgbV9hdXRoZW50aWNhdG9yTWFuYWdlcihtYWtlVW5pcXVlUmVmPEF1dGhlbnRpY2F0b3JNYW5h
Z2VyPigpKQpAQCAtNDg1LDYgKzQ4NywxOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNo
RGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAg
ICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAobV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiBk
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgewor
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOworCisgICAg
ICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkSGFzaFNhbHRPcmlnaW5z
KFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7CisgICAgICAgICAgICBXZWJz
aXRlRGF0YSB3ZWJzaXRlRGF0YTsKKworICAgICAgICAgICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRl
RGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJ
ZEhhc2hTYWx0LCAwIH0pOworCisgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92
ZVBlbmRpbmdDYWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CisgICAgICAgIH0pOworICAg
IH0KKwogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKIApAQCAtODAwLDYgKzgxNSwxNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBpZiAo
bV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSAmJiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkgfHwgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkNvb2tpZXMpKSkpIHsKKyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQ
ZW5kaW5nQ2FsbGJhY2soKTsKKworICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5k
ZWxldGVEZXZpY2VJZEhhc2hTYWx0T3JpZ2luc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5y
ZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgaWYgKGRh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNh
Y2hlKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFBlbmRpbmdDYWxsYmFjaygpOwogCkBAIC0xMDc0LDYgKzEwOTcsMTQgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgY29uc3QgVmUKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgaWYgKG1fZGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UgJiYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmlj
ZUlkSGFzaFNhbHQpIHx8IChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDb29r
aWVzKSkpKSB7CisgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNr
KCk7CisKKyAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+ZGVsZXRlRGV2aWNlSWRI
YXNoU2FsdEZvck9yaWdpbnMob3JpZ2lucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAg
ICAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aAppbmRleCBhNDIyNjFmMDQxZjU5N2FhMmFhNGE5NDMzMWNkMzU4Y2E4MmI1ZmJhLi45MTYzZDk4
OTQ1MTE2NGNmYmJkM2E3ODA5ZTIyNGE5ODYxZmY3OTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC01NSw2
ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7
CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgU3RvcmFnZU1hbmFnZXI7CitjbGFzcyBE
ZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlBy
b2Nlc3NQb29sOwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwpAQCAtOTIs
NiArOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyB3ZWJTUUxEYXRhYmFzZURpcmVjdG9y
eTsKICAgICAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICAgICAgU3RyaW5n
IG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7CisgICAgICAgIFN0cmluZyBkZXZpY2VJZEhhc2hT
YWx0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5OwogICAgICAgICBTdHJpbmcgamF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJl
Y3Rvcnk7CiAgICAgICAgIFN0cmluZyBjb29raWVTdG9yYWdlRmlsZTsKQEAgLTE2MSw2ICsxNjMs
OCBAQCBwdWJsaWM6CiAKICAgICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIoKSB7IHJl
dHVybiBtX3N0b3JhZ2VNYW5hZ2VyLmdldCgpOyB9CiAKKyAgICBEZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSogZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNh
bHRTdG9yYWdlLmdldCgpOyB9CisKICAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwogICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bv
b2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKIApAQCAtMjM1LDYgKzIzOSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMgeyBmYWxzZSB9OwogCiAgICAgY29u
c3QgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyPiBtX3N0b3JhZ2VNYW5hZ2VyOworICAgIGNvbnN0IFJl
ZlB0cjxEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZT4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTsK
ICAgICBSZWZQdHI8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3M7CiAgICAgYm9vbCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUg
eyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBmMzk2NDUzZjc4NmU0YTU2ZWQ2NTBhNTYxYWQyMWRjMGI1OGFlZGY2Li5m
ZDFjYmU4MDhhMGNmMjBlNjA0NzFjNGNhMGJiODAyZTZlNWE2OWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTc2LDYgKzc2LDcgQEAK
IAkJMDBCOTY2MTYxOEUyNENCQTAwQ0UxRjg4IC8qIEFQSUZpbmRDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjk2NjE1MThFMjRDQkEwMENF
MUY4OCAvKiBBUElGaW5kQ2xpZW50LmggKi87IH07CiAJCTAwQjk2NjFBMThFMjVBRTEwMENFMUY4
OCAvKiBGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwMEI5NjYxODE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oICovOyB9Owog
CQkwNzI5N0Y5RjFDMTdCQkVBMDAzRjA3MzUgLyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJv
eHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3
RjlEMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oICov
OyB9OworCQkwNzI5N0Y5RjFDMTdCQkVBMDE1RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3
RjlEMUMxN0JCRUEyMjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICovOyB9Owog
CQkwNzI5N0ZBMzFDMTg2QURCMDAzRjA3MzUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjk3RkEx
MUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3NEU3NUZFMURGMjIx
MTkwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc0RTc1RkIxREYxRkQxMzAwRDMxOEVDIC8q
IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi87IH07CiAJCTA3NkU4ODRFMUExM0NBREYwMDVF
OTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2RTg4NEQxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRl
eHRNZW51Q2xpZW50LmggKi87IH07CkBAIC0xODM0LDYgKzE4MzUsOCBAQAogCQkwMEI5NjYxODE4
RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3
RjlDMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9u
Q2hlY2tQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlEMUMx
N0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUg
LyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTAxQzE4
NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTExQzE4NkFEQjAwM0YwNzM1
IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA3NEU3NUZCMURGMUZEMTMwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNz
TWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFQcm9j
ZXNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE4NSw2ICs3MTg4
LDggQEAKIAkJCQk0NkEyQjYwNzFFNTY3NUEyMDBDM0RFREEgLyogQmFja2dyb3VuZFByb2Nlc3NS
ZXNwb25zaXZlbmVzc1RpbWVyLmggKi8sCiAJCQkJRTE1MTNDNjQxNjZFQUJCMjAwMTQ5RkNCIC8q
IENoaWxkUHJvY2Vzc1Byb3h5LmNwcCAqLywKIAkJCQlFMTUxM0M2NTE2NkVBQkIyMDAxNDlGQ0Ig
LyogQ2hpbGRQcm9jZXNzUHJveHkuaCAqLywKKwkJCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUg
LyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuY3BwICovLAorCQkJCTA3Mjk3RjlEMUMxN0JCRUEy
MjNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5oICovLAogCQkJCUJDMjY1MjEyMTE4
MjYwODEwMDI0M0UxMiAvKiBEcmF3aW5nQXJlYVByb3h5LmNwcCAqLywKIAkJCQlCQzI2NTIxMzEx
ODI2MDgxMDAyNDNFMTIgLyogRHJhd2luZ0FyZWFQcm94eS5oICovLAogCQkJCTFBNjQyMkZDMTJE
RDA4RkUwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtODg1
Nyw2ICs4ODYyLDcgQEAKIAkJCQkxQUM3NTM4MDE4M0JFNTBGMDA3MkNCMTUgLyogRGF0YVJlZmVy
ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEQTYxMEY0MzdEMTAwNThDMTVBIC8qIERl
Y29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RENFREFCMjE0QzYwMDkwMDE2Qjg0NyAvKiBE
ZXZpY2VJZGVudGl0eVNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcyOTdGOUYxQzE3QkJFQTAx
NUYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Mzg5MUI2QzFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMxODE3MzYxMjA1ODQyNDcwMERGREE2NSAvKiBEaXNwbGF5TGluay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNDI3MDIxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2Fk
LmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTk0LDYgKzEwNjAwLDcgQEAKIAkJCQkyRDkyQTc3RDIx
MkI2QTcxMDBGNDkzRkQgLyogQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDky
QTc3RTIxMkI2QTcxMDBGNDkzRkQgLyogRGF0YVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyRDkyQTc3RjIxMkI2QTcxMDBGNDkzRkQgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwNzI5N0Y5RTFDMTdCQkVBMDE0RjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhDIC8qIERv
d25sb2FkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDIy
OTkxMkREMDI5MjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBNjQyMzA4MTJERDA5RUIwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDZkMGIzYWY1ODliZjBhYmU5OThiNDQ2
MDNkZTQ1MTU2YjZjN2Q4ZDEuLjU2YjY1MmExMmU1YTdhZWYyMTJiNjllMWVkZmVkNWNlZDJjZDhk
MmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNCBAQAorMjAxOC0xMC0xMSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURldmljZXMuZW51bWVyYXRl
RGV2aWNlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisg
ICAgICAgIEFkZGVkIG5ldyBBUEkgdGVzdCBmb3IgdGhlIG1lZGlhRGV2aWNlcy5lbnVtZXJhdGVE
ZXZpY2VzOgorICAgICAgICB1c2VybWVkaWEtZW51bWVyYXRlZGV2aWNlcy1wZXJtaXNzaW9uLWNo
ZWNrLiBBbmQgYSBuZXcgQVBJIHRlc3QKKyAgICAgICAgZm9yIHRoZSBXZWJzaXRlRGF0YVN0b3Jl
OiB0ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhhc2hTYWx0LgorCisgICAgICAgICogTWluaUJyb3dz
ZXIvZ3RrL21haW4uYzoKKyAgICAgICAgKGdvdFdlYnNpdGVEYXRhQ2FsbGJhY2spOiBBZGRlZCBh
IG5ldyBzZWN0aW9uIHRvIHRoZSBhYm91dDpkYXRhCisgICAgICAgIHdlYnBhZ2UgdG8gaW5jbHVk
ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhc2ggc2FsdC4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcDoKKyAgICAgICAgKHRlc3RX
ZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25DaGVjayk6IEFkZGVkIHRo
ZQorICAgICAgICBuZXcgdGVzdCBjaGVja2luZyB0aGUgZW51bWVyYXRlRGV2aWNlcyBBUEkgd2hl
biBwZXJtaXNzaW9uIGlzCisgICAgICAgIGRlbmllZCBhbmQgd2hlbiBwZXJtaXNzaW9uIGlzIGFs
bG93ZWQgZm9yIHRoZSBvcmlnaW4uCisgICAgICAgIChiZWZvcmVBbGwpOiBEZWZpbmVkIHRoZSBu
ZXcgdGVzdC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdl
YnNpdGVEYXRhLmNwcDoKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKTogUmVnaXN0ZXIgYSBuZXcg
VVJJIGZvciB0aGUgZW51bWVyYXRlRGV2aWNlcy4KKyAgICAgICAgKHRlc3RXZWJzaXRlRGF0YUNv
bmZpZ3VyYXRpb24pOiBSZW1vdmUgdGhlIGhhc2ggc2FsdHMgZnJvbSB0aGUKKyAgICAgICAgZGly
ZWN0b3JpZXMuCisgICAgICAgICh0ZXN0V2Vic2l0ZURhdGFEZXZpY2VJZEhhc2hTYWx0KTogTmV3
IHRlc3QgY2hla2luZyB0aGUKKyAgICAgICAgZW51bWVyYXRlRGV2aWNlcyBBUEkuCisgICAgICAg
IChiZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRlc3QgdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRI
YXNoU2FsdCB0bworICAgICAgICB0aGUgaW5pdCBzdHJ1Y3R1cmUuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwOgorICAgICAgICAoV2ViVmll
d1Rlc3Q6OmluaXRpYWxpemVXZWJWaWV3KTogTWFrZSBzdXJlIHRoZSBtZWRpYS1zdHJlYW0gaXMK
KyAgICAgICAgYWN0aXZhdGVkIGluIHRoZSB3ZWJWaWV3LgorCiAyMDE4LTEwLTEwICBGdWppaSBI
aXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIEFkZCBXaW5DYWly
byB0byB0aGUgZmxha2luZXNzIGRhc2hib2FyZApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKaW5kZXggNTg3MDFm
Yzg0MmNlNTk1ZDI2ODQ3NjJhNGExM2ViMTg2NDg5YTQ5MC4uNTEzM2E0ZGQ2MWI5MmNkNTMxZGU5
MzQ5ODA5MzMxMTQ3MDgzZWIxNCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21h
aW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBAIC00MDIsNiArNDAyLDcg
QEAgc3RhdGljIHZvaWQgZ290V2Vic2l0ZURhdGFDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3UKIAogICAgIGd1aW50NjQgcGFnZUlEID0gd2Via2l0
X3dlYl92aWV3X2dldF9wYWdlX2lkKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92
aWV3KGRhdGFSZXF1ZXN0LT5yZXF1ZXN0KSk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3Vs
dCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiQ29va2llcyIsIFdFQktJVF9XRUJTSVRFX0RBVEFf
Q09PS0lFUywgTlVMTCwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBk
YXRhUmVxdWVzdCwgZGF0YUxpc3QsICJEZXZpY2UgSWQgSGFzaCBTYWx0IiwgV0VCS0lUX1dFQlNJ
VEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxULCBOVUxMLCBwYWdlSUQpOwogICAgIGFib3V0RGF0
YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIk1lbW9yeSBDYWNoZSIs
IFdFQktJVF9XRUJTSVRFX0RBVEFfTUVNT1JZX0NBQ0hFLCBOVUxMLCBwYWdlSUQpOwogICAgIGFi
b3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkRpc2sgQ2Fj
aGUiLCBXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUsIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdlciksIHBhZ2VJRCk7CiAgICAg
YWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiU2Vzc2lv
biBTdG9yYWdlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9TRVNTSU9OX1NUT1JBR0UsIE5VTEwsIHBh
Z2VJRCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFVJQ2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0VUlDbGllbnQuY3BwCmluZGV4IDY2MTEzNzczZTNiNDM4MjE1OGY5ZDljNGVjYjcyYmM5Njgx
MzA5NWQuLmU1YjZhODllODQ1NWZjM2I1M2I4MDBmMmIwMDg0OGRlN2IxMmYxZTMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQu
Y3BwCkBAIC04MzQsNiArODM0LDQ3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3RwCiAjZW5kaWYg
Ly8gRU5BQkxFKEdFT0xPQ0FUSU9OKQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKK3N0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3VXNlck1lZGlhRW51bWVyYXRlRGV2aWNlc1Blcm1pc3Npb25DaGVj
ayhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0U2V0dGlu
Z3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcpOworICAgIGdib29sZWFuIGVuYWJsZWQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9t
ZWRpYV9zdHJlYW0oc2V0dGluZ3MpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX21l
ZGlhX3N0cmVhbShzZXR0aW5ncywgVFJVRSk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisjZW5kaWYKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogdXNlck1lZGlhUmVxdWVzdEhUTUwgPQorICAgICAgICAiPGh0bWw+IgorICAg
ICAgICAiICA8c2NyaXB0PiIKKyAgICAgICAgIiAgZnVuY3Rpb24gcnVuVGVzdCgpIgorICAgICAg
ICAiICB7IgorICAgICAgICAiICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2
aWNlcygpLnRoZW4oIgorICAgICAgICAiICAgICAgICBmdW5jdGlvbihkZXZpY2VzKSB7ICIKKyAg
ICAgICAgIiAgICAgICAgICAgIGRldmljZXMuZm9yRWFjaChmdW5jdGlvbihkZXZpY2UpIHsiCisg
ICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UubGFiZWwp
IGRvY3VtZW50LnRpdGxlID0gXCJPS1wiOyIKKyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZG9jdW1lbnQudGl0bGUgPSBcIlBlcm1pc3Np
b24gZGVuaWVkXCI7IgorICAgICAgICAiICAgICAgICAgICAgfSkiCisgICAgICAgICIgICAgfSki
CisgICAgICAgICIgIH0iCisgICAgICAgICIgIDwvc2NyaXB0PiIKKyAgICAgICAgIiAgPGJvZHkg
b25sb2FkPSdydW5UZXN0KCk7Jz48L2JvZHk+IgorICAgICAgICAiPC9odG1sPiI7CisKKyAgICB0
ZXN0LT5tX3ZlcmlmeU1lZGlhVHlwZXMgPSBUUlVFOworCisgICAgLy8gVGVzdCBkZW55aW5nIGEg
cGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMg
PSBmYWxzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh1c2VyTWVkaWFSZXF1ZXN0SFRNTCwgbnVsbHB0
cik7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIlBlcm1pc3Npb24gZGVuaWVk
Iik7CisKKyAgICAvLyBUZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRl
c3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSB0cnVlOworICAgIHRlc3QtPmxvYWRIdG1s
KHVzZXJNZWRpYVJlcXVlc3RIVE1MLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRs
ZUNoYW5nZWRUbygiT0siKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX21lZGlh
X3N0cmVhbShzZXR0aW5ncywgZW5hYmxlZCk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKIHsKICAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CkBAIC0xMTU2LDYgKzExOTcsNyBAQCB2b2lk
IGJlZm9yZUFsbCgpCiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZ2Vv
bG9jYXRpb24tcGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3R2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMpOwogI2VuZGlmCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBV
SUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ1c2VybWVkaWEtZW51bWVyYXRlZGV2
aWNlcy1wZXJtaXNzaW9uLWNoZWNrIiwgdGVzdFdlYlZpZXdVc2VyTWVkaWFFbnVtZXJhdGVEZXZp
Y2VzUGVybWlzc2lvbkNoZWNrKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJ1c2VybWVkaWEtcGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJhdWRpby11c2VybWVkaWEtcGVybWlzc2lvbi1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdBdWRp
b09ubHlVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdHMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRhLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3Bw
CmluZGV4IDk3ZTE4OWI2ZjgyMzlmYmY3NWI3OWRkMDI2NWFiNzMxOGE4M2M4OTYuLmQ2YTMyYjc0
NjRjNzgxNjUxOThlMThjYjJkY2I2YTljYjEyZmE4NDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vic2l0ZURhdGEuY3BwCkBAIC0y
MSw2ICsyMSw3IEBACiAKICNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCiAjaW5jbHVkZSAi
V2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgogCiBzdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKIApAQCAtNjEsNiArNjIsMTEgQEAgc3RhdGljIHZvaWQgc2Vy
dmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29u
c3QgY2hhcioKICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbG9jYWxTdG9yYWdlSFRNTCwgc3RybGVuKGxv
Y2FsU3RvcmFnZUhUTUwpKTsKICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSk7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvZW51bWVyYXRlZGV2aWNlcyIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGVudW1lcmF0ZURl
dmljZXNIVE1MID0gIjxodG1sPjxib2R5IG9ubG9hZD1cIm5hdmlnYXRvci5tZWRpYURldmljZXMu
ZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcykgeyBkb2N1bWVudC50aXRs
ZSA9ICdGaW5pc2hlZCc7IH0pXCI+PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElD
LCBlbnVtZXJhdGVEZXZpY2VzSFRNTCwgc3RybGVuKGVudW1lcmF0ZURldmljZXNIVE1MKSk7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19P
Syk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CiB9CkBAIC0xNjMsNyArMTY5LDcgQEAgc3RhdGljIHZv
aWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiAKICAgICAvLyBDbGVhciBhbGwgcGVyc2lzdGVudCBjYWNoZXMsIHNpbmNl
IHRoZSBkYXRhIGRpciBpcyBjb21tb24gdG8gYWxsIHRlc3QgY2FzZXMuCiAgICAgc3RhdGljIGNv
bnN0IFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgcGVyc2lzdGVudENhY2hlcyA9IHN0YXRpY19jYXN0
PFdlYktpdFdlYnNpdGVEYXRhVHlwZXM+KFdFQktJVF9XRUJTSVRFX0RBVEFfRElTS19DQUNIRSB8
IFdFQktJVF9XRUJTSVRFX0RBVEFfTE9DQUxfU1RPUkFHRQotICAgICAgICB8IFdFQktJVF9XRUJT
SVRFX0RBVEFfV0VCU1FMX0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERC
X0RBVEFCQVNFUyB8IFdFQktJVF9XRUJTSVRFX0RBVEFfT0ZGTElORV9BUFBMSUNBVElPTl9DQUNI
RSk7CisgICAgICAgIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9XRUJTUUxfREFUQUJBU0VTIHwgV0VC
S0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTIHwgV0VCS0lUX1dFQlNJVEVfREFU
QV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NBQ0hFIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0Vf
SURfSEFTSF9TQUxUKTsKICAgICB0ZXN0LT5jbGVhcihwZXJzaXN0ZW50Q2FjaGVzLCAwKTsKICAg
ICBnX2Fzc2VydCghdGVzdC0+ZmV0Y2gocGVyc2lzdGVudENhY2hlcykpOwogCkBAIC01MTcsNiAr
NTIzLDUzIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YUNvb2tpZXMoV2Vic2l0ZURhdGFU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CiB9CiAK
K3N0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YURldmljZUlkSGFzaFNhbHQoV2Vic2l0ZURhdGFU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmNsZWFyKFdFQktJVF9XRUJT
SVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCwgMCk7CisKKyAgICBHTGlzdCogZGF0YUxpc3Qg
PSB0ZXN0LT5mZXRjaChXRUJLSVRfV0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpOwor
ICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9lbnVtZXJhdGVkZXZpY2VzIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxUaXRsZUNoYW5nZWRUbygiRmluaXNoZWQiKTsKKworICAgIGRhdGFMaXN0ID0gdGVzdC0+
ZmV0Y2goV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKyAgICBnX2Fz
c2VydChkYXRhTGlzdCk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgoZGF0
YUxpc3QpLCA9PSwgMSk7CisgICAgV2ViS2l0V2Vic2l0ZURhdGEqIGRhdGEgPSBzdGF0aWNfY2Fz
dDxXZWJLaXRXZWJzaXRlRGF0YSo+KGRhdGFMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydChkYXRh
KTsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Via2l0X3NlY3VyaXR5X29y
aWdpbl9uZXdfZm9yX3VyaShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSwgPT0s
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSk7CisgICAgd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl91bnJlZihvcmlnaW4pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSksID09LCBXRUJLSVRfV0VCU0lURV9EQVRBX0RF
VklDRV9JRF9IQVNIX1NBTFQpOworCisgICAgR0xpc3QgcmVtb3ZlTGlzdCA9IHsgZGF0YSwgbnVs
bHB0ciwgbnVsbHB0ciB9OworICAgIHRlc3QtPnJlbW92ZShXRUJLSVRfV0VCU0lURV9EQVRBX0RF
VklDRV9JRF9IQVNIX1NBTFQsICZyZW1vdmVMaXN0KTsKKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZl
dGNoKFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNFX0lEX0hBU0hfU0FMVCk7CisgICAgZ19hc3Nl
cnQoIWRhdGFMaXN0KTsKKworICAgIC8vIFRlc3QgcmVtb3ZpbmcgdGhlIGNvb2tpZXMuCisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW51bWVyYXRlZGV2aWNlcyIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oIkZpbmlzaGVkIik7
CisKKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdFQktJVF9XRUJTSVRFX0RBVEFfREVWSUNF
X0lEX0hBU0hfU0FMVCk7CisgICAgZ19hc3NlcnQoZGF0YUxpc3QpOworICAgIGRhdGEgPSBzdGF0
aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGRhdGFMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2Vy
dChkYXRhKTsKKworICAgIEdMaXN0IHJlbW92ZUNvb2tpZUxpc3QgPSB7IGRhdGEsIG51bGxwdHIs
IG51bGxwdHIgfTsKKyAgICB0ZXN0LT5yZW1vdmUoV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVT
LCAmcmVtb3ZlQ29va2llTGlzdCk7CisgICAgZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChXRUJLSVRf
V0VCU0lURV9EQVRBX0RFVklDRV9JRF9IQVNIX1NBTFQpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlz
dCk7CisKKyAgICAvLyBDbGVhciBhbGwuCisgICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVE
YXRhVHlwZXMgY2FjaGVBbmRBcHBjYWNoZVR5cGVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0
ZURhdGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVfREFUQV9ERVZJQ0VfSURfSEFTSF9TQUxUKTsKKyAg
ICB0ZXN0LT5jbGVhcihjYWNoZUFuZEFwcGNhY2hlVHlwZXMsIDApOworICAgIGRhdGFMaXN0ID0g
dGVzdC0+ZmV0Y2goY2FjaGVBbmRBcHBjYWNoZVR5cGVzKTsKKyAgICBnX2Fzc2VydCghZGF0YUxp
c3QpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAga1NlcnZlciA9IG5ldyBXZWJLaXRU
ZXN0U2VydmVyKCk7CkBAIC01MjksNiArNTgyLDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFdl
YnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJkYXRhYmFzZXMiLCB0ZXN0
V2Vic2l0ZURhdGFEYXRhYmFzZXMpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRX
ZWJzaXRlRGF0YSIsICJhcHBjYWNoZSIsIHRlc3RXZWJzaXRlRGF0YUFwcGNhY2hlKTsKICAgICBX
ZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiY29va2llcyIsIHRlc3RX
ZWJzaXRlRGF0YUNvb2tpZXMpOworICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJz
aXRlRGF0YSIsICJkZXZpY2VpZGhhc2hzYWx0IiwgdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNo
U2FsdCk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDNjMDk1YzM3YjQyZjM3ZDRl
NTY2NjhkY2ZkNDUyODEzMTI0ZDMzNDIuLjdlMzU0MGI3ODFjMjlhZGJiYTM1N2JkZmJhYjhlNjc0
NmRjYWFmN2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGli
L1dlYlZpZXdUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xp
Yi9XZWJWaWV3VGVzdC5jcHAKQEAgLTQ4LDEwICs0OCwxNSBAQCBXZWJWaWV3VGVzdDo6fldlYlZp
ZXdUZXN0KCkKIHZvaWQgV2ViVmlld1Rlc3Q6OmluaXRpYWxpemVXZWJWaWV3KCkKIHsKICAgICBn
X2Fzc2VydCghbV93ZWJWaWV3KTsKKworICAgIFdlYktpdFNldHRpbmdzKiB3ZWJraXRTZXR0aW5n
cyA9IHdlYmtpdF9zZXR0aW5nc19uZXcoKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9tZWRpYV9zdHJlYW0od2Via2l0U2V0dGluZ3MsIFRSVUUpOworCiAgICAgbV93ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICNpZiBQ
TEFURk9STShXUEUpCiAgICAgICAgICJiYWNrZW5kIiwgVGVzdDo6Y3JlYXRlV2ViVmlld0JhY2tl
bmQoKSwKICNlbmRpZgorICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRTZXR0aW5ncywKICAgICAg
ICAgIndlYi1jb250ZXh0IiwgbV93ZWJDb250ZXh0LmdldCgpLAogICAgICAgICAidXNlci1jb250
ZW50LW1hbmFnZXIiLCBtX3VzZXJDb250ZW50TWFuYWdlci5nZXQoKSwKICAgICAgICAgbnVsbHB0
cikpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDNmNWQ0Y2Y2OTY1NjIzMzI4MmY2YTdjOTVlYzU2MDhlMTM3ZjU1ZDAuLjdk
OGZlM2ZhYjk0NGQzZTg0ZGYwN2VhMzQyMzhjZmQ4ZjZjM2FlZmMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MiBAQAorMjAxOC0xMC0xMSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXVtXUEVdIEFkZCBtZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyBz
dXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODU3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgIFJl
bW92ZSB0aGUgZmFpbHVyZSBleHBlY3RhdGlvbiBmb3IgdGhlIHRlc3QKKyAgICAgICAgbWVkaWEt
ZGV2aWNlcy1lbnVtZXJhdGUtZGV2aWNlcy5odG1sLiBKdXN0IGZvciB0aGUgcmVjb3JkIHdlIGhh
dmUKKyAgICAgICAgYWxzbyBjaGVja2VkIHRoZSBmb2xsb3dpbmcgdGVzdHMuCisKKyAgICAgICAg
ZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZpY2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwKKyAg
ICAgICAgZmFzdC9tZWRpYXN0cmVhbS9yZXNvdXJjZXMvZW51bWVyYXRlLWRldmljZXMtZnJhbWUu
aHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9lbnVtZXJhdGUtZGV2
aWNlcy1zb3VyY2UtaWQuaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVh
bS9lbnVtZXJhdGUtZGV2aWNlcy1zb3VyY2UtaWQtcGVyc2lzdGVudC5odG1sCisgICAgICAgIGh0
dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL3Jlc291cmNlcy9lbnVtZXJhdGUtZGV2aWNlcy1z
b3VyY2UtaWQtZnJhbWUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnM6CisKIDIwMTgtMTAtMTAgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNyZWF0ZSBzcGVjaWFsIE5ldHdvcmsgd2F0ZXJmYWxs
IGZvciBtZWRpYSBldmVudHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlv
bnMKaW5kZXggOWE5YzQyNTI2M2QyMDg3NTUzN2RmZGQ5YzFkMTViZjJiZTQwZTBiZS4uZGMxMzc5
YzgyZGZjM2E4NjFhYmYxNzFlNjZhZTUyNGI4NzJjYjZjYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTY0MCw3ICs2NDAsNiBAQCB3ZWJraXQub3JnL2Iv
NzkyMDMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFt
cy9NZWRpYVN0cgogd2Via2l0Lm9yZy9iLzE1MTM0NCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtLWFkZC1lbmRlZC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQogIyBDcmFzaCBpcyBidWcgIzE3
NjgwMQogd2Via2l0Lm9yZy9iLzE2MDk5NiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZp
ZGVvLWVsZW1lbnQtdmlkZW8tdHJhY2tzLWRpc2FibGVkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xNzIyNjkgZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZp
Y2VzLWVudW1lcmF0ZS1kZXZpY2VzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNzMy
NTcgZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtZ3JhbnQtcGVyc2lzdGVuY3kzLmh0bWwg
WyBQYXNzIEZhaWx1cmUgXQogCiAjIENhbnZhcyBjYXB0dXJlU3RyZWFtIHN1cHBvcnQgaXMgbm90
IGltcGxlbWVudGVkCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>