<?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>185787</bug_id>
          
          <creation_ts>2018-05-18 14:39:48 -0700</creation_ts>
          <short_desc>[GTK][WPE] Start implementing MediaStream API</short_desc>
          <delta_ts>2018-06-13 10:11:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit 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>186596</dependson>
    
    <dependson>184588</dependson>
    
    <dependson>185657</dependson>
          <blocked>185761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thibault Saunier">tsaunier</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>magomez</cc>
    
    <cc>pnormand</cc>
    
    <cc>tsaunier</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1425293</commentid>
    <comment_count>0</comment_count>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-05-18 14:39:48 -0700</bug_when>
    <thetext>This is the following patch after #185761 is merge in order to implement a libwebrtc backend support for the GTK and WPE ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429211</commentid>
    <comment_count>1</comment_count>
      <attachid>341758</attachid>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-06-01 06:59:32 -0700</bug_when>
    <thetext>Created attachment 341758
[GTK][WPE] Start implementing MediaStream API

This patch implements the MediaStream API for the GTK+ and WPE ports, introducing all the
required classes.

Parts of this patche have already been propose on https://bugs.webkit.org/show_bug.cgi?id=185761
but as discussed there the patch proposal splitting was changed so that the patch introducing new
API to handle enumerateDevices is a patch on its own.

To make sure no previous review is lost in the process, this patch already adresses previous
reviews, and I am replying here to Philip&apos;s comment from https://bugs.webkit.org/show_bug.cgi?id=185761:

(In reply to Philippe Normand from comment #5) | from #185761
&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.

Fixed on all added files.

&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.

Fixed. Same fixed applied to GStreamerVideoCaptureSource::stopProducingData.

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

Done. Same thing in GStreamerVideoCaptureSource.cpp.
 
&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 :)

For this one I added an assert, it should not fail otherwise the install is wrong
and playbin expects those elements anyway.

I guess we should go over the FIXME right before merging and do that yes.

&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.

OK, doing that where I noticed it, but ooc, why? :-)

&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 :/

Fixed.

&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.

Done.
 
&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 :)

Indeed, not so simple to do but it would be neat :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429782</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-06-04 00:40:35 -0700</bug_when>
    <thetext>(In reply to Thibault Saunier from comment #1)
&gt; &gt; 
&gt; &gt; Please avoid C-style casts everywhere in C++ code. Use static_cast or
&gt; &gt; reinterpret_cast.
&gt; 
&gt; OK, doing that where I noticed it, but ooc, why? :-)
&gt; 

This is one of the implicit coding style guidelines of the project :)

&gt; &gt; 
&gt; &gt; Will be nice to support compressed formats too :)
&gt; 
&gt; Indeed, not so simple to do but it would be neat :-)

But that&apos;s a requirement for &quot;light&quot; platforms like the RPi IIRC. When I was working on that it was quite challenging to achieve good perf with the RPi Camera without compressed format support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429787</commentid>
    <comment_count>3</comment_count>
      <attachid>341758</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-06-04 01:38:43 -0700</bug_when>
    <thetext>Comment on attachment 341758
[GTK][WPE] Start implementing MediaStream API

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

&gt; LayoutTests/platform/gtk/TestExpectations:-577
&gt; -fast/mediastream [ Skip ]

Can similar test expectation changes be applied to WPE?

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:85
&gt; +void connectSimpleBusMessageCallback(GstElement *pipeline);

* misplaced :)
Also, a disconnect function would probably be nice to have?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:55
&gt; +#include &quot;gstreamer/GStreamerMediaStreamSource.h&quot;

Please add platform/mediastream/gstreamer to the include directories, somewhere in the CMake stuff so there&apos;s no need for gstreamer/ prefix here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1769
&gt; +        // gst_object_ref(sourceElement);

left over?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:85
&gt; +#include &quot;gstreamer/GStreamerMediaStreamSource.h&quot;

No prefix needed.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:54
&gt; +    if (gst_tag_list_get_int(tags, &quot;webkit-media-stream-kind&quot;, &amp;kind) &amp;&amp; kind == (gint)VideoTrackPrivate::Kind::Main) {

C-style cast detected :)

&gt; Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:56
&gt; +        gst_stream_set_stream_flags(stream.get(), (GstStreamFlags)(streamFlags | GST_STREAM_FLAG_SELECT));

Ditto

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDevice.h:42
&gt; +    GstDevice * device() { return m_device.get(); }

no space :P

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:110
&gt; +    gst_element_link_many(source.get(), converter.get(), m_capsfilter.get(), m_tee.get(), NULL);

nullptr here too please :)

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:178
&gt; +    GRefPtr&lt;GstBus&gt; bus = adoptGRef(gst_pipeline_get_bus(GST_PIPELINE(pipeline())));
&gt; +    gst_bus_set_sync_handler(bus.get(), nullptr, nullptr, nullptr);

As mentioned before, this could go to a new function in GStreamerCommon.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:32
&gt; +#include &quot;gstreamer/GStreamerAudioData.h&quot;

No WebCore dir prefix in includes, anywhere in this patch please :)

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:37
&gt; +#if GST_CHECK_VERSION(1, 10, 0)

This could be merged with the first #if

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:43
&gt; +#define WEBKIT_MEDIA_STREAM_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_MEDIA_STREAM_SRC, WebKitMediaStreamSrcClass))
&gt; +#define WEBKIT_IS_MEDIA_STREAM_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_MEDIA_STREAM_SRC))
&gt; +#define WEBKIT_MEDIA_STREAM_SRC_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), WEBKIT_TYPE_MEDIA_STREAM_SRC, WebKitMediaStreamSrcClass))

I think our other gst custom elements define those macros in their header file.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:70
&gt; +            (gint)AudioTrackPrivate::Kind::Main, nullptr);

C-style cast. It seems the whole patch needs to be checked about this.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:164
&gt; +    GstFlowCombiner* flow_combiner;

Variables should use camelCase whenever possible

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:316
&gt; +    /**
&gt; +     * WebKitMediaStreamSrcClass::is-live:
&gt; +     *
&gt; +     * Instruct the source to behave like a live source. This includes that it
&gt; +     * will only push out buffers in the PLAYING state.
&gt; +     */

No need for this, the element is private.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:319
&gt; +            &quot;Let playbin3 we are a live source.&quot;,

+know

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:191
&gt; +            tmpMinFramerate = (int)(tmpMinFPSNumerator / tmpMinFPSDenominator);
&gt; +            tmpMaxFramerate = (int)(tmpMaxFPSNumerator / tmpMaxFPSDenominator);

Framerates are integers in libwebrtc? That&apos;s a bit surprising :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430592</commentid>
    <comment_count>4</comment_count>
      <attachid>342085</attachid>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-06-06 15:36:15 -0700</bug_when>
    <thetext>Created attachment 342085
[GTK][WPE]: Implement MediaStream API

(In reply to Philippe Normand from comment #3)
&gt; Comment on attachment 341758 [details]
&gt; [GTK][WPE] Start implementing MediaStream API
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=341758&amp;action=review
&gt; 
&gt; &gt; LayoutTests/platform/gtk/TestExpectations:-577
&gt; &gt; -fast/mediastream [ Skip ]
&gt;
&gt; Can similar test expectation changes be applied to WPE?

This will be a follow up patch, we are not ready for that yet but
I am working on it.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:85
&gt; &gt; +void connectSimpleBusMessageCallback(GstElement *pipeline);
&gt; 
&gt; * misplaced :)
&gt; Also, a disconnect function would probably be nice to have?

Added, also fixed a place where we forgot to disconnect (which would have lead to a leak iirc).

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:55
&gt; &gt; +#include &quot;gstreamer/GStreamerMediaStreamSource.h&quot;
&gt; 
&gt; Please add platform/mediastream/gstreamer to the include directories,
&gt; somewhere in the CMake stuff so there&apos;s no need for gstreamer/ prefix here.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1769
&gt; &gt; +        // gst_object_ref(sourceElement);
&gt; 
&gt; left over?

Indeed sorry, FIXED.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:85
&gt; &gt; +#include &quot;gstreamer/GStreamerMediaStreamSource.h&quot;
&gt; 
&gt; No prefix needed.

FIXED.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:54
&gt; &gt; +    if (gst_tag_list_get_int(tags, &quot;webkit-media-stream-kind&quot;, &amp;kind) &amp;&amp; kind == (gint)VideoTrackPrivate::Kind::Main) {
&gt; 
&gt; C-style cast detected :)

Fixed
 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:56
&gt; &gt; +        gst_stream_set_stream_flags(stream.get(), (GstStreamFlags)(streamFlags | GST_STREAM_FLAG_SELECT));
&gt; 
&gt; Ditto

Fixed.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDevice.h:42
&gt; &gt; +    GstDevice * device() { return m_device.get(); }
&gt; 
&gt; no space :P

Fixed.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:110
&gt; &gt; +    gst_element_link_many(source.get(), converter.get(), m_capsfilter.get(), m_tee.get(), NULL);
&gt; 
&gt; nullptr here too please :)

Fixed, I wonder how the style checker missed it oO

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:178
&gt; &gt; +    GRefPtr&lt;GstBus&gt; bus = adoptGRef(gst_pipeline_get_bus(GST_PIPELINE(pipeline())));
&gt; &gt; +    gst_bus_set_sync_handler(bus.get(), nullptr, nullptr, nullptr);
&gt; 
&gt; As mentioned before, this could go to a new function in GStreamerCommon.

It is unrelated as this is for the sync message handler.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:32
&gt; &gt; +#include &quot;gstreamer/GStreamerAudioData.h&quot;
&gt; 
&gt; No WebCore dir prefix in includes, anywhere in this patch please :)

Fixed, looks like you spotted the 3 instances :-)

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:37
&gt; &gt; +#if GST_CHECK_VERSION(1, 10, 0)
&gt; 
&gt; This could be merged with the first #if

Problem was that &lt;gst/gst.h&gt; was not included at that point, changed it this way:

```

```

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:43
&gt; &gt; +#define WEBKIT_MEDIA_STREAM_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_MEDIA_STREAM_SRC, WebKitMediaStreamSrcClass))
&gt; &gt; +#define WEBKIT_IS_MEDIA_STREAM_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_MEDIA_STREAM_SRC))
&gt; &gt; +#define WEBKIT_MEDIA_STREAM_SRC_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), WEBKIT_TYPE_MEDIA_STREAM_SRC, WebKitMediaStreamSrcClass))
&gt; 
&gt; I think our other gst custom elements define those macros in their header
&gt; file.

Removed them, they were not used in the end.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:70
&gt; &gt; +            (gint)AudioTrackPrivate::Kind::Main, nullptr);
&gt; 
&gt; C-style cast. It seems the whole patch needs to be checked about this.

Rebuilt the modified c++ files with `-Wold-style-cast` and tried to go over mine (but there were **many** issues from random headers).

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:164
&gt; &gt; +    GstFlowCombiner* flow_combiner;
&gt; 
&gt; Variables should use camelCase whenever possible

Fixed a few I noticed.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:316
&gt; &gt; +    /**
&gt; &gt; +     * WebKitMediaStreamSrcClass::is-live:
&gt; &gt; +     *
&gt; &gt; +     * Instruct the source to behave like a live source. This includes that it
&gt; &gt; +     * will only push out buffers in the PLAYING state.
&gt; &gt; +     */
&gt; 
&gt; No need for this, the element is private.

Removed.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:319
&gt; &gt; +            &quot;Let playbin3 we are a live source.&quot;,
&gt; 
&gt; +know
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:191
&gt; &gt; +            tmpMinFramerate = (int)(tmpMinFPSNumerator / tmpMinFPSDenominator);
&gt; &gt; +            tmpMaxFramerate = (int)(tmpMaxFPSNumerator / tmpMaxFPSDenominator);
&gt; 
&gt; Framerates are integers in libwebrtc? That&apos;s a bit surprising :)

Crazy thing happen there :P (or we forgot to wake up that day :D).

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430782</commentid>
    <comment_count>5</comment_count>
      <attachid>342085</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-06-07 02:32:08 -0700</bug_when>
    <thetext>Comment on attachment 342085
[GTK][WPE]: Implement MediaStream API

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

Ok I think this is almost ready to land. Is this patch supposed to apply on trunk? The EWS fails.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:55
&gt; +#include &quot;gstreamer/GStreamerMediaStreamSource.h&quot;

No prefix please ;)

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:177
&gt; +    GST_INFO_OBJECT((gpointer) pipeline(), &quot;Going to PLAYING!&quot;);

This cast is really needed?

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:186
&gt; +    GST_INFO_OBJECT((gpointer) pipeline(), &quot;Tearing down!&quot;);

Ditto

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:302
&gt; +    GstElementClass* gstelement_klass = (GstElementClass*)klass;

Use GST_ELEMENT_CLASS(klass)

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:356
&gt; +        (GstPadChainFunction)webkitMediaStreamSrcChain);

You&apos;ll think I&apos;m obsessed with casts ;)

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:358
&gt; +    g_assert(gst_element_add_pad(GST_ELEMENT(self), (GstPad*)ghostpad));

GST_PAD_CAST() :)
Also please use ASSERT instead of g_assert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430815</commentid>
    <comment_count>6</comment_count>
      <attachid>342160</attachid>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-06-07 07:47:43 -0700</bug_when>
    <thetext>Created attachment 342160
Addressed comments.

(In reply to Philippe Normand from comment #5)
&gt; Comment on attachment 342085 [details]
&gt; [GTK][WPE]: Implement MediaStream API
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=342085&amp;action=review
&gt; 
&gt; Ok I think this is almost ready to land. Is this patch supposed to apply on
&gt; trunk? The EWS fails.

Now that the GstStreamCollection management rework landed, it should apply.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:55
&gt; &gt; +#include &quot;gstreamer/GStreamerMediaStreamSource.h&quot;
&gt; 
&gt; No prefix please ;)

Sorry, FIXED.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:177
&gt; &gt; +    GST_INFO_OBJECT((gpointer) pipeline(), &quot;Going to PLAYING!&quot;);
&gt; 
&gt; This cast is really needed?

No, removed.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:186
&gt; &gt; +    GST_INFO_OBJECT((gpointer) pipeline(), &quot;Tearing down!&quot;);
&gt; 
&gt; Ditto

Ditto.

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:302
&gt; &gt; +    GstElementClass* gstelement_klass = (GstElementClass*)klass;
&gt; 
&gt; Use GST_ELEMENT_CLASS(klass)
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:356
&gt; &gt; +        (GstPadChainFunction)webkitMediaStreamSrcChain);
&gt; 
&gt; You&apos;ll think I&apos;m obsessed with casts ;)

Fixed. I went over all code manually and tried to fix them all, hopefully I didn&apos;t miss
any, but that C macro synthax is hard to detect! (no way to grep it seems).

&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:358
&gt; &gt; +    g_assert(gst_element_add_pad(GST_ELEMENT(self), (GstPad*)ghostpad));
&gt; 
&gt; GST_PAD_CAST() :)
&gt; Also please use ASSERT instead of g_assert

Done. Removed all occurences of g_assrt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430818</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-06-07 07:50:53 -0700</bug_when>
    <thetext>Attachment 342160 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:25:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:25:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:358:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:186:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:187:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:192:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:193:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:206:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 11 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430829</commentid>
    <comment_count>8</comment_count>
      <attachid>342168</attachid>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-06-07 08:17:18 -0700</bug_when>
    <thetext>Created attachment 342168
Fix styling issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430830</commentid>
    <comment_count>9</comment_count>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-06-07 08:19:12 -0700</bug_when>
    <thetext>I had to revert my change for the `#if GST_CHECK_VERSION(1,14,0)` as it requires `gst.h` to be included and including it before local includes is invalid stylewise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430839</commentid>
    <comment_count>10</comment_count>
      <attachid>342168</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-06-07 08:38:06 -0700</bug_when>
    <thetext>Comment on attachment 342168
Fix styling issues.

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

&gt; Source/WebCore/platform/GStreamer.cmake:51
&gt; +        platform/mock/MockRealtimeAudioSource.cpp
&gt; +        platform/mock/MockRealtimeMediaSource.cpp
&gt; +        platform/mock/MockRealtimeMediaSourceCenter.cpp
&gt; +        platform/mock/MockRealtimeVideoSource.cpp

Hum, this should move to a different cmake file I think, they&apos;re not related with GStreamer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430847</commentid>
    <comment_count>11</comment_count>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-06-07 08:54:26 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #10)
&gt; Comment on attachment 342168 [details]
&gt; Fix styling issues.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=342168&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/GStreamer.cmake:51
&gt; &gt; +        platform/mock/MockRealtimeAudioSource.cpp
&gt; &gt; +        platform/mock/MockRealtimeMediaSource.cpp
&gt; &gt; +        platform/mock/MockRealtimeMediaSourceCenter.cpp
&gt; &gt; +        platform/mock/MockRealtimeVideoSource.cpp
&gt; 
&gt; Hum, this should move to a different cmake file I think, they&apos;re not related
&gt; with GStreamer.

Where then? Copied twice for WPE and Gtk? They are being built so that we can build the GStreamer wrappers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430855</commentid>
    <comment_count>12</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-06-07 09:06:39 -0700</bug_when>
    <thetext>Either Source/WebCore/CMakeLists.txt or Source/WebCore/Sources.txt under MEDIA_STREAM guards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430857</commentid>
    <comment_count>13</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-06-07 09:08:03 -0700</bug_when>
    <thetext>Actually they&apos;re already in Source/WebCore/Sources.txt :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430926</commentid>
    <comment_count>14</comment_count>
      <attachid>342187</attachid>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2018-06-07 10:45:32 -0700</bug_when>
    <thetext>Created attachment 342187
Stop building MockRealtime** from 2 .cmake files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430956</commentid>
    <comment_count>15</comment_count>
      <attachid>342187</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-07 11:31:54 -0700</bug_when>
    <thetext>Comment on attachment 342187
Stop building MockRealtime** from 2 .cmake files.

Clearing flags on attachment: 342187

Committed r232589: &lt;https://trac.webkit.org/changeset/232589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430957</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-07 11:31:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430958</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-06-07 11:32:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/40903578&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341758</attachid>
            <date>2018-06-01 06:59:32 -0700</date>
            <delta_ts>2018-06-07 02:10:43 -0700</delta_ts>
            <desc>[GTK][WPE] Start implementing MediaStream API</desc>
            <filename>GTKWPE-Implement-MediaStream-API.patch</filename>
            <type>text/plain</type>
            <size>151476</size>
            <attacher name="Thibault Saunier">tsaunier</attacher>
            
              <data encoding="base64">RnJvbSBmYmY3NjhlOTZiNTY4OWE5YmYxM2FlOTkwZjYzYWQ4NGI0OTEyMTFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQWxlamFuZHJvIEcuIENhc3RybyIgPGFsZXhAaWdhbGlhLmNv
bT4KRGF0ZTogVGh1LCAyNCBNYXkgMjAxOCAxMjo1NTowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
eHNlcnZlcl0gW0dUS11bV1BFXTogSW1wbGVtZW50IE1lZGlhU3RyZWFtIEFQSQoKaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NwotLS0KIExheW91dFRlc3RzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyAgICAgfCAgNTkgKy0KIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICB8IDExNyArKysrCiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgICAgICAgfCAgMTYgKwogLi4uL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAgIHwgICAxICsKIC4uLi9wbGF0Zm9ybS9hdWRpby9Q
bGF0Zm9ybUF1ZGlvRGF0YS5oICAgICAgICB8ICAgMSArCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lckNvbW1vbi5jcHAgICAgfCAgNDEgKysKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyQ29tbW9uLmggICAgICB8ICAgMiArCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgfCAgNjUgKystCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oICAgfCAgIDcgKy0KIC4uLi9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcCAgICAgICB8ICAgNyArCiAuLi4vZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmNwcCAgfCAgIDggKwogLi4uL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2UuaCAgICAgICAgIHwgICAyICstCiAuLi4vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlci5jcHAgfCAgIDcgLQogLi4uL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuY3BwIHwgMjAyICsrKysrKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9D
YXB0dXJlU291cmNlLmggICB8ICA2NSArKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9D
YXB0dXJlci5jcHAgICAgICB8ICA3MyArKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9D
YXB0dXJlci5oICAgICAgICB8ICA0MyArKwogLi4uL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0Rh
dGEuaCAgICAgICAgICAgIHwgIDU5ICsrCiAuLi4vR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oICAgICAgICAgfCAxMDUgKysrKwogLi4uL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
RGV2aWNlLmggICAgICAgIHwgIDUwICsrCiAuLi4vR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuY3BwICAgICAgICAgfCAxMzQgKysrKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVy
ZURldmljZU1hbmFnZXIuaCB8ICA4MSArKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVy
ZXIuY3BwICAgICAgICAgICB8IDE4NSArKysrKysKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQ2FwdHVyZXIuaCB8ICA3MSArKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFTdHJlYW1Tb3VyY2UuY3BwICB8IDU0MSArKysrKysrKysrKysrKysrKysKIC4uLi9nc3RyZWFt
ZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCAgICB8ICA0NiArKwogLi4uL2dzdHJlYW1l
ci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIHwgMjY2ICsrKysrKysrKwogLi4uL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCAgIHwgIDY0ICsrKwogLi4uL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcCAgICAgIHwgMTA0ICsrKysKIC4uLi9n
c3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oICAgICAgICB8ICA0NiArKwogLi4uL01v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwICAgICAgIHwgMTA2ICsrKysKIC4uLi9N
b2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmggICAgICAgICB8ICA1MSArKwogLi4uL01v
Y2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwICAgICAgIHwgMTQ2ICsrKysrCiAuLi4v
TW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oICAgICAgICAgfCAgNTYgKysKIC4uLi9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcCAgICB8ICA5MSArKysKIC4uLi9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmggICAgICB8ICA2OCArKysKIC4uLi9w
bGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCB8ICAgMiArLQogLi4uL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIHwgICAyICstCiBUb29scy9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKwogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5ICAgICAgIHwgICAyICsKIFRvb2xzL2dzdHJl
YW1lci9qaGJ1aWxkLm1vZHVsZXMgICAgICAgICAgICAgICB8ICAgNCArLQogLi4uUkVBTV9DT0xM
RUNUSU9OLW9uLUVWRU5UX1NUUkVBTV9DT0xMLnBhdGNoIHwgIDMzICsrCiA0MyBmaWxlcyBjaGFu
Z2VkLCAyOTgzIGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckF1ZGlvQ2FwdHVyZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2Fw
dHVyZURldmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckNhcHR1cmVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNv
dXJjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0
dXJlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tH
U3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9vbHMvZ3N0
cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFzZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFN
X0NPTExFQ1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2gKCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWRjNzYyMzE4
MmUuLjUzNWJmMzM0OTRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTgtMDUtMTggIFRoaWJh
dWx0IFNhdW5pZXIgIDx0c2F1bmllckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
U3RhcnQgaW1wbGVtZW50aW5nIE1lZGlhU3RyZWFtIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
czogUmVhY3RpdmF0ZSBNZWRpYVN0cmVhbSB0ZXN0cyBhbmQgZW5hYmxlIGFsbCB0ZXN0cworICAg
ICAgICByZWxhdGVkIHRvIHRoZSBtZWRpYURldmljZS5lbnVtZXJhdGVEZXZpY2VzIGFuZCBNZWRp
YVN0cmVhbSAobm90IFJUQ1BlZXJDb25uZWN0aW9uIG5vcgorICAgICAgICB3ZWJhdWRpbykuCisK
IDIwMTgtMDUtMzEgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNraXAgaHR0cC90ZXN0cy9zZWN1cml0eS9yZWZlcnJlci1wb2xpY3ktaGVhZGVyLmh0bWwg
b24gV2luZG93cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggMTQwOTZiMGNhNjMuLmJkZjNkNGRhMWZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucwpAQCAtNTczLDY2ICs1NzMsMzEgQEAgd2Via2l0Lm9yZy9iLzk5MDM2
IGZhc3Qvc2hhZG93LWRvbS9wb2ludGVybG9ja2VsZW1lbnQtaW4tc2xvdC5odG1sIFsgU2tpcCBd
CiB3ZWJraXQub3JnL2IvODUyMTEgaWV0ZXN0Y2VudGVyL2NzczMvZmxleGJveC9mbGV4Ym94LWFs
aWduLXN0cmV0Y2gtMDAxLmh0bSBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzg1
MjEyIGlldGVzdGNlbnRlci9jc3MzL2ZsZXhib3gvZmxleGJveC1sYXlvdXQtMDAyLmh0bSBbIElt
YWdlT25seUZhaWx1cmUgXQogCi0jIFNraXBwaW5nIHVudGlsIGJhY2tlbmQgaXMgaW1wbGVtZW50
ZWQKLWZhc3QvbWVkaWFzdHJlYW0gWyBTa2lwIF0KIHdlYnJ0YyBbIFNraXAgXQogaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvIFsgU2tpcCBdCiBodHRwL3Rlc3RzL3dlYnJ0
YyBbIFNraXAgXQogIyBUaGUgTWVkaWFTdHJlYW0gaW1wbGVtZW50YXRpb24gaXMgYWxzbyBzdGls
bCBub3QgY29tcGxldGVkCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9tb2Nr
LW1lZGlhLXNvdXJjZS13ZWJhdWRpby5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUg
XQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vbW9jay1tZWRpYS1zb3VyY2Uu
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW0tdmlkZW8tZWxlbWVudC10cmFjay1zdG9wLmh0bWwgWyBQYXNzIENyYXNoIF0KK3dl
YmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1l
bnQtdHJhY2stc3RvcC5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kdG1mLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtp
dC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNhbmRp
ZGF0ZS1ldmVudC5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9n
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLXR3by1kaWFsb2dzLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJl
bW90ZWx5LWFzc2lnbmVkLXRyYW5zY2VpdmVyLW1pZC5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNl
dExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5
MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRp
b24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtdHdvLWRpYWxvZ3MuaHRtbCBbIEZh
aWx1cmUgQ3Jhc2ggXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUnRw
U2VuZGVyLXJlcGxhY2VUcmFjay5odG1sIFsgRmFpbHVyZSBdCiAjIENyYXNoIGlzIHdlYmtpdC5v
cmcvYi8xODQyOTIKIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBQYXNzIENyYXNoIF0KLXdl
YmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLUFkZFJl
bW92ZVN0cmVhbS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGQtcmVtb3ZlVHJhY2suaHRtbCBbIEZhaWx1cmUg
XQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
YWRkVHJhY2stcmV1c2Utc2VuZGVyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWFkZFRyYW5zY2VpdmVyLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWNsb3NlZC1zdGF0ZS5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1jcmVhdGVBbnN3ZXIuaHRtbCBb
IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tY3JlYXRlT2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAz
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwuaHRtbCBbIEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24taGF2ZS1sb2NhbC1vZmZlci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLXByYW5zd2Vy
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLWhhdmUtcmVtb3RlLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtcmVt
b3RlLXByYW5zd2VyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZS5odG1sIFsgVGltZW91dCBdCi13ZWJraXQu
b3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pY2Vjb25uZWN0
aW9uc3RhdGVjaGFuZ2UtZXZlbnQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzc5MjAz
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY29ubmVjdGlvbnN0YXRlY2hh
bmdlLWV2ZW50Lmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzc5MjAzIGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlLmh0bWwgWyBGYWlsdXJlIFRpbWVv
dXQgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24taW5zcGVjdC1hbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci1idW5kbGVQb2xp
Y3ktYnVuZGxlLW9ubHkuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1sZWdhY3ktc3RyZWFtLWJhc2VkLWFwaS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2Iv
NzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9u
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLW1vcmUtbWVkaWEtdG8tbmVnb3RpYXRlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW9ubmVnb3Rp
YXRpb25uZWVkZWQuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tb3ZlcmxvYWRlZC1vcGVyYXRpb25zLXBhcmFtcy5o
dG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1vdmVybG9hZGVkLW9wZXJhdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3Rl
RGVzY3JpcHRpb24uaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhYmxlLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2Vs
ZWN0b3IuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJl
YW0vUlRDVHJhY2tFdmVudC1jb25zdHJ1Y3Rvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1j
YWxsYmFja3Mtc2luZ2xlLWRpYWxvZy5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvNzkyMDMgd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb3NvdXJjZW5vZGUuaHRtbCBbIEZhaWx1
cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlk
ZW8tZWxlbWVudC1kaXNwbGF5cy1idWZmZXIuaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi83
OTIwMyBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQtdmlkZW8tdHJh
Y2tzLWRpc2FibGVkLXRoZW4tZW5hYmxlZC5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5
MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC5odG1sIFsgQ3Jh
c2ggXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWlu
dHMtYWR2YW5jZWQuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQtdmlkZW8tdHJhY2tzLWRpc2FibGVkLXRo
ZW4tZW5hYmxlZC5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBm
YXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQtZGlzcGxheXMtYnVmZmVy
Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIwMyBodHRwL3Rlc3RzL21lZGlhL21l
ZGlhLXN0cmVhbS9nZXR1c2VybWVkaWEtd2l0aC1jYW52YXMuaHRtbCBbIENyYXNoIF0KLXdlYmtp
dC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLU1lZGlhRWxlbWVudC1z
ZXRPYmplY3QtbnVsbC5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGF0cy5odG1sIFsgVGltZW91dCBdCi13ZWJr
aXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczJkLWhl
YXZ5LWRyYXdpbmcuaHRtbCBbIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVk
aWFzdHJlYW0vZ2V0LXVzZXItbWVkaWEtb24tbG9hZGVkbWV0YWRhdGEuaHRtbCBbIFRpbWVvdXQg
XQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vbG9jYWwtYXVkaW8tcGxheWlu
Zy1ldmVudC5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0
cmVhbS9tZWRpYS1zdHJlYW0tdHJhY2stc291cmNlLWZhaWx1cmUuaHRtbCBbIFRpbWVvdXQgXQog
d2Via2l0Lm9yZy9iLzc5MjAzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFj
YXB0dXJlLXN0cmVhbXMvTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXByZWxvYWQtbm9uZS5odHRw
cy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cmVhbVRyYWNrLWVuZC1t
YW51YWwuaHR0cHMuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE1MTM0NCBmYXN0L21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1lbmRlZC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQpA
QCAtNjQzLDYgKzYwOCw5IEBAIHdlYmtpdC5vcmcvYi8xNzMyNTcgZmFzdC9tZWRpYXN0cmVhbS9n
ZXRVc2VyTWVkaWEtZ3JhbnQtcGVyc2lzdGVuY3kzLmh0bWwgWyBQYXNzCiAKICMgQ2FudmFzIGNh
cHR1cmVTdHJlYW0gc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQKIHdlYmtpdC5vcmcvYi8xNjk4
MTEgZmFzdC9tZWRpYWNhcHR1cmVmcm9tZWxlbWVudCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzE2
OTgxMSBmYXN0L21lZGlhc3RyZWFtL2NhcHR1cmVTdHJlYW0vIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMTY5ODExIGZhc3QvbWVkaWFzdHJlYW0vY2FwdHVyZVN0cmVhbS9jYW52YXMyZC5odG1s
IFsgQ3Jhc2ggVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTY5ODExIGZhc3QvbWVkaWFzdHJlYW0v
Y2FwdHVyZVN0cmVhbS9jYW52YXMzZC5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCiAKICMgUmVxdWly
ZXMgUmVzb2x1dGlvbiBNZWRpYSBRdWVyeSBzdXBwb3J0CiB3ZWJraXQub3JnL2IvMTAwMTM3IGZh
c3QvbWVkaWEvbXEtcmVzb2x1dGlvbi5odG1sIFsgRmFpbHVyZSBdCkBAIC0xMjY4LDI1ICsxMjM2
LDE4IEBAIHdlYmtpdC5vcmcvYi8xMzE1NDYgbWVkaWEvdHJhY2svdHJhY2staW4tYmFuZC5odG1s
IFsgQ3Jhc2ggVGltZW91dCBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzE2Mzc4MiBtZWRpYS92
aWRlby1wbGF5ZWQtcmFuZ2VzLTEuaHRtbCBbIENyYXNoIFBhc3MgXQogCi13ZWJraXQub3JnL2Iv
MTY5ODExIGZhc3QvbWVkaWFzdHJlYW0vY2FwdHVyZVN0cmVhbS9jYW52YXMyZC5odG1sIFsgQ3Jh
c2ggVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTY5ODExIGZhc3QvbWVkaWFzdHJlYW0vY2FwdHVy
ZVN0cmVhbS9jYW52YXMzZC5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCi0KIHdlYmtpdC5vcmcvYi8x
NzIyODEgYWNjZXNzaWJpbGl0eS9pbnNlcnQtY2hpbGRyZW4tYXNzZXJ0Lmh0bWwgWyBDcmFzaCBd
CiAKIHdlYmtpdC5vcmcvYi8xNzI5NTUgbWVkaWEvdmlkZW8tcHJlbG9hZC5odG1sIFsgQ3Jhc2gg
UGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8xNzU1NzUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5
LXN0YXRlcy9hdXRvcGxheS13aXRoLXNsb3ctdGV4dC10cmFja3MuaHRtbCBbIENyYXNoIFBhc3Mg
XQogCi13ZWJraXQub3JnL2IvMTc2ODAxIGZhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWlu
dHMtYXVkaW8uaHRtbCBbIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xNzY4MDEgZmFzdC9tZWRpYXN0
cmVhbS9hcmd1bWVudC10eXBlcy5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8x
NzY4MDMgaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3NlbmQtaHlicmlkLWJsb2ItdXNpbmctb3Blbi1w
YW5lbC5odG1sIFsgQ3Jhc2ggXQogCi13ZWJraXQub3JnL2IvMTc2ODU2IGZhc3QvbWVkaWFzdHJl
YW0vYXBwbHktY29uc3RyYWludHMtdmlkZW8uaHRtbCBbIENyYXNoIF0KLQogIyBTZWUgYWxzbyB3
ZWJraXQub3JnL2IvMTQxNjk5CiB3ZWJraXQub3JnL2IvMTc3NTM0IGZhc3QvYXR0YWNobWVudC9h
dHRhY2htZW50LXJlc3BlY3RzLWNzcy1zaXplLmh0bWwgWyBDcmFzaCBJbWFnZU9ubHlGYWlsdXJl
IF0KLXdlYmtpdC5vcmcvYi8xNzc1MzUgZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1kZXZpY2UtaW5m
by5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAjIFNlZSBhbHNvIHdlYmtpdC5vcmcvYi8xNjM1MjggVGhy
ZWFkZWQgY29tcG9zaXRvciBmYWlsdXJlcyBjYXVzZWQgYnkgb25lIG9mIHIyMDM0OTYsIHIyMDM0
OTcsIG9yIHIyMDM0OTgKIHdlYmtpdC5vcmcvYi8xNzc1MzYgbWVkaWEvdmlkZW8tb2JqZWN0LWZp
dC5odG1sIFsgQ3Jhc2ggSW1hZ2VPbmx5RmFpbHVyZSBdCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzN2E3YzNj
Yjc4OS4uY2NhNmI2MTQ4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjAgQEAKKzIwMTgtMDUt
MzAgIFRoaWJhdWx0IFNhdW5pZXIgIDx0c2F1bmllckBpZ2FsaWEuY29tPiBhbmQgQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIFN0YXJ0
IGltcGxlbWVudGluZyBNZWRpYVN0cmVhbSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSBhZGRpbmcgYWxsIHRoZSByZXF1aXJlZCBjbGFz
c2VzIHRvIG1ha2UgdGhlCisgICAgICAgIE1lZGlhU3RyZWFtIEFQSSB3b3JrLCB0aGF0IG1lYW5z
IG91ciBvd24gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQworICAgICAgICBmb3Ig
dGhlIHBsYXRmb3JtLCB0aGUgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIsIHRoZSBhdWRp
by92aWRlbyBjYXB0dXJlcnMKKyAgICAgICAgYW5kIHRoZWlyIHJlc3BlY3RpdmUgYXVkaW8vdmlk
ZW8gc291cmNlcyBhcyB3ZWxsIGFzIGEgZGVkaWNhdGVkIEdTdHJlYW1lciBTb3VyY2UKKyAgICAg
ICAgdGhhdCBhZGRzIHN1cHBvcnQgZm9yIHVzaW5nIE1lZGlhU3RyZWFtIHN0cmVhbSBpbnNpZGUg
cGxheWJpbjMuCisgICAgICAgIFdlIGFyZSB1c2luZyB0aGUgR3N0RGV2aWNlTW9uaXRvciB0byBs
aXN0IGRldmljZXMgb24gdGhlIGRldmljZXMuCisKKyAgICAgICAgRW5hYmxlIG1lZGlhc3RyZWFt
IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBBZGRlZCB0aGUg
bmV3IGZpbGVzIHRvIHRoZSBjb21waWxhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9B
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6IEFkZGVkIG5ldyBHU3RyZWFtZXIgdHlwZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9QbGF0Zm9ybUF1ZGlvRGF0YS5oOiBBZGRlZCBuZXcgR1N0cmVh
bWVyIHR5cGUgZm9yCisgICAgICAgIHRoZSBHU3RyZWFtZXJBdWRpb0RhdGEgY2xhc3MuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2spOiBUaGlzIGZ1bmN0aW9u
IGFuZCB0aGUgbmV4dAorICAgICAgICBvbmUgaGVscCB1cyB0byBjb25uZWN0IGEgbW9uaXRvcmlu
ZyBjYWxsYmFjayB0byBhIHBpcGVsaW5lIGZvcgorICAgICAgICBkZWJ1Z2dpbmcuCisgICAgICAg
IChXZWJDb3JlOjpjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKTogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oOiBEaXR0
bworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpsb2FkKTogTWFrZSB1c2Ugb2YgdGhlIGxvYWRGdWxsKCkgbWV0aG9kLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbCk6IFZlcnkg
c2ltaWxhciB0byBsb2FkKCkKKyAgICAgICAgYnV0IGFsbG93cyBzcGVjaWZ5aW5nIHdoYXQgcGlw
ZWxpbmUgdHlwZSB0byB1c2UgKG51bGwgdG8gbGV0IHRoZSBmdW5jdGlvbiBkZXRlcm1pbmUKKyAg
ICAgICAgd2hpY2ggb25lIHNob3VsZCBiZSB1c2VkKS4gVGhpcyBpcyByZXF1aXJlZCBhcyB3ZSBm
b3JjZSB0byBhbHdheXMgdXNlIHBsYXliaW4zIGZvciB0aGUKKyAgICAgICAgbWVkaWFzdHJlYW0g
c291cmNlIGFzIGl0IHJlbGllcyBvbiB0aGUgR3N0U3RyZWFtIEFQSS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbiBjb25zdCk6
IFN0eWxlIGZpeC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bmF0dXJhbFNpemUgY29uc3QpOiBBZGRlZCwgdXNlIE1lZGlhU3RyZWFtIHNwZWNpZmljIGlu
Zm9ybWF0aW9uIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6dXBkYXRlVHJhY2tzKTogU29tZSBzdHlsZSBmaXhlcy4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6IEVu
aGFuY2UgZG90ZmlsZXMgbmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeSk6IE1pbm9yIGZvcm1hdHRp
bmcgZml4LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
b3VyY2VTZXR1cCk6IFNldCBNZWRpYVN0cmVhbSBvbiBXZWJLaXRNZWRpYVN0cmVhbVNvdXJjZSB3
aGVuIHNldHRpbmcgaXQgdXAuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6IEFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgTWVkaWFT
dHJlYW0gaWYgc3VwcG9ydCBpcyBidWlsdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbik6IE1ha2Ugc3VyZSBwbGF5YmluMyBp
cyBmb3JjZWQgd2hlbiBsb2FkaW5nIGEgTWVkaWFTdHJlYW0uCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOiBBZGQgYSBy
ZWZlcmVuY2UgdG8gdGhlIE1lZGlhU3RyZWFtIG9iamVjdCBhbmQgZGVjbGFyZSBsb2FkRnVsbCBh
bmQgbmF0dXJhbFNpemUgb3ZlcnJpZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cyk6IFJlZ2lzdGVyIHRoZSBuZXcg
TWVkaWFTdHJlYW1TcmMgZWxlbWVudC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKTog
TWFrZSBzdXJlIHRoYXQgTWVkaWFTdHJlYW0gTUFJTiB0cmFja3MgYXJlIHNlbGVjdGVkIGJ5IGRl
ZmF1bHQuIFdlIGhhdmUgbm8gd2F5IHRvIGRvIGl0IGluIE1lZGlhU3RyZWFtU3JjIG5vdyBhcyB0
aGUgR3N0U3RyZWFtQ29sbGVjdGlvbiBpcyByZWNyZWF0ZWQgYnkgcGFyc2ViaW4uCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oOiBNYWtlIENhcHR1
cmVGYWlsZWQgYSB2aXJ0dWFsIG1ldGhvZCBhcyBpbiBvdXIgbW9ja3Mgd2UgcmVxdWlyZSBuZWVk
IHRvIG1ha2UKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXI6OnNpbmdsZXRvbik6IFJlbW92ZSB0aGUgY29kZQorICAgICAgICB1c2VkIGZvciBjb21waWxh
dGlvbiBmb3IgdGhlIHBsYXRmb3JtIHdoZW4gd2UgZG8gbm90IGhhdmUgYQorICAgICAgICBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLiBOb3cgd2UgcmV0dXJuIHRoZSBwcm9wZXIg
Y2xhc3MKKyAgICAgICAgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAg
ICAgQWRkZWQgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSBSZWFsdGltZU1lZGlhU291cmNlIGZvciB0
aGUgQXVkaW8KKyAgICAgICAgd2l0aCBHU3RyZWFtZXIuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorICAgICAg
ICBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5jcHA6IEFkZGVkCisgICAgICAgIHRoaXMgY2xhc3MgdGhhdCByZXBy
ZXNlbnRzIHRoZSBHU3RyZWFtZXIgcGlwZWxpbmUgdGhhdCBjYXB0dXJlcworICAgICAgICBhdWRp
byBmcm9tIHRoZSBzeXN0ZW0gZGV2aWNlcywgaXQgaW5oZXJpdHMgZnJvbSBHU3RyZWFtZXJDYXB0
dXJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
QXVkaW9DYXB0dXJlci5oOiBEaXRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaDogQWRkZWQgdGhpcworICAgICAgICBjbGFzcyBp
bXBsZW1lbnRpbmcgUGxhdGZvcm1BdWRpb0RhdGEgZm9yIHRoZSBHU3RyZWFtZXIgcGxhdGZvcm0s
CisgICAgICAgIHVzZWQgdG8gcGFzcyB0aGUgc2FtcGxlcyBpbmZvcm1hdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5oOgorICAgICAgICBBZGRlZCB0aGlzIGNsYXNzIGltcGxlbWVudGluZyBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uIHRvIGV4cG9ydCB0aGUKKyAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIGF1ZGlvIHN0cmVhbSB0byBsaWJ3ZWJydGMuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2UuaDogQWRkZWQKKyAgICAgICAg
dGhpcyBiYXNlIGNsYXNzIGZvciB0aGUgYXVkaW8gYW5kIHZpZGVvIGNhcHR1cmluZyBkZXZpY2Vz
LCBpdAorICAgICAgICBpbXBsZW1lbnRzIGdlbmVyYWwgV2ViS2l0IENhcHR1cmVEZXZpY2UgY2xh
c3MuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNh
cHR1cmVEZXZpY2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgQWRkZWQgdGhpcyBjbGFzcyB0aGF0IGlt
cGxlbWVudHMgdGhlIHN5c3RlbSBtb25pdG9yIHRvIGdldCB0aGUKKyAgICAgICAgbGlzdCBvZiBh
dmFpbGFibGUgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLiBJdCB1c2VzIEdzdERldmljZU1vbml0b3IK
KyAgICAgICAgdG8gaGFuZGxlIHRoZSBvcGVyYXRpb24uIEl0IHVzZXMgdHdvIHNpbmdsZXRvbiBk
ZXZpY2UgbWFuYWdlcnMgb25lCisgICAgICAgIGZvciBhdWRpbyBhbmQgYW5vdGhlciBvbmUgZm9y
IHZpZGVvLCBhcyByZXF1aXJlZCBieSB0aGUKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlciBkZXNpZ24uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHA6IEFkZGVkIHRoaXMK
KyAgICAgICAgYmFzZSBjbGFzcyByZXByZXNlbnRpbmcgaG93IEdTdHJlYW1lciBjYXB0dXJlcyB0
aGUgbWVkaWEgZnJvbSB0aGUKKyAgICAgICAgaW5wdXQgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLiBU
d28gY2xhc3NlcyBpbmhlcml0IGZyb20gdGhpcyBvbmUgdG8KKyAgICAgICAgY2FwdHVyZSBhdWRp
byBhbmQgdmlkZW8uIEl0IHNldHVwcyB0aGUgR1N0cmVhbWVyIHBpcGVsaW5lIGFuZCBhZGRzCisg
ICAgICAgIGZ1bmN0aW9ucyB0byBjb250cm9sIGl0LgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5oOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgSW1wbGVtZW50cyBhIHN1YmNsYXNzIG9mIEdzdEJpbiBhcyBh
IHNvdXJjZSBlbGVtZW50IHRoYXQgd2lsbCBjb250YWluIHNldmVyYWwKKyAgICAgICAgR3N0QXBw
U3JjLCBiYXNpY2FsbHkgb25lIHBlciBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSBvZiB0aGUgTWVk
aWFTdHJlYW1Qcml2YXRlCisgICAgICAgIHBhc3NlZCBpbiBwYXJhbWV0ZXIuIEl0IGFkZHMgT2Jz
ZXJ2ZXJzIG9uIHRoZSBNZWRpYVN0cmVhbVRyYWNrcyBhbmQKKyAgICAgICAgcHVzaGVzIHRoZSBk
YXRhIHRvIHRoZSBzb3VyY2VzIGFzIHJlcXVpcmVkLiBUaGUgZWxlbWVudCBpbXBsZW1lbnRzIHRo
ZSBHc3RVUklIYW5kbGVyCisgICAgICAgIGludGVyZmFjZSBzbyBpdCBjYW4gYmUgdXNlZCBpbiBw
bGF5YmluLiBUaGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIGlzIHJlc3BvbnNpYmxlCisg
ICAgICAgIGZvciBwYXNzaW5nIHRoZSBNZWRpYVN0cmVhbVByaXZhdGUgb2JqZWN0IHRvIHRoZSBz
b3VyY2Ugd2hlbiByZXF1aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OndlYmtpdE1lZGlhU3RyZWFt
U3JjUGFkUHJvYmVDYik6IEV2ZW50IHByb2JlIHRoYXQgZml4ZXMgc3RyZWFtX3N0YXJ0IGV2ZW50
cyAoc2V0dGluZyB0aGUgSUQgZXRjKQorICAgICAgICBhbmQgZmluYWxseSBhZGQgc3JjIHBhZHMg
dG8gdGhlIHBpcGVsaW5lLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcDoK
KyAgICAgICAgQWRkZWQgdGhpcyBSZWFsdGltZU1lZGlhU291cmNlIHJlcHJlc2VudGluZyB0aGUg
c291cmNlIG9mIHRoZQorICAgICAgICB2aWRlbyBkYXRhIGZvciB0aGUgR1N0cmVhbWVyIHBsYXRm
b3JtLiBJdCBoYW5kbGVzIHRoZSBzZXR0aW5ncyBhbmQKKyAgICAgICAgY2FwYWJpbGl0aWVzIG9m
IHRoZSBzb3VyY2UgYW5kIGNyZWF0ZXMgdGhlIGNhcHR1cmVyIHVzZWQgdG8KKyAgICAgICAgY29u
dHJvbCB0aGUgb3BlcmF0aW9uIG9mIHRoZSBzdHJlYW0uCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9D
YXB0dXJlci5jcHA6IEFkZGVkCisgICAgICAgIHRoaXMgY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9t
IHRoZSBHU3RyZWFtZXJDYXB0dXJlciBhbmQgY29udHJvbHMKKyAgICAgICAgdGhlIEdTdHJlYW1l
ciBwaXBlbGluZXMgb2YgdGhlIHZpZGVvIHN0cmVhbXMgb2YgdGhlIHN5c3RlbS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5o
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHA6IEFkZGVkLiBJbXBsZW1lbnRhdGlvbiBvZiBh
IE1vY2sgY2FwdHVyZXIgZm9yIGF1ZGlvIHN0cmVhbS4KKyAgICAgICAgU3ViY2xhc3NlcyBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVyIGFuZCB3cmFwcyBhIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlIHNv
IHRoYXQgdGhlIGJlaGF2aW91ciBpcyB0aGUgc2FtZSBhIE1vY2tSZWFsdGltZUF1ZGlvU291cmNl
CisgICAgICAgIGJ1dCBzdGlsbCB0aGUgR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uIGNvZGUgcGF0
aHMgYXJlIHRlc3RlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
TW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJj
ZS5jcHA6IEFkZGVkLiBJbXBsZW1lbnRhdGlvbiBvZiBhIE1vY2sgY2FwdHVyZXIgZm9yIHZpZGVv
IHN0cmVhbS4KKyAgICAgICAgU3ViY2xhc3NlcyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyIGFuZCB3
cmFwcyBhIE1vY2tSZWFsdGltZVZpZGVvU291cmNlIHNvIHRoYXQgdGhlIGJlaGF2aW91ciBpcyB0
aGUgc2FtZSBhIE1vY2tSZWFsdGltZVZpZGVvU291cmNlCisgICAgICAgIGJ1dCBzdGlsbCB0aGUg
R1N0cmVhbWVyIGltcGxlbWVudGF0aW9uIGNvZGUgcGF0aHMgYXJlIHRlc3RlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHA6CisgICAgICAgIEFkZGVk
IHRoaXMgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlcgorICAgICAgICBmdW5jdGlvbnMgdG8gY29uZmlndXJlIHRoZSBiYXNlIGNsYXNzIGZvciB0
aGUgcGxhdGZvcm0sIHVzaW5nIHRoZQorICAgICAgICBvdGhlciBHU3RyZWFtZXIgY2xhc3Nlcy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcDogRG8g
bm90IGJ1aWxkIDo6Y3JlYXRlIGlmIEdTdHJlYW1lciBpbXBsZW1lbnRhdGlvbiBpcyBidWlsdAor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOiBEbyBu
b3QgYnVpbGQgOjpjcmVhdGUgaWYgR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uIGlzIGJ1aWx0CisK
IDIwMTgtMDQtMTMgIFRoaWJhdWx0IFNhdW5pZXIgIDx0c2F1bmllckBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHU3RyZWFtZXJdIEZpeCB0aGUgd2F5IEdzdFN0cmVhbUNvbGxlY3Rpb24gaXMgaGFu
ZGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IDNkNWE2ZTAw
MjVhLi4zMzNmMWQ2NWJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFr
ZQpAQCAtMzMsNiArMzMsMjIgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElP
KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxp
bmUuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKworICAgICAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0
dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKKyAgICAgICAgcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5j
cHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVv
Q2FwdHVyZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJMaWJXZWJSVEMuY3BwCisKKyAgICAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVBdWRp
b1NvdXJjZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAK
ICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9S
SUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgKaW5kZXggZTQ0MGRjOTBhM2UuLjJiYTU4NWM5YzA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oCkBAIC0zNSw2ICszNSw3IEBAIHN0cnVjdCBQbGF0Zm9ybURlc2NyaXB0aW9uIHsKICAgICBl
bnVtIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ0FBdWRpb1N0cmVhbUJhc2ljVHlwZSwKKyAg
ICAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiwKICAgICB9IHR5cGU7CiAgICAg
VmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kj4gZGVzY3JpcHRpb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUGxhdGZvcm1BdWRpb0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1BsYXRmb3JtQXVkaW9EYXRhLmgKaW5kZXggZTQ1NDRmNjMyNTQuLmNkYTcyZThhYjNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QbGF0Zm9ybUF1ZGlvRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmgK
QEAgLTM0LDYgKzM0LDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgS2luZCB7CiAgICAgICAg
IE5vbmUsCiAgICAgICAgIFdlYkF1ZGlvQnVmZmVyTGlzdCwKKyAgICAgICAgR1N0cmVhbWVyQXVk
aW9EYXRhLAogICAgIH07CiAKICAgICB2aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IEtpbmQ6Ok5vbmU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKaW5kZXggZTUxNGZlMzQy
OGQuLjQzNTA1N2E5ZWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRp
ZXMuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2ds
aWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYm
IFVTRShHU1RSRUFNRVJfTVBFR1RTKQogI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQpAQCAt
MzIwLDYgKzMyMSw0NiBAQCBib29sIGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShH
TGlzdCogZWxlbWVudEZhY3RvcmllcywgY29uc3QgY2hhciogY2FwcwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIHNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBH
c3RNZXNzYWdlKiBtZXNzYWdlLCBHc3RCaW4qIHBpcGVsaW5lKQoreworICAgIHN3aXRjaCAoR1NU
X01FU1NBR0VfVFlQRShtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Cisg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUsICJHb3QgbWVzc2FnZTogJSIgR1NUX1BU
Ul9GT1JNQVQsIG1lc3NhZ2UpOworICAgICAgICB7CisgICAgICAgICAgICBXVEY6OlN0cmluZyBk
b3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCIlc19lcnJvciIsIEdTVF9PQkpFQ1RfTkFNRShw
aXBlbGluZSkpOworICAgICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RT
KHBpcGVsaW5lLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX01FU1NBR0Vf
U1RBVEVfQ0hBTkdFRDoKKyAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA9PSBH
U1RfT0JKRUNUKHBpcGVsaW5lKSkgeworICAgICAgICAgICAgR3N0U3RhdGUgb2xkU3RhdGUsIG5l
d1N0YXRlLCBwZW5kaW5nOworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hh
bmdlZChtZXNzYWdlLCAmb2xkU3RhdGUsICZuZXdTdGF0ZSwgJnBlbmRpbmcpOworCisgICAgICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUsICJTdGF0ZSBjaGFuZ2VkIChvbGQ6ICVzLCBu
ZXc6ICVzLCBwZW5kaW5nOiAlcykiLAorICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKG9sZFN0YXRlKSwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShuZXdTdGF0ZSksCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUocGVuZGluZykpOworCisgICAgICAgICAgICBXVEY6OlN0cmluZyBkb3RGaWxlTmFtZSA9
IFN0cmluZzo6Zm9ybWF0KCIlc18lc18lcyIsCisgICAgICAgICAgICAgICAgR1NUX09CSkVDVF9O
QU1FKHBpcGVsaW5lKSwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFt
ZShvbGRTdGF0ZSksCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
bmV3U3RhdGUpKTsKKworICAgICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRI
X1RTKEdTVF9CSU4ocGlwZWxpbmUpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVO
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBjb25uZWN0U2ltcGxlQnVzTWVz
c2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKQoreworICAgIEdSZWZQdHI8R3N0QnVz
PiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKHBpcGVs
aW5lKSkpOworICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKGJ1cy5nZXQoKSwgUnVu
TG9vcFNvdXJjZVByaW9yaXR5OjpSdW5Mb29wRGlzcGF0Y2hlcik7CisgICAgZ19zaWduYWxfY29u
bmVjdChidXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhzaW1wbGVCdXNNZXNzYWdlQ2Fs
bGJhY2spLCBwaXBlbGluZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmgKaW5kZXggMjU5MjU1ZTc0MWUuLjNiMjU4NTg2ZmU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lckNvbW1vbi5oCkBAIC04Miw2ICs4Miw4IEBAIGlubGluZSBHc3RDbG9ja1Rp
bWUgdG9Hc3RDbG9ja1RpbWUoY29uc3QgTWVkaWFUaW1lICZtZWRpYVRpbWUpCiB9CiAKIGJvb2wg
Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVz
LCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nKTsKK3ZvaWQgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VD
YWxsYmFjayhHc3RFbGVtZW50ICpwaXBlbGluZSk7CisKIH0KIAogI2lmbmRlZiBHU1RfQlVGRkVS
X0RUU19PUl9QVFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKaW5kZXggMGViN2NlNzMyYjIuLmU3NjYzYTY5ZmE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNTEsNiArNTEsMTAgQEAKICNp
bmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tf
VkVSU0lPTigxLCAxMCwgMCkKKyNpbmNsdWRlICJnc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJl
YW1Tb3VyY2UuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogI2luY2x1ZGUg
IkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiSW5iYW5kTWV0YWRhdGFU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCkBAIC0yMzcsNiArMjQxLDExIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsKQog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKK3sKKyAgICBsb2FkRnVsbCh1cmxTdHJpbmcsIG51bGxwdHIpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZEZ1bGwoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIGNvbnN0IGdjaGFyICpwbGF5YmluTmFtZSkKIHsKICAgICAvLyBGSVhNRTogVGhp
cyBtZXRob2QgaXMgc3RpbGwgY2FsbGVkIGV2ZW4gaWYgc3VwcG9ydHNUeXBlKCkgcmV0dXJuZWQK
ICAgICAvLyBJc05vdFN1cHBvcnRlZC4gVGhpcyB3b3VsZCBkZXNlcnZlIG1vcmUgaW52ZXN0aWdh
dGlvbiBidXQgbWVhbndoaWxlIG1ha2UKQEAgLTI1NCw3ICsyNjMsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAgICBjcmVhdGVHU1RQbGF5
QmluKGlzTWVkaWFTb3VyY2UoKSA/ICJwbGF5YmluIiA6IG51bGxwdHIpOworICAgICAgICBjcmVh
dGVHU1RQbGF5QmluKGlzTWVkaWFTb3VyY2UoKSA/ICJwbGF5YmluIiA6IHBsYXliaW5OYW1lKTsK
IAogICAgIGlmIChtX2ZpbGxUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2ZpbGxUaW1lci5z
dG9wKCk7CkBAIC0yOTIsMTIgKzMwMSwxOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSYgc3RyZWFtKQogeworI2lmIEdT
VF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQorICAgIG1fc3RyZWFtUHJpdmF0ZSA9ICZzdHJlYW07
CisgICAgbG9hZEZ1bGwoU3RyaW5nKCJtZWRpYXN0cmVhbTovLyIpICsgc3RyZWFtLmlkKCksICJw
bGF5YmluMyIpOworICAgIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpOworICAgIG1fcGxheWVy
LT5wbGF5KCk7CisjZWxzZQogICAgIC8vIFByb3Blcmx5IGZhaWwgc28gdGhlIGdsb2JhbCBNZWRp
YVBsYXllciB0cmllcyB0byBmYWxsYmFjayB0byB0aGUgbmV4dCBNZWRpYVBsYXllclByaXZhdGUu
CiAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CiAgICAgbV9w
bGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vu
ZGlmCiB9CiAjZW5kaWYKIApAQCAtMzMwLDcgKzM0Niw3IEBAIE1lZGlhVGltZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24oKSBjb25zdAogCiAgICAgLy8gUG9z
aXRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgbm8gYXN5bmMgc3RhdGUgY2hhbmdlIGlzIGdvaW5n
IG9uIGFuZCB0aGUgc3RhdGUgaXMgZWl0aGVyIHBhdXNlZCBvciBwbGF5aW5nLgogICAgIGdpbnQ2
NCBwb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgR3N0UXVlcnkqIHF1ZXJ5PSBn
c3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7CisgICAgR3N0UXVlcnkqIHF1
ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX1RJTUUpOwogICAgIGlmIChn
c3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeSkpCiAgICAgICAgIGdzdF9x
dWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKICAgICBnc3RfcXVlcnlf
dW5yZWYocXVlcnkpOwpAQCAtNjQ4LDYgKzY2NCwyNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2xlYXJUcmFja3MoKQogICAgICAgICAgICAgbV9jdXJyZW50IyNUeXBlIyNT
dHJlYW1JZCA9IFN0cmluZyhnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KKworRmxvYXRTaXpl
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAoreworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbiAmJiAhbV9j
dXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyPiB2aWRlb1RyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQobV9jdXJy
ZW50VmlkZW9TdHJlYW1JZCk7CisKKyAgICAgICAgaWYgKHZpZGVvVHJhY2spIHsKKyAgICAgICAg
ICAgIGF1dG8gdGFncyA9IGdzdF9zdHJlYW1fZ2V0X3RhZ3ModmlkZW9UcmFjay0+c3RyZWFtKCkp
OworICAgICAgICAgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAgICAgICBpZiAoZ3N0
X3RhZ19saXN0X2dldF9pbnQodGFncywgV0VCS0lUX01FRElBX1RSQUNLX1RBR19XSURUSCwgJndp
ZHRoKSAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLCBXRUJLSVRfTUVESUFfVFJBQ0tfVEFH
X0hFSUdIVCwgJmhlaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQorCisgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVy
YWxTaXplKCk7Cit9CiAjZWxzZQogI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgX2lkLCB0cmFj
a3MsIG1ldGhvZCwgc3RyZWFtKSBtX2hhcyMjVHlwZSMjID0gdHJ1ZTsKICNlbmRpZiAvLyBFTkFC
TEUoVklERU9fVFJBQ0spCkBAIC0xMTY2LDcgKzEyMDEsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAg
ICAvLyBDb25zdHJ1Y3QgYSBmaWxlbmFtZSBmb3IgdGhlIGdyYXBodml6IGRvdCBmaWxlIG91dHB1
dC4KICAgICAgICAgR3N0U3RhdGUgbmV3U3RhdGU7CiAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNl
X3N0YXRlX2NoYW5nZWQobWVzc2FnZSwgJmN1cnJlbnRTdGF0ZSwgJm5ld1N0YXRlLCBudWxscHRy
KTsKLSAgICAgICAgQ1N0cmluZyBkb3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJ3ZWJraXQt
dmlkZW8uJXNfJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShjdXJyZW50U3RhdGUpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpLnV0ZjgoKTsKKyAgICAgICAgQ1N0
cmluZyBkb3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCIlcy4lc18lcyIsIEdTVF9PQkpFQ1Rf
TkFNRShtX3BpcGVsaW5lLmdldCgpKSwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKGN1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRl
KSkudXRmOCgpOwogICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NU
X0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxl
TmFtZS5kYXRhKCkpOwogCiAgICAgICAgIGJyZWFrOwpAQCAtMTQzMiw3ICsxNDY4LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRy
eShHc3RUb2NFbnRyeSogZW50cnkKIAogICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdG9jX2Vu
dHJ5X2dldF90YWdzKGVudHJ5KTsKICAgICBpZiAodGFncykgewotICAgICAgICBnY2hhciogdGl0
bGUgPSAgbnVsbHB0cjsKKyAgICAgICAgZ2NoYXIqIHRpdGxlID0gbnVsbHB0cjsKICAgICAgICAg
Z3N0X3RhZ19saXN0X2dldF9zdHJpbmcodGFncywgR1NUX1RBR19USVRMRSwgJnRpdGxlKTsKICAg
ICAgICAgaWYgKHRpdGxlKSB7CiAgICAgICAgICAgICBjdWUtPnNldENvbnRlbnQodGl0bGUpOwpA
QCAtMTcyNyw2ICsxNzYzLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
b3VyY2VTZXR1cChHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQogICAgIGlmIChXRUJLSVRfSVNf
V0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKICAgICAgICAgd2ViS2l0V2ViU3JjU2V0TWVkaWFQ
bGF5ZXIoV0VCS0lUX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpLCBtX3BsYXllcik7CiAgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QoR1NUX0VMRU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwgImVs
ZW1lbnQtYWRkZWQiLCBHX0NBTExCQUNLKHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNr
KSwgdGhpcyk7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgR1NUX0NIRUNLX1ZFUlNJT04o
MSwgMTAsIDApCisgICAgfSBlbHNlIGlmIChXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NSQyhzb3Vy
Y2VFbGVtZW50KSkgeworICAgICAgICBhdXRvIHN0cmVhbSA9IG1fc3RyZWFtUHJpdmF0ZS5nZXQo
KTsKKyAgICAgICAgLy8gZ3N0X29iamVjdF9yZWYoc291cmNlRWxlbWVudCk7CisgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc291cmNlRWxlbWVudCwgInJlZiAlZCIsIEdTVF9PQkpFQ1RfUkVGQ09V
TlQoc291cmNlRWxlbWVudCkpOworICAgICAgICBBU1NFUlQoc3RyZWFtKTsKKyAgICAgICAgd2Vi
a2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJlYW0oV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoc291cmNl
RWxlbWVudCksIHN0cmVhbSk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTIyNzAsOCArMjMxNCwx
MCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgICAgICByZXR1cm4gcmVzdWx0OwogI2Vu
ZGlmCiAKKyNpZiAhRU5BQkxFKE1FRElBX1NUUkVBTSkgfHwgIUdTVF9DSEVDS19WRVJTSU9OKDEs
IDEwLCAwKQogICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CisjZW5kaWYKIAogICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjQzNCwxNyArMjQ4MCwyMCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBnY2hhciogcGxh
eWJpbk5hbWUpCiAgICAgQVNTRVJUKCFtX3BpcGVsaW5lKTsKIAogI2lmIEdTVF9DSEVDS19WRVJT
SU9OKDEsIDEwLCAwKQotICAgIG1faXNMZWdhY3lQbGF5YmluID0gIWdfZ2V0ZW52KCJVU0VfUExB
WUJJTjMiKTsKLSAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluKQorICAgIGlmIChnX2dldGVudigi
VVNFX1BMQVlCSU4zIikpCiAgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKKyNlbHNl
CisgICAgcGxheWJpbk5hbWUgPSAicGxheWJpbiI7CiAjZW5kaWYKIAogICAgIGlmICghcGxheWJp
bk5hbWUpCiAgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4iOwogCisgICAgbV9pc0xlZ2Fj
eVBsYXliaW4gPSAhZ19zdHJjbXAwKHBsYXliaW5OYW1lLCAicGxheWJpbiIpOworCiAgICAgLy8g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBz
bwogICAgIC8vIHdlIHNob3VsZCBub3QgYWRvcHQuCi0gICAgc2V0UGlwZWxpbmUoZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKHBsYXliaW5OYW1lLCAicGxheSIpKTsKKyAgICBzZXRQaXBlbGluZShn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UocGxheWJpbk5hbWUsIFN0cmluZzo6Zm9ybWF0KCJwbGF5
XyVwIiwgdGhpcykudXRmOCgpLmRhdGEoKSkpOwogICAgIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQo
R1NUX1NUUkVBTV9WT0xVTUUobV9waXBlbGluZS5nZXQoKSkpOwogCiAgICAgR1NUX0lORk8oIlVz
aW5nIGxlZ2FjeSBwbGF5YmluIGVsZW1lbnQ6ICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNMZWdh
Y3lQbGF5YmluKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmgKaW5kZXggMWFlNGE1NGJhZTAuLmIyZWU1ZTY5NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0xNzksNiArMTc5LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCBkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CiAKICAgICB2b2lkIHNldFBsYXliaW5VUkwoY29uc3Qg
VVJMJiB1cmxTdHJpbmcpOworICAgIHZvaWQgbG9hZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IGdjaGFyICpwbGF5YmluTmFtZSk7CiAKICNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwg
MCkKICAgICB2b2lkIHVwZGF0ZVRyYWNrcygpOwpAQCAtMjYyLDcgKzI2MywxMSBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9pc0xlZ2FjeVBsYXliaW47CiAjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwg
MTAsIDApCiAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBtX3N0cmVhbUNvbGxlY3Rp
b247Ci0jZW5kaWYKKyAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBmaW5hbDsKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IG1f
c3RyZWFtUHJpdmF0ZTsKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlmIC8v
IEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgIFN0cmluZyBtX2N1cnJlbnRBdWRpb1N0
cmVhbUlkOwogICAgIFN0cmluZyBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkOwogICAgIFN0cmluZyBt
X2N1cnJlbnRUZXh0U3RyZWFtSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKaW5kZXggOGE1M2RkZjZmMGUuLjFmNjhmMGJhNTdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
Y3BwCkBAIC04MSw2ICs4MSwxMCBAQAogI2VuZGlmIC8vICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAx
NCwgMCkKICNlbmRpZiAvLyBVU0UoTElCRVBPWFkpCiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNpbmNsdWRlICJnc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgorCiAjZGVmaW5lIEdTVF9VU0VfVU5T
VEFCTEVfQVBJCiAjaW5jbHVkZSA8Z3N0L2dsL2dsLmg+CiAjdW5kZWYgR1NUX1VTRV9VTlNUQUJM
RV9BUEkKQEAgLTE0Myw2ICsxNDcsOSBAQCB2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxl
bWVudHMoKQogICAgIGlmICghY2xlYXJLZXlEZWNyeXB0b3JGYWN0b3J5KQogICAgICAgICBnc3Rf
ZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0Y2xlYXJrZXkiLCBHU1RfUkFOS19QUklN
QVJZICsgMTAwLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBUKTsKICNlbmRpZgorI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIEdTVF9DSEVDS19WRVJTSU9OKDEsMTAsMCkKKyAgICBnc3Rf
ZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAibWVkaWFzdHJlYW1zcmMiLCBHU1RfUkFOS19QUklN
QVJZLCBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDKTsKKyNlbmRpZgogfQogCiBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdp
c3RlcldlYktpdEVsZW1lbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIuY3BwCmluZGV4IGM1NDIwMGVhZTgxLi43ZWE4MWI2NWI1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC00OCw2ICs0OCwxNCBA
QCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIo
V2Vha1B0cjxNZWRpYVBsYXllclByaXZhdAogICAgIDogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cih0aGlzLCBpbmRleCwgc3RyZWFtKQogICAgICwgbV9wbGF5ZXIocGxheWVyKQogeworICAgIGdp
bnQga2luZDsKKyAgICBhdXRvIHRhZ3MgPSBnc3Rfc3RyZWFtX2dldF90YWdzKG1fc3RyZWFtLmdl
dCgpKTsKKworICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLCAid2Via2l0LW1lZGlh
LXN0cmVhbS1raW5kIiwgJmtpbmQpICYmIGtpbmQgPT0gKGdpbnQpVmlkZW9UcmFja1ByaXZhdGU6
OktpbmQ6Ok1haW4pIHsKKyAgICAgICAgR3N0U3RyZWFtRmxhZ3Mgc3RyZWFtRmxhZ3MgPSBnc3Rf
c3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKTsKKyAgICAgICAgZ3N0X3N0cmVh
bV9zZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSwgKEdzdFN0cmVhbUZsYWdzKShzdHJlYW1G
bGFncyB8IEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpKTsKKyAgICB9CisKICAgICBtX2lkID0gZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSk7CiAgICAgc2V0QWN0aXZlKGdzdF9z
dHJlYW1fZ2V0X3N0cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpICYgR1NUX1NUUkVBTV9GTEFHX1NF
TEVDVCk7CiAgICAgbm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2Uu
aAppbmRleCA5YjQ1MTIwNWU1Yi4uNTQxMTA4NWM0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKQEAg
LTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbW9uaXRvck9yaWVu
dGF0aW9uKE9yaWVudGF0aW9uTm90aWZpZXImKSB7IH0KIAotICAgIHZvaWQgY2FwdHVyZUZhaWxl
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlRmFpbGVkKCk7CiAKICAgICAvLyBUZXN0aW5n
IG9ubHkKICAgICB2aXJ0dWFsIHZvaWQgZGVsYXlTYW1wbGVzKFNlY29uZHMpIHsgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKaW5kZXggMmVmYjgyZDFlNTguLjM4ODZmZjg3NWNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcApAQCAtNjQsMTQgKzY0LDcgQEAg
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2lu
Z2xldG9uKCkKICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyKiBvdmVycmlkZSA9IG1lZGlh
U3RyZWFtQ2VudGVyT3ZlcnJpZGUoKTsKICAgICBpZiAob3ZlcnJpZGUpCiAgICAgICAgIHJldHVy
biAqb3ZlcnJpZGU7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gUmV0dXJuIE1vY2tSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyIHRvIGF2b2lkIGNyYXNoLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcj4gY2VudGVyOwotICAgIHJldHVybiBjZW50ZXI7Ci0j
ZWxzZQogICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpwbGF0Zm9ybUNlbnRl
cigpOwotI2VuZGlmCiB9CiAKIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0U2hh
cmVkU3RyZWFtQ2VudGVyT3ZlcnJpZGUoUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciogY2VudGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWM1YWVhZmZmY2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtMCwwICsxLDIwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0
aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RS
RUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgiCisKKyNpbmNs
dWRlICJHU3RyZWFtZXJBdWRpb0RhdGEuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIu
aCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjb25zdCBzdGF0aWMgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSBkZWZhdWx0Vm9sdW1lQ2Fw
YWJpbGl0eSA9IENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoMC4wLCAxLjApOworY29uc3Qgc3RhdGlj
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OkVjaG9DYW5jZWxsYXRpb24gZGVmYXVs
dEVjaG9DYW5jZWxsYXRpb25DYXBhYmlsaXR5ID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6RWNob0NhbmNlbGxhdGlvbjo6UmVhZFdyaXRlOworCitHU1RfREVCVUdfQ0FURUdPUlko
d2Via2l0X2F1ZGlvX2NhcHR1cmVfc291cmNlX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF9hdWRpb19jYXB0dXJlX3NvdXJjZV9kZWJ1ZworCitzdGF0aWMgdm9pZCBpbml0
aWFsaXplR1N0cmVhbWVyRGVidWcoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1
Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcs
IFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X2F1ZGlvX2NhcHR1
cmVfc291cmNlX2RlYnVnLCAid2Via2l0YXVkaW9jYXB0dXJlc291cmNlIiwgMCwgIldlYktpdCBB
dWRpbyBDYXB0dXJlIFNvdXJjZS4iKTsKKyAgICB9KTsKK30KKworY2xhc3MgR1N0cmVhbWVyQXVk
aW9DYXB0dXJlU291cmNlRmFjdG9yeSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRp
b0NhcHR1cmVGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVh
dGVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBN
ZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVy
biBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UucGVyc2lzdGVudElk
KCksIGNvbnN0cmFpbnRzKTsKKyAgICB9Cit9OworCitzdGF0aWMgR1N0cmVhbWVyQXVkaW9DYXB0
dXJlU291cmNlRmFjdG9yeSYgbGliV2ViUlRDQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSgpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZUZh
Y3Rvcnk+IGZhY3Rvcnk7CisgICAgcmV0dXJuIGZhY3RvcnkuZ2V0KCk7Cit9CisKK0NhcHR1cmVT
b3VyY2VPckVycm9yIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgZGV2aWNlSUQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQorewor
ICAgIGF1dG8gZGV2aWNlID0gR1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2lu
Z2xldG9uKCkuZ3N0cmVhbWVyRGV2aWNlV2l0aFVJRChkZXZpY2VJRCk7CisgICAgaWYgKCFkZXZp
Y2UpIHsKKyAgICAgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoKTogR1N0cmVhbWVyIGRpZCBub3QgZmluZCB0
aGUgZGV2aWNlOiAlcy4iLCBkZXZpY2VJRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoZXJyb3JNZXNzYWdlKSk7CisgICAgfQorCisg
ICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJj
ZShkZXZpY2UudmFsdWUoKSkpOworCisgICAgaWYgKGNvbnN0cmFpbnRzKSB7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gc291cmNlLT5hcHBseUNvbnN0cmFpbnRzKCpjb25zdHJhaW50cyk7CisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQudmFsdWUo
KS5maXJzdCk7CisgICAgfQorICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3Zl
KHNvdXJjZSkpOworfQorCitSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5
JiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKQoreworICAgIHJldHVybiBs
aWJXZWJSVENBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5KCk7Cit9CisKK0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKEdTdHJlYW1lckNhcHR1
cmVEZXZpY2UgZGV2aWNlKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShkZXZpY2UucGVyc2lz
dGVudElkKCksIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvLCBkZXZpY2UubGFiZWwo
KSkKKyAgICAsIG1fY2FwdHVyZXIoc3RkOjptYWtlX3VuaXF1ZTxHU3RyZWFtZXJBdWRpb0NhcHR1
cmVyPihkZXZpY2UpKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpOworfQorCitH
U3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShj
b25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBSZWFsdGlt
ZU1lZGlhU291cmNlKGRldmljZUlELCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywg
bmFtZSkKKyAgICAsIG1fY2FwdHVyZXIoc3RkOjptYWtlX3VuaXF1ZTxHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVyPigpKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpOworfQorCitHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6On5HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoKQor
eworfQorCit2b2lkIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdE
YXRhKCkKK3sKKyAgICBtX2NhcHR1cmVyLT5zZXR1cFBpcGVsaW5lKCk7CisgICAgbV9jYXB0dXJl
ci0+c2V0U2FtcGxlUmF0ZShzYW1wbGVSYXRlKCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9j
YXB0dXJlci0+c2luaygpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0sobmV3U2FtcGxlQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBtX2NhcHR1cmVyLT5wbGF5KCk7Cit9CisKK0dzdEZsb3dSZXR1cm4g
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50
KiBzaW5rLCBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UqIHNvdXJjZSkKK3sKKyAgICBhdXRv
IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5L
KHNpbmspKSk7CisKKyAgICAvLyBGSVhNRSAtIGZpZ3VyZSBvdXQgYSB3YXkgdG8gYXZvaWQgY29w
eWluZyAob24gd3JpdGUpIHRoZSBkYXRhLgorICAgIEdzdEJ1ZmZlciogYnVmID0gZ3N0X3NhbXBs
ZV9nZXRfYnVmZmVyKHNhbXBsZS5nZXQoKSk7CisgICAgYXV0byBmcmFtZXMoc3RkOjp1bmlxdWVf
cHRyPEdTdHJlYW1lckF1ZGlvRGF0YT4obmV3IEdTdHJlYW1lckF1ZGlvRGF0YShXVEZNb3ZlKHNh
bXBsZSkpKSk7CisgICAgYXV0byBzdHJlYW1EZXNjKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uPihuZXcgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bihmcmFtZXMtPmdldEF1ZGlvSW5mbygpKSkpOworCisgICAgc291cmNlLT5hdWRpb1NhbXBsZXNB
dmFpbGFibGUoCisgICAgICAgIE1lZGlhVGltZShHU1RfVElNRV9BU19VU0VDT05EUyhHU1RfQlVG
RkVSX1BUUyhidWYpKSwgR19VU0VDX1BFUl9TRUMpLAorICAgICAgICAqZnJhbWVzLCAqc3RyZWFt
RGVzYywgZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWYpIC8gZnJhbWVzLT5nZXRBdWRpb0luZm8oKS5i
cGYpOworCisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCit2b2lkIEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NhcHR1cmVyLT5zaW5rKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Z3BvaW50ZXI+KG5ld1NhbXBsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgbV9jYXB0dXJlci0+
c3RvcCgpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2FwYWJpbGl0aWVzKQorICAgICAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXMudmFsdWUoKTsK
KworICAgIHVpbnQgaTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBtX2NhcHR1cmVyLT5j
YXBzKCk7CisgICAgaW50IG1pblNhbXBsZVJhdGUgPSAwLCBtYXhTYW1wbGVSYXRlID0gMDsKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUoY2Fwcy5nZXQoKSk7IGkrKykgewor
ICAgICAgICBpbnQgY2FwYWJpbGl0eU1pblNhbXBsZVJhdGUgPSAwLCBjYXBhYmlsaXR5TWF4U2Ft
cGxlUmF0ZSA9IDA7CisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RyID0gZ3N0X2NhcHNfZ2V0X3N0
cnVjdHVyZShjYXBzLmdldCgpLCBpKTsKKworICAgICAgICAvLyBPbmx5IGFjY2VwdCByYXcgYXVk
aW8gZm9yIG5vdy4KKyAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0ciwgImF1
ZGlvL3gtcmF3IikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBnc3Rfc3RydWN0
dXJlX2dldChzdHIsICJyYXRlIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAmY2FwYWJpbGl0eU1pblNh
bXBsZVJhdGUsICZjYXBhYmlsaXR5TWF4U2FtcGxlUmF0ZSwgbnVsbHB0cik7CisgICAgICAgIGlm
IChpID4gMCkgeworICAgICAgICAgICAgbWluU2FtcGxlUmF0ZSA9IHN0ZDo6bWluKG1pblNhbXBs
ZVJhdGUsIGNhcGFiaWxpdHlNaW5TYW1wbGVSYXRlKTsKKyAgICAgICAgICAgIG1heFNhbXBsZVJh
dGUgPSBzdGQ6Om1heChtYXhTYW1wbGVSYXRlLCBjYXBhYmlsaXR5TWF4U2FtcGxlUmF0ZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtaW5TYW1wbGVSYXRlID0gY2FwYWJpbGl0eU1p
blNhbXBsZVJhdGU7CisgICAgICAgICAgICBtYXhTYW1wbGVSYXRlID0gY2FwYWJpbGl0eU1heFNh
bXBsZVJhdGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzIGNhcGFiaWxpdGllcyhzZXR0aW5ncygpLnN1cHBvcnRlZENvbnN0cmFpbnRzKCkp
OworICAgIGNhcGFiaWxpdGllcy5zZXREZXZpY2VJZChpZCgpKTsKKyAgICBjYXBhYmlsaXRpZXMu
c2V0RWNob0NhbmNlbGxhdGlvbihkZWZhdWx0RWNob0NhbmNlbGxhdGlvbkNhcGFiaWxpdHkpOwor
ICAgIGNhcGFiaWxpdGllcy5zZXRWb2x1bWUoZGVmYXVsdFZvbHVtZUNhcGFiaWxpdHkpOworICAg
IGNhcGFiaWxpdGllcy5zZXRTYW1wbGVSYXRlKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UobWluU2Ft
cGxlUmF0ZSwgbWF4U2FtcGxlUmF0ZSkpOworICAgIG1fY2FwYWJpbGl0aWVzID0gV1RGTW92ZShj
YXBhYmlsaXRpZXMpOworCisgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnZhbHVlKCk7Cit9CisK
K2Jvb2wgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjphcHBseVNhbXBsZVJhdGUoaW50IHNh
bXBsZVJhdGUpCit7CisgICAgcmV0dXJuIG1fY2FwdHVyZXItPnNldFNhbXBsZVJhdGUoc2FtcGxl
UmF0ZSk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2N1cnJl
bnRTZXR0aW5ncykgeworICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mgc2V0dGlu
Z3M7CisgICAgICAgIHNldHRpbmdzLnNldERldmljZUlkKGlkKCkpOworCisgICAgICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBzdXBwb3J0ZWRDb25zdHJhaW50czsK
KyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0cnVlKTsK
KyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9u
KHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1ZvbHVtZSh0
cnVlKTsKKyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNTYW1wbGVSYXRl
KHRydWUpOworICAgICAgICBzZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhzdXBwb3J0
ZWRDb25zdHJhaW50cyk7CisKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBXVEZNb3ZlKHNl
dHRpbmdzKTsKKyAgICB9CisKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0Vm9sdW1lKHZvbHVt
ZSgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0U2FtcGxlUmF0ZShzYW1wbGVSYXRlKCkp
OworICAgIG1fY3VycmVudFNldHRpbmdzLT5zZXRFY2hvQ2FuY2VsbGF0aW9uKGVjaG9DYW5jZWxs
YXRpb24oKSk7CisKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3MudmFsdWUoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uM2ZhNGE5YzJlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmll
ckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJ
QldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1
cmVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZShjb25zdCBTdHJp
bmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIEF1ZGlvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsKKworICAgIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJy
aWRlOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCBvdmVycmlkZTsKKworICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkgeyByZXR1cm4gbV9j
YXB0dXJlci0+cGlwZWxpbmUoKTsgfQorICAgIEdTdHJlYW1lckNhcHR1cmVyKiBjYXB0dXJlcigp
IHsgcmV0dXJuIG1fY2FwdHVyZXIuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIEdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZShHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAgICBHU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoKTsKKyAg
ICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcFByb2R1
Y2luZ0RhdGEoKSBvdmVycmlkZTsKKworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBtdXRhYmxlIHN0
ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5n
czsKKworcHJpdmF0ZToKKyAgICBib29sIGFwcGx5U2FtcGxlUmF0ZShpbnQpIGZpbmFsOworICAg
IGJvb2wgaXNDYXB0dXJlU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IGJvb2wgYXBwbHlWb2x1bWUoZG91YmxlKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyQXVkaW9DYXB0dXJlcj4gbV9jYXB0dXJlcjsKKworICAg
IHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQqLCBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UqKTsKKyAgICB2b2lkIHRyaWdnZXJTYW1wbGVBdmFpbGFi
bGUoR3N0U2FtcGxlKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDE1N2VmNzBhNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVyLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNh
dW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0
cm8gIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRl
ICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmgiCisKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb0Zv
cm1hdC5oIgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJl
cihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKKyAgICA6IEdTdHJlYW1lckNhcHR1cmVy
KGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJh
dGUiLCBHX1RZUEVfSU5ULCBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZSwgbnVsbHB0
cikpKQoreworfQorCitHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1
cmVyKCkKKyAgICA6IEdTdHJlYW1lckNhcHR1cmVyKCJhdWRpb3Rlc3RzcmMiLCBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIExp
YldlYlJUQ0F1ZGlvRm9ybWF0OjpzYW1wbGVSYXRlLCBudWxscHRyKSkpCit7Cit9CisKK0dzdEVs
ZW1lbnQqIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcigpCit7CisgICAg
YXV0byBjb252ZXJ0ZXIgPSBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oImF1ZGlvY29u
dmVydCAhIGF1ZGlvcmVzYW1wbGUiLCBUUlVFLCBudWxscHRyKTsKKworICAgIEFTU0VSVChjb252
ZXJ0ZXIpOworCisgICAgcmV0dXJuIGNvbnZlcnRlcjsKK30KKworYm9vbCBHU3RyZWFtZXJBdWRp
b0NhcHR1cmVyOjpzZXRTYW1wbGVSYXRlKGludCBzYW1wbGVSYXRlKQoreworCisgICAgaWYgKHNh
bXBsZVJhdGUgPiAwKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiU2V0dGluZyBTYW1wbGVSYXRlICVkIiwgc2FtcGxlUmF0ZSk7CisgICAgICAgIG1fY2FwcyA9
IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19U
WVBFX0lOVCwgc2FtcGxlUmF0ZSwgbnVsbHB0cikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdT
VF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm90IGZvcmNpbmcgc2FtcGxlIHJhdGUi
KTsKKyAgICAgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUo
ImF1ZGlvL3gtcmF3IikpOworICAgIH0KKworICAgIGlmICghbV9jYXBzZmlsdGVyLmdldCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnX29iamVjdF9zZXQobV9jYXBzZmlsdGVyLmdl
dCgpLCAiY2FwcyIsIG1fY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRp
b0NhcHR1cmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi45YWFmNzYxZDZjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmgK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEu
Y29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyIDogcHVibGlj
IEdTdHJlYW1lckNhcHR1cmVyIHsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJBdWRpb0NhcHR1cmVy
KEdTdHJlYW1lckNhcHR1cmVEZXZpY2UpOworICAgIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIoKTsK
KworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpIGZpbmFsOworICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBmaW5hbCB7IHJldHVybiAiQXVkaW8iOyB9CisKKyAgICBib29sIHNldFNhbXBs
ZVJhdGUoaW50KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjk1M2YzYThhMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlh
LmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykg
JiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUF1ZGlvRGF0YS5oIgorCisjaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdTdHJlYW1lckF1ZGlvRGF0YSA6IHB1Ymxp
YyBQbGF0Zm9ybUF1ZGlvRGF0YSB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyQXVkaW9EYXRhKEdS
ZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSwgR3N0QXVkaW9JbmZvIGluZm8pCisgICAgICAgIDog
bV9zYW1wbGUoV1RGTW92ZShzYW1wbGUpKQorICAgICAgICAsIG1fYXVkaW9JbmZvKGluZm8pCisg
ICAgeworICAgIH0KKworICAgIEdTdHJlYW1lckF1ZGlvRGF0YShHUmVmUHRyPEdzdFNhbXBsZT4m
JiBzYW1wbGUpCisgICAgICAgIDogbV9zYW1wbGUoV1RGTW92ZShzYW1wbGUpKQorICAgIHsKKyAg
ICAgICAgZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzKCZtX2F1ZGlvSW5mbywgZ3N0X3NhbXBsZV9n
ZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSkpOworICAgIH0KKworICAgIEdzdFNhbXBsZSogZ2V0U2Ft
cGxlKCkgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KKyAgICBHc3RBdWRpb0luZm8gZ2V0QXVk
aW9JbmZvKCkge3JldHVybiBtX2F1ZGlvSW5mbzsgfQorCitwcml2YXRlOgorICAgIEtpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIEtpbmQ6OkdTdHJlYW1lckF1ZGlvRGF0YTsgfQorICAgIEdSZWZQ
dHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY2FwczsKKwor
ICAgIEdzdEF1ZGlvSW5mbyBtX2F1ZGlvSW5mbzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYm
IFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMWZmNTliMmExNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
CkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxp
YS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMp
ICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgi
CisjaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBmaW5hbDogcHVibGljIEF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24geworcHVibGljOgorICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24oR3N0QXVkaW9JbmZvIGluZm8pCisgICAgICAgIDogbV9pbmZvKGluZm8pCisgICAg
ICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkK
KyAgICB7CisgICAgfQorCisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RB
dWRpb0luZm8gKmluZm8pCisgICAgICAgIDogbV9pbmZvKCppbmZvKQorICAgICAgICAsIG1fY2Fw
cyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCisgICAgeworICAg
IH0KKworICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKQorICAgIHsKKyAgICAg
ICAgZ3N0X2F1ZGlvX2luZm9faW5pdCgmbV9pbmZvKTsKKyAgICB9CisKKyAgICBXRUJDT1JFX0VY
UE9SVCB+R1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigpIHsgfTsKKworICAgIGNvbnN0
IFBsYXRmb3JtRGVzY3JpcHRpb24mIHBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAorICAgIHsK
KyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0geyBQbGF0Zm9ybURlc2NyaXB0aW9uOjpH
U3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLCByZWludGVycHJldF9jYXN0PGNvbnN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+KCZtX2luZm8pIH07CisKKyAgICAgICAgcmV0dXJu
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBQQ01G
b3JtYXQgZm9ybWF0KCkgY29uc3QgZmluYWwgeworICAgICAgICBzd2l0Y2ggKEdTVF9BVURJT19J
TkZPX0ZPUk1BVCgmbV9pbmZvKSkgeworICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzE2
TEU6CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTZCRToKKyAgICAgICAgICAgIHJl
dHVybiBJbnQxNjsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MzMkxFOgorICAgICAg
ICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzMyQkU6CisgICAgICAgICAgICByZXR1cm4gSW50MzI7
CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GMzJMRToKKyAgICAgICAgY2FzZSBHU1Rf
QVVESU9fRk9STUFUX0YzMkJFOgorICAgICAgICAgICAgcmV0dXJuIEZsb2F0MzI7CisgICAgICAg
IGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GNjRMRToKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9S
TUFUX0Y2NEJFOgorICAgICAgICAgICAgcmV0dXJuIEZsb2F0NjQ7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9uZTsKKyAg
ICB9CisKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9B
VURJT19JTkZPX1JBVEUoJm1faW5mbyk7IH0KKyAgICBib29sIGlzUENNKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZm9ybWF0KCkgIT0gTm9uZTsgfQorICAgIGJvb2wgaXNJbnRlcmxlYXZlZCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0xBWU9VVCgmbV9pbmZvKSA9PSBHU1Rf
QVVESU9fTEFZT1VUX0lOVEVSTEVBVkVEOyB9CisgICAgYm9vbCBpc1NpZ25lZEludGVnZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9fSU5GT19JU19JTlRFR0VSKCZtX2luZm8pOyB9
CisgICAgYm9vbCBpc05hdGl2ZUVuZGlhbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJ
T19JTkZPX0VORElBTk5FU1MoJm1faW5mbykgPT0gR19CWVRFX09SREVSOyB9CisgICAgYm9vbCBp
c0Zsb2F0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fSVNfRkxPQVQoJm1f
aW5mbyk7IH0KKworICAgIHVpbnQzMl90IG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGlzSW50ZXJsZWF2ZWQoKSA/IEdTVF9BVURJT19JTkZPX0NIQU5O
RUxTKCZtX2luZm8pIDogVFJVRTsgfQorICAgIHVpbnQzMl90IG51bWJlck9mQ2hhbm5lbFN0cmVh
bXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9fSU5GT19DSEFOTkVMUygmbV9pbmZv
KTsgfQorICAgIHVpbnQzMl90IG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBHU1RfQVVESU9fSU5GT19DSEFOTkVMUygmbV9pbmZvKTsgfQorICAgIHVpbnQzMl90IHNhbXBs
ZVdvcmRTaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fQlBTKCZtX2lu
Zm8pOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuIGdzdF9hdWRpb19pbmZvX2lzX2VxdWFsKCZtX2lu
Zm8sICZvdGhlci5tX2luZm8pOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdTdHJlYW1l
ckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90
aGVyKTsgfQorCisgICAgR3N0Q2FwcyogY2FwcygpIHsgcmV0dXJuIG1fY2Fwcy5nZXQoKTsgfQor
ICAgIEdzdEF1ZGlvSW5mbyogZ2V0SW5mbygpIHsgcmV0dXJuICZtX2luZm87IH0KKworcHJpdmF0
ZToKKyAgICBHc3RBdWRpb0luZm8gbV9pbmZvOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jYXBz
OworICAgIG11dGFibGUgUGxhdGZvcm1EZXNjcmlwdGlvbiBtX3BsYXRmb3JtRGVzY3JpcHRpb247
Cit9OworCit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmlj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckNhcHR1cmVEZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOTg1N2ExMjdiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZS5oCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAq
IEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1
ZGUgIkNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKworI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlIDogcHVibGljIENhcHR1cmVEZXZpY2UgeworcHVibGljOgorICAgIEdT
dHJlYW1lckNhcHR1cmVEZXZpY2UoR1JlZlB0cjxHc3REZXZpY2U+JiYgZGV2aWNlLCBjb25zdCBT
dHJpbmcmIHBlcnNpc3RlbnRJZCwgRGV2aWNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGxhYmVs
LCBjb25zdCBTdHJpbmcmIGdyb3VwSWQgPSBlbXB0eVN0cmluZygpKQorICAgICAgICA6IENhcHR1
cmVEZXZpY2UocGVyc2lzdGVudElkLCB0eXBlLCBsYWJlbCwgZ3JvdXBJZCkKKyAgICAgICAgLCBt
X2RldmljZShkZXZpY2UpCisgICAgeworICAgIH0KKworICAgIEdzdENhcHMqIGNhcHMoKSBjb25z
dCB7IHJldHVybiBnc3RfZGV2aWNlX2dldF9jYXBzKG1fZGV2aWNlLmdldCgpKTsgfQorICAgIEdz
dERldmljZSAqIGRldmljZSgpIHsgcmV0dXJuIG1fZGV2aWNlLmdldCgpOyB9CisKK3ByaXZhdGU6
CisgICAgR1JlZlB0cjxHc3REZXZpY2U+IG1fZGV2aWNlOworfTsKKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkgICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2I3ODI4N2U3YWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZURldmljZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0
IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBD
YXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1
cmVEZXZpY2VNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyJiBH
U3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyPiBt
YW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCitHU3RyZWFtZXJWaWRlb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyJiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0
b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyPiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCitHU3RyZWFt
ZXJEaXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXImIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0
cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyPiBtYW5hZ2VyOworICAgIHJldHVybiBt
YW5hZ2VyOworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lckNhcHR1cmVEZXZpY2U+IEdTdHJl
YW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGNvbnN0IFN0
cmluZyYgZGV2aWNlSUQpCit7CisgICAgY2FwdHVyZURldmljZXMoKTsKKworICAgIGZvciAoYXV0
byYgZGV2aWNlIDogbV9nc3RyZWFtZXJEZXZpY2VzKSB7CisgICAgICAgIGlmIChkZXZpY2UucGVy
c2lzdGVudElkKCkgPT0gZGV2aWNlSUQpCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlOworICAg
IH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitjb25zdCBWZWN0b3I8Q2FwdHVyZURl
dmljZT4mIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlcygpCit7
CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lcigpOworICAgIGlmIChtX2RldmljZXMuaXNFbXB0eSgp
KQorICAgICAgICByZWZyZXNoQ2FwdHVyZURldmljZXMoKTsKKworICAgIHJldHVybiBtX2Rldmlj
ZXM7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZUFkZGVk
KEdSZWZQdHI8R3N0RGV2aWNlPiYmIGRldmljZSkKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVj
dHVyZT4gcHJvcGVydGllcyhnc3RfZGV2aWNlX2dldF9wcm9wZXJ0aWVzKGRldmljZS5nZXQoKSkp
OworICAgIGNvbnN0IGNoYXIqIGtsYXNzID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHByb3Bl
cnRpZXMuZ2V0KCksICJkZXZpY2UuY2xhc3MiKTsKKworICAgIGlmIChrbGFzcyAmJiAhZ19zdHJj
bXAwKGtsYXNzLCAibW9uaXRvciIpKQorICAgICAgICByZXR1cm47CisKKyAgICBDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlIHR5cGUgPSBkZXZpY2VUeXBlKCk7CisgICAgR1VuaXF1ZVB0cjxjaGFy
PiBkZXZpY2VDbGFzc0NoYXIoZ3N0X2RldmljZV9nZXRfZGV2aWNlX2NsYXNzKGRldmljZS5nZXQo
KSkpOworICAgIFN0cmluZyBkZXZpY2VDbGFzcyhTdHJpbmcoZGV2aWNlQ2xhc3NDaGFyLmdldCgp
KSk7CisgICAgaWYgKHR5cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9u
ZSAmJiAhZGV2aWNlQ2xhc3Muc3RhcnRzV2l0aCgiQXVkaW8iKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICh0eXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSAmJiAhZGV2
aWNlQ2xhc3Muc3RhcnRzV2l0aCgiVmlkZW8iKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
VGhpcyBpc24ndCByZWFsbHkgYSBVSUQgYnV0IHNob3VsZCBiZSBnb29kIGVub3VnaCAobGlid2Vi
cnRjCisgICAgLy8gaXRzZWxmIGRvZXMgdGhhdCBhdCBsZWFzdCBmb3IgcHVsc2VhdWRpbyBkZXZp
Y2VzKS4KKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRldmljZU5hbWUoZ3N0X2RldmljZV9nZXRfZGlz
cGxheV9uYW1lKGRldmljZS5nZXQoKSkpOworICAgIFN0cmluZyBpZGVudGlmaWVyID0gU3RyaW5n
Ojpmcm9tVVRGOChkZXZpY2VOYW1lLmdldCgpKTsKKworICAgIGF1dG8gZ3N0Q2FwdHVyZURldmlj
ZSA9IEdTdHJlYW1lckNhcHR1cmVEZXZpY2UoV1RGTW92ZShkZXZpY2UpLCBpZGVudGlmaWVyLCB0
eXBlLCBpZGVudGlmaWVyKTsKKyAgICBnc3RDYXB0dXJlRGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7
CisgICAgbV9nc3RyZWFtZXJEZXZpY2VzLmFwcGVuZChXVEZNb3ZlKGdzdENhcHR1cmVEZXZpY2Up
KTsKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIENhcHR1cmVEZXZpY2UgY29weSBpbiBvdGhlciB2
ZWN0b3IganVzdCBmb3IgY2FwdHVyZURldmljZXMgQVBJLgorICAgIGF1dG8gY2FwdHVyZURldmlj
ZSA9IENhcHR1cmVEZXZpY2UoaWRlbnRpZmllciwgdHlwZSwgaWRlbnRpZmllcik7CisgICAgY2Fw
dHVyZURldmljZS5zZXRFbmFibGVkKHRydWUpOworICAgIG1fZGV2aWNlcy5hcHBlbmQoV1RGTW92
ZShjYXB0dXJlRGV2aWNlKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXI6OnJlZnJlc2hDYXB0dXJlRGV2aWNlcygpCit7CisgICAgaWYgKCFtX2RldmljZU1vbml0b3Ip
IHsKKyAgICAgICAgbV9kZXZpY2VNb25pdG9yID0gYWRvcHRHUmVmKGdzdF9kZXZpY2VfbW9uaXRv
cl9uZXcoKSk7CisKKyAgICAgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlID0gZGV2
aWNlVHlwZSgpOworICAgICAgICBpZiAodHlwZSA9PSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBl
OjpDYW1lcmEpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKTsKKyAgICAgICAgICAg
IGdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyKG1fZGV2aWNlTW9uaXRvci5nZXQoKSwgIlZp
ZGVvL1NvdXJjZSIsIGNhcHMuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2Fw
dHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkgeworICAgICAgICAgICAgR1JlZlB0
cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoImF1
ZGlvL3gtcmF3IikpOworICAgICAgICAgICAgZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXIo
bV9kZXZpY2VNb25pdG9yLmdldCgpLCAiQXVkaW8vU291cmNlIiwgY2Fwcy5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBtb25pdG9yIGZvciBhZGRlZC9yZW1vdmVkIG1l
c3NhZ2VzIG9uIHRoZSBidXMuCisgICAgfQorCisgICAgaWYgKCFnc3RfZGV2aWNlX21vbml0b3Jf
c3RhcnQobV9kZXZpY2VNb25pdG9yLmdldCgpKSkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpF
Q1QobV9kZXZpY2VNb25pdG9yLmdldCgpLCAiQ291bGQgbm90IHN0YXJ0IGRldmljZSBtb25pdG9y
Iik7CisgICAgICAgIG1fZGV2aWNlTW9uaXRvciA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEdMaXN0KiBkZXZpY2VzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9k
ZXZpY2VzKG1fZGV2aWNlTW9uaXRvci5nZXQoKSk7CisgICAgd2hpbGUgKGRldmljZXMpIHsKKyAg
ICAgICAgR1JlZlB0cjxHc3REZXZpY2U+IGRldmljZSA9IGFkb3B0R1JlZihHU1RfREVWSUNFX0NB
U1QoZGV2aWNlcy0+ZGF0YSkpOworICAgICAgICBkZXZpY2VBZGRlZChXVEZNb3ZlKGRldmljZSkp
OworICAgICAgICBkZXZpY2VzID0gZ19saXN0X2RlbGV0ZV9saW5rKGRldmljZXMsIGRldmljZXMp
OworICAgIH0KKworICAgIGdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wKG1fZGV2aWNlTW9uaXRvci5n
ZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi44NjM5MjQxNGQwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNl
TWFuYWdlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5p
ZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2Fs
aWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdT
VFJFQU1FUikKKworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFu
YWdlciA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RkOjpv
cHRpb25hbDxHU3RyZWFtZXJDYXB0dXJlRGV2aWNlPiBnc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGNv
bnN0IFN0cmluZyYpOworCisgICAgdm9pZCByZWZyZXNoQ2FwdHVyZURldmljZXMoKSBmaW5hbDsK
KyAgICBjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7
CisgICAgdmlydHVhbCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSA9IDA7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBkZXZpY2VBZGRlZChHUmVmUHRyPEdzdERldmljZT4mJik7
CisKKyAgICBHUmVmUHRyPEdzdERldmljZU1vbml0b3I+IG1fZGV2aWNlTW9uaXRvcjsKKyAgICBW
ZWN0b3I8R1N0cmVhbWVyQ2FwdHVyZURldmljZT4gbV9nc3RyZWFtZXJEZXZpY2VzOworICAgIFZl
Y3RvcjxDYXB0dXJlRGV2aWNlPiBtX2RldmljZXM7Cit9OworCitjbGFzcyBHU3RyZWFtZXJBdWRp
b0NhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZp
Y2VNYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyQXVk
aW9DYXB0dXJlRGV2aWNlTWFuYWdlcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdTdHJlYW1lckF1
ZGlvQ2FwdHVyZURldmljZU1hbmFnZXImIHNpbmdsZXRvbigpOworICAgIENhcHR1cmVEZXZpY2U6
OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6Ok1pY3JvcGhvbmU7IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0
dXJlRGV2aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKKyAgICB+R1N0cmVhbWVyQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKK307CisKK2NsYXNzIEdTdHJlYW1lclZpZGVvQ2Fw
dHVyZURldmljZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1h
bmFnZXIgeworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVhbWVyVmlkZW9D
YXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CisgICAgc3RhdGljIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIHZpZGVvRmFjdG9yeSgpOworICAgIENhcHR1
cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYTsgfQorcHJpdmF0ZToKKyAgICBHU3RyZWFtZXJWaWRl
b0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJWaWRlb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworfTsKKworY2xhc3MgR1N0cmVhbWVyRGlz
cGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVE
ZXZpY2VNYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVy
RGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVh
bWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaW5nbGV0b24oKTsKKyAgICBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW47IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyRGlzcGxh
eUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJEaXNwbGF5
Q2FwdHVyZURldmljZU1hbmFnZXIoKSA9IGRlZmF1bHQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQ2FwdHVyZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5lZWI5ZDgzMzY2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKQEAgLTAsMCArMSwx
ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1
dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVT
RShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZXIuaCIKKworI2luY2x1ZGUg
PGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+Cisj
aW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFj
ZS5oPgorCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X2NhcHR1cmVyX2RlYnVnKTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9jYXB0dXJlcl9kZWJ1ZworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVHU3RyZWFtZXJBbmREZWJ1ZygpCit7Cisg
ICAgaW5pdGlhbGl6ZUdTdHJlYW1lcigpOworCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGRl
YnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxh
ZywgW10geworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfY2FwdHVyZXJf
ZGVidWcsICJ3ZWJraXRjYXB0dXJlciIsIDAsICJXZWJLaXQgQ2FwdHVyZXIiKTsKKyAgICB9KTsK
K30KKworR1N0cmVhbWVyQ2FwdHVyZXI6OkdTdHJlYW1lckNhcHR1cmVyKEdTdHJlYW1lckNhcHR1
cmVEZXZpY2UgZGV2aWNlLCBHUmVmUHRyPEdzdENhcHM+IGNhcHMpCisgICAgOiBtX2RldmljZShk
ZXZpY2UuZGV2aWNlKCkpCisgICAgLCBtX2NhcHMoY2FwcykKKyAgICAsIG1fc291cmNlRmFjdG9y
eShudWxscHRyKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmREZWJ1ZygpOworfQorCitH
U3RyZWFtZXJDYXB0dXJlcjo6R1N0cmVhbWVyQ2FwdHVyZXIoY29uc3QgY2hhciogc291cmNlRmFj
dG9yeSwgR1JlZlB0cjxHc3RDYXBzPiBjYXBzKQorICAgIDogbV9kZXZpY2UobnVsbHB0cikKKyAg
ICAsIG1fY2FwcyhjYXBzKQorICAgICwgbV9zb3VyY2VGYWN0b3J5KHNvdXJjZUZhY3RvcnkpCit7
CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZERlYnVnKCk7Cit9CisKK0dzdEVsZW1lbnQqIEdT
dHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQoreworICAgIGlmIChtX3NvdXJjZUZhY3Rv
cnkpIHsKKyAgICAgICAgbV9zcmMgPSBtYWtlRWxlbWVudChtX3NvdXJjZUZhY3RvcnkpOworICAg
ICAgICBpZiAoR1NUX0lTX0FQUF9TUkMobV9zcmMuZ2V0KCkpKQorICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fc3JjLmdldCgpLCAiaXMtbGl2ZSIsIHRydWUsICJmb3JtYXQiLCBHU1RfRk9STUFU
X1RJTUUsIG51bGxwdHIpOworCisgICAgICAgIEFTU0VSVChtX3NyYyk7CisgICAgICAgIHJldHVy
biBtX3NyYy5nZXQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9kZXZpY2UpOworICAgIEdVbmlx
dWVQdHI8Y2hhcj4gc291cmNlTmFtZShnX3N0cmR1cF9wcmludGYoIiVzXyVwIiwgbmFtZSgpLCB0
aGlzKSk7CisgICAgbV9zcmMgPSBnc3RfZGV2aWNlX2NyZWF0ZV9lbGVtZW50KG1fZGV2aWNlLmdl
dCgpLCBzb3VyY2VOYW1lLmdldCgpKTsKKyAgICBBU1NFUlQobV9zcmMpOworCisgICAgcmV0dXJu
IG1fc3JjLmdldCgpOworfQorCitHc3RDYXBzKiBHU3RyZWFtZXJDYXB0dXJlcjo6Y2FwcygpCit7
CisgICAgaWYgKG1fc291cmNlRmFjdG9yeSkgeworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IGVsZW1lbnQgPSBtYWtlRWxlbWVudChtX3NvdXJjZUZhY3RvcnkpOworICAgICAgICBhdXRvIHBh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChlbGVtZW50LmdldCgpLCAi
c3JjIikpOworCisgICAgICAgIHJldHVybiBnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLmdldCgpLCBu
dWxscHRyKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9kZXZpY2UpOworICAgIHJldHVybiBnc3Rf
ZGV2aWNlX2dldF9jYXBzKG1fZGV2aWNlLmdldCgpKTsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0
dXJlcjo6c2V0dXBQaXBlbGluZSgpCit7CisgICAgbV9waXBlbGluZSA9IG1ha2VFbGVtZW50KCJw
aXBlbGluZSIpOworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzb3VyY2UgPSBjcmVhdGVTb3Vy
Y2UoKTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGNvbnZlcnRlciA9IGNyZWF0ZUNvbnZlcnRl
cigpOworCisgICAgbV9jYXBzZmlsdGVyID0gbWFrZUVsZW1lbnQoImNhcHNmaWx0ZXIiKTsKKyAg
ICBtX3RlZSA9IG1ha2VFbGVtZW50KCJ0ZWUiKTsKKyAgICBtX3NpbmsgPSBtYWtlRWxlbWVudCgi
YXBwc2luayIpOworCisgICAgZ3N0X2FwcF9zaW5rX3NldF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9T
SU5LKG1fc2luay5nZXQoKSksIFRSVUUpOworICAgIGdfb2JqZWN0X3NldChtX2NhcHNmaWx0ZXIu
Z2V0KCksICJjYXBzIiwgbV9jYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5fYWRk
X21hbnkoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgc291cmNlLmdldCgpLCBjb252ZXJ0ZXIu
Z2V0KCksIG1fY2Fwc2ZpbHRlci5nZXQoKSwgbV90ZWUuZ2V0KCksIG51bGxwdHIpOworICAgIGdz
dF9lbGVtZW50X2xpbmtfbWFueShzb3VyY2UuZ2V0KCksIGNvbnZlcnRlci5nZXQoKSwgbV9jYXBz
ZmlsdGVyLmdldCgpLCBtX3RlZS5nZXQoKSwgTlVMTCk7CisKKyAgICBhZGRTaW5rKG1fc2luay5n
ZXQoKSk7CisKKyAgICBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKHBpcGVsaW5lKCkp
OworfQorCitHc3RFbGVtZW50KiBHU3RyZWFtZXJDYXB0dXJlcjo6bWFrZUVsZW1lbnQoY29uc3Qg
Y2hhciogZmFjdG9yeU5hbWUpCit7CisgICAgYXV0byBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKGZhY3RvcnlOYW1lLCBudWxscHRyKTsKKyAgICBBU1NFUlQoZWxlbWVudCk7Cisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBjYXB0dXJlck5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc19jYXB0
dXJlcl8lc18lcCIsIG5hbWUoKSwgR1NUX09CSkVDVF9OQU1FKGVsZW1lbnQpLCB0aGlzKSk7Cisg
ICAgZ3N0X29iamVjdF9zZXRfbmFtZShHU1RfT0JKRUNUKGVsZW1lbnQpLCBjYXB0dXJlck5hbWUu
Z2V0KCkpOworCisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVy
ZXI6OmFkZFNpbmsoR3N0RWxlbWVudCogbmV3U2luaykKK3sKKyAgICBBU1NFUlQobV9waXBlbGlu
ZSk7CisgICAgQVNTRVJUKG1fdGVlKTsKKworICAgIGF1dG8gcXVldWUgPSBtYWtlRWxlbWVudCgi
cXVldWUiKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4ocGlwZWxpbmUoKSksIHF1ZXVl
LCBuZXdTaW5rLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFy
ZW50KHF1ZXVlKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG5ld1Np
bmspOworCisgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHMobV90ZWUuZ2V0KCksICJzcmNf
JXUiLCBxdWV1ZSwgInNpbmsiKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZ3N0X2VsZW1lbnRfbGluayhxdWV1ZSwg
bmV3U2luaykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobmV3U2luayA9PSBtX3NpbmsuZ2V0KCkpIHsKKyAgICAgICAg
R1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTZXR0aW5nIHF1ZXVlIGFzIGxlYWt5
IHVwc3RyZWFtIgorICAgICAgICAgICAgIiBzbyB0aGF0IHRoZSBwbGF5ZXIgY2FuIHNldCB0aGUg
c2luayB0byBQQVVTRUQgd2l0aG91dCAiCisgICAgICAgICAgICAiIHNldHRpbmcgdGhlIHdob2xl
IGNhcHR1cmVyIHRvIFBBVVNFRCIpOworICAgICAgICBnX29iamVjdF9zZXQocXVldWUsICJsZWFr
eSIsIDIgLyogdXBzdHJlYW0gKi8sIG51bGxwdHIpOworICAgIH0KKworICAgIEdTVF9JTkZPX09C
SkVDVChwaXBlbGluZSgpLCAiQWRkaW5nIHNpbms6ICUiIEdTVF9QVFJfRk9STUFULCBuZXdTaW5r
KTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZHVtcE5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc19z
aW5rXyVzX2FkZGVkIiwgR1NUX09CSkVDVF9OQU1FKHBpcGVsaW5lKCkpLCBHU1RfT0JKRUNUX05B
TUUobmV3U2luaykpKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NU
X0JJTihwaXBlbGluZSgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkdW1wTmFtZS5nZXQo
KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZXI6OnBsYXkoKQoreworICAgIEFTU0VSVCht
X3BpcGVsaW5lKTsKKworICAgIEdTVF9JTkZPX09CSkVDVCgoZ3BvaW50ZXIpIHBpcGVsaW5lKCks
ICJHb2luZyB0byBQTEFZSU5HISIpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHBpcGVs
aW5lKCksIEdTVF9TVEFURV9QTEFZSU5HKTsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6
c3RvcCgpCit7CisgICAgQVNTRVJUKG1fcGlwZWxpbmUpOworCisgICAgR1NUX0lORk9fT0JKRUNU
KChncG9pbnRlcikgcGlwZWxpbmUoKSwgIlRlYXJpbmcgZG93biEiKTsKKworICAgIC8vIE1ha2Ug
c3VyZSB0byByZW1vdmUgc3luYyBoYW5kbGVyIGJlZm9yZSB0ZWFyaW5nIGRvd24sIGF2b2lkaW5n
CisgICAgLy8gcG9zc2libGUgZGVhZGxvY2tzLgorICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBh
ZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKHBpcGVsaW5lKCkpKSk7
CisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUocGlwZWxpbmUoKSwgR1NU
X1NUQVRFX05VTEwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckNhcHR1cmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uODkyNTVkZTBlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaApA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5j
b20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYm
IFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgi
CisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R1N0cmVhbWVyQ2FwdHVyZXIgeworcHVibGljOgorICAgIEdTdHJlYW1lckNhcHR1cmVyKEdTdHJl
YW1lckNhcHR1cmVEZXZpY2UsIEdSZWZQdHI8R3N0Q2Fwcz4pOworICAgIEdTdHJlYW1lckNhcHR1
cmVyKGNvbnN0IGNoYXIqIHNvdXJjZUZhY3RvcnksIEdSZWZQdHI8R3N0Q2Fwcz4pOworCisgICAg
dm9pZCBzZXR1cFBpcGVsaW5lKCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXkoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpOworICAgIEdzdENhcHMqIGNhcHMoKTsKKyAgICB2b2lkIGFkZFNpbmso
R3N0RWxlbWVudCAqbmV3U2luayk7CisgICAgR3N0RWxlbWVudCogbWFrZUVsZW1lbnQoY29uc3Qg
Y2hhciogZmFjdG9yeU5hbWUpOworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVNvdXJjZSgpOworICAg
IEdzdEVsZW1lbnQqIHNvdXJjZSgpIHsgcmV0dXJuIG1fc3JjLmdldCgpOyAgfQorICAgIHZpcnR1
YWwgY29uc3QgY2hhciogbmFtZSgpID0gMDsKKworICAgIEdzdEVsZW1lbnQqIHNpbmsoKSBjb25z
dCB7IHJldHVybiBtX3NpbmsuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNpbmsoR3N0RWxlbWVudCog
c2luaykgeyBtX3NpbmsgPSBhZG9wdEdSZWYoc2luayk7IH07CisKKyAgICBHc3RFbGVtZW50KiBw
aXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2aXJ0dWFs
IEdzdEVsZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9zaW5rOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zcmM7
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3RlZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fY2Fwc2ZpbHRlcjsKKyAgICBHUmVmUHRyPEdzdERldmljZT4gbV9kZXZpY2U7CisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBtX2NhcHM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5l
OworCitwcml2YXRlOgorICAgIGNvbnN0IGNoYXIqIG1fc291cmNlRmFjdG9yeTsKKworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi43Y2Q3OTU3MWUxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5jcHAKQEAgLTAsMCArMSw1NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNh
dW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBp
Z2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKKyNpbmNsdWRlICJHU3RyZWFtZXJN
ZWRpYVN0cmVhbVNvdXJjZS5oIgorCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGUuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlv
RGF0YS5oIgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3Qv
YmFzZS9nc3RmbG93Y29tYmluZXIuaD4KKworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAw
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX1NUUkVBTV9T
UkNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRf
VFlQRV9NRURJQV9TVFJFQU1fU1JDLCBXZWJLaXRNZWRpYVN0cmVhbVNyY0NsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX01FRElBX1NUUkVBTV9TUkNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDKSkKKyNkZWZp
bmUgV0VCS0lUX01FRElBX1NUUkVBTV9TUkNfR0VUX0NMQVNTKG8pIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvKSwgV0VCS0lUX1RZUEVfTUVESUFfU1RSRUFNX1NSQywgV2ViS2l0TWVkaWFT
dHJlYW1TcmNDbGFzcykpCisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaFZp
ZGVvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RTYW1wbGUqIGdzdHNhbXBs
ZSk7CitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1B1c2hBdWRpb1NhbXBsZShXZWJL
aXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0U2FtcGxlKiBnc3RzYW1wbGUpOworc3RhdGljIHZv
aWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBz
ZWxmLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVt
cGxhdGUgdmlkZW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19z
cmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfU09NRVRJTUVTLAorICAgIEdTVF9T
VEFUSUNfQ0FQUygidmlkZW8veC1yYXciKSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0
ZSBhdWRpb1NyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoImF1ZGlvX3NyYyIs
CisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9TT01FVElNRVMsCisgICAgR1NUX1NUQVRJ
Q19DQVBTKCJhdWRpby94LXJhdyhBTlkpOyIpKTsKKworc3RhdGljIEdzdFRhZ0xpc3QqIG1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlR2V0VGFncyhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdHJhY2sp
Cit7CisgICAgYXV0byB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSgpOworCisgICAg
aWYgKCF0cmFjay0+bGFiZWwoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ3N0X3RhZ19saXN0X2Fk
ZCh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKKyAgICAgICAgICAgIEdTVF9UQUdfVElU
TEUsIHRyYWNrLT5sYWJlbCgpLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOworICAgIH0KKworICAg
IGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKSB7
CisgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQs
IFdFQktJVF9NRURJQV9UUkFDS19UQUdfS0lORCwKKyAgICAgICAgICAgIChnaW50KUF1ZGlvVHJh
Y2tQcml2YXRlOjpLaW5kOjpNYWluLCBudWxscHRyKTsKKyAgICB9IGVsc2UgaWYgKHRyYWNrLT50
eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pIHsKKyAgICAgICAgZ3N0
X3RhZ19saXN0X2FkZCh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgV0VCS0lUX01FRElB
X1RSQUNLX1RBR19LSU5ELAorICAgICAgICAgICAgKGdpbnQpVmlkZW9UcmFja1ByaXZhdGU6Oktp
bmQ6Ok1haW4sIG51bGxwdHIpOworCisgICAgICAgIGlmICh0cmFjay0+aXNDYXB0dXJlVHJhY2so
KSkgeworICAgICAgICAgICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlJiBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UmPigKKyAgICAgICAgICAgICAg
ICB0cmFjay0+c291cmNlKCkpOworCisgICAgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ2xp
c3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAorICAgICAgICAgICAgICAgIFdFQktJVF9NRURJQV9U
UkFDS19UQUdfV0lEVEgsIHNvdXJjZS5zaXplKCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICBX
RUJLSVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdIVCwgc291cmNlLnNpemUoKS5oZWlnaHQoKSwgbnVs
bHB0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdGFnbGlzdDsKK30KKworR3N0
U3RyZWFtKiB3ZWJraXRNZWRpYVN0cmVhbU5ldyhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdHJh
Y2spCit7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzOworICAgIEdzdFN0cmVhbVR5cGUgdHlw
ZTsKKworICAgIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OkF1ZGlvKSB7CisgICAgICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3N0YXRpY19wYWRfdGVtcGxh
dGVfZ2V0X2NhcHMoJmF1ZGlvU3JjVGVtcGxhdGUpKTsKKyAgICAgICAgdHlwZSA9IEdTVF9TVFJF
QU1fVFlQRV9BVURJTzsKKyAgICB9IGVsc2UgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pIHsKKyAgICAgICAgY2FwcyA9IGFkb3B0R1JlZihnc3Rf
c3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcygmdmlkZW9TcmNUZW1wbGF0ZSkpOworICAgICAg
ICB0eXBlID0gR1NUX1NUUkVBTV9UWVBFX1ZJREVPOworICAgIH0gZWxzZSB7CisgICAgICAgIEdT
VF9GSVhNRSgiSGFuZGxlICVkIHR5cGUiLCAoZ2ludCkgdHJhY2stPnR5cGUoKSk7CisKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBnc3RzdHJlYW0gPSAoR3N0U3Ry
ZWFtKilnc3Rfc3RyZWFtX25ldyh0cmFjay0+aWQoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICBj
YXBzLmdldCgpLCB0eXBlLCBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKTsKKyAgICBhdXRvIHRhZ3Mg
PSBhZG9wdEdSZWYobWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKHRyYWNrKSk7CisgICAg
Z3N0X3N0cmVhbV9zZXRfdGFncyhnc3RzdHJlYW0sIHRhZ3MuZ2V0KCkpOworCisgICAgcmV0dXJu
IGdzdHN0cmVhbTsKK30KKworY2xhc3MgV2ViS2l0TWVkaWFTdHJlYW1UcmFja09ic2VydmVyCisg
ICAgOiBwdWJsaWMgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5XZWJLaXRNZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXIoKSB7IH07CisgICAg
V2ViS2l0TWVkaWFTdHJlYW1UcmFja09ic2VydmVyKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzcmMp
CisgICAgICAgIDogbV9tZWRpYVN0cmVhbVNyYyhzcmMpIHsgfQorICAgIHZvaWQgdHJhY2tTdGFy
dGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9OworCisgICAgdm9pZCB0cmFj
a0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykgZmluYWwKKyAgICB7CisgICAg
ICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjVHJhY2tFbmRlZChtX21lZGlhU3RyZWFtU3JjLCB0cmFj
ayk7CisgICAgfQorCisgICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpIGZpbmFsIHsgfTsKKyAgICB2b2lkIHRyYWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9OworICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hh
bmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfTsKKyAgICB2b2lkIHJlYWR5
U3RhdGVDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9OworCisgICAg
dm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFT
YW1wbGUmIHNhbXBsZSkgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8gZ3N0c2FtcGxlID0gc3Rh
dGljX2Nhc3Q8TWVkaWFTYW1wbGVHU3RyZWFtZXIqPigmc2FtcGxlKS0+cGxhdGZvcm1TYW1wbGUo
KS5zYW1wbGUuZ3N0U2FtcGxlOworCisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaFZp
ZGVvU2FtcGxlKG1fbWVkaWFTdHJlYW1TcmMsIGdzdHNhbXBsZSk7CisgICAgfQorCisgICAgdm9p
ZCBhdWRpb1NhbXBsZXNBdmFpbGFibGUoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBjb25zdCBN
ZWRpYVRpbWUmLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRp
b1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KSBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0byBh
dWRpb2RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBHU3RyZWFtZXJBdWRpb0RhdGEmPihhdWRpb0Rh
dGEpOworCisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaEF1ZGlvU2FtcGxlKG1fbWVk
aWFTdHJlYW1TcmMsIGF1ZGlvZGF0YS5nZXRTYW1wbGUoKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBtX21lZGlhU3RyZWFtU3JjOworfTsKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjQ2xhc3MgV2ViS2l0TWVkaWFTdHJlYW1TcmND
bGFzczsKK3N0cnVjdCBfV2ViS2l0TWVkaWFTdHJlYW1TcmMgeworICAgIEdzdEJpbiBwYXJlbnRf
aW5zdGFuY2U7CisKKyAgICBnY2hhciogdXJpOworCisgICAgR3N0RWxlbWVudCogYXVkaW9TcmM7
CisgICAgR3N0RWxlbWVudCogdmlkZW9TcmM7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0
TWVkaWFTdHJlYW1UcmFja09ic2VydmVyPiBvYnNlcnZlcjsKKyAgICBTdHJpbmcgdmlkZW9UcmFj
a0lEOworICAgIHZvbGF0aWxlIGdpbnQgbnBhZHM7CisgICAgZ3Vsb25nIHByb2JlaWQ7CisgICAg
UmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gc3RyZWFtOworCisgICAgR3N0Rmxvd0NvbWJpbmVy
KiBmbG93X2NvbWJpbmVyOworICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gc3RyZWFt
X2NvbGxlY3Rpb247Cit9OworCitzdHJ1Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjQ2xhc3Mgewor
ICAgIEdzdEJpbkNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX0lTX0xJVkUsCisgICAgUFJPUF9MQVNUCit9OworCitzdGF0aWMgR3N0VVJJVHlw
ZSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY191cmlfZ2V0X3R5cGUoR1R5cGUpCit7CisgICAgcmV0
dXJuIEdTVF9VUklfU1JDOworfQorCitzdGF0aWMgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRf
bWVkaWFfc3RyZWFtX3NyY191cmlfZ2V0X3Byb3RvY29scyhHVHlwZSkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgZ2NoYXIqIHByb3RvY29sc1tdID0geyAibWVkaWFzdHJlYW0iLCBudWxscHRyIH07CisK
KyAgICByZXR1cm4gcHJvdG9jb2xzOworfQorCitzdGF0aWMgZ2NoYXIqIHdlYmtpdF9tZWRpYV9z
dHJlYW1fc3JjX3VyaV9nZXRfdXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCit7CisgICAgV2Vi
S2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhoYW5kbGVy
KTsKKworICAgIC8qIEZJWE1FOiBtYWtlIHRocmVhZC1zYWZlICovCisgICAgcmV0dXJuIGdfc3Ry
ZHVwKHNlbGYtPnVyaSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYVN0cmVhbVNy
Y1VyaVNldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLAorICAg
IEdFcnJvcioqKQoreworICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01F
RElBX1NUUkVBTV9TUkMoaGFuZGxlcik7CisgICAgc2VsZi0+dXJpID0gZ19zdHJkdXAodXJpKTsK
KworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNy
Y1VyaUhhbmRsZXJJbml0KGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyKQoreworICAgIEdzdFVS
SUhhbmRsZXJJbnRlcmZhY2UqIGlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqKWdfaWZh
Y2U7CisKKyAgICBpZmFjZS0+Z2V0X3R5cGUgPSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY191cmlf
Z2V0X3R5cGU7CisgICAgaWZhY2UtPmdldF9wcm90b2NvbHMgPSB3ZWJraXRfbWVkaWFfc3RyZWFt
X3NyY191cmlfZ2V0X3Byb3RvY29sczsKKyAgICBpZmFjZS0+Z2V0X3VyaSA9IHdlYmtpdF9tZWRp
YV9zdHJlYW1fc3JjX3VyaV9nZXRfdXJpOworICAgIGlmYWNlLT5zZXRfdXJpID0gd2Via2l0TWVk
aWFTdHJlYW1TcmNVcmlTZXRVcmk7Cit9CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Vi
a2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRN
ZWRpYVN0cmVhbVNyY0RlYnVnCisKKyNkZWZpbmUgZG9Jbml0ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKEdTVF9U
WVBFX1VSSV9IQU5ETEVSLCB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaUhhbmRsZXJJbml0KTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Vi
a2l0TWVkaWFTdHJlYW1TcmNEZWJ1ZywgIndlYmtpdHdlYm1lZGlhc3RyZWFtc3JjIiwgMCwgIm1l
ZGlhc3RyZWFtc3JjIGVsZW1lbnQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyhX
RUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJRFRILCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX0lO
VCwgIldlYmtpdCBNZWRpYVN0cmVhbSB3aWR0aCIsICJXZWJraXQgTWVkaWFTdHJlYW0gd2lkdGgi
LCBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7ICAgIFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0
YXRpYyhXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdIVCwgR1NUX1RBR19GTEFHX01FVEEsIEdf
VFlQRV9JTlQsICJXZWJraXQgTWVkaWFTdHJlYW0gaGVpZ2h0IiwgIldlYmtpdCBNZWRpYVN0cmVh
bSBoZWlnaHQiLCBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7IFwKKyAgICBnc3RfdGFnX3JlZ2lz
dGVyX3N0YXRpYyhXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0tJTkQsIEdTVF9UQUdfRkxBR19NRVRB
LCBHX1RZUEVfSU5ULCAiV2Via2l0IE1lZGlhU3RyZWFtIEtpbmQiLCAiV2Via2l0IE1lZGlhU3Ry
ZWFtIEtpbmQiLCBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7CisKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYktpdE1lZGlhU3RyZWFtU3JjLCB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyYywgR1NU
X1RZUEVfQklOLCBkb0luaXQpOworCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1Nl
dFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFs
dWUqLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0TWVkaWFTdHJlYW1TcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsCisgICAgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
c3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0lTX0xJVkU6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIFRSVUUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
X2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRN
ZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG9iamVjdCk7CisK
KyAgICBpZiAoc2VsZi0+YXVkaW9TcmMpIHsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJ
TihzZWxmKSwgc2VsZi0+YXVkaW9TcmMpOworICAgICAgICBzZWxmLT5hdWRpb1NyYyA9IG51bGxw
dHI7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnZpZGVvU3JjKSB7CisgICAgICAgIGdzdF9iaW5f
cmVtb3ZlKEdTVF9CSU4oc2VsZiksIHNlbGYtPnZpZGVvU3JjKTsKKyAgICAgICAgc2VsZi0+dmlk
ZW9TcmMgPSBudWxscHRyOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJl
YW1TcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIHNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhvYmplY3QpOworCisgICAgR1NUX09C
SkVDVF9MT0NLKHNlbGYpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzZWxmLT5zdHJlYW0tPnRy
YWNrcygpKQorICAgICAgICB0cmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnNlbGYtPm9ic2VydmVyLmdl
dCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxmKTsKKworICAgIGdfY2xlYXJfcG9pbnRl
cigmc2VsZi0+dXJpLCBnX2ZyZWUpOworICAgIGdzdF9mbG93X2NvbWJpbmVyX2ZyZWUoc2VsZi0+
Zmxvd19jb21iaW5lcik7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJraXRN
ZWRpYVN0cmVhbVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hh
bmdlIHRyYW5zaXRpb24pCit7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OworICAg
IGF1dG8qIHNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhlbGVtZW50KTsKKworICAgIGlm
ICh0cmFuc2l0aW9uID09IEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZKSB7CisKKyAg
ICAgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOworICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDog
c2VsZi0+c3RyZWFtLT50cmFja3MoKSkKKyAgICAgICAgICAgIHRyYWNrLT5yZW1vdmVPYnNlcnZl
cigqc2VsZi0+b2JzZXJ2ZXIuZ2V0KCkpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxm
KTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyh3ZWJraXRfbWVkaWFf
c3RyZWFtX3NyY19wYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlv
bik7CisKKyAgICBpZiAodHJhbnNpdGlvbiA9PSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BB
VVNFRCkKKyAgICAgICAgcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3N0cmVhbV9z
cmNfY2xhc3NfaW5pdChXZWJLaXRNZWRpYVN0cmVhbVNyY0NsYXNzKiBrbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAg
R3N0RWxlbWVudENsYXNzKiBnc3RlbGVtZW50X2tsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyopa2xh
c3M7CisKKyAgICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3Jj
RmluYWxpemU7CisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdE1lZGlhU3RyZWFt
U3JjRGlzcG9zZTsKKyAgICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRNZWRp
YVN0cmVhbVNyY0dldFByb3BlcnR5OworICAgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0UHJvcGVydHk7CisKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRNZWRpYVN0cmVhbVNyY0NsYXNzOjppcy1saXZlOgorICAgICAqCisgICAgICogSW5zdHJ1Y3Qg
dGhlIHNvdXJjZSB0byBiZWhhdmUgbGlrZSBhIGxpdmUgc291cmNlLiBUaGlzIGluY2x1ZGVzIHRo
YXQgaXQKKyAgICAgKiB3aWxsIG9ubHkgcHVzaCBvdXQgYnVmZmVycyBpbiB0aGUgUExBWUlORyBz
dGF0ZS4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmpl
Y3RfY2xhc3MsIFBST1BfSVNfTElWRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oImlz
LWxpdmUiLCAiSXMgTGl2ZSIsCisgICAgICAgICAgICAiTGV0IHBsYXliaW4zIHdlIGFyZSBhIGxp
dmUgc291cmNlLiIsCisgICAgICAgICAgICBUUlVFLCAoR1BhcmFtRmxhZ3MpKEdfUEFSQU1fUkVB
REFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOworCisgICAgZ3N0ZWxlbWVudF9rbGFz
cy0+Y2hhbmdlX3N0YXRlID0gd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFuZ2VTdGF0ZTsKKyAgICBn
c3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGdzdGVsZW1lbnRfa2xhc3MsCisgICAg
ICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmdmlkZW9TcmNUZW1wbGF0ZSkpOworICAg
IGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZ3N0ZWxlbWVudF9rbGFzcywKKyAg
ICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZhdWRpb1NyY1RlbXBsYXRlKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX2luaXQoV2ViS2l0TWVkaWFT
dHJlYW1TcmMqIHNlbGYpCit7CisgICAgc2VsZi0+b2JzZXJ2ZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYktpdE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcj4oc2VsZik7CisgICAgc2VsZi0+Zmxvd19j
b21iaW5lciA9IGdzdF9mbG93X2NvbWJpbmVyX25ldygpOworfQorCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGY7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiB0cmFjazsKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkX3RlbXBs
YXRlOworfSBQcm9iZURhdGE7CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjQ2hhaW4oR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogb2JqZWN0LCBHc3RCdWZmZXIqIGJ1
ZmZlcikKK3sKKyAgICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKKyAgICBHUmVmUHRyPFdlYktpdE1l
ZGlhU3RyZWFtU3JjPiBzZWxmID0gYWRvcHRHUmVmKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKGdz
dF9vYmplY3RfZ2V0X3BhcmVudChvYmplY3QpKSk7CisKKyAgICByZXN1bHQgPSBnc3RfZmxvd19j
b21iaW5lcl91cGRhdGVfcGFkX2Zsb3coc2VsZi5nZXQoKS0+Zmxvd19jb21iaW5lciwgcGFkLAor
ICAgICAgICBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQocGFkLCBHU1RfT0JKRUNUKHNlbGYu
Z2V0KCkpLCBidWZmZXIpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBH
c3RQYWQqIHRhcmdldCwgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZF90ZW1wbGF0ZSkKK3sKKyAg
ICBhdXRvIHBhZG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgic3JjXyV1IiwgZ19hdG9taWNfaW50X2Fk
ZCgmKHNlbGYtPm5wYWRzKSwgMSkpOworICAgIGF1dG8gZ2hvc3RwYWQgPSBnc3RfZ2hvc3RfcGFk
X25ld19mcm9tX3RlbXBsYXRlKHBhZG5hbWUudXRmOCgpLmRhdGEoKSwgdGFyZ2V0LAorICAgICAg
ICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQocGFkX3RlbXBsYXRlKSk7CisKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKHNlbGYsICIlcyBHaG9zdGluZyAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAg
ICAgZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcoR1NUX09CSkVDVF9DQVNUKHNlbGYpKSwKKyAg
ICAgICAgdGFyZ2V0KTsKKworICAgIGF1dG8gcHJveHlwYWQgPSBhZG9wdEdSZWYoR1NUX1BBRChn
c3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbChHU1RfUFJPWFlfUEFEKGdob3N0cGFkKSkpKTsKKyAg
ICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbihwcm94eXBhZC5nZXQoKSwKKyAgICAgICAgKEdz
dFBhZENoYWluRnVuY3Rpb24pd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFpbik7CisgICAgZ3N0X3Bh
ZF9zZXRfYWN0aXZlKGdob3N0cGFkLCBUUlVFKTsKKyAgICBnX2Fzc2VydChnc3RfZWxlbWVudF9h
ZGRfcGFkKEdTVF9FTEVNRU5UKHNlbGYpLCAoR3N0UGFkKilnaG9zdHBhZCkpOworfQorCitzdGF0
aWMgR3N0UGFkUHJvYmVSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKEdzdFBh
ZCogcGFkLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sIFByb2JlRGF0YSogZGF0YSkKK3sKKyAgICBH
c3RFdmVudCogZXZlbnQgPSBHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQoaW5mbyk7CisgICAgV2Vi
S2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBkYXRhLT5zZWxmOworCisgICAgc3dpdGNoIChHU1Rf
RVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6IHsK
KyAgICAgICAgY29uc3QgZ2NoYXIqIHN0cmVhbV9pZDsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJl
YW0+IHN0cmVhbSA9IG51bGxwdHI7CisKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9z
dGFydChldmVudCwgJnN0cmVhbV9pZCk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHN0cmVhbV9p
ZCwgZGF0YS0+dHJhY2stPmlkKCkudXRmOCgpLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIEdTVF9J
TkZPX09CSkVDVChwYWQsICJFdmVudCBoYXMgYmVlbiBzdGlja2VkIGFscmVhZHkiKTsKKyAgICAg
ICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBzdHJlYW1fc3RhcnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydChkYXRhLT50cmFjay0+
aWQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3N0X2V2ZW50X3NldF9ncm91cF9pZChzdHJl
YW1fc3RhcnQsIDEpOworICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOworCisgICAgICAg
IGdzdF9wYWRfcHVzaF9ldmVudChwYWQsIHN0cmVhbV9zdGFydCk7CisgICAgICAgIGdzdF9wYWRf
cHVzaF9ldmVudChwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX2NvbGxlY3Rpb24oc2VsZi0+c3Ry
ZWFtX2NvbGxlY3Rpb24uZ2V0KCkpKTsKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwg
Z3N0X2V2ZW50X25ld190YWcobWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKGRhdGEtPnRy
YWNrLmdldCgpKSkpOworCisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNlbGYs
IHBhZCwgZGF0YS0+cGFkX3RlbXBsYXRlKTsKKworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9C
RV9IQU5ETEVEOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dE1lZGlhU3RyZWFtU3JjU2V0dXBTcmMoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsCisgICAg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrLCBHc3RFbGVtZW50KiBlbGVtZW50LAorICAg
IEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRfdGVtcGxhdGUsIGdib29sZWFuIG9ic2VydmVfdHJh
Y2spCit7CisgICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQoZWxlbWVudCwgInNyYyIpKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc2VsZiksIGVs
ZW1lbnQpOworCisKKyAgICBQcm9iZURhdGEqIGRhdGEgPSBuZXcgUHJvYmVEYXRhOworICAgIGRh
dGEtPnNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhzZWxmKTsKKyAgICBkYXRhLT5wYWRf
dGVtcGxhdGUgPSBwYWRfdGVtcGxhdGU7CisgICAgZGF0YS0+dHJhY2sgPSB0cmFjazsKKworICAg
IHNlbGYtPnByb2JlaWQgPSBnc3RfcGFkX2FkZF9wcm9iZShwYWQuZ2V0KCksIChHc3RQYWRQcm9i
ZVR5cGUpR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCisgICAgICAgIChHc3RQ
YWRQcm9iZUNhbGxiYWNrKXdlYmtpdE1lZGlhU3RyZWFtU3JjUGFkUHJvYmVDYiwgZGF0YSwKKyAg
ICAgICAgW10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAgZGVsZXRlIChQcm9iZURhdGEq
KWRhdGE7CisgICAgICAgIH0pOworCisgICAgaWYgKG9ic2VydmVfdHJhY2spCisgICAgICAgIHRy
YWNrLT5hZGRPYnNlcnZlcigqc2VsZi0+b2JzZXJ2ZXIuZ2V0KCkpOworCisgICAgZ3N0X2VsZW1l
bnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChlbGVtZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBBcHBTcmMoV2ViS2l0
TWVkaWFTdHJlYW1TcmMqIHNlbGYsCisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNr
LCBHc3RFbGVtZW50KiogZWxlbWVudCwKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkX3Rl
bXBsYXRlKQoreworICAgICplbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBz
cmMiLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQoKmVsZW1lbnQsICJpcy1saXZlIiwgdHJ1
ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gd2Vi
a2l0TWVkaWFTdHJlYW1TcmNTZXR1cFNyYyhzZWxmLCB0cmFjaywgKmVsZW1lbnQsIHBhZF90ZW1w
bGF0ZSwgVFJVRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9zdFN0
cmVhbUNvbGxlY3Rpb24oV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtUHJp
dmF0ZSogc3RyZWFtKQoreworICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKKyAgICBzZWxmLT5z
dHJlYW1fY29sbGVjdGlvbiA9IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3KHN0
cmVhbS0+aWQoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IHN0cmVh
bS0+dHJhY2tzKCkpIHsKKyAgICAgICAgYXV0byBnc3RzdHJlYW0gPSB3ZWJraXRNZWRpYVN0cmVh
bU5ldyh0cmFjay5nZXQoKSk7CisKKyAgICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9z
dHJlYW0oc2VsZi0+c3RyZWFtX2NvbGxlY3Rpb24uZ2V0KCksIGdzdHN0cmVhbSk7CisgICAgfQor
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworCisgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNz
YWdlKEdTVF9FTEVNRU5UKHNlbGYpLAorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2Nv
bGxlY3Rpb24oR1NUX09CSkVDVChzZWxmKSwgc2VsZi0+c3RyZWFtX2NvbGxlY3Rpb24uZ2V0KCkp
KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJlYW0oV2ViS2l0TWVk
aWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtUHJpdmF0ZSogc3RyZWFtKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNlbGYpLCBGQUxT
RSk7CisKKyAgICBpZiAoc2VsZi0+YXVkaW9TcmMpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKHNlbGYtPmF1ZGlvU3JjLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5f
cmVtb3ZlKEdTVF9CSU4oc2VsZiksIHNlbGYtPmF1ZGlvU3JjKTsKKyAgICAgICAgc2VsZi0+YXVk
aW9TcmMgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChzZWxmLT52aWRlb1NyYykgeworICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoc2VsZi0+dmlkZW9TcmMsIEdTVF9TVEFURV9OVUxM
KTsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwgc2VsZi0+dmlkZW9TcmMp
OworICAgICAgICBzZWxmLT52aWRlb1NyYyA9IG51bGxwdHI7CisgICAgfQorCisgICAgd2Via2l0
TWVkaWFTdHJlYW1TcmNQb3N0U3RyZWFtQ29sbGVjdGlvbihzZWxmLCBzdHJlYW0pOworCisgICAg
c2VsZi0+c3RyZWFtID0gc3RyZWFtOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzdHJlYW0tPnRy
YWNrcygpKSB7CisgICAgICAgIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGU6OkF1ZGlvKSB7CisgICAgICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVw
QXBwU3JjKHNlbGYsIHRyYWNrLmdldCgpLCAmc2VsZi0+YXVkaW9TcmMsCisgICAgICAgICAgICAg
ICAgJmF1ZGlvU3JjVGVtcGxhdGUpOworICAgICAgICB9IGVsc2UgaWYgKHRyYWNrLT50eXBlKCkg
PT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pIHsKKyAgICAgICAgICAgIHdlYmtp
dE1lZGlhU3RyZWFtU3JjU2V0dXBBcHBTcmMoc2VsZiwgdHJhY2suZ2V0KCksICZzZWxmLT52aWRl
b1NyYywKKyAgICAgICAgICAgICAgICAmdmlkZW9TcmNUZW1wbGF0ZSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBHU1RfSU5GTygiVW5zdXBvcnRlZCB0cmFjayB0eXBlOiAlZCIsIChn
aW50KSB0cmFjay0+dHlwZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjUHVzaFZpZGVvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RTYW1w
bGUqIGdzdHNhbXBsZSkKK3sKKyAgICBpZiAoc2VsZi0+dmlkZW9TcmMpCisgICAgICAgIGdzdF9h
cHBfc3JjX3B1c2hfc2FtcGxlKEdTVF9BUFBfU1JDKHNlbGYtPnZpZGVvU3JjKSwgZ3N0c2FtcGxl
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUo
V2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogZ3N0c2FtcGxlKQoreworICAg
IGlmIChzZWxmLT5hdWRpb1NyYykKKyAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoR1NU
X0FQUF9TUkMoc2VsZi0+YXVkaW9TcmMpLCBnc3RzYW1wbGUpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5kZWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYs
CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNrKQoreworICAgIEdSZWZQdHI8R3N0
UGFkPiBwYWQgPSBudWxscHRyOworCisgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOworICAgIGZv
ciAoYXV0byB0bXAgPSBHU1RfRUxFTUVOVChzZWxmKS0+c3JjcGFkczsgdG1wOyB0bXAgPSB0bXAt
Pm5leHQpIHsKKyAgICAgICAgR3N0UGFkKiB0bXBwYWQgPSBHU1RfUEFEKHRtcC0+ZGF0YSk7Cisg
ICAgICAgIGNvbnN0IGdjaGFyKiBzdHJlYW1faWQ7CisKKyAgICAgICAgR3N0RXZlbnQqIHN0cmVh
bV9zdGFydCA9IGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCh0bXBwYWQsIEdTVF9FVkVOVF9TVFJF
QU1fU1RBUlQsIDApOworICAgICAgICBpZiAoIXN0cmVhbV9zdGFydCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFtX3N0
YXJ0LCAmc3RyZWFtX2lkKTsKKyAgICAgICAgaWYgKFN0cmluZyhzdHJlYW1faWQpID09IHRyYWNr
LmlkKCkpIHsKKyAgICAgICAgICAgIHBhZCA9IHRtcHBhZDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworCisgICAgaWYg
KCFwYWQpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8gcGFkIGZvdW5kIGZv
ciAlcyIsIHRyYWNrLmlkKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB2aWRlby52aWRlb1dpZHRoIGlzIHJlc2V0
IHRvIDAKKyAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKHNlbGYs
IHNlbGYtPnN0cmVhbS5nZXQoKSk7CisgICAgYXV0byB0YWdzID0gbWVkaWFTdHJlYW1UcmFja1By
aXZhdGVHZXRUYWdzKCZ0cmFjayk7CisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZC5nZXQoKSwg
Z3N0X2V2ZW50X25ld190YWcodGFncykpOworICAgIGdzdF9wYWRfcHVzaF9ldmVudChwYWQuZ2V0
KCksIGdzdF9ldmVudF9uZXdfZW9zKCkpOworfQorCit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8v
IEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYg
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0
cmVhbVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmViNDExMmU3MDdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFt
U291cmNlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmll
ckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxp
YS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUu
aCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z3N0
L2dzdC5oPgorCisjZGVmaW5lIFdFQktJVF9NRURJQV9UUkFDS19UQUdfV0lEVEggIndlYmtpdC1t
ZWRpYS1zdHJlYW0td2lkdGgiCisjZGVmaW5lIFdFQktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hU
ICJ3ZWJraXQtbWVkaWEtc3RyZWFtLWhlaWdodCIKKyNkZWZpbmUgV0VCS0lUX01FRElBX1RSQUNL
X1RBR19LSU5EICJ3ZWJraXQtbWVkaWEtc3RyZWFtLWtpbmQiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjIFdlYktpdE1lZGlhU3Ry
ZWFtU3JjOworCisjZGVmaW5lIFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG8pIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgobyksIFdFQktJVF9UWVBFX01FRElBX1NUUkVBTV9TUkMsIFdlYktp
dE1lZGlhU3RyZWFtU3JjKSkKKyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX1NUUkVBTV9TUkMobykg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvKSwgV0VCS0lUX1RZUEVfTUVESUFfU1RSRUFN
X1NSQykpCisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX1NUUkVBTV9TUkMgKHdlYmtpdF9tZWRp
YV9zdHJlYW1fc3JjX2dldF90eXBlKCkpCitHVHlwZSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY19n
ZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CitnYm9vbGVhbiB3ZWJraXRNZWRpYVN0cmVhbVNy
Y1NldFN0cmVhbShXZWJLaXRNZWRpYVN0cmVhbVNyYyosIE1lZGlhU3RyZWFtUHJpdmF0ZSopOwor
fSAvLyBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4xODY0MTZkNTEzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGln
YWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5j
b20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9h
cHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZh
Y2UuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYXBpL3BlZXJjb25uZWN0aW9uaW50ZXJmYWNlLmg+Cisj
aW5jbHVkZSA8d2VicnRjL21lZGlhL2Jhc2UvdmlkZW9jb21tb24uaD4KKyNpbmNsdWRlIDx3ZWJy
dGMvbWVkaWEvZW5naW5lL3dlYnJ0Y3ZpZGVvY2FwdHVyZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMv
bWVkaWEvZW5naW5lL3dlYnJ0Y3ZpZGVvY2FwdHVyZXJmYWN0b3J5Lmg+CisjaW5jbHVkZSA8d2Vi
cnRjL21vZHVsZXMvdmlkZW9fY2FwdHVyZS92aWRlb19jYXB0dXJlX2RlZmluZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBzdGF0aWMgaW50IGRlZmF1bHRXaWR0aCA9IDY0MDsK
K2NvbnN0IHN0YXRpYyBpbnQgZGVmYXVsdEhlaWdodCA9IDQ4MDsKKworR1NUX0RFQlVHX0NBVEVH
T1JZKHdlYmtpdF92aWRlb19jYXB0dXJlX3NvdXJjZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRf
REVGQVVMVCB3ZWJraXRfdmlkZW9fY2FwdHVyZV9zb3VyY2VfZGVidWcKKworc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
ZGVidWdSZWdpc3RlcmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRG
bGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF92aWRlb19j
YXB0dXJlX3NvdXJjZV9kZWJ1ZywgIndlYmtpdHZpZGVvY2FwdHVyZXNvdXJjZSIsIDAsCisgICAg
ICAgICAgICAiV2ViS2l0IFZpZGVvIENhcHR1cmUgU291cmNlLiIpOworICAgIH0pOworfQorCitj
bGFzcyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2VGYWN0b3J5IGZpbmFsIDogcHVibGljIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkgeworcHVibGljOgorICAgIENh
cHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZVZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBDYXB0dXJl
RGV2aWNlJiBkZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKSBmaW5h
bAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3Jl
YXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3RyYWludHMpOworICAgIH0KK307CisKK1Jl
YWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIGxpYldlYlJUQ1ZpZGVvQ2Fw
dHVyZVNvdXJjZUZhY3RvcnkoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2VGYWN0b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0b3J5
LmdldCgpOworfQorCitDYXB0dXJlU291cmNlT3JFcnJvciBHU3RyZWFtZXJWaWRlb0NhcHR1cmVT
b3VyY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBhdXRvIGRldmljZSA9IEdTdHJlYW1lclZpZGVvQ2Fw
dHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmdzdHJlYW1lckRldmljZVdpdGhVSUQoZGV2
aWNlSUQpOworICAgIGlmICghZGV2aWNlKSB7CisgICAgICAgIGF1dG8gZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKCk6IEdT
dHJlYW1lciBkaWQgbm90IGZpbmQgdGhlIGRldmljZTogJXMuIiwgZGV2aWNlSUQudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKGVycm9y
TWVzc2FnZSkpOworICAgIH0KKworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoZGV2aWNlLnZhbHVlKCkpKTsKKworICAgIGlmIChjb25z
dHJhaW50cykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlDb25zdHJhaW50
cygqY29uc3RyYWludHMpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0LnZhbHVlKCkuZmlyc3QpOworICAgIH0KKyAgICByZXR1cm4gQ2FwdHVy
ZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShzb3VyY2UpKTsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpmYWN0
b3J5KCkKK3sKKyAgICByZXR1cm4gbGliV2ViUlRDVmlkZW9DYXB0dXJlU291cmNlRmFjdG9yeSgp
OworfQorCitHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OkdTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IGdjaGFyICpzb3VyY2VfZmFjdG9yeSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNl
SUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBuYW1lKQorICAgICwgbV9jYXB0
dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI+KHNvdXJjZV9mYWN0
b3J5KSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyRGVidWcoKTsKK30KKworR1N0cmVhbWVy
VmlkZW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoR1N0cmVhbWVy
Q2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGRldmljZS5w
ZXJzaXN0ZW50SWQoKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8sIGRldmljZS5s
YWJlbCgpKQorICAgICwgbV9jYXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lclZpZGVv
Q2FwdHVyZXI+KGRldmljZSkpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9
CisKK0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6fkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNv
dXJjZSgpCit7Cit9CisKK2Jvb2wgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBseVNp
emUoY29uc3QgSW50U2l6ZSAmc2l6ZSkKK3sKKyAgICBtX2NhcHR1cmVyLT5zZXRTaXplKHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5RnJhbWVSYXRlKGRvdWJsZSBmcmFtZXJh
dGUpCit7CisgICAgbV9jYXB0dXJlci0+c2V0RnJhbWVSYXRlKGZyYW1lcmF0ZSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0YXJ0
UHJvZHVjaW5nRGF0YSgpCit7CisgICAgbV9jYXB0dXJlci0+c2V0dXBQaXBlbGluZSgpOworICAg
IG1fY2FwdHVyZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Cisg
ICAgbV9jYXB0dXJlci0+c2V0RnJhbWVSYXRlKGZyYW1lUmF0ZSgpKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fY2FwdHVyZXItPnNpbmsoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1Nh
bXBsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgbV9jYXB0dXJlci0+cGxheSgpOworfQorCitHc3RG
bG93UmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6bmV3U2FtcGxlQ2FsbGJhY2so
R3N0RWxlbWVudCogc2luaywgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKiBzb3VyY2UpCit7
CisgICAgYXV0byBnc3RTYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxl
KEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBs
ZUdTdHJlYW1lcjo6Y3JlYXRlKFdURk1vdmUoZ3N0U2FtcGxlKSwgV2ViQ29yZTo6RmxvYXRTaXpl
KCksIFN0cmluZygpKTsKKworICAgIC8vIEZJWE1FIC0gQ2hlY2sgaG93IHByZXNlbnRhdGlvblNp
emUgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBoZXJlLgorICAgIGNhbGxPbk1haW5UaHJlYWQoW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCpzb3VyY2UpLCBtZWRpYVNhbXBsZSA9IFdURk1vdmUobWVk
aWFTYW1wbGUpXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnZpZGVvU2FtcGxlQXZhaWxhYmxl
KG1lZGlhU2FtcGxlLmdldCgpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBHU1RfRkxPV19PSzsK
K30KKwordm9pZCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRh
KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jYXB0dXJl
ci0+c2luaygpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihuZXdTYW1wbGVDYWxsYmFjayks
IHRoaXMpOworICAgIG1fY2FwdHVyZXItPnN0b3AoKTsKKworICAgIEdTVF9JTkZPKCJSZXNldCBo
ZWlnaHQgYW5kIHdpZHRoIGFmdGVyIHN0b3BwaW5nIHNvdXJjZSIpOworICAgIHNldEhlaWdodCgw
KTsKKyAgICBzZXRXaWR0aCgwKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllcyYgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25z
dAoreworICAgIGlmIChtX2NhcGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1fY2FwYWJpbGl0
aWVzLnZhbHVlKCk7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzIGNhcGFi
aWxpdGllcyhzZXR0aW5ncygpLnN1cHBvcnRlZENvbnN0cmFpbnRzKCkpOworICAgIEdSZWZQdHI8
R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihtX2NhcHR1cmVyLT5jYXBzKCkpOworICAgIGludDMy
X3QgbWluV2lkdGggPSBHX01BWElOVDMyLCBtaW5IZWlnaHQgPSBHX01BWElOVDMyLCBtaW5GcmFt
ZXJhdGUgPSBHX01BWElOVDMyOworICAgIGludDMyX3QgbWF4V2lkdGggPSBHX01JTklOVDMyLCBt
YXhIZWlnaHQgPSBHX01JTklOVDMyLCBtYXhGcmFtZXJhdGUgPSBHX01JTklOVDMyOworCisgICAg
Zm9yIChndWludCBpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOyBpKysp
IHsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNh
cHMuZ2V0KCksIGkpOworCisgICAgICAgIC8vIE9ubHkgYWNjZXB0IHJhdyB2aWRlbyBmb3Igbm93
LgorICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RyLCAidmlkZW8veC1yYXci
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGludDMyX3QgdG1wTWluV2lkdGgs
IHRtcE1pbkhlaWdodCwgdG1wTWluRlBTTnVtZXJhdG9yLCB0bXBNaW5GUFNEZW5vbWluYXRvciwg
dG1wTWluRnJhbWVyYXRlOworICAgICAgICBpbnQzMl90IHRtcE1heFdpZHRoLCB0bXBNYXhIZWln
aHQsIHRtcE1heEZQU051bWVyYXRvciwgdG1wTWF4RlBTRGVub21pbmF0b3IsIHRtcE1heEZyYW1l
cmF0ZTsKKworICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgIndpZHRoIiwgR1NU
X1RZUEVfSU5UX1JBTkdFLCAmdG1wTWluV2lkdGgsICZ0bXBNYXhXaWR0aCwgImhlaWdodCIsIEdT
VF9UWVBFX0lOVF9SQU5HRSwgJnRtcE1pbkhlaWdodCwgJnRtcE1heEhlaWdodCwgbnVsbHB0cikp
IHsKKworICAgICAgICAgICAgZ19hc3NlcnQoZ3N0X3N0cnVjdHVyZV9nZXQoc3RyLCAid2lkdGgi
LCBHX1RZUEVfSU5ULCAmdG1wTWluV2lkdGgsICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAmdG1wTWlu
SGVpZ2h0LCBudWxscHRyKSk7CisgICAgICAgICAgICB0bXBNYXhXaWR0aCA9IHRtcE1pbldpZHRo
OworICAgICAgICAgICAgdG1wTWF4SGVpZ2h0ID0gdG1wTWluSGVpZ2h0OworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgImZyYW1lcmF0ZSIsIEdTVF9UWVBF
X0ZSQUNUSU9OX1JBTkdFLCAmdG1wTWluRlBTTnVtZXJhdG9yLCAmdG1wTWluRlBTRGVub21pbmF0
b3IsICZ0bXBNYXhGUFNOdW1lcmF0b3IsICZ0bXBNYXhGUFNEZW5vbWluYXRvciwgbnVsbHB0cikp
IHsKKyAgICAgICAgICAgIHRtcE1pbkZyYW1lcmF0ZSA9IChpbnQpKHRtcE1pbkZQU051bWVyYXRv
ciAvIHRtcE1pbkZQU0Rlbm9taW5hdG9yKTsKKyAgICAgICAgICAgIHRtcE1heEZyYW1lcmF0ZSA9
IChpbnQpKHRtcE1heEZQU051bWVyYXRvciAvIHRtcE1heEZQU0Rlbm9taW5hdG9yKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2dldChzdHIsCisgICAgICAgICAgICAiZnJhbWVy
YXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sICZ0bXBNaW5GUFNOdW1lcmF0b3IsICZ0bXBNaW5GUFNE
ZW5vbWluYXRvciwgbnVsbHB0cikpIHsKKyAgICAgICAgICAgIHRtcE1heEZQU051bWVyYXRvciA9
IHRtcE1pbkZQU051bWVyYXRvcjsKKyAgICAgICAgICAgIHRtcE1heEZQU0Rlbm9taW5hdG9yID0g
dG1wTWluRlBTRGVub21pbmF0b3I7CisgICAgICAgICAgICB0bXBNaW5GcmFtZXJhdGUgPSAoaW50
KSh0bXBNaW5GUFNOdW1lcmF0b3IgLyB0bXBNaW5GUFNEZW5vbWluYXRvcik7CisgICAgICAgICAg
ICB0bXBNYXhGcmFtZXJhdGUgPSAoaW50KSh0bXBNYXhGUFNOdW1lcmF0b3IgLyB0bXBNYXhGUFNE
ZW5vbWluYXRvcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBHVmFsdWUq
IGZyYW1lUmF0ZXMoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoc3RyLCAiZnJhbWVyYXRlIikpOwor
ICAgICAgICAgICAgdG1wTWluRnJhbWVyYXRlID0gR19NQVhJTlQ7CisgICAgICAgICAgICB0bXBN
YXhGcmFtZXJhdGUgPSAwOworCisgICAgICAgICAgICBndWludCBmcmFtZVJhdGVzTGVuZ3RoID0g
c3RhdGljX2Nhc3Q8Z3VpbnQ+KGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGZyYW1lUmF0ZXMpKSAt
IDE7CisKKyAgICAgICAgICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkgPCBmcmFtZVJhdGVzTGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZhbCA9IGdzdF92YWx1ZV9s
aXN0X2dldF92YWx1ZShmcmFtZVJhdGVzLCBpKTsKKworICAgICAgICAgICAgICAgIGdfYXNzZXJ0
KEdfVkFMVUVfVFlQRSh2YWwpID09IEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgICAgICAgICAgICAg
ICBnaW50IGZyYW1lcmF0ZSA9IChpbnQpKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9y
KHZhbCkgLyBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yKHZhbCkpOworCisgICAg
ICAgICAgICAgICAgdG1wTWluRnJhbWVyYXRlID0gc3RkOjptaW4odG1wTWluRnJhbWVyYXRlLCBm
cmFtZXJhdGUpOworICAgICAgICAgICAgICAgIHRtcE1heEZyYW1lcmF0ZSA9IHN0ZDo6bWF4KHRt
cE1heEZyYW1lcmF0ZSwgZnJhbWVyYXRlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgbWluV2lkdGggPSBzdGQ6Om1pbih0bXBNaW5X
aWR0aCwgbWluV2lkdGgpOworICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9IHN0ZDo6bWluKHRt
cE1pbkhlaWdodCwgbWluSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBtaW5GcmFtZXJhdGUgPSBz
dGQ6Om1pbih0bXBNaW5GcmFtZXJhdGUsIG1pbkZyYW1lcmF0ZSk7CisKKyAgICAgICAgICAgICAg
ICBtYXhXaWR0aCA9IHN0ZDo6bWF4KHRtcE1heFdpZHRoLCBtYXhXaWR0aCk7CisgICAgICAgICAg
ICAgICAgbWF4SGVpZ2h0ID0gc3RkOjptYXgodG1wTWF4SGVpZ2h0LCBtYXhIZWlnaHQpOworICAg
ICAgICAgICAgICAgIG1heEZyYW1lcmF0ZSA9IHN0ZDo6bWF4KHRtcE1heEZyYW1lcmF0ZSwgbWF4
RnJhbWVyYXRlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWluV2lk
dGggPSB0bXBNaW5XaWR0aDsKKyAgICAgICAgICAgICAgICBtaW5IZWlnaHQgPSB0bXBNaW5IZWln
aHQ7CisgICAgICAgICAgICAgICAgbWluRnJhbWVyYXRlID0gdG1wTWluRnJhbWVyYXRlOworCisg
ICAgICAgICAgICAgICAgbWF4V2lkdGggPSB0bXBNYXhXaWR0aDsKKyAgICAgICAgICAgICAgICBt
YXhIZWlnaHQgPSB0bXBNYXhIZWlnaHQ7CisgICAgICAgICAgICAgICAgbWF4RnJhbWVyYXRlID0g
dG1wTWF4RnJhbWVyYXRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2Fw
YWJpbGl0aWVzLnNldERldmljZUlkKGlkKCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lk
dGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZShtaW5XaWR0aCwgbWF4V2lkdGgpKTsKKyAgICAgICAg
Y2FwYWJpbGl0aWVzLnNldEhlaWdodChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pbkhlaWdodCwg
bWF4SGVpZ2h0KSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJpbGl0
eVZhbHVlT3JSYW5nZShtaW5GcmFtZXJhdGUsIG1heEZyYW1lcmF0ZSkpOworICAgICAgICBtX2Nh
cGFiaWxpdGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bV9jYXBhYmlsaXRpZXMudmFsdWUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fY3VycmVudFNldHRpbmdzKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7
CisKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBv
cnRlZENvbnN0cmFpbnRzOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0RldmljZUlkKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0ZhY2luZ01vZGUodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBv
cnRzV2lkdGgodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
SGVpZ2h0KHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Fz
cGVjdFJhdGlvKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0ZyYW1lUmF0ZSh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWlu
dHMoc3VwcG9ydGVkQ29uc3RyYWludHMpOworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0g
V1RGTW92ZShzZXR0aW5ncyk7CisgICAgfQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFdp
ZHRoKHNpemUoKS53aWR0aCgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0SGVpZ2h0KHNp
emUoKS5oZWlnaHQoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldEZyYW1lUmF0ZShmcmFt
ZVJhdGUoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldEFzcGVjdFJhdGlvKGFzcGVjdFJh
dGlvKCkpOworICAgIG1fY3VycmVudFNldHRpbmdzLT5zZXRGYWNpbmdNb2RlKGZhY2luZ01vZGUo
KSk7CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShM
SUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM3OWJhN2UwZmQ2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1
dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjog
QWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIp
CisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJW
aWRlb0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZShjb25zdCBTdHJpbmcmIGRl
dmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFZpZGVvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsKKworICAgIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fY2FwdHVyZXIt
PnBpcGVsaW5lKCk7IH0KKyAgICBHU3RyZWFtZXJDYXB0dXJlciogY2FwdHVyZXIoKSB7IHJldHVy
biBtX2NhcHR1cmVyLmdldCgpOyB9CisKKworcHJvdGVjdGVkOgorICAgIEdTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IGdjaGFyICogc291cmNlX2ZhY3RvcnkpOworICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZShHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJW
aWRlb0NhcHR1cmVTb3VyY2UoKTsKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJy
aWRlOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKKworICAgIG11dGFi
bGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFi
aWxpdGllczsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgR3N0Rmxv
d1JldHVybiBuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiwgR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlKik7CisKKyAgICBib29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KKyAgICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7
CisgICAgYm9vbCBhcHBseUZyYW1lUmF0ZShkb3VibGUpIGZpbmFsOworICAgIGJvb2wgYXBwbHlB
c3BlY3RSYXRpbyhkb3VibGUpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxHU3RyZWFtZXJWaWRlb0NhcHR1cmVyPiBtX2NhcHR1cmVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0NhcHR1cmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uODhiNjA1MDIxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4K
KyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRD
KSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIuaCIK
KworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0dTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIoR1N0cmVh
bWVyQ2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2Us
IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKSkKK3sK
K30KKworR1N0cmVhbWVyVmlkZW9DYXB0dXJlcjo6R1N0cmVhbWVyVmlkZW9DYXB0dXJlcihjb25z
dCBjaGFyKiBzb3VyY2VGYWN0b3J5KQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoc291cmNlRmFj
dG9yeSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtcmF3Iikp
KQoreworfQorCitHc3RFbGVtZW50KiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpjcmVhdGVDb252
ZXJ0ZXIoKQoreworICAgIGF1dG8gY29udmVydGVyID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2Ny
aXB0aW9uKCJ2aWRlb3NjYWxlICEgdmlkZW9jb252ZXJ0ICEgdmlkZW9yYXRlIiwgVFJVRSwgbnVs
bHB0cik7CisKKyAgICBBU1NFUlQoY29udmVydGVyKTsKKworICAgIHJldHVybiBjb252ZXJ0ZXI7
Cit9CisKK0dzdFZpZGVvSW5mbyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpnZXRCZXN0Rm9ybWF0
KCkKK3sKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZml4
YXRlKGdzdF9kZXZpY2VfZ2V0X2NhcHMobV9kZXZpY2UuZ2V0KCkpKSk7CisgICAgR3N0VmlkZW9J
bmZvIGluZm87CisgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzLmdldCgp
KTsKKworICAgIHJldHVybiBpbmZvOworfQorCitib29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6
OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghd2lkdGggfHwgIWhl
aWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdz
dF9jYXBzX2NvcHkobV9jYXBzLmdldCgpKSk7CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2Nh
cHMuZ2V0KCksICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHdpZHRoLCAiaGVpZ2h0IiwgR19UWVBFX0lO
VCwgaGVpZ2h0LCBudWxscHRyKTsKKworICAgIGlmICghbV9jYXBzZmlsdGVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBnX29iamVjdF9zZXQobV9jYXBzZmlsdGVyLmdldCgpLCAiY2Fw
cyIsIG1fY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpzZXRGcmFtZVJhdGUoZG91YmxlIGZyYW1lUmF0ZSkK
K3sKKyAgICBpbnQgbnVtZXJhdG9yLCBkZW5vbWluYXRvcjsKKworICAgIGdzdF91dGlsX2RvdWJs
ZV90b19mcmFjdGlvbihmcmFtZVJhdGUsICZudW1lcmF0b3IsICZkZW5vbWluYXRvcik7CisKKyAg
ICBpZiAobnVtZXJhdG9yIDwgLUdfTUFYSU5UKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiRnJhbWVyYXRlICVmIG5vdCBhbGxvd2VkIiwgZnJhbWVSYXRlKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbnVtZXJhdG9yKSB7Cisg
ICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRG8gbm90IGZvcmNlIHZh
cmlhYmxlIGZyYW1lcmF0ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
bV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkobV9jYXBzLmdldCgpKSk7CisgICAgZ3N0
X2NhcHNfc2V0X3NpbXBsZShtX2NhcHMuZ2V0KCksICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFD
VElPTiwgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgbnVsbHB0cik7CisKKyAgICBpZiAoIW1fY2Fw
c2ZpbHRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fw
c2ZpbHRlci5nZXQoKSwgImNhcHMiLCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyVmlkZW9DYXB0dXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNTdiMGI0Njg2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9D
YXB0dXJlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5p
ZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShM
SUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJl
ci5oIgorCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR1N0cmVhbWVyVmlkZW9DYXB0dXJlciA6IHB1YmxpYyBHU3RyZWFtZXJDYXB0
dXJlciB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlcihHU3RyZWFtZXJDYXB0
dXJlRGV2aWNlKTsKKyAgICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJj
ZV9mYWN0b3J5KTsKKworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpIGZpbmFsOwor
ICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBmaW5hbCB7IHJldHVybiAiVmlkZW8iOyB9CisKKyAgICBi
b29sIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBib29sIHNldEZyYW1lUmF0
ZShkb3VibGUpOworICAgIEdzdFZpZGVvSW5mbyBnZXRCZXN0Rm9ybWF0KCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uOTk1ZjA1NzIwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1
bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3Ry
byAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUg
Ik1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIk1vY2tSZWFs
dGltZUF1ZGlvU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBl
ZE1vY2tSZWFsdGltZUF1ZGlvU291cmNlIDogcHVibGljIE1vY2tSZWFsdGltZUF1ZGlvU291cmNl
IHsKK3B1YmxpYzoKKyAgICBXcmFwcGVkTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UoY29uc3QgU3Ry
aW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IE1vY2tSZWFsdGlt
ZUF1ZGlvU291cmNlKGRldmljZUlELCBuYW1lKQorICAgIHsKKyAgICB9Cit9OworCitDYXB0dXJl
U291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgZGV2aWNlSUQsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgTW9j
a0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwgbmFtZSkpOworCisgICAgaWYg
KGNvbnN0cmFpbnRzICYmIHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdU
Rk1vdmUoc291cmNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4gTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhj
b25zdCBNZWRpYUNvbnN0cmFpbnRzJiBjb25zdHJhaW50cykKK3sKKyAgICBtX3dyYXBwZWRTb3Vy
Y2UtPmFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworICAgIHJldHVybiBHU3RyZWFtZXJB
dWRpb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworfQorCit2
b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29u
c3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMsIFN1Y2Nlc3NIYW5kbGVyJiYgc3VjY2Vz
c0hhbmRsZXIsIEZhaWx1cmVIYW5kbGVyJiYgZmFpbHVyZUhhbmRsZXIpCit7CisgICAgbV93cmFw
cGVkU291cmNlLT5hcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBXVEZNb3ZlKHN1Y2Nlc3NI
YW5kbGVyKSwgV1RGTW92ZShmYWlsdXJlSGFuZGxlcikpOworfQorCitNb2NrR1N0cmVhbWVyQXVk
aW9DYXB0dXJlU291cmNlOjpNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0
cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZShkZXZpY2VJRCwgbmFtZSkKKyAgICAsIG1fd3JhcHBlZFNvdXJjZShzdGQ6
Om1ha2VfdW5pcXVlPFdyYXBwZWRNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZT4oZGV2aWNlSUQsIG5h
bWUpKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworfQorCitN
b2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjp+TW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVy
ZVNvdXJjZSgpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2lu
Z0RhdGEoKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+c3RvcCgpOworCisgICAgR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpOworfQorCit2b2lkIE1vY2tH
U3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAg
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICBt
X3dyYXBwZWRTb3VyY2UtPnN0YXJ0KCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyYgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25z
dAoreworICAgIHJldHVybiBtX3dyYXBwZWRTb3VyY2UtPnNldHRpbmdzKCk7Cit9CisKK2NvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgbV9jYXBhYmlsaXRpZXMgPSBt
X3dyYXBwZWRTb3VyY2UtPmNhcGFiaWxpdGllcygpOworICAgIG1fY3VycmVudFNldHRpbmdzID0g
bV93cmFwcGVkU291cmNlLT5zZXR0aW5ncygpOworICAgIHJldHVybiBtX3dyYXBwZWRTb3VyY2Ut
PmNhcGFiaWxpdGllcygpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNhcHR1cmVGYWlsZWQoKQoreworICAgIHN0b3AoKTsKKyAgICBSZWFsdGltZU1lZGlhU291
cmNlOjpjYXB0dXJlRmFpbGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RS
RUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmMxMWYx
NzliOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAq
IEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShH
U1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSwgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIE1vY2tHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyAgICB+TW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSgpOworICAgIHN0ZDo6b3B0aW9u
YWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gYXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRp
YUNvbnN0cmFpbnRzJik7CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29u
c3RyYWludHMmLCBTdWNjZXNzSGFuZGxlciYmLCBGYWlsdXJlSGFuZGxlciYmKSBmaW5hbDsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBz
dGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRp
YVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7CisKKyAgICB2
b2lkIGNhcHR1cmVGYWlsZWQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNv
dXJjZT4gbV93cmFwcGVkU291cmNlOworCisgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShN
ZWRpYVNhbXBsZSYpIG92ZXJyaWRlIHsgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVT
RShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjlkMjg3MGE1MzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGln
YWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNv
bT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
TElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIk1vY2tHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAv
Z3N0YXBwc3JjLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBlZE1vY2tS
ZWFsdGltZVZpZGVvU291cmNlIDogcHVibGljIE1vY2tSZWFsdGltZVZpZGVvU291cmNlIHsKK3B1
YmxpYzoKKyAgICBXcmFwcGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UoY29uc3QgU3RyaW5nJiBk
ZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IE1vY2tSZWFsdGltZVZpZGVv
U291cmNlKGRldmljZUlELCBuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZVNh
bXBsZUJ1ZmZlcigpCisgICAgeworICAgICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWlu
YXRvcjsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCk7CisK
KyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24oZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3Is
ICZmcHNEZW5vbWluYXRvcik7CisgICAgICAgIGF1dG8gZGF0YSA9IGltYWdlQnVmZmVyLT50b0JH
UkFEYXRhKCk7CisgICAgICAgIGF1dG8gc2l6ZSA9IGRhdGEuc2l6ZSgpOworICAgICAgICBhdXRv
IGltYWdlX3NpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8g
Z3N0c2FtcGxlID0gZ3N0X3NhbXBsZV9uZXcoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCgoZ3VpbnQ4
KilkYXRhLnJlbGVhc2VCdWZmZXIoKS5nZXQoKSwgc2l6ZSksCisgICAgICAgICAgICBhZG9wdEdS
ZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAorICAgICAgICAgICAgICAgICJm
b3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSQSIsCisgICAgICAgICAgICAgICAgIndpZHRoIiwg
R19UWVBFX0lOVCwgaW1hZ2Vfc2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICJoZWlnaHQi
LCBHX1RZUEVfSU5ULCBpbWFnZV9zaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICJmcmFt
ZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWluYXRvciwK
KyAgICAgICAgICAgICAgICBudWxscHRyKSkuZ2V0KCksCisgICAgICAgICAgICBudWxscHRyLCBu
dWxscHRyKTsKKworICAgICAgICBhdXRvIHNhbXBsZSA9IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpj
cmVhdGUoV1RGTW92ZShnc3RzYW1wbGUpLAorICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRTaXpl
KCksIFN0cmluZygpKTsKKyAgICAgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlKTsKKyAg
ICB9Cit9OworCitDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBhdXRvIHNvdXJjZSA9
IGFkb3B0UmVmKCpuZXcgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwg
bmFtZSkpOworCisgICAgaWYgKGNvbnN0cmFpbnRzICYmIHNvdXJjZS0+YXBwbHlDb25zdHJhaW50
cygqY29uc3RyYWludHMpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIENhcHR1
cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1l
clZpZGVvQ2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgIG1fd3JhcHBl
ZFNvdXJjZS0+c3RhcnQoKTsKK30KKwordm9pZCBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5zdG9wKCk7
CisKKyAgICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCk7
Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6dmlkZW9TYW1wbGVB
dmFpbGFibGUoTWVkaWFTYW1wbGUmIHNhbXBsZSkKK3sKKyAgICBhdXRvIHNyYyA9IGNhcHR1cmVy
KCktPnNvdXJjZSgpOworCisgICAgaWYgKHNyYykgeworICAgICAgICBhdXRvIGdzdHNhbXBsZSA9
IHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlR1N0cmVhbWVyKj4oJnNhbXBsZSktPnBsYXRmb3JtU2Ft
cGxlKCkuc2FtcGxlLmdzdFNhbXBsZTsKKyAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUo
R1NUX0FQUF9TUkMoc3JjKSwgZ3N0c2FtcGxlKTsKKyAgICB9Cit9CisKK01vY2tHU3RyZWFtZXJW
aWRlb0NhcHR1cmVTb3VyY2U6Ok1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3Qg
U3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlKGRldmljZUlELCBuYW1lLCAiYXBwc3JjIikKKyAgICAsIG1fd3JhcHBl
ZFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPFdyYXBwZWRNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZT4o
ZGV2aWNlSUQsIG5hbWUpKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRo
aXMpOworfQorCitNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjp+TW9ja0dTdHJlYW1l
clZpZGVvQ2FwdHVyZVNvdXJjZSgpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5yZW1vdmVPYnNl
cnZlcigqdGhpcyk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4gTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhjb25z
dCBNZWRpYUNvbnN0cmFpbnRzJiBjb25zdHJhaW50cykKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2Ut
PmFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworICAgIHJldHVybiBHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworfQorCit2b2lk
IE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3Qg
TWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMsIFN1Y2Nlc3NIYW5kbGVyJiYgc3VjY2Vzc0hh
bmRsZXIsIEZhaWx1cmVIYW5kbGVyJiYgZmFpbHVyZUhhbmRsZXIpCit7CisgICAgbV93cmFwcGVk
U291cmNlLT5hcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBXVEZNb3ZlKHN1Y2Nlc3NIYW5k
bGVyKSwgV1RGTW92ZShmYWlsdXJlSGFuZGxlcikpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3MmIE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnNldHRpbmdz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93cmFwcGVkU291cmNlLT5zZXR0aW5ncygpOworfQor
Citjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBNb2NrR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIG1fY2FwYWJpbGl0
aWVzID0gbV93cmFwcGVkU291cmNlLT5jYXBhYmlsaXRpZXMoKTsKKyAgICBtX2N1cnJlbnRTZXR0
aW5ncyA9IG1fd3JhcHBlZFNvdXJjZS0+c2V0dGluZ3MoKTsKKyAgICByZXR1cm4gbV9jYXBhYmls
aXRpZXMudmFsdWUoKTsKK30KKwordm9pZCBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
OjpjYXB0dXJlRmFpbGVkKCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBSZWFsdGltZU1lZGlhU291
cmNlOjpjYXB0dXJlRmFpbGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RS
RUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGM4MDI3
NjhkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAq
IEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdT
VFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIgorI2lu
Y2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgV3JhcHBlZE1vY2tSZWFsdGltZVZpZGVvU291cmNlOworLy8gV2UgYXJlIHN1YmNs
YXNzaW5nIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSBhbmQgbm90IE1vY2tSZWFsdGltZU1l
ZGlhU291cmNlCisvLyBiZWNhdXNlIHRoZSBNZWRpYVBsYXllciBleHBlY3RzIEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZSB0byBiZSBhYmxlIHRvIHByb3Blcmx5CisvLyBidWlsZCB0aGUgR1N0
cmVhbWVyIHBpcGVsaW5lLiBTdGlsbCB3ZSBtYWtlIGl0IHNvIHRoYXQgaXQgYmVoYXZlcyBhcyBj
bG9zZWx5IGFzIHBvc3NpYmxlCisvLyB0byB0aGUgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UgY2xh
c3MgYnkgd3JhcHBpbmcgb3VyIG93biBzdWJjbGFzcyBvZiBpdC4KK2NsYXNzIE1vY2tHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLCBSZWFsdGltZU1lZGlhU291cmNlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIH5Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKCk7
CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBhcHBseUNvbnN0
cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmKTsKKyAgICB2b2lkIGFwcGx5Q29uc3RyYWlu
dHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYsIFN1Y2Nlc3NIYW5kbGVyJiYsIEZhaWx1cmVIYW5k
bGVyJiYpIGZpbmFsOworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBm
aW5hbDsKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gbV93cmFwcGVkU291cmNlOworICAg
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgY2FwdHVyZUZhaWxlZCgpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpIG92ZXJyaWRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmRjZTFkNmU2MGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBU
aGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5k
cm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKKyNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVy
ZUZhY3RvcnkmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OmF1ZGlvQ2FwdHVy
ZVNvdXJjZUZhY3RvcnkoKQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
TGliV2ViUlRDOjpzaW5nbGV0b24oKS5hdWRpb0ZhY3RvcnkoKTsKK30KKworUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckxpYldlYlJUQyYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJU
Qzo6c2luZ2xldG9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDPiBjZW50
ZXI7CisgICAgcmV0dXJuIGNlbnRlcjsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciYg
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQoreworICAgIHJldHVy
biBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjpzaW5nbGV0b24oKTsKK30KKwor
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6UmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckxpYldlYlJUQygpCisgICAgOiBtX2xpYldlYlJUQ1Byb3ZpZGVyKExpYldlYlJUQ1Byb3Zp
ZGVyOjpjcmVhdGUoKSkKK3sKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJU
Qzo6flJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMoKQoreworfQorCitSZWFsdGlt
ZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDOjphdWRpb0ZhY3RvcnkoKQoreworICAgIGlmIChtX2F1ZGlvRmFjdG9yeU92
ZXJyaWRlKQorICAgICAgICByZXR1cm4gKm1fYXVkaW9GYWN0b3J5T3ZlcnJpZGU7CisKKyAgICBy
ZXR1cm4gR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7Cit9CisKK1JlYWx0
aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJMaWJXZWJSVEM6OnZpZGVvRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpOworfQorCitDYXB0dXJlRGV2aWNlTWFuYWdlciYg
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6YXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlcigpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6
OnNpbmdsZXRvbigpOworfQorCitDYXB0dXJlRGV2aWNlTWFuYWdlciYgUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckxpYldlYlJUQzo6dmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7CisgICAg
cmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpOwor
fQorCitDYXB0dXJlRGV2aWNlTWFuYWdlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldl
YlJUQzo6ZGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gR1N0cmVh
bWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckxpYldlYlJUQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi45MjEyODRlMTc4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2Vi
UlRDLmgKQEAgLTAsMCArMSw2OCBAQAorIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldF
QlJUQykKKworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTGli
V2ViUlRDUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgorCisjaW5jbHVkZSA8d2VicnRjL2Fw
aS9wZWVyY29ubmVjdGlvbmludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDIGZpbmFsIDogcHVibGljIFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDJiBzaW5nbGV0b24oKTsKKwor
ICAgIHdlYnJ0Yzo6UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlKiBmYWN0b3J5KCkgeyBy
ZXR1cm4gbV9saWJXZWJSVENQcm92aWRlci0+ZmFjdG9yeSgpOyB9CisKKyAgICBzdGF0aWMgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgdmlkZW9DYXB0dXJlU291cmNl
RmFjdG9yeSgpOworICAgIHN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVG
YWN0b3J5JiBhdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5KCk7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJS
VEM+OworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMoKTsKKyAgICB+UmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQygpOworCisgICAgdm9pZCBzZXRBdWRpb0Zh
Y3RvcnkoUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgZmFjdG9yeSkg
ZmluYWwgeyBtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlID0gJmZhY3Rvcnk7IH0KKyAgICB2b2lkIHVu
c2V0QXVkaW9GYWN0b3J5KFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3Rvcnkm
KSBmaW5hbCB7IG1fYXVkaW9GYWN0b3J5T3ZlcnJpZGUgPSBudWxscHRyOyB9CisKKyAgICBSZWFs
dGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBhdWRpb0ZhY3RvcnkoKSBmaW5h
bDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiB2aWRlb0Zh
Y3RvcnkoKSBmaW5hbDsKKworICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyJiBhdWRpb0NhcHR1cmVE
ZXZpY2VNYW5hZ2VyKCkgZmluYWw7CisgICAgQ2FwdHVyZURldmljZU1hbmFnZXImIHZpZGVvQ2Fw
dHVyZURldmljZU1hbmFnZXIoKSBmaW5hbDsKKyAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgZGlz
cGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWw7CisKKyAgICBSZWFsdGltZU1lZGlhU291
cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5KiBtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlIHsgbnVsbHB0
ciB9OworICAgIFVuaXF1ZVJlZjxMaWJXZWJSVENQcm92aWRlcj4gbV9saWJXZWJSVENQcm92aWRl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKaW5kZXggYzUwYWJj
YjdhMzIuLjljNjAyNGU1M2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcApAQCAtNTUsNyArNTUsNyBAQCBw
dWJsaWM6CiAgICAgfQogfTsKIAotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1Mp
CisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykgJiYgIShVU0UoR1NUUkVBTUVS
KSAmJiBVU0UoTElCV0VCUlRDKSkKIENhcHR1cmVTb3VyY2VPckVycm9yIE1vY2tSZWFsdGltZUF1
ZGlvU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKICAgICBhdXRvIHNv
dXJjZSA9IGFkb3B0UmVmKCpuZXcgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UoZGV2aWNlSUQsIG5h
bWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggOWU4NjBkNmNmNWEuLmVkZWRhODNhMGUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlLmNwcApAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi0j
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKyNpZiAhUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKSAmJiAhKFVTRShHU1RSRUFNRVIpICYmIFVTRShMSUJXRUJSVEMpKQog
Q2FwdHVyZVNvdXJjZU9yRXJyb3IgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZShjb25z
dCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IE1lZGlhQ29uc3Ry
YWludHMqIGNvbnN0cmFpbnRzKQogewogICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZShkZXZpY2VJRCwgbmFtZSkpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE0ZWMzNTRlODUwLi4wZWM4MTY3
MjBkZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTA1LTE4ICBUaGliYXVsdCBTYXVuaWVyICA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIFN0YXJ0IGltcGxlbWVudGluZyBNZWRp
YVN0cmVhbSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NTc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBBcHBseSBzcGVjaWFsIGZv
cm1hdHRpbmcgcnVsZXMgZm9yIG5ldyBHT2JqZWN0IHN1YmNsYXNzZXMuCisgICAgICAgICogZ3N0
cmVhbWVyL2poYnVpbGQubW9kdWxlczogQWRkZWQgYSBwYXRjaCBmb3IgdGhlIGdzdC1wbHVnaW5z
LWJhc2UuCisgICAgICAgICogZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFzZS0wMDAx
LXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0
Y2g6CisgICAgICAgIEFkZGVkIHRoaXMgZml4IHRvIGdzdC1wbHVnaW5ncy1iYXNlIHRvIGZpeCB0
aGUgZGVjb2RlYmluMy4gTWVyZ2VkIGFzIDg5ZDBlOWNjOTJhODZhYTAyMjdlZTg3NDA2NzM3YjZk
MzE2NzBhZWEKKwogMjAxOC0wNS0zMSAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+
CiAKICAgICAgICAgZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMgc2hvdWxkIHVzZSB0aGUgbmV3IGxv
Y2F0aW9uICYgbmFtZSBvZiB0aGUgV1BUIHJlcG8KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQppbmRleCAzMzNkY2UyNjU2Ny4uYTU5MDhlNjAxNmEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIwNyw2ICsyMDcsOCBAQCBfUEFUSF9SVUxF
U19TUEVDSUZJRVIgPSBbCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywg
J3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdWaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3Jt
JywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3Bw
JyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywg
J2F1ZGlvJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAn
KSwKKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAn
bWVkaWFzdHJlYW0nLCAnZ3N0cmVhbWVyJywgJ0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmgn
KSwKKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAn
bWVkaWFzdHJlYW0nLCAnZ3N0cmVhbWVyJywgJ0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNw
cCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScs
ICduZXR3b3JrJywgJ3NvdXAnLCAnUHJveHlSZXNvbHZlclNvdXAuY3BwJyksCiAgICAgICBvcy5w
YXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ25ldHdvcmsnLCAnc291
cCcsICdQcm94eVJlc29sdmVyU291cC5oJyldLAogICAgICBbIi1yZWFkYWJpbGl0eS9uYW1pbmci
LApkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2dz
dHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggNWFlYjc1NmVjMGEuLmM5MGEwY2I0NjhjIDEw
MDY0NAotLS0gYS9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzCisrKyBiL1Rvb2xzL2dz
dHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMKQEAgLTU3LDcgKzU3LDkgQEAKICAgICA8ZGVwZW5kZW5j
aWVzPgogICAgICAgPGRlcCBwYWNrYWdlPSJnc3RyZWFtZXIiLz4KICAgICA8L2RlcGVuZGVuY2ll
cz4KLSAgICA8YnJhbmNoIGhhc2g9InNoYToxMDI2YzdjMzA4MmQ4MjVkOWI1ZDAzNGMxYTZkZDhh
NGViYWI2MGViMzczOGIwYTBhZmRlNGFkMmRjMGIwZGI1IiBtb2R1bGU9ImdzdC1wbHVnaW5zLWJh
c2UvZ3N0LXBsdWdpbnMtYmFzZS0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2
ZXJzaW9uPSIxLjE0LjEiIC8+CisgICAgPGJyYW5jaCBoYXNoPSJzaGE6MTAyNmM3YzMwODJkODI1
ZDliNWQwMzRjMWE2ZGQ4YTRlYmFiNjBlYjM3MzhiMGEwYWZkZTRhZDJkYzBiMGRiNSIgbW9kdWxl
PSJnc3QtcGx1Z2lucy1iYXNlL2dzdC1wbHVnaW5zLWJhc2UtJHt2ZXJzaW9ufS50YXIueHoiIHJl
cG89ImdzdHJlYW1lciIgdmVyc2lvbj0iMS4xNC4xIiA+CisgICAgICA8cGF0Y2ggZmlsZT0iZ3N0
LXBsdWdpbnMtYmFzZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04tb24tRVZF
TlRfU1RSRUFNX0NPTEwucGF0Y2giIHN0cmlwPSIxIi8+IDwhLS0gTWVyZ2VkIGFzIDg5ZDBlOWNj
OTJhODZhYTAyMjdlZTg3NDA2NzM3YjZkMzE2NzBhZWEgLS0+CisgICAgPC9icmFuY2g+CiAgIDwv
YXV0b3Rvb2xzPgogCiAgIDxhdXRvdG9vbHMgaWQ9ImdzdC1wbHVnaW5zLWdvb2QiIGF1dG9nZW4t
c2g9ImNvbmZpZ3VyZSIgYXV0b2dlbmFyZ3M9Ii0tZGlzYWJsZS1leGFtcGxlcyAtLWRpc2FibGUt
Z3RrLWRvYyAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiI+CmRpZmYgLS1naXQgYS9Ub29scy9nc3Ry
ZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1f
Q09MTEVDVElPTi1vbi1FVkVOVF9TVFJFQU1fQ09MTC5wYXRjaCBiL1Rvb2xzL2dzdHJlYW1lci9w
YXRjaGVzL2dzdC1wbHVnaW5zLWJhc2UtMDAwMS1wYXJzZWJpbi1Qb3N0LVNUUkVBTV9DT0xMRUNU
SU9OLW9uLUVWRU5UX1NUUkVBTV9DT0xMLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi42ODBiYzJkYjQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2dzdHJl
YW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhc2UtMDAwMS1wYXJzZWJpbi1Qb3N0LVNUUkVBTV9D
T0xMRUNUSU9OLW9uLUVWRU5UX1NUUkVBTV9DT0xMLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zy
b20gODlkMGU5Y2M5MmE4NmFhMDIyN2VlODc0MDY3MzdiNmQzMTY3MGFlYSBNb24gU2VwIDE3IDAw
OjAwOjAwIDIwMDEKK0Zyb206IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+
CitEYXRlOiBXZWQsIDE4IEFwciAyMDE4IDE2OjA2OjA3IC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hd
IHBhcnNlYmluOiBQb3N0IFNUUkVBTV9DT0xMRUNUSU9OIG9uIEVWRU5UX1NUUkVBTV9DT0xMRUNU
SU9OCisKK090aGVyd2lzZSBkZWNvZGViaW4gd29uJ3QgZ2V0IG5vdGlmaWVkIGFib3V0IFNUUkVB
TV9DT0xMRUNUSU9OIGNvbW1pbmcKK2Zyb20gdGhlIHNvdXJjZXMgYW5kIHRodXMgd2lsbCBuZXZl
ciBnZXQgaW5mb3Jtb3JlZCBhYm91dCBpdC4gV2l0aG91dAorYmVpbmcgaW5mb3JtZWQgYWJvdXQg
dGhlIHN0cmVhbSBjb2xsZWN0aW9uIGRlY29kZWJpbiB3b24ndCBiZSBhYmxlIHRvCitzZWxlY3Qg
YW55IHN0cmVhbXMuIEl0IGVuZHMgdXAgbm90IGNyZWF0aW5nIGFueSBvdXRwdXQgZm9yIHRoZSBz
dHJlYW1zCitkZWZpbmVkIGZyb20gb3V0c2lkZSBwYXJzZXJiaW4uCisKK2h0dHBzOi8vYnVnemls
bGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03OTUzNjQKKy0tLQorIGdzdC9wbGF5YmFjay9n
c3RwYXJzZWJpbi5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisK
K2RpZmYgLS1naXQgYS9nc3QvcGxheWJhY2svZ3N0cGFyc2ViaW4uYyBiL2dzdC9wbGF5YmFjay9n
c3RwYXJzZWJpbi5jCitpbmRleCA0YzViZmMxOWQuLmY5NjYyZWI0OSAxMDA2NDQKKy0tLSBhL2dz
dC9wbGF5YmFjay9nc3RwYXJzZWJpbi5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0cGFyc2ViaW4u
YworQEAgLTQwNDYsNiArNDA0Niw5IEBAIGdzdF9wYXJzZV9wYWRfZXZlbnQgKEdzdFBhZCAqIHBh
ZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQorICAgICAgIEdz
dFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSBOVUxMOworICAgICAgIGdzdF9ldmVudF9w
YXJzZV9zdHJlYW1fY29sbGVjdGlvbiAoZXZlbnQsICZjb2xsZWN0aW9uKTsKKyAgICAgICBnc3Rf
cGFyc2VfcGFkX3VwZGF0ZV9zdHJlYW1fY29sbGVjdGlvbiAocGFyc2VwYWQsIGNvbGxlY3Rpb24p
OworKyAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHBhcnNlcGFk
LT5wYXJzZWJpbiksCisrICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zdHJlYW1fY29sbGVjdGlv
biAoR1NUX09CSkVDVCAocGFyc2VwYWQtPnBhcnNlYmluKSwKKysgICAgICAgICAgICAgIGNvbGxl
Y3Rpb24pKTsKKyAgICAgICBicmVhazsKKyAgICAgfQorICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6
eworLS0gCisyLjE3LjAKKwotLSAKMi4xNy4x
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342085</attachid>
            <date>2018-06-06 15:36:15 -0700</date>
            <delta_ts>2018-06-07 07:47:43 -0700</delta_ts>
            <desc>[GTK][WPE]: Implement MediaStream API</desc>
            <filename>GTKWPE-Implement-MediaStream-API.patch</filename>
            <type>text/plain</type>
            <size>152662</size>
            <attacher name="Thibault Saunier">tsaunier</attacher>
            
              <data encoding="base64">RnJvbSA1MDgzMjI2NDNhZTY1YzA4NjViYjllNTdjOGMzYjQ5Yzk4NDM5M2IzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQWxlamFuZHJvIEcuIENhc3RybyIgPGFsZXhAaWdhbGlhLmNv
bT4KRGF0ZTogVGh1LCAyNCBNYXkgMjAxOCAxMjo1NTowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
eHNlcnZlcl0gW0dUS11bV1BFXTogSW1wbGVtZW50IE1lZGlhU3RyZWFtIEFQSQoKaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NwotLS0KIExheW91dFRlc3RzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyAgICAgfCAgNTkgKy0KIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICB8IDExNyArKysrCiBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZSAgICAgICAgICAgICAgfCAgIDIgKwogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlICAgICAgIHwgIDE2ICsKIC4uLi9wbGF0Zm9ybS9hdWRpby9B
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmggICB8ICAgMSArCiAuLi4vcGxhdGZvcm0vYXVkaW8vUGxh
dGZvcm1BdWRpb0RhdGEuaCAgICAgICAgfCAgIDEgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwICAgIHwgIDQ3ICsrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5oICAgICAgfCAgIDMgKwogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIHwgIDYzICsrLQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCAgIHwgICA3ICstCiAuLi4vTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHAgICAgICAgfCAgIDcgKwogLi4uL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAgIHwgICA4ICsKIC4uLi9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlLmggICAgICAgICB8ICAgMiArLQogLi4uL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwIHwgICA3IC0KIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmNwcCB8IDIwMiArKysrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICAgfCAgNjUgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuY3BwICAgICAgfCAgNzMgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuaCAgICAgICAgfCAgNDMgKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRh
LmggICAgICAgICAgICB8ICA1OSArKwogLi4uL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaCAgICAgICAgIHwgMTA1ICsrKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURl
dmljZS5oICAgICAgICB8ICA1MCArKwogLi4uL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmNwcCAgICAgICAgIHwgMTM0ICsrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmggfCAgODEgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVy
LmNwcCAgICAgICAgICAgfCAxOTggKysrKysrKwogLi4uL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlci5oIHwgIDcyICsrKwogLi4uL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5jcHAgIHwgNTMxICsrKysrKysrKysrKysrKysrKwogLi4uL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oICAgIHwgIDQ2ICsrCiAuLi4vZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgfCAyNjggKysrKysrKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oICAgfCAgNjQgKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwICAgICAgfCAxMDQgKysrKwogLi4uL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmggICAgICAgIHwgIDQ2ICsrCiAuLi4vTW9j
a0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxMDYgKysrKwogLi4uL01v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCAgICAgICAgIHwgIDUxICsrCiAuLi4vTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxNDYgKysrKysKIC4uLi9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmggICAgICAgICB8ICA1NiArKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwICAgIHwgIDkxICsrKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuaCAgICAgIHwgIDY4ICsrKwogLi4uL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIHwgICAyICstCiAuLi4vcGxh
dGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgfCAgIDIgKy0KIFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArCiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgICAgICAgfCAgIDIgKwogVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcyAgICAgICAgICAgICAgIHwgICA0ICstCiAuLi5SRUFNX0NPTExF
Q1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2ggfCAgMzMgKysKIDQ0IGZpbGVzIGNoYW5n
ZWQsIDI5OTYgaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0
dXJlRGV2aWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1
cmVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9nc3Ry
ZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1f
Q09MTEVDVElPTi1vbi1FVkVOVF9TVFJFQU1fQ09MTC5wYXRjaAoKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZGM3NjIzMTgy
ZS4uNTM1YmYzMzQ5NGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOC0wNS0xOCAgVGhpYmF1
bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBT
dGFydCBpbXBsZW1lbnRpbmcgTWVkaWFTdHJlYW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3ODcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OiBSZWFjdGl2YXRlIE1lZGlhU3RyZWFtIHRlc3RzIGFuZCBlbmFibGUgYWxsIHRlc3RzCisgICAg
ICAgIHJlbGF0ZWQgdG8gdGhlIG1lZGlhRGV2aWNlLmVudW1lcmF0ZURldmljZXMgYW5kIE1lZGlh
U3RyZWFtIChub3QgUlRDUGVlckNvbm5lY3Rpb24gbm9yCisgICAgICAgIHdlYmF1ZGlvKS4KKwog
MjAxOC0wNS0zMSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgU2tpcCBodHRwL3Rlc3RzL3NlY3VyaXR5L3JlZmVycmVyLXBvbGljeS1oZWFkZXIuaHRtbCBv
biBXaW5kb3dzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCAxNDA5NmIwY2E2My4uYmRmM2Q0ZGExZmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zCkBAIC01NzMsNjYgKzU3MywzMSBAQCB3ZWJraXQub3JnL2IvOTkwMzYg
ZmFzdC9zaGFkb3ctZG9tL3BvaW50ZXJsb2NrZWxlbWVudC1pbi1zbG90Lmh0bWwgWyBTa2lwIF0K
IHdlYmtpdC5vcmcvYi84NTIxMSBpZXRlc3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtYWxp
Z24tc3RyZXRjaC0wMDEuaHRtIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODUy
MTIgaWV0ZXN0Y2VudGVyL2NzczMvZmxleGJveC9mbGV4Ym94LWxheW91dC0wMDIuaHRtIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiAKLSMgU2tpcHBpbmcgdW50aWwgYmFja2VuZCBpcyBpbXBsZW1lbnRl
ZAotZmFzdC9tZWRpYXN0cmVhbSBbIFNraXAgXQogd2VicnRjIFsgU2tpcCBdCiBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy8gWyBTa2lwIF0KIGh0dHAvdGVzdHMvd2VicnRj
IFsgU2tpcCBdCiAjIFRoZSBNZWRpYVN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHN0aWxs
IG5vdCBjb21wbGV0ZWQKIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21vY2st
bWVkaWEtc291cmNlLXdlYmF1ZGlvLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS5o
dG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS12aWRlby1lbGVtZW50LXRyYWNrLXN0b3AuaHRtbCBbIFBhc3MgQ3Jhc2ggXQord2Vi
a2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVu
dC10cmFjay1zdG9wLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWR0bWYuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0
Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlk
YXRlLWV2ZW50Lmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLXNpbmdsZS1kaWFsb2cu
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtdHdvLWRpYWxvZ3MuaHRtbCBbIEZhaWx1cmUgXQot
d2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVt
b3RlbHktYXNzaWduZWQtdHJhbnNjZWl2ZXItbWlkLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQot
d2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0
TG9jYWxEZXNjcmlwdGlvbi1vZmZlci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlv
bi1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC10d28tZGlhbG9ncy5odG1sIFsgRmFp
bHVyZSBDcmFzaCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENSdHBT
ZW5kZXItcmVwbGFjZVRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KICMgQ3Jhc2ggaXMgd2Via2l0Lm9y
Zy9iLzE4NDI5Mgogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tYWRkSWNlQ2FuZGlkYXRlLmh0bWwgWyBGYWlsdXJlIFBhc3MgQ3Jhc2ggXQotd2Vi
a2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tQWRkUmVt
b3ZlU3RyZWFtLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWFkZC1yZW1vdmVUcmFjay5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1h
ZGRUcmFjay1yZXVzZS1zZW5kZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAz
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJhbnNjZWl2ZXIuaHRtbCBb
IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tY2xvc2VkLXN0YXRlLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWNyZWF0ZUFuc3dlci5odG1sIFsg
RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1jcmVhdGVPZmZlci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC5odG1sIFsgRmFp
bHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1oYXZlLWxvY2FsLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtbG9jYWwtcHJhbnN3ZXIu
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taGF2ZS1yZW1vdGUtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0
Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1yZW1v
dGUtcHJhbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5v
cmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNvbm5lY3Rp
b25zdGF0ZWNoYW5nZS1ldmVudC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pY2Vjb25uZWN0aW9uc3RhdGVjaGFu
Z2UtZXZlbnQuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pY2UuaHRtbCBbIEZhaWx1cmUgVGltZW91
dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1pbnNwZWN0LWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWJ1bmRsZVBvbGlj
eS1idW5kbGUtb25seS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwgWyBGYWlsdXJl
IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LWxlZ2FjeS1zdHJlYW0tYmFzZWQtYXBpLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83
OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24u
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtY2FsbGJhY2tzLXNpbmdsZS1kaWFsb2cuaHRtbCBb
IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tbW9yZS1tZWRpYS10by1uZWdvdGlhdGUuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0
Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tb25uZWdvdGlh
dGlvbm5lZWRlZC5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1vdmVybG9hZGVkLW9wZXJhdGlvbnMtcGFyYW1zLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLW92ZXJsb2FkZWQtb3BlcmF0aW9ucy5odG1sIFsgRmFpbHVyZSBdCi13ZWJr
aXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVE
ZXNjcmlwdGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0
Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhdHNTZWxl
Y3Rvci5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVh
bS9SVENUcmFja0V2ZW50LWNvbnN0cnVjdG9yLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNh
bGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi83OTIwMyB3ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlvc291cmNlbm9kZS5odG1sIFsgRmFpbHVy
ZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRl
by1lbGVtZW50LWRpc3BsYXlzLWJ1ZmZlci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5
MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10cmFj
a3MtZGlzYWJsZWQtdGhlbi1lbmFibGVkLmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50Lmh0bWwgWyBDcmFz
aCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50
cy1hZHZhbmNlZC5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQtdGhl
bi1lbmFibGVkLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzc5MjAzIGZh
c3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC1kaXNwbGF5cy1idWZmZXIu
aHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc3RyZWFtL2dldHVzZXJtZWRpYS13aXRoLWNhbnZhcy5odG1sIFsgQ3Jhc2ggXQotd2Via2l0
Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXNl
dE9iamVjdC1udWxsLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtp
dC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL2NhcHR1cmVTdHJlYW0vY2FudmFzMmQtaGVh
dnktZHJhd2luZy5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRp
YXN0cmVhbS9nZXQtdXNlci1tZWRpYS1vbi1sb2FkZWRtZXRhZGF0YS5odG1sIFsgVGltZW91dCBd
Ci13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9sb2NhbC1hdWRpby1wbGF5aW5n
LWV2ZW50Lmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3Ry
ZWFtL21lZGlhLXN0cmVhbS10cmFjay1zb3VyY2UtZmFpbHVyZS5odG1sIFsgVGltZW91dCBdCiB3
ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNh
cHR1cmUtc3RyZWFtcy9NZWRpYVN0cmVhbS1NZWRpYUVsZW1lbnQtcHJlbG9hZC1ub25lLmh0dHBz
Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIwMyBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL21lZGlhY2FwdHVyZS1zdHJlYW1zL01lZGlhU3RyZWFtVHJhY2stZW5kLW1h
bnVhbC5odHRwcy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTUxMzQ0IGZhc3QvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRkLWVuZGVkLXRyYWNrcy5odG1sIFsgVGltZW91dCBdCkBA
IC02NDMsNiArNjA4LDkgQEAgd2Via2l0Lm9yZy9iLzE3MzI1NyBmYXN0L21lZGlhc3RyZWFtL2dl
dFVzZXJNZWRpYS1ncmFudC1wZXJzaXN0ZW5jeTMuaHRtbCBbIFBhc3MKIAogIyBDYW52YXMgY2Fw
dHVyZVN0cmVhbSBzdXBwb3J0IGlzIG5vdCBpbXBsZW1lbnRlZAogd2Via2l0Lm9yZy9iLzE2OTgx
MSBmYXN0L21lZGlhY2FwdHVyZWZyb21lbGVtZW50IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTY5
ODExIGZhc3QvbWVkaWFzdHJlYW0vY2FwdHVyZVN0cmVhbS8gWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwg
WyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9j
YXB0dXJlU3RyZWFtL2NhbnZhczNkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KIAogIyBSZXF1aXJl
cyBSZXNvbHV0aW9uIE1lZGlhIFF1ZXJ5IHN1cHBvcnQKIHdlYmtpdC5vcmcvYi8xMDAxMzcgZmFz
dC9tZWRpYS9tcS1yZXNvbHV0aW9uLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTEyNjgsMjUgKzEyMzYs
MTggQEAgd2Via2l0Lm9yZy9iLzEzMTU0NiBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwg
WyBDcmFzaCBUaW1lb3V0IEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTYzNzgyIG1lZGlhL3Zp
ZGVvLXBsYXllZC1yYW5nZXMtMS5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8x
Njk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwgWyBDcmFz
aCBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJl
U3RyZWFtL2NhbnZhczNkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KLQogd2Via2l0Lm9yZy9iLzE3
MjI4MSBhY2Nlc3NpYmlsaXR5L2luc2VydC1jaGlsZHJlbi1hc3NlcnQuaHRtbCBbIENyYXNoIF0K
IAogd2Via2l0Lm9yZy9iLzE3Mjk1NSBtZWRpYS92aWRlby1wcmVsb2FkLmh0bWwgWyBDcmFzaCBQ
YXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3NTU3NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcmVhZHkt
c3RhdGVzL2F1dG9wbGF5LXdpdGgtc2xvdy10ZXh0LXRyYWNrcy5odG1sIFsgQ3Jhc2ggUGFzcyBd
CiAKLXdlYmtpdC5vcmcvYi8xNzY4MDEgZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50
cy1hdWRpby5odG1sIFsgQ3Jhc2ggXQogd2Via2l0Lm9yZy9iLzE3NjgwMSBmYXN0L21lZGlhc3Ry
ZWFtL2FyZ3VtZW50LXR5cGVzLmh0bWwgWyBDcmFzaCBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3
NjgwMyBodHRwL3Rlc3RzL2xvY2FsL2Jsb2Ivc2VuZC1oeWJyaWQtYmxvYi11c2luZy1vcGVuLXBh
bmVsLmh0bWwgWyBDcmFzaCBdCiAKLXdlYmtpdC5vcmcvYi8xNzY4NTYgZmFzdC9tZWRpYXN0cmVh
bS9hcHBseS1jb25zdHJhaW50cy12aWRlby5odG1sIFsgQ3Jhc2ggXQotCiAjIFNlZSBhbHNvIHdl
YmtpdC5vcmcvYi8xNDE2OTkKIHdlYmtpdC5vcmcvYi8xNzc1MzQgZmFzdC9hdHRhY2htZW50L2F0
dGFjaG1lbnQtcmVzcGVjdHMtY3NzLXNpemUuaHRtbCBbIENyYXNoIEltYWdlT25seUZhaWx1cmUg
XQotd2Via2l0Lm9yZy9iLzE3NzUzNSBmYXN0L21lZGlhc3RyZWFtL21lZGlhLWRldmljZS1pbmZv
Lmh0bWwgWyBDcmFzaCBQYXNzIF0KICMgU2VlIGFsc28gd2Via2l0Lm9yZy9iLzE2MzUyOCBUaHJl
YWRlZCBjb21wb3NpdG9yIGZhaWx1cmVzIGNhdXNlZCBieSBvbmUgb2YgcjIwMzQ5NiwgcjIwMzQ5
Nywgb3IgcjIwMzQ5OAogd2Via2l0Lm9yZy9iLzE3NzUzNiBtZWRpYS92aWRlby1vYmplY3QtZml0
Lmh0bWwgWyBDcmFzaCBJbWFnZU9ubHlGYWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM3YTdjM2Ni
Nzg5Li5jY2E2YjYxNDhhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxOC0wNS0z
MCAgVGhpYmF1bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+IGFuZCBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gU3RhcnQg
aW1wbGVtZW50aW5nIE1lZGlhU3RyZWFtIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2UgYXJlIGFkZGluZyBhbGwgdGhlIHJlcXVpcmVkIGNsYXNz
ZXMgdG8gbWFrZSB0aGUKKyAgICAgICAgTWVkaWFTdHJlYW0gQVBJIHdvcmssIHRoYXQgbWVhbnMg
b3VyIG93biBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDCisgICAgICAgIGZvciB0
aGUgcGxhdGZvcm0sIHRoZSBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlciwgdGhlIGF1ZGlv
L3ZpZGVvIGNhcHR1cmVycworICAgICAgICBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBhdWRpby92aWRl
byBzb3VyY2VzIGFzIHdlbGwgYXMgYSBkZWRpY2F0ZWQgR1N0cmVhbWVyIFNvdXJjZQorICAgICAg
ICB0aGF0IGFkZHMgc3VwcG9ydCBmb3IgdXNpbmcgTWVkaWFTdHJlYW0gc3RyZWFtIGluc2lkZSBw
bGF5YmluMy4KKyAgICAgICAgV2UgYXJlIHVzaW5nIHRoZSBHc3REZXZpY2VNb25pdG9yIHRvIGxp
c3QgZGV2aWNlcyBvbiB0aGUgZGV2aWNlcy4KKworICAgICAgICBFbmFibGUgbWVkaWFzdHJlYW0g
dGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6IEFkZGVkIHRoZSBu
ZXcgZmlsZXMgdG8gdGhlIGNvbXBpbGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDogQWRkZWQgbmV3IEdTdHJlYW1lciB0eXBlLgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmg6IEFkZGVkIG5ldyBHU3RyZWFt
ZXIgdHlwZSBmb3IKKyAgICAgICAgdGhlIEdTdHJlYW1lckF1ZGlvRGF0YSBjbGFzcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayk6IFRoaXMgZnVuY3Rpb24g
YW5kIHRoZSBuZXh0CisgICAgICAgIG9uZSBoZWxwIHVzIHRvIGNvbm5lY3QgYSBtb25pdG9yaW5n
IGNhbGxiYWNrIHRvIGEgcGlwZWxpbmUgZm9yCisgICAgICAgIGRlYnVnZ2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OmNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmg6IERpdHRv
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmxvYWQpOiBNYWtlIHVzZSBvZiB0aGUgbG9hZEZ1bGwoKSBtZXRob2QuCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKTogVmVyeSBz
aW1pbGFyIHRvIGxvYWQoKQorICAgICAgICBidXQgYWxsb3dzIHNwZWNpZnlpbmcgd2hhdCBwaXBl
bGluZSB0eXBlIHRvIHVzZSAobnVsbCB0byBsZXQgdGhlIGZ1bmN0aW9uIGRldGVybWluZQorICAg
ICAgICB3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQpLiBUaGlzIGlzIHJlcXVpcmVkIGFzIHdlIGZv
cmNlIHRvIGFsd2F5cyB1c2UgcGxheWJpbjMgZm9yIHRoZQorICAgICAgICBtZWRpYXN0cmVhbSBz
b3VyY2UgYXMgaXQgcmVsaWVzIG9uIHRoZSBHc3RTdHJlYW0gQVBJLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uIGNvbnN0KTog
U3R5bGUgZml4LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpuYXR1cmFsU2l6ZSBjb25zdCk6IEFkZGVkLCB1c2UgTWVkaWFTdHJlYW0gc3BlY2lmaWMgaW5m
b3JtYXRpb24gaWYgYXZhaWxhYmxlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MpOiBTb21lIHN0eWxlIGZpeGVzLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogRW5o
YW5jZSBkb3RmaWxlcyBuYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KTogTWlub3IgZm9ybWF0dGlu
ZyBmaXguCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNv
dXJjZVNldHVwKTogU2V0IE1lZGlhU3RyZWFtIG9uIFdlYktpdE1lZGlhU3RyZWFtU291cmNlIHdo
ZW4gc2V0dGluZyBpdCB1cC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c3VwcG9ydHNUeXBlKTogQWR2ZXJ0aXNlIHRoYXQgd2Ugc3VwcG9ydCBNZWRpYVN0
cmVhbSBpZiBzdXBwb3J0IGlzIGJ1aWx0LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKTogTWFrZSBzdXJlIHBsYXliaW4zIGlz
IGZvcmNlZCB3aGVuIGxvYWRpbmcgYSBNZWRpYVN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IEFkZCBhIHJl
ZmVyZW5jZSB0byB0aGUgTWVkaWFTdHJlYW0gb2JqZWN0IGFuZCBkZWNsYXJlIGxvYWRGdWxsIGFu
ZCBuYXR1cmFsU2l6ZSBvdmVycmlkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKTogUmVnaXN0ZXIgdGhlIG5ldyBN
ZWRpYVN0cmVhbVNyYyBlbGVtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOiBN
YWtlIHN1cmUgdGhhdCBNZWRpYVN0cmVhbSBNQUlOIHRyYWNrcyBhcmUgc2VsZWN0ZWQgYnkgZGVm
YXVsdC4gV2UgaGF2ZSBubyB3YXkgdG8gZG8gaXQgaW4gTWVkaWFTdHJlYW1TcmMgbm93IGFzIHRo
ZSBHc3RTdHJlYW1Db2xsZWN0aW9uIGlzIHJlY3JlYXRlZCBieSBwYXJzZWJpbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmg6IE1ha2UgQ2FwdHVy
ZUZhaWxlZCBhIHZpcnR1YWwgbWV0aG9kIGFzIGluIG91ciBtb2NrcyB3ZSByZXF1aXJlIG5lZWQg
dG8gbWFrZQorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
cjo6c2luZ2xldG9uKTogUmVtb3ZlIHRoZSBjb2RlCisgICAgICAgIHVzZWQgZm9yIGNvbXBpbGF0
aW9uIGZvciB0aGUgcGxhdGZvcm0gd2hlbiB3ZSBkbyBub3QgaGF2ZSBhCisgICAgICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuIE5vdyB3ZSByZXR1cm4gdGhlIHByb3BlciBj
bGFzcworICAgICAgICBmb3IgdGhlIHBsYXRmb3JtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAg
ICBBZGRlZCBjbGFzcyByZXByZXNlbnRpbmcgdGhlIFJlYWx0aW1lTWVkaWFTb3VyY2UgZm9yIHRo
ZSBBdWRpbworICAgICAgICB3aXRoIEdTdHJlYW1lci4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmg6CisgICAgICAg
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb0NhcHR1cmVyLmNwcDogQWRkZWQKKyAgICAgICAgdGhpcyBjbGFzcyB0aGF0IHJlcHJl
c2VudHMgdGhlIEdTdHJlYW1lciBwaXBlbGluZSB0aGF0IGNhcHR1cmVzCisgICAgICAgIGF1ZGlv
IGZyb20gdGhlIHN5c3RlbSBkZXZpY2VzLCBpdCBpbmhlcml0cyBmcm9tIEdTdHJlYW1lckNhcHR1
cmVyLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJB
dWRpb0NhcHR1cmVyLmg6IERpdG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oOiBBZGRlZCB0aGlzCisgICAgICAgIGNsYXNzIGlt
cGxlbWVudGluZyBQbGF0Zm9ybUF1ZGlvRGF0YSBmb3IgdGhlIEdTdHJlYW1lciBwbGF0Zm9ybSwK
KyAgICAgICAgdXNlZCB0byBwYXNzIHRoZSBzYW1wbGVzIGluZm9ybWF0aW9uLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmg6CisgICAgICAgIEFkZGVkIHRoaXMgY2xhc3MgaW1wbGVtZW50aW5nIEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24gdG8gZXhwb3J0IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgYXVkaW8gc3RyZWFtIHRvIGxpYndlYnJ0Yy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZS5oOiBBZGRlZAorICAgICAgICB0
aGlzIGJhc2UgY2xhc3MgZm9yIHRoZSBhdWRpbyBhbmQgdmlkZW8gY2FwdHVyaW5nIGRldmljZXMs
IGl0CisgICAgICAgIGltcGxlbWVudHMgZ2VuZXJhbCBXZWJLaXQgQ2FwdHVyZURldmljZSBjbGFz
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2Fw
dHVyZURldmljZU1hbmFnZXIuY3BwOgorICAgICAgICBBZGRlZCB0aGlzIGNsYXNzIHRoYXQgaW1w
bGVtZW50cyB0aGUgc3lzdGVtIG1vbml0b3IgdG8gZ2V0IHRoZQorICAgICAgICBsaXN0IG9mIGF2
YWlsYWJsZSBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uIEl0IHVzZXMgR3N0RGV2aWNlTW9uaXRvcgor
ICAgICAgICB0byBoYW5kbGUgdGhlIG9wZXJhdGlvbi4gSXQgdXNlcyB0d28gc2luZ2xldG9uIGRl
dmljZSBtYW5hZ2VycyBvbmUKKyAgICAgICAgZm9yIGF1ZGlvIGFuZCBhbm90aGVyIG9uZSBmb3Ig
dmlkZW8sIGFzIHJlcXVpcmVkIGJ5IHRoZQorICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyIGRlc2lnbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcDogQWRkZWQgdGhpcwor
ICAgICAgICBiYXNlIGNsYXNzIHJlcHJlc2VudGluZyBob3cgR1N0cmVhbWVyIGNhcHR1cmVzIHRo
ZSBtZWRpYSBmcm9tIHRoZQorICAgICAgICBpbnB1dCBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uIFR3
byBjbGFzc2VzIGluaGVyaXQgZnJvbSB0aGlzIG9uZSB0bworICAgICAgICBjYXB0dXJlIGF1ZGlv
IGFuZCB2aWRlby4gSXQgc2V0dXBzIHRoZSBHU3RyZWFtZXIgcGlwZWxpbmUgYW5kIGFkZHMKKyAg
ICAgICAgZnVuY3Rpb25zIHRvIGNvbnRyb2wgaXQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmg6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5j
cHA6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnRzIGEgc3ViY2xhc3Mgb2YgR3N0QmluIGFzIGEg
c291cmNlIGVsZW1lbnQgdGhhdCB3aWxsIGNvbnRhaW4gc2V2ZXJhbAorICAgICAgICBHc3RBcHBT
cmMsIGJhc2ljYWxseSBvbmUgcGVyIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9mIHRoZSBNZWRp
YVN0cmVhbVByaXZhdGUKKyAgICAgICAgcGFzc2VkIGluIHBhcmFtZXRlci4gSXQgYWRkcyBPYnNl
cnZlcnMgb24gdGhlIE1lZGlhU3RyZWFtVHJhY2tzIGFuZAorICAgICAgICBwdXNoZXMgdGhlIGRh
dGEgdG8gdGhlIHNvdXJjZXMgYXMgcmVxdWlyZWQuIFRoZSBlbGVtZW50IGltcGxlbWVudHMgdGhl
IEdzdFVSSUhhbmRsZXIKKyAgICAgICAgaW50ZXJmYWNlIHNvIGl0IGNhbiBiZSB1c2VkIGluIHBs
YXliaW4uIFRoZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgaXMgcmVzcG9uc2libGUKKyAg
ICAgICAgZm9yIHBhc3NpbmcgdGhlIE1lZGlhU3RyZWFtUHJpdmF0ZSBvYmplY3QgdG8gdGhlIHNv
dXJjZSB3aGVuIHJlcXVpcmVkLgorICAgICAgICAoV2ViQ29yZTo6d2Via2l0TWVkaWFTdHJlYW1T
cmNQYWRQcm9iZUNiKTogRXZlbnQgcHJvYmUgdGhhdCBmaXhlcyBzdHJlYW1fc3RhcnQgZXZlbnRz
IChzZXR0aW5nIHRoZSBJRCBldGMpCisgICAgICAgIGFuZCBmaW5hbGx5IGFkZCBzcmMgcGFkcyB0
byB0aGUgcGlwZWxpbmUuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwOgor
ICAgICAgICBBZGRlZCB0aGlzIFJlYWx0aW1lTWVkaWFTb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBz
b3VyY2Ugb2YgdGhlCisgICAgICAgIHZpZGVvIGRhdGEgZm9yIHRoZSBHU3RyZWFtZXIgcGxhdGZv
cm0uIEl0IGhhbmRsZXMgdGhlIHNldHRpbmdzIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2Yg
dGhlIHNvdXJjZSBhbmQgY3JlYXRlcyB0aGUgY2FwdHVyZXIgdXNlZCB0bworICAgICAgICBjb250
cm9sIHRoZSBvcGVyYXRpb24gb2YgdGhlIHN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0Nh
cHR1cmVyLmNwcDogQWRkZWQKKyAgICAgICAgdGhpcyBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20g
dGhlIEdTdHJlYW1lckNhcHR1cmVyIGFuZCBjb250cm9scworICAgICAgICB0aGUgR1N0cmVhbWVy
IHBpcGVsaW5lcyBvZiB0aGUgdmlkZW8gc3RyZWFtcyBvZiB0aGUgc3lzdGVtLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmg6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcDogQWRkZWQuIEltcGxlbWVudGF0aW9uIG9mIGEg
TW9jayBjYXB0dXJlciBmb3IgYXVkaW8gc3RyZWFtLgorICAgICAgICBTdWJjbGFzc2VzIEdTdHJl
YW1lckF1ZGlvQ2FwdHVyZXIgYW5kIHdyYXBzIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2Ugc28g
dGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UK
KyAgICAgICAgYnV0IHN0aWxsIHRoZSBHU3RyZWFtZXIgaW1wbGVtZW50YXRpb24gY29kZSBwYXRo
cyBhcmUgdGVzdGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
b2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LmNwcDogQWRkZWQuIEltcGxlbWVudGF0aW9uIG9mIGEgTW9jayBjYXB0dXJlciBmb3IgdmlkZW8g
c3RyZWFtLgorICAgICAgICBTdWJjbGFzc2VzIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXIgYW5kIHdy
YXBzIGEgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2Ugc28gdGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRo
ZSBzYW1lIGEgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UKKyAgICAgICAgYnV0IHN0aWxsIHRoZSBH
U3RyZWFtZXIgaW1wbGVtZW50YXRpb24gY29kZSBwYXRocyBhcmUgdGVzdGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcDoKKyAgICAgICAgQWRkZWQg
dGhpcyBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGtleSBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyCisgICAgICAgIGZ1bmN0aW9ucyB0byBjb25maWd1cmUgdGhlIGJhc2UgY2xhc3MgZm9yIHRo
ZSBwbGF0Zm9ybSwgdXNpbmcgdGhlCisgICAgICAgIG90aGVyIEdTdHJlYW1lciBjbGFzc2VzLgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwOiBEbyBu
b3QgYnVpbGQgOjpjcmVhdGUgaWYgR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uIGlzIGJ1aWx0Cisg
ICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6IERvIG5v
dCBidWlsZCA6OmNyZWF0ZSBpZiBHU3RyZWFtZXIgaW1wbGVtZW50YXRpb24gaXMgYnVpbHQKKwog
MjAxOC0wNC0xMyAgVGhpYmF1bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dTdHJlYW1lcl0gRml4IHRoZSB3YXkgR3N0U3RyZWFtQ29sbGVjdGlvbiBpcyBoYW5k
bGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDgyM2M3N2RkYjIxLi5jMmQ0Y2FlMGY2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTI0LDEyICsyNCwxNCBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3RrIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dseCIKKyAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3gxMSIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3RrIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvZ3Rr
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggM2Q1YTZlMDAyNWEuLjMzM2YxZDY1YmZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0zMyw2ICszMywy
MiBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyLmNwcAorCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisgICAgICAgIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorICAgICAg
ICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1h
bmFnZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAorICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAK
KworICAgICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcAorICAgICAgICBw
bGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAorICAgICAgICBw
bGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAogICAgICkKIAogICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApp
bmRleCBlNDQwZGM5MGEzZS4uMmJhNTg1YzljMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTM1LDYgKzM1
LDcgQEAgc3RydWN0IFBsYXRmb3JtRGVzY3JpcHRpb24gewogICAgIGVudW0gewogICAgICAgICBO
b25lLAogICAgICAgICBDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlLAorICAgICAgICBHU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLAogICAgIH0gdHlwZTsKICAgICBWYXJpYW50PHN0ZDo6bnVs
bHB0cl90LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlwdGlvbjsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QbGF0Zm9ybUF1
ZGlvRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUGxhdGZvcm1BdWRpb0Rh
dGEuaAppbmRleCBlNDU0NGY2MzI1NC4uY2RhNzJlOGFiM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUGxhdGZvcm1BdWRpb0RhdGEuaApAQCAtMzQsNiArMzQsNyBA
QCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBLaW5kIHsKICAgICAgICAgTm9uZSwKICAgICAgICAg
V2ViQXVkaW9CdWZmZXJMaXN0LAorICAgICAgICBHU3RyZWFtZXJBdWRpb0RhdGEsCiAgICAgfTsK
IAogICAgIHZpcnR1YWwgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gS2luZDo6Tm9uZTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCBlNTE0ZmUzNDI4ZC4uZDU0NzViNzRjZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR0xpYlV0aWxpdGllcy5oPgogI2luY2x1ZGUg
PHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNl
UHJpb3JpdHkuaD4KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9N
UEVHVFMpCiAjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCkBAIC0zMjAsNiArMzIxLDUyIEBA
IGJvb2wgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFj
dG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGlj
IHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UsIEdzdEJpbiogcGlwZWxpbmUpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKKyAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChwaXBlbGluZSwgIkdvdCBtZXNzYWdlOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbWVzc2Fn
ZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFdURjo6U3RyaW5nIGRvdEZpbGVOYW1lID0gU3Ry
aW5nOjpmb3JtYXQoIiVzX2Vycm9yIiwgR1NUX09CSkVDVF9OQU1FKHBpcGVsaW5lKSk7CisgICAg
ICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMocGlwZWxpbmUsIEdTVF9E
RUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOgor
ICAgICAgICBpZiAoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpID09IEdTVF9PQkpFQ1QocGlwZWxp
bmUpKSB7CisgICAgICAgICAgICBHc3RTdGF0ZSBvbGRTdGF0ZSwgbmV3U3RhdGUsIHBlbmRpbmc7
CisgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKG1lc3NhZ2UsICZv
bGRTdGF0ZSwgJm5ld1N0YXRlLCAmcGVuZGluZyk7CisKKyAgICAgICAgICAgIEdTVF9JTkZPX09C
SkVDVChwaXBlbGluZSwgIlN0YXRlIGNoYW5nZWQgKG9sZDogJXMsIG5ldzogJXMsIHBlbmRpbmc6
ICVzKSIsCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUob2xkU3Rh
dGUpLAorICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRl
KSwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7
CisKKyAgICAgICAgICAgIFdURjo6U3RyaW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQo
IiVzXyVzXyVzIiwKKyAgICAgICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUocGlwZWxpbmUpLAor
ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG9sZFN0YXRlKSwKKyAg
ICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpOworCisg
ICAgICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihwaXBl
bGluZSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCit2b2lkIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2so
R3N0RWxlbWVudCAqcGlwZWxpbmUpCit7CisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0
R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUocGlwZWxpbmUpKSk7CisgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGJ1cy5nZXQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxncG9pbnRlcj4oc2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKSwgcGlwZWxpbmUpOwor
fQorCit2b2lkIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCAqcGlw
ZWxpbmUpCit7CisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxp
bmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUocGlwZWxpbmUpKSk7CisgICAgZ3N0X2J1c19hZGRfc2ln
bmFsX3dhdGNoX2Z1bGwoYnVzLmdldCgpLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1bkxvb3BE
aXNwYXRjaGVyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgIm1lc3NhZ2UiLCBH
X0NBTExCQUNLKHNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayksIHBpcGVsaW5lKTsKK30KKwogfQog
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCAy
NTkyNTVlNzQxZS4uY2JiNDkzMjNhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTgy
LDYgKzgyLDkgQEAgaW5saW5lIEdzdENsb2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRp
YVRpbWUgJm1lZGlhVGltZSkKIH0KIAogYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRp
YVR5cGUoR0xpc3QqIGVsZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwor
dm9pZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5l
KTsKK3ZvaWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpw
aXBlbGluZSk7CisKIH0KIAogI2lmbmRlZiBHU1RfQlVGRkVSX0RUU19PUl9QVFMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggN2Q4NDdmMThk
NzYuLmIyZmNlMGQ2NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcApAQCAtNTEsNiArNTEsMTAgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5M
b29wU291cmNlUHJpb3JpdHkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNp
bmNsdWRlICJnc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgor
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmgiCiAjaW5jbHVkZSAiSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyLmgiCkBAIC0yMzcsNiArMjQxLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsKQogfQogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBs
b2FkRnVsbCh1cmxTdHJpbmcsIG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bG9hZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IGdjaGFy
ICpwbGF5YmluTmFtZSkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgc3RpbGwgY2Fs
bGVkIGV2ZW4gaWYgc3VwcG9ydHNUeXBlKCkgcmV0dXJuZWQKICAgICAvLyBJc05vdFN1cHBvcnRl
ZC4gVGhpcyB3b3VsZCBkZXNlcnZlIG1vcmUgaW52ZXN0aWdhdGlvbiBidXQgbWVhbndoaWxlIG1h
a2UKQEAgLTI1NCw3ICsyNjMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCFtX3BpcGVsaW5lKQotICAgICAgICBjcmVhdGVHU1RQbGF5QmluKGlzTWVkaWFTb3VyY2UoKSA/
ICJwbGF5YmluIiA6IG51bGxwdHIpOworICAgICAgICBjcmVhdGVHU1RQbGF5QmluKGlzTWVkaWFT
b3VyY2UoKSA/ICJwbGF5YmluIiA6IHBsYXliaW5OYW1lKTsKIAogICAgIGlmIChtX2ZpbGxUaW1l
ci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2ZpbGxUaW1lci5zdG9wKCk7CkBAIC0yOTIsMTIgKzMw
MSwxOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJp
bmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFT
dHJlYW1Qcml2YXRlJikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKE1l
ZGlhU3RyZWFtUHJpdmF0ZSYgc3RyZWFtKQogeworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEw
LCAwKQorICAgIG1fc3RyZWFtUHJpdmF0ZSA9ICZzdHJlYW07CisgICAgbG9hZEZ1bGwoU3RyaW5n
KCJtZWRpYXN0cmVhbTovLyIpICsgc3RyZWFtLmlkKCksICJwbGF5YmluMyIpOworICAgIGVuc3Vy
ZUdMVmlkZW9TaW5rQ29udGV4dCgpOworICAgIG1fcGxheWVyLT5wbGF5KCk7CisjZWxzZQogICAg
IC8vIFByb3Blcmx5IGZhaWwgc28gdGhlIGdsb2JhbCBNZWRpYVBsYXllciB0cmllcyB0byBmYWxs
YmFjayB0byB0aGUgbmV4dCBNZWRpYVBsYXllclByaXZhdGUuCiAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CiAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNo
YW5nZWQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAt
MzMwLDcgKzM0Niw3IEBAIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXliYWNrUG9zaXRpb24oKSBjb25zdAogCiAgICAgLy8gUG9zaXRpb24gaXMgb25seSBhdmFpbGFi
bGUgaWYgbm8gYXN5bmMgc3RhdGUgY2hhbmdlIGlzIGdvaW5nIG9uIGFuZCB0aGUgc3RhdGUgaXMg
ZWl0aGVyIHBhdXNlZCBvciBwbGF5aW5nLgogICAgIGdpbnQ2NCBwb3NpdGlvbiA9IEdTVF9DTE9D
S19USU1FX05PTkU7Ci0gICAgR3N0UXVlcnkqIHF1ZXJ5PSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9u
KEdTVF9GT1JNQVRfVElNRSk7CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19w
b3NpdGlvbihHU1RfRk9STUFUX1RJTUUpOwogICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3Bp
cGVsaW5lLmdldCgpLCBxdWVyeSkpCiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihx
dWVyeSwgMCwgJnBvc2l0aW9uKTsKICAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwpAQCAtNjQ4
LDYgKzY2NCwyNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJUcmFj
a3MoKQogICAgICAgICAgICAgbV9jdXJyZW50IyNUeXBlIyNTdHJlYW1JZCA9IFN0cmluZyhnc3Rf
c3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIH0KKworRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAoreworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisgICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbiAmJiAhbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2
aWRlb1RyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7CisK
KyAgICAgICAgaWYgKHZpZGVvVHJhY2spIHsKKyAgICAgICAgICAgIGF1dG8gdGFncyA9IGdzdF9z
dHJlYW1fZ2V0X3RhZ3ModmlkZW9UcmFjay0+c3RyZWFtKCkpOworICAgICAgICAgICAgZ2ludCB3
aWR0aCwgaGVpZ2h0OworCisgICAgICAgICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9pbnQodGFn
cywgV0VCS0lUX01FRElBX1RSQUNLX1RBR19XSURUSCwgJndpZHRoKSAmJiBnc3RfdGFnX2xpc3Rf
Z2V0X2ludCh0YWdzLCBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdIVCwgJmhlaWdodCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAg
fQorICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisgICAgcmV0dXJuIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxTaXplKCk7Cit9CiAjZWxzZQog
I2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgX2lkLCB0cmFja3MsIG1ldGhvZCwgc3RyZWFtKSBt
X2hhcyMjVHlwZSMjID0gdHJ1ZTsKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC0x
MTY1LDcgKzEyMDAsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAvLyBDb25zdHJ1Y3QgYSBmaWxl
bmFtZSBmb3IgdGhlIGdyYXBodml6IGRvdCBmaWxlIG91dHB1dC4KICAgICAgICAgR3N0U3RhdGUg
bmV3U3RhdGU7CiAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQobWVzc2Fn
ZSwgJmN1cnJlbnRTdGF0ZSwgJm5ld1N0YXRlLCBudWxscHRyKTsKLSAgICAgICAgQ1N0cmluZyBk
b3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJ3ZWJraXQtdmlkZW8uJXNfJXMiLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShjdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShuZXdTdGF0ZSkpLnV0ZjgoKTsKKyAgICAgICAgQ1N0cmluZyBkb3RGaWxlTmFtZSA9IFN0
cmluZzo6Zm9ybWF0KCIlcy4lc18lcyIsIEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgp
KSwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSks
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSkudXRmOCgpOwogICAgICAgICBH
U1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgp
KSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS5kYXRhKCkpOwogCiAgICAg
ICAgIGJyZWFrOwpAQCAtMTQzMSw3ICsxNDY3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkK
IAogICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdG9jX2VudHJ5X2dldF90YWdzKGVudHJ5KTsK
ICAgICBpZiAodGFncykgewotICAgICAgICBnY2hhciogdGl0bGUgPSAgbnVsbHB0cjsKKyAgICAg
ICAgZ2NoYXIqIHRpdGxlID0gbnVsbHB0cjsKICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJp
bmcodGFncywgR1NUX1RBR19USVRMRSwgJnRpdGxlKTsKICAgICAgICAgaWYgKHRpdGxlKSB7CiAg
ICAgICAgICAgICBjdWUtPnNldENvbnRlbnQodGl0bGUpOwpAQCAtMTcyNiw2ICsxNzYyLDEyIEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cChHc3RFbGVtZW50
KiBzb3VyY2VFbGVtZW50KQogICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQo
KSkpIHsKICAgICAgICAgd2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV0VCS0lUX1dFQl9TUkMo
bV9zb3VyY2UuZ2V0KCkpLCBtX3BsYXllcik7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1NU
X0VMRU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwgImVsZW1lbnQtYWRkZWQiLCBHX0NBTExC
QUNLKHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisgICAgfSBlbHNl
IGlmIChXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NSQyhzb3VyY2VFbGVtZW50KSkgeworICAgICAg
ICBhdXRvIHN0cmVhbSA9IG1fc3RyZWFtUHJpdmF0ZS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKHN0
cmVhbSk7CisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFtKFdFQktJVF9NRURJ
QV9TVFJFQU1fU1JDKHNvdXJjZUVsZW1lbnQpLCBzdHJlYW0pOworI2VuZGlmCiAgICAgfQogfQog
CkBAIC0yMjY5LDggKzIzMTEsMTAgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUUKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICNlbmRpZgogCisjaWYgIUVOQUJMRShNRURJQV9TVFJFQU0pIHx8ICFH
U1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKICAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU3Ry
ZWFtKQogICAgICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCiAKICAgICBpZiAocGFyYW1ldGVy
cy50eXBlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI0MzMsMTcgKzI0
NzcsMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlC
aW4oY29uc3QgZ2NoYXIqIHBsYXliaW5OYW1lKQogICAgIEFTU0VSVCghbV9waXBlbGluZSk7CiAK
ICNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKLSAgICBtX2lzTGVnYWN5UGxheWJpbiA9
ICFnX2dldGVudigiVVNFX1BMQVlCSU4zIik7Ci0gICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbikK
KyAgICBpZiAoZ19nZXRlbnYoIlVTRV9QTEFZQklOMyIpKQogICAgICAgICBwbGF5YmluTmFtZSA9
ICJwbGF5YmluMyI7CisjZWxzZQorICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4iOwogI2VuZGlm
CiAKICAgICBpZiAoIXBsYXliaW5OYW1lKQogICAgICAgICBwbGF5YmluTmFtZSA9ICJwbGF5Ymlu
IjsKIAorICAgIG1faXNMZWdhY3lQbGF5YmluID0gIWdfc3RyY21wMChwbGF5YmluTmFtZSwgInBs
YXliaW4iKTsKKwogICAgIC8vIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgpIHJldHVybnMgYSBm
bG9hdGluZyByZWZlcmVuY2Ugc28KICAgICAvLyB3ZSBzaG91bGQgbm90IGFkb3B0LgotICAgIHNl
dFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShwbGF5YmluTmFtZSwgInBsYXkiKSk7
CisgICAgc2V0UGlwZWxpbmUoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKHBsYXliaW5OYW1lLCBT
dHJpbmc6OmZvcm1hdCgicGxheV8lcCIsIHRoaXMpLnV0ZjgoKS5kYXRhKCkpKTsKICAgICBzZXRT
dHJlYW1Wb2x1bWVFbGVtZW50KEdTVF9TVFJFQU1fVk9MVU1FKG1fcGlwZWxpbmUuZ2V0KCkpKTsK
IAogICAgIEdTVF9JTkZPKCJVc2luZyBsZWdhY3kgcGxheWJpbiBlbGVtZW50OiAlcyIsIGJvb2xG
b3JQcmludGluZyhtX2lzTGVnYWN5UGxheWJpbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDFhZTRhNTRiYWUwLi5iMmVlNWU2OTViZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTc5LDYg
KzE3OSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZG93bmxvYWRCdWZmZXJGaWxlQ3Jl
YXRlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwogCiAgICAgdm9pZCBz
ZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGxvYWRGdWxsKGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBnY2hhciAqcGxheWJpbk5hbWUpOwogCiAjaWYgR1NUX0NI
RUNLX1ZFUlNJT04oMSwgMTAsIDApCiAgICAgdm9pZCB1cGRhdGVUcmFja3MoKTsKQEAgLTI2Miw3
ICsyNjMsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNMZWdhY3lQbGF5YmluOwogI2lmIEdT
VF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlv
bj4gbV9zdHJlYW1Db2xsZWN0aW9uOwotI2VuZGlmCisgICAgRmxvYXRTaXplIG5hdHVyYWxTaXpl
KCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVk
aWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZhdGU7CisjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKKyNlbmRpZiAvLyBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKICAgICBTdHJp
bmcgbV9jdXJyZW50QXVkaW9TdHJlYW1JZDsKICAgICBTdHJpbmcgbV9jdXJyZW50VmlkZW9TdHJl
YW1JZDsKICAgICBTdHJpbmcgbV9jdXJyZW50VGV4dFN0cmVhbUlkOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IDhhNTNkZGY2
ZjBlLi5kM2E4NWNhZWRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmNwcApAQCAtODEsNiArODEsMTAgQEAKICNlbmRpZiAvLyAhR1NU
X0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCiAjZW5kaWYgLy8gVVNFKExJQkVQT1hZKQogCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisjaW5j
bHVkZSAiR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgorCiAjZGVmaW5lIEdT
VF9VU0VfVU5TVEFCTEVfQVBJCiAjaW5jbHVkZSA8Z3N0L2dsL2dsLmg+CiAjdW5kZWYgR1NUX1VT
RV9VTlNUQUJMRV9BUEkKQEAgLTE0Myw2ICsxNDcsOSBAQCB2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0
cmVhbWVyRWxlbWVudHMoKQogICAgIGlmICghY2xlYXJLZXlEZWNyeXB0b3JGYWN0b3J5KQogICAg
ICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0Y2xlYXJrZXkiLCBHU1Rf
UkFOS19QUklNQVJZICsgMTAwLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBUKTsKICNlbmRp
ZgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIEdTVF9DSEVDS19WRVJTSU9OKDEsMTAsMCkK
KyAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAibWVkaWFzdHJlYW1zcmMiLCBHU1Rf
UkFOS19QUklNQVJZLCBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDKTsKKyNlbmRpZgogfQog
CiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxpemVHU3RyZWFt
ZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGM1NDIwMGVhZTgxLi40ZDk5Nzg2ZTAxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC00OCw2
ICs0OCwxNCBAQCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdAogICAgIDogVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcih0aGlzLCBpbmRleCwgc3RyZWFtKQogICAgICwgbV9wbGF5ZXIocGxheWVyKQog
eworICAgIGdpbnQga2luZDsKKyAgICBhdXRvIHRhZ3MgPSBnc3Rfc3RyZWFtX2dldF90YWdzKG1f
c3RyZWFtLmdldCgpKTsKKworICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLCAid2Vi
a2l0LW1lZGlhLXN0cmVhbS1raW5kIiwgJmtpbmQpICYmIGtpbmQgPT0gc3RhdGljX2Nhc3Q8aW50
PihWaWRlb1RyYWNrUHJpdmF0ZTo6S2luZDo6TWFpbikpIHsKKyAgICAgICAgR3N0U3RyZWFtRmxh
Z3Mgc3RyZWFtRmxhZ3MgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgp
KTsKKyAgICAgICAgZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSwgc3Rh
dGljX2Nhc3Q8R3N0U3RyZWFtRmxhZ3M+KHN0cmVhbUZsYWdzIHwgR1NUX1NUUkVBTV9GTEFHX1NF
TEVDVCkpOworICAgIH0KKwogICAgIG1faWQgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3Ry
ZWFtLmdldCgpKTsKICAgICBzZXRBY3RpdmUoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzKHN0
cmVhbS5nZXQoKSkgJiBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKTsKICAgICBub3RpZnlUcmFja09m
QWN0aXZlQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCmluZGV4IDliNDUxMjA1ZTViLi41NDEx
MDg1YzRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVNZWRpYVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaApAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBtb25pdG9yT3JpZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmll
ciYpIHsgfQogCi0gICAgdm9pZCBjYXB0dXJlRmFpbGVkKCk7CisgICAgdmlydHVhbCB2b2lkIGNh
cHR1cmVGYWlsZWQoKTsKIAogICAgIC8vIFRlc3Rpbmcgb25seQogICAgIHZpcnR1YWwgdm9pZCBk
ZWxheVNhbXBsZXMoU2Vjb25kcykgeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNw
cAppbmRleCAyZWZiODJkMWU1OC4uMzg4NmZmODc1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwCkBAIC02NCwxNCArNjQsNyBAQCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
JiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKQogICAgIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIqIG92ZXJyaWRlID0gbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpOwog
ICAgIGlmIChvdmVycmlkZSkKICAgICAgICAgcmV0dXJuICpvdmVycmlkZTsKLSNpZiBQTEFURk9S
TShHVEspCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OyAvLyBSZXR1cm4gTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIgdG8gYXZvaWQgY3Jhc2gu
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
PiBjZW50ZXI7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLSNlbHNlCiAgICAgcmV0dXJuIFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXRTaGFyZWRTdHJlYW1DZW50ZXJPdmVycmlkZShS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyKiBjZW50ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi45YzVhZWFmZmZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRz
YXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4
QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvRGF0YS5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorCisjaW5jbHVkZSA8Z3N0L2FwcC9n
c3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHN0YXRpYyBDYXBhYmls
aXR5VmFsdWVPclJhbmdlIGRlZmF1bHRWb2x1bWVDYXBhYmlsaXR5ID0gQ2FwYWJpbGl0eVZhbHVl
T3JSYW5nZSgwLjAsIDEuMCk7Citjb25zdCBzdGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllczo6RWNob0NhbmNlbGxhdGlvbiBkZWZhdWx0RWNob0NhbmNlbGxhdGlvbkNhcGFiaWxp
dHkgPSBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uOjpS
ZWFkV3JpdGU7CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfYXVkaW9fY2FwdHVyZV9zb3Vy
Y2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X2F1ZGlvX2NhcHR1cmVf
c291cmNlX2RlYnVnCisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpCit7
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGRlYnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3Rk
OjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxhZywgW10geworICAgICAgICBHU1RfREVCVUdf
Q0FURUdPUllfSU5JVCh3ZWJraXRfYXVkaW9fY2FwdHVyZV9zb3VyY2VfZGVidWcsICJ3ZWJraXRh
dWRpb2NhcHR1cmVzb3VyY2UiLCAwLCAiV2ViS2l0IEF1ZGlvIENhcHR1cmUgU291cmNlLiIpOwor
ICAgIH0pOworfQorCitjbGFzcyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5IDog
cHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkgeworcHVibGlj
OgorICAgIENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZUF1ZGlvQ2FwdHVyZVNvdXJjZShjb25z
dCBDYXB0dXJlRGV2aWNlJiBkZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFp
bnRzKSBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3RyYWludHMpOworICAgIH0K
K307CisKK3N0YXRpYyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5JiBsaWJXZWJS
VENBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeT4gZmFjdG9yeTsKKyAgICByZXR1
cm4gZmFjdG9yeS5nZXQoKTsKK30KKworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgR1N0cmVhbWVyQXVk
aW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVk
aWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCit7CisgICAgYXV0byBkZXZpY2UgPSBHU3RyZWFt
ZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5nc3RyZWFtZXJEZXZpY2VX
aXRoVUlEKGRldmljZUlEKTsKKyAgICBpZiAoIWRldmljZSkgeworICAgICAgICBhdXRvIGVycm9y
TWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNy
ZWF0ZSgpOiBHU3RyZWFtZXIgZGlkIG5vdCBmaW5kIHRoZSBkZXZpY2U6ICVzLiIsIGRldmljZUlE
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RG
TW92ZShlcnJvck1lc3NhZ2UpKTsKKyAgICB9CisKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVm
KCpuZXcgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKGRldmljZS52YWx1ZSgpKSk7CisKKyAg
ICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5
Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpLmZpcnN0KTsKKyAgICB9CisgICAgcmV0
dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK1JlYWx0aW1l
TWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZTo6ZmFjdG9yeSgpCit7CisgICAgcmV0dXJuIGxpYldlYlJUQ0F1ZGlvQ2FwdHVyZVNvdXJj
ZUZhY3RvcnkoKTsKK30KKworR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJB
dWRpb0NhcHR1cmVTb3VyY2UoR1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBS
ZWFsdGltZU1lZGlhU291cmNlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZTo6QXVkaW8sIGRldmljZS5sYWJlbCgpKQorICAgICwgbV9jYXB0dXJlcihzdGQ6
Om1ha2VfdW5pcXVlPEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI+KGRldmljZSkpCit7CisgICAgaW5p
dGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNv
bnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlSUQsIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvLCBuYW1lKQorICAgICwgbV9jYXB0dXJlcihz
dGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI+KCkpCit7CisgICAgaW5pdGlh
bGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6
fkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQXVk
aW9DYXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIG1fY2FwdHVyZXIt
PnNldHVwUGlwZWxpbmUoKTsKKyAgICBtX2NhcHR1cmVyLT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJh
dGUoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NhcHR1cmVyLT5zaW5rKCksICJuZXctc2Ft
cGxlIiwgR19DQUxMQkFDSyhuZXdTYW1wbGVDYWxsYmFjayksIHRoaXMpOworICAgIG1fY2FwdHVy
ZXItPnBsYXkoKTsKK30KKworR3N0Rmxvd1JldHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3Vy
Y2U6Om5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQqIHNpbmssIEdTdHJlYW1lckF1ZGlvQ2Fw
dHVyZVNvdXJjZSogc291cmNlKQoreworICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9h
cHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKKworICAgIC8vIEZJWE1F
IC0gZmlndXJlIG91dCBhIHdheSB0byBhdm9pZCBjb3B5aW5nIChvbiB3cml0ZSkgdGhlIGRhdGEu
CisgICAgR3N0QnVmZmVyKiBidWYgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgp
KTsKKyAgICBhdXRvIGZyYW1lcyhzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyQXVkaW9EYXRhPihu
ZXcgR1N0cmVhbWVyQXVkaW9EYXRhKFdURk1vdmUoc2FtcGxlKSkpKTsKKyAgICBhdXRvIHN0cmVh
bURlc2Moc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KG5l
dyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGZyYW1lcy0+Z2V0QXVkaW9JbmZvKCkp
KSk7CisKKyAgICBzb3VyY2UtPmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSgKKyAgICAgICAgTWVkaWFU
aW1lKEdTVF9USU1FX0FTX1VTRUNPTkRTKEdTVF9CVUZGRVJfUFRTKGJ1ZikpLCBHX1VTRUNfUEVS
X1NFQyksCisgICAgICAgICpmcmFtZXMsICpzdHJlYW1EZXNjLCBnc3RfYnVmZmVyX2dldF9zaXpl
KGJ1ZikgLyBmcmFtZXMtPmdldEF1ZGlvSW5mbygpLmJwZik7CisKKyAgICByZXR1cm4gR1NUX0ZM
T1dfT0s7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVj
aW5nRGF0YSgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1f
Y2FwdHVyZXItPnNpbmsoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obmV3U2FtcGxlQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBtX2NhcHR1cmVyLT5zdG9wKCk7Cit9CisKK2NvbnN0IFJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6
Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMpCisgICAgICAg
IHJldHVybiBtX2NhcGFiaWxpdGllcy52YWx1ZSgpOworCisgICAgdWludCBpOworICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gY2FwcyA9IG1fY2FwdHVyZXItPmNhcHMoKTsKKyAgICBpbnQgbWluU2FtcGxl
UmF0ZSA9IDAsIG1heFNhbXBsZVJhdGUgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fw
c19nZXRfc2l6ZShjYXBzLmdldCgpKTsgaSsrKSB7CisgICAgICAgIGludCBjYXBhYmlsaXR5TWlu
U2FtcGxlUmF0ZSA9IDAsIGNhcGFiaWxpdHlNYXhTYW1wbGVSYXRlID0gMDsKKyAgICAgICAgR3N0
U3RydWN0dXJlKiBzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGkpOwor
CisgICAgICAgIC8vIE9ubHkgYWNjZXB0IHJhdyBhdWRpbyBmb3Igbm93LgorICAgICAgICBpZiAo
IWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RyLCAiYXVkaW8veC1yYXciKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgInJhdGUiLCBHU1Rf
VFlQRV9JTlRfUkFOR0UsICZjYXBhYmlsaXR5TWluU2FtcGxlUmF0ZSwgJmNhcGFiaWxpdHlNYXhT
YW1wbGVSYXRlLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICBt
aW5TYW1wbGVSYXRlID0gc3RkOjptaW4obWluU2FtcGxlUmF0ZSwgY2FwYWJpbGl0eU1pblNhbXBs
ZVJhdGUpOworICAgICAgICAgICAgbWF4U2FtcGxlUmF0ZSA9IHN0ZDo6bWF4KG1heFNhbXBsZVJh
dGUsIGNhcGFiaWxpdHlNYXhTYW1wbGVSYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1pblNhbXBsZVJhdGUgPSBjYXBhYmlsaXR5TWluU2FtcGxlUmF0ZTsKKyAgICAgICAgICAg
IG1heFNhbXBsZVJhdGUgPSBjYXBhYmlsaXR5TWF4U2FtcGxlUmF0ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzKHNl
dHRpbmdzKCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7CisgICAgY2FwYWJpbGl0aWVzLnNldERl
dmljZUlkKGlkKCkpOworICAgIGNhcGFiaWxpdGllcy5zZXRFY2hvQ2FuY2VsbGF0aW9uKGRlZmF1
bHRFY2hvQ2FuY2VsbGF0aW9uQ2FwYWJpbGl0eSk7CisgICAgY2FwYWJpbGl0aWVzLnNldFZvbHVt
ZShkZWZhdWx0Vm9sdW1lQ2FwYWJpbGl0eSk7CisgICAgY2FwYWJpbGl0aWVzLnNldFNhbXBsZVJh
dGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZShtaW5TYW1wbGVSYXRlLCBtYXhTYW1wbGVSYXRlKSk7
CisgICAgbV9jYXBhYmlsaXRpZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyk7CisKKyAgICByZXR1
cm4gbV9jYXBhYmlsaXRpZXMudmFsdWUoKTsKK30KKworYm9vbCBHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2U6OmFwcGx5U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKK3sKKyAgICByZXR1cm4g
bV9jYXB0dXJlci0+c2V0U2FtcGxlUmF0ZShzYW1wbGVSYXRlKTsKK30KKworY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzJiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHRp
bmdzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY3VycmVudFNldHRpbmdzKSB7CisgICAgICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3Muc2V0
RGV2aWNlSWQoaWQoKSk7CisKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzIHN1cHBvcnRlZENvbnN0cmFpbnRzOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJh
aW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJh
aW50cy5zZXRTdXBwb3J0c0VjaG9DYW5jZWxsYXRpb24odHJ1ZSk7CisgICAgICAgIHN1cHBvcnRl
ZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzVm9sdW1lKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRD
b25zdHJhaW50cy5zZXRTdXBwb3J0c1NhbXBsZVJhdGUodHJ1ZSk7CisgICAgICAgIHNldHRpbmdz
LnNldFN1cHBvcnRlZENvbnN0cmFpbnRzKHN1cHBvcnRlZENvbnN0cmFpbnRzKTsKKworICAgICAg
ICBtX2N1cnJlbnRTZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3MpOworICAgIH0KKworICAgIG1f
Y3VycmVudFNldHRpbmdzLT5zZXRWb2x1bWUodm9sdW1lKCkpOworICAgIG1fY3VycmVudFNldHRp
bmdzLT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3Mt
PnNldEVjaG9DYW5jZWxsYXRpb24oZWNob0NhbmNlbGxhdGlvbigpKTsKKworICAgIHJldHVybiBt
X2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZmE0YTljMmUz
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaApAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBB
dXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6
IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVS
KQorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ2FwdHVy
ZVNvdXJjZU9yRXJyb3IgY3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQXVkaW9DYXB0dXJlRmFj
dG9yeSYgZmFjdG9yeSgpOworCisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgR3N0
RWxlbWVudCogcGlwZWxpbmUoKSB7IHJldHVybiBtX2NhcHR1cmVyLT5waXBlbGluZSgpOyB9Cisg
ICAgR1N0cmVhbWVyQ2FwdHVyZXIqIGNhcHR1cmVyKCkgeyByZXR1cm4gbV9jYXB0dXJlci5nZXQo
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKEdTdHJl
YW1lckNhcHR1cmVEZXZpY2UpOworICAgIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShjb25z
dCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZpcnR1YWwgfkdT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSgpOworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRh
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworCisg
ICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+
IG1fY2FwYWJpbGl0aWVzOworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworCitwcml2YXRlOgorICAgIGJvb2wg
YXBwbHlTYW1wbGVSYXRlKGludCkgZmluYWw7CisgICAgYm9vbCBpc0NhcHR1cmVTb3VyY2UoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBhcHBseVZvbHVtZShkb3VibGUp
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJB
dWRpb0NhcHR1cmVyPiBtX2NhcHR1cmVyOworCisgICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3
U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCosIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSop
OworICAgIHZvaWQgdHJpZ2dlclNhbXBsZUF2YWlsYWJsZShHc3RTYW1wbGUqKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjY0MTU3ZWY3MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNv
bT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VC
UlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIu
aCIKKworI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvRm9ybWF0LmgiCisKKyNpbmNsdWRlIDxnc3Qv
YXBwL2dzdGFwcHNpbmsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJBdWRp
b0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKEdTdHJlYW1lckNhcHR1cmVEZXZpY2Ug
ZGV2aWNlKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoZGV2aWNlLCBhZG9wdEdSZWYoZ3N0X2Nh
cHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIExpYldlYlJU
Q0F1ZGlvRm9ybWF0OjpzYW1wbGVSYXRlLCBudWxscHRyKSkpCit7Cit9CisKK0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIoKQorICAgIDogR1N0cmVhbWVyQ2Fw
dHVyZXIoImF1ZGlvdGVzdHNyYyIsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRp
by94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBs
ZVJhdGUsIG51bGxwdHIpKSkKK3sKK30KKworR3N0RWxlbWVudCogR1N0cmVhbWVyQXVkaW9DYXB0
dXJlcjo6Y3JlYXRlQ29udmVydGVyKCkKK3sKKyAgICBhdXRvIGNvbnZlcnRlciA9IGdzdF9wYXJz
ZV9iaW5fZnJvbV9kZXNjcmlwdGlvbigiYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSIsIFRS
VUUsIG51bGxwdHIpOworCisgICAgQVNTRVJUKGNvbnZlcnRlcik7CisKKyAgICByZXR1cm4gY29u
dmVydGVyOworfQorCitib29sIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OnNldFNhbXBsZVJhdGUo
aW50IHNhbXBsZVJhdGUpCit7CisKKyAgICBpZiAoc2FtcGxlUmF0ZSA+IDApIHsKKyAgICAgICAg
R1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTZXR0aW5nIFNhbXBsZVJhdGUgJWQi
LCBzYW1wbGVSYXRlKTsKKyAgICAgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19z
aW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzYW1wbGVSYXRlLCBudWxs
cHRyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJOb3QgZm9yY2luZyBzYW1wbGUgcmF0ZSIpOworICAgICAgICBtX2NhcHMgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgiYXVkaW8veC1yYXciKSk7CisgICAgfQor
CisgICAgaWYgKCFtX2NhcHNmaWx0ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGdfb2JqZWN0X3NldChtX2NhcHNmaWx0ZXIuZ2V0KCksICJjYXBzIiwgbV9jYXBzLmdldCgp
LCBudWxscHRyKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhYWY3NjFkNmM0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaApAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRo
aWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRy
byBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNs
dWRlICJHU3RyZWFtZXJDYXB0dXJlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIgOiBwdWJsaWMgR1N0cmVhbWVyQ2FwdHVyZXIgeworcHVi
bGljOgorICAgIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSk7
CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlcigpOworCisgICAgR3N0RWxlbWVudCogY3JlYXRl
Q29udmVydGVyKCkgZmluYWw7CisgICAgY29uc3QgY2hhciogbmFtZSgpIGZpbmFsIHsgcmV0dXJu
ICJBdWRpbyI7IH0KKworICAgIGJvb2wgc2V0U2FtcGxlUmF0ZShpbnQpOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRp
b0RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTUzZjNhOGEw
ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRhLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBU
aGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5k
cm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5j
bHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQXVkaW9EYXRhLmgi
CisKKyNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgR1N0cmVhbWVyQXVkaW9EYXRhIDogcHVibGljIFBsYXRmb3JtQXVkaW9EYXRhIHsKK3B1
YmxpYzoKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEoR1JlZlB0cjxHc3RTYW1wbGU+JiYgc2FtcGxl
LCBHc3RBdWRpb0luZm8gaW5mbykKKyAgICAgICAgOiBtX3NhbXBsZShXVEZNb3ZlKHNhbXBsZSkp
CisgICAgICAgICwgbV9hdWRpb0luZm8oaW5mbykKKyAgICB7CisgICAgfQorCisgICAgR1N0cmVh
bWVyQXVkaW9EYXRhKEdSZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSkKKyAgICAgICAgOiBtX3Nh
bXBsZShXVEZNb3ZlKHNhbXBsZSkpCisgICAgeworICAgICAgICBnc3RfYXVkaW9faW5mb19mcm9t
X2NhcHMoJm1fYXVkaW9JbmZvLCBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKSk7
CisgICAgfQorCisgICAgR3N0U2FtcGxlKiBnZXRTYW1wbGUoKSB7IHJldHVybiBtX3NhbXBsZS5n
ZXQoKTsgfQorICAgIEdzdEF1ZGlvSW5mbyBnZXRBdWRpb0luZm8oKSB7cmV0dXJuIG1fYXVkaW9J
bmZvOyB9CisKK3ByaXZhdGU6CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gS2luZDo6
R1N0cmVhbWVyQXVkaW9EYXRhOyB9CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOwor
ICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jYXBzOworCisgICAgR3N0QXVkaW9JbmZvIG1fYXVkaW9J
bmZvOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZmY1OWIyYTE3NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjog
VGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFu
ZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKworI2lu
Y2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlIDxnc3QvYXVkaW8vYXVk
aW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJBdWRpb1N0cmVh
bURlc2NyaXB0aW9uIGZpbmFsOiBwdWJsaWMgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CitwdWJs
aWM6CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRpb0luZm8gaW5m
bykKKyAgICAgICAgOiBtX2luZm8oaW5mbykKKyAgICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdz
dF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQorICAgIHsKKyAgICB9CisKKyAgICBHU3Ry
ZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyAqaW5mbykKKyAgICAgICAg
OiBtX2luZm8oKmluZm8pCisgICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5m
b190b19jYXBzKCZtX2luZm8pKSkKKyAgICB7CisgICAgfQorCisgICAgR1N0cmVhbWVyQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbigpCisgICAgeworICAgICAgICBnc3RfYXVkaW9faW5mb19pbml0KCZt
X2luZm8pOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIH5HU3RyZWFtZXJBdWRpb1N0cmVh
bURlc2NyaXB0aW9uKCkgeyB9OworCisgICAgY29uc3QgUGxhdGZvcm1EZXNjcmlwdGlvbiYgcGxh
dGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24gPSB7IFBsYXRmb3JtRGVzY3JpcHRpb246OkdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kj4oJm1faW5mbykgfTsKKworICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwor
ICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFBDTUZvcm1hdCBmb3JtYXQoKSBjb25zdCBmaW5h
bCB7CisgICAgICAgIHN3aXRjaCAoR1NUX0FVRElPX0lORk9fRk9STUFUKCZtX2luZm8pKSB7Cisg
ICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTZMRToKKyAgICAgICAgY2FzZSBHU1RfQVVE
SU9fRk9STUFUX1MxNkJFOgorICAgICAgICAgICAgcmV0dXJuIEludDE2OworICAgICAgICBjYXNl
IEdTVF9BVURJT19GT1JNQVRfUzMyTEU6CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9T
MzJCRToKKyAgICAgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9f
Rk9STUFUX0YzMkxFOgorICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyQkU6CisgICAg
ICAgICAgICByZXR1cm4gRmxvYXQzMjsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX0Y2
NExFOgorICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjY0QkU6CisgICAgICAgICAgICBy
ZXR1cm4gRmxvYXQ2NDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBOb25lOworICAgIH0KKworICAgIGRvdWJsZSBzYW1wbGVS
YXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fUkFURSgmbV9pbmZvKTsg
fQorICAgIGJvb2wgaXNQQ00oKSBjb25zdCBmaW5hbCB7IHJldHVybiBmb3JtYXQoKSAhPSBOb25l
OyB9CisgICAgYm9vbCBpc0ludGVybGVhdmVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FV
RElPX0lORk9fTEFZT1VUKCZtX2luZm8pID09IEdTVF9BVURJT19MQVlPVVRfSU5URVJMRUFWRUQ7
IH0KKyAgICBib29sIGlzU2lnbmVkSW50ZWdlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9B
VURJT19JTkZPX0lTX0lOVEVHRVIoJm1faW5mbyk7IH0KKyAgICBib29sIGlzTmF0aXZlRW5kaWFu
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fRU5ESUFOTkVTUygmbV9pbmZv
KSA9PSBHX0JZVEVfT1JERVI7IH0KKyAgICBib29sIGlzRmxvYXQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBHU1RfQVVESU9fSU5GT19JU19GTE9BVCgmbV9pbmZvKTsgfQorCisgICAgdWludDMyX3Qg
bnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNJbnRl
cmxlYXZlZCgpID8gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMoJm1faW5mbykgOiBUUlVFOyB9Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTKCZtX2luZm8pOyB9CisgICAgdWludDMyX3QgbnVtYmVy
T2ZDaGFubmVscygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0NIQU5ORUxT
KCZtX2luZm8pOyB9CisgICAgdWludDMyX3Qgc2FtcGxlV29yZFNpemUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBHU1RfQVVESU9fSU5GT19CUFMoJm1faW5mbyk7IH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1
cm4gZ3N0X2F1ZGlvX2luZm9faXNfZXF1YWwoJm1faW5mbywgJm90aGVyLm1faW5mbyk7IH0KKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
b3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvciA9PSAob3RoZXIpOyB9CisKKyAgICBHc3RDYXBzKiBj
YXBzKCkgeyByZXR1cm4gbV9jYXBzLmdldCgpOyB9CisgICAgR3N0QXVkaW9JbmZvKiBnZXRJbmZv
KCkgeyByZXR1cm4gJm1faW5mbzsgfQorCitwcml2YXRlOgorICAgIEdzdEF1ZGlvSW5mbyBtX2lu
Zm87CisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NhcHM7CisgICAgbXV0YWJsZSBQbGF0Zm9ybURl
c2NyaXB0aW9uIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK307CisKK30gLy8gV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDIyZGRkODNhMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBT
YXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2Fz
dHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lckNhcHR1cmVEZXZpY2UgOiBwdWJsaWMg
Q2FwdHVyZURldmljZSB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyQ2FwdHVyZURldmljZShHUmVm
UHRyPEdzdERldmljZT4mJiBkZXZpY2UsIGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudElkLCBEZXZp
Y2VUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgZ3JvdXBJZCA9
IGVtcHR5U3RyaW5nKCkpCisgICAgICAgIDogQ2FwdHVyZURldmljZShwZXJzaXN0ZW50SWQsIHR5
cGUsIGxhYmVsLCBncm91cElkKQorICAgICAgICAsIG1fZGV2aWNlKGRldmljZSkKKyAgICB7Cisg
ICAgfQorCisgICAgR3N0Q2FwcyogY2FwcygpIGNvbnN0IHsgcmV0dXJuIGdzdF9kZXZpY2VfZ2V0
X2NhcHMobV9kZXZpY2UuZ2V0KCkpOyB9CisgICAgR3N0RGV2aWNlKiBkZXZpY2UoKSB7IHJldHVy
biBtX2RldmljZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RGV2aWNlPiBt
X2RldmljZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICAmJiBV
U0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
RGV2aWNlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjNiNzgyODdlN2FhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcApA
QCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEu
Y29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJF
QU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorCisjaW5j
bHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVh
bWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlciYgR1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVh
bWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdl
cjsKK30KKworR1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlciYgR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8R1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAg
ICByZXR1cm4gbWFuYWdlcjsKK30KKworR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5h
Z2VyJiBHU3RyZWFtZXJEaXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNl
TWFuYWdlcj4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKworc3RkOjpvcHRpb25h
bDxHU3RyZWFtZXJDYXB0dXJlRGV2aWNlPiBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
Z3N0cmVhbWVyRGV2aWNlV2l0aFVJRChjb25zdCBTdHJpbmcmIGRldmljZUlEKQoreworICAgIGNh
cHR1cmVEZXZpY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIGRldmljZSA6IG1fZ3N0cmVhbWVyRGV2
aWNlcykgeworICAgICAgICBpZiAoZGV2aWNlLnBlcnNpc3RlbnRJZCgpID09IGRldmljZUlEKQor
ICAgICAgICAgICAgcmV0dXJuIGRldmljZTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKK30KKworY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBHU3RyZWFtZXJDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6Y2FwdHVyZURldmljZXMoKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXIo
KTsKKyAgICBpZiAobV9kZXZpY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVmcmVzaENhcHR1cmVE
ZXZpY2VzKCk7CisKKyAgICByZXR1cm4gbV9kZXZpY2VzOworfQorCit2b2lkIEdTdHJlYW1lckNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VBZGRlZChHUmVmUHRyPEdzdERldmljZT4mJiBkZXZp
Y2UpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHByb3BlcnRpZXMoZ3N0X2Rldmlj
ZV9nZXRfcHJvcGVydGllcyhkZXZpY2UuZ2V0KCkpKTsKKyAgICBjb25zdCBjaGFyKiBrbGFzcyA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhwcm9wZXJ0aWVzLmdldCgpLCAiZGV2aWNlLmNsYXNz
Iik7CisKKyAgICBpZiAoa2xhc3MgJiYgIWdfc3RyY21wMChrbGFzcywgIm1vbml0b3IiKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlID0gZGV2
aWNlVHlwZSgpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGV2aWNlQ2xhc3NDaGFyKGdzdF9kZXZp
Y2VfZ2V0X2RldmljZV9jbGFzcyhkZXZpY2UuZ2V0KCkpKTsKKyAgICBTdHJpbmcgZGV2aWNlQ2xh
c3MoU3RyaW5nKGRldmljZUNsYXNzQ2hhci5nZXQoKSkpOworICAgIGlmICh0eXBlID09IENhcHR1
cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUgJiYgIWRldmljZUNsYXNzLnN0YXJ0c1dp
dGgoIkF1ZGlvIikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodHlwZSA9PSBDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgIWRldmljZUNsYXNzLnN0YXJ0c1dpdGgoIlZpZGVv
IikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgaXNuJ3QgcmVhbGx5IGEgVUlEIGJ1
dCBzaG91bGQgYmUgZ29vZCBlbm91Z2ggKGxpYndlYnJ0YworICAgIC8vIGl0c2VsZiBkb2VzIHRo
YXQgYXQgbGVhc3QgZm9yIHB1bHNlYXVkaW8gZGV2aWNlcykuCisgICAgR1VuaXF1ZVB0cjxjaGFy
PiBkZXZpY2VOYW1lKGdzdF9kZXZpY2VfZ2V0X2Rpc3BsYXlfbmFtZShkZXZpY2UuZ2V0KCkpKTsK
KyAgICBTdHJpbmcgaWRlbnRpZmllciA9IFN0cmluZzo6ZnJvbVVURjgoZGV2aWNlTmFtZS5nZXQo
KSk7CisKKyAgICBhdXRvIGdzdENhcHR1cmVEZXZpY2UgPSBHU3RyZWFtZXJDYXB0dXJlRGV2aWNl
KFdURk1vdmUoZGV2aWNlKSwgaWRlbnRpZmllciwgdHlwZSwgaWRlbnRpZmllcik7CisgICAgZ3N0
Q2FwdHVyZURldmljZS5zZXRFbmFibGVkKHRydWUpOworICAgIG1fZ3N0cmVhbWVyRGV2aWNlcy5h
cHBlbmQoV1RGTW92ZShnc3RDYXB0dXJlRGV2aWNlKSk7CisgICAgLy8gRklYTUU6IFdlIG5lZWQg
YSBDYXB0dXJlRGV2aWNlIGNvcHkgaW4gb3RoZXIgdmVjdG9yIGp1c3QgZm9yIGNhcHR1cmVEZXZp
Y2VzIEFQSS4KKyAgICBhdXRvIGNhcHR1cmVEZXZpY2UgPSBDYXB0dXJlRGV2aWNlKGlkZW50aWZp
ZXIsIHR5cGUsIGlkZW50aWZpZXIpOworICAgIGNhcHR1cmVEZXZpY2Uuc2V0RW5hYmxlZCh0cnVl
KTsKKyAgICBtX2RldmljZXMuYXBwZW5kKFdURk1vdmUoY2FwdHVyZURldmljZSkpOworfQorCit2
b2lkIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZWZyZXNoQ2FwdHVyZURldmljZXMo
KQoreworICAgIGlmICghbV9kZXZpY2VNb25pdG9yKSB7CisgICAgICAgIG1fZGV2aWNlTW9uaXRv
ciA9IGFkb3B0R1JlZihnc3RfZGV2aWNlX21vbml0b3JfbmV3KCkpOworCisgICAgICAgIENhcHR1
cmVEZXZpY2U6OkRldmljZVR5cGUgdHlwZSA9IGRldmljZVR5cGUoKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhKSB7CisgICAgICAgICAgICBH
UmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBs
ZSgidmlkZW8veC1yYXciKSk7CisgICAgICAgICAgICBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2Zp
bHRlcihtX2RldmljZU1vbml0b3IuZ2V0KCksICJWaWRlby9Tb3VyY2UiLCBjYXBzLmdldCgpKTsK
KyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1p
Y3JvcGhvbmUpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJhdWRpby94LXJhdyIpKTsKKyAgICAgICAgICAg
IGdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyKG1fZGV2aWNlTW9uaXRvci5nZXQoKSwgIkF1
ZGlvL1NvdXJjZSIsIGNhcHMuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBB
ZGQgbW9uaXRvciBmb3IgYWRkZWQvcmVtb3ZlZCBtZXNzYWdlcyBvbiB0aGUgYnVzLgorICAgIH0K
KworICAgIGlmICghZ3N0X2RldmljZV9tb25pdG9yX3N0YXJ0KG1fZGV2aWNlTW9uaXRvci5nZXQo
KSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fZGV2aWNlTW9uaXRvci5nZXQoKSwg
IkNvdWxkIG5vdCBzdGFydCBkZXZpY2UgbW9uaXRvciIpOworICAgICAgICBtX2RldmljZU1vbml0
b3IgPSBudWxscHRyOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHTGlzdCogZGV2
aWNlcyA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlcyhtX2RldmljZU1vbml0b3IuZ2V0
KCkpOworICAgIHdoaWxlIChkZXZpY2VzKSB7CisgICAgICAgIEdSZWZQdHI8R3N0RGV2aWNlPiBk
ZXZpY2UgPSBhZG9wdEdSZWYoR1NUX0RFVklDRV9DQVNUKGRldmljZXMtPmRhdGEpKTsKKyAgICAg
ICAgZGV2aWNlQWRkZWQoV1RGTW92ZShkZXZpY2UpKTsKKyAgICAgICAgZGV2aWNlcyA9IGdfbGlz
dF9kZWxldGVfbGluayhkZXZpY2VzLCBkZXZpY2VzKTsKKyAgICB9CisKKyAgICBnc3RfZGV2aWNl
X21vbml0b3Jfc3RvcChtX2RldmljZU1vbml0b3IuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODYzOTI0MTRkMDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuaApAQCAtMCwwICsxLDgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBB
dXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6
IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJDYXB0
dXJlRGV2aWNlTWFuYWdlci5oIgorI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIgOiBwdWJsaWMgQ2FwdHVyZURldmlj
ZU1hbmFnZXIgeworcHVibGljOgorICAgIHN0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyQ2FwdHVyZURl
dmljZT4gZ3N0cmVhbWVyRGV2aWNlV2l0aFVJRChjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQg
cmVmcmVzaENhcHR1cmVEZXZpY2VzKCkgZmluYWw7CisgICAgY29uc3QgVmVjdG9yPENhcHR1cmVE
ZXZpY2U+JiBjYXB0dXJlRGV2aWNlcygpIGZpbmFsOworICAgIHZpcnR1YWwgQ2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgPSAwOworCitwcml2YXRlOgorICAgIHZvaWQgZGV2
aWNlQWRkZWQoR1JlZlB0cjxHc3REZXZpY2U+JiYpOworCisgICAgR1JlZlB0cjxHc3REZXZpY2VN
b25pdG9yPiBtX2RldmljZU1vbml0b3I7CisgICAgVmVjdG9yPEdTdHJlYW1lckNhcHR1cmVEZXZp
Y2U+IG1fZ3N0cmVhbWVyRGV2aWNlczsKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4gbV9kZXZp
Y2VzOworfTsKKworY2xhc3MgR1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlciBmaW5h
bCA6IHB1YmxpYyBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlciB7CisgICAgZnJpZW5kIGNs
YXNzIE5ldmVyRGVzdHJveWVkPEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI+Owor
cHVibGljOgorICAgIHN0YXRpYyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyJiBz
aW5nbGV0b24oKTsKKyAgICBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSBm
aW5hbCB7IHJldHVybiBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lOyB9Citw
cml2YXRlOgorICAgIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIoKSA9IGRlZmF1
bHQ7CisgICAgfkdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIoKSA9IGRlZmF1bHQ7
Cit9OworCitjbGFzcyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDog
cHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3Mg
TmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcj47CitwdWJs
aWM6CisgICAgc3RhdGljIEdTdHJlYW1lclZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXImIHNpbmds
ZXRvbigpOworICAgIHN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0
b3J5JiB2aWRlb0ZhY3RvcnkoKTsKKyAgICBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmlj
ZVR5cGUoKSBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmE7
IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpID0g
ZGVmYXVsdDsKKyAgICB+R1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpID0gZGVm
YXVsdDsKK307CisKK2NsYXNzIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlciBm
aW5hbCA6IHB1YmxpYyBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlciB7CisgICAgZnJpZW5k
IGNsYXNzIE5ldmVyRGVzdHJveWVkPEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdl
cj47CitwdWJsaWM6CisgICAgc3RhdGljIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFu
YWdlciYgc2luZ2xldG9uKCk7CisgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZpY2VU
eXBlKCkgZmluYWwgeyByZXR1cm4gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuOyB9
Citwcml2YXRlOgorICAgIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpID0g
ZGVmYXVsdDsKKyAgICB+R1N0cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBk
ZWZhdWx0OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgICYmIFVT
RShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTU3OWU1ODQ4ZDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQ2FwdHVyZXIuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5p
ZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8g
PGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVS
KQorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKSAm
JiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJl
ci5oIgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8Z3N0L2Fw
cC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3ZWJydGMvYXBpL21l
ZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfY2FwdHVy
ZXJfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X2NhcHR1cmVyX2RlYnVn
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdTdHJlYW1l
ckFuZERlYnVnKCkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShk
ZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklU
KHdlYmtpdF9jYXB0dXJlcl9kZWJ1ZywgIndlYmtpdGNhcHR1cmVyIiwgMCwgIldlYktpdCBDYXB0
dXJlciIpOworICAgIH0pOworfQorCitHU3RyZWFtZXJDYXB0dXJlcjo6R1N0cmVhbWVyQ2FwdHVy
ZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZpY2UsIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcykK
KyAgICA6IG1fZGV2aWNlKGRldmljZS5kZXZpY2UoKSkKKyAgICAsIG1fY2FwcyhjYXBzKQorICAg
ICwgbV9zb3VyY2VGYWN0b3J5KG51bGxwdHIpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFu
ZERlYnVnKCk7Cit9CisKK0dTdHJlYW1lckNhcHR1cmVyOjpHU3RyZWFtZXJDYXB0dXJlcihjb25z
dCBjaGFyKiBzb3VyY2VGYWN0b3J5LCBHUmVmUHRyPEdzdENhcHM+IGNhcHMpCisgICAgOiBtX2Rl
dmljZShudWxscHRyKQorICAgICwgbV9jYXBzKGNhcHMpCisgICAgLCBtX3NvdXJjZUZhY3Rvcnko
c291cmNlRmFjdG9yeSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kRGVidWcoKTsKK30K
KworR1N0cmVhbWVyQ2FwdHVyZXI6On5HU3RyZWFtZXJDYXB0dXJlcigpCit7CisgICAgaWYgKG1f
cGlwZWxpbmUpCisgICAgICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2socGlw
ZWxpbmUoKSk7Cit9CisKK0dzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3Vy
Y2UoKQoreworICAgIGlmIChtX3NvdXJjZUZhY3RvcnkpIHsKKyAgICAgICAgbV9zcmMgPSBtYWtl
RWxlbWVudChtX3NvdXJjZUZhY3RvcnkpOworICAgICAgICBpZiAoR1NUX0lTX0FQUF9TUkMobV9z
cmMuZ2V0KCkpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaXMtbGl2
ZSIsIHRydWUsICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIG51bGxwdHIpOworCisgICAgICAg
IEFTU0VSVChtX3NyYyk7CisgICAgICAgIHJldHVybiBtX3NyYy5nZXQoKTsKKyAgICB9CisKKyAg
ICBBU1NFUlQobV9kZXZpY2UpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlTmFtZShnX3N0
cmR1cF9wcmludGYoIiVzXyVwIiwgbmFtZSgpLCB0aGlzKSk7CisgICAgbV9zcmMgPSBnc3RfZGV2
aWNlX2NyZWF0ZV9lbGVtZW50KG1fZGV2aWNlLmdldCgpLCBzb3VyY2VOYW1lLmdldCgpKTsKKyAg
ICBBU1NFUlQobV9zcmMpOworCisgICAgcmV0dXJuIG1fc3JjLmdldCgpOworfQorCitHc3RDYXBz
KiBHU3RyZWFtZXJDYXB0dXJlcjo6Y2FwcygpCit7CisgICAgaWYgKG1fc291cmNlRmFjdG9yeSkg
eworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGVsZW1lbnQgPSBtYWtlRWxlbWVudChtX3Nv
dXJjZUZhY3RvcnkpOworICAgICAgICBhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChlbGVtZW50LmdldCgpLCAic3JjIikpOworCisgICAgICAgIHJldHVybiBn
c3RfcGFkX3F1ZXJ5X2NhcHMocGFkLmdldCgpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBBU1NF
UlQobV9kZXZpY2UpOworICAgIHJldHVybiBnc3RfZGV2aWNlX2dldF9jYXBzKG1fZGV2aWNlLmdl
dCgpKTsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6c2V0dXBQaXBlbGluZSgpCit7Cisg
ICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2Fs
bGJhY2socGlwZWxpbmUoKSk7CisKKyAgICBtX3BpcGVsaW5lID0gbWFrZUVsZW1lbnQoInBpcGVs
aW5lIik7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZSgp
OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gY29udmVydGVyID0gY3JlYXRlQ29udmVydGVyKCk7
CisKKyAgICBtX2NhcHNmaWx0ZXIgPSBtYWtlRWxlbWVudCgiY2Fwc2ZpbHRlciIpOworICAgIG1f
dGVlID0gbWFrZUVsZW1lbnQoInRlZSIpOworICAgIG1fc2luayA9IG1ha2VFbGVtZW50KCJhcHBz
aW5rIik7CisKKyAgICBnc3RfYXBwX3Npbmtfc2V0X2VtaXRfc2lnbmFscyhHU1RfQVBQX1NJTkso
bV9zaW5rLmdldCgpKSwgVFJVRSk7CisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc2ZpbHRlci5nZXQo
KSwgImNhcHMiLCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFu
eShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3VyY2UuZ2V0KCksIGNvbnZlcnRlci5nZXQo
KSwgbV9jYXBzZmlsdGVyLmdldCgpLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2Vs
ZW1lbnRfbGlua19tYW55KHNvdXJjZS5nZXQoKSwgY29udmVydGVyLmdldCgpLCBtX2NhcHNmaWx0
ZXIuZ2V0KCksIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKworICAgIGFkZFNpbmsobV9zaW5rLmdl
dCgpKTsKKworICAgIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2socGlwZWxpbmUoKSk7
Cit9CisKK0dzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjptYWtlRWxlbWVudChjb25zdCBj
aGFyKiBmYWN0b3J5TmFtZSkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoZmFjdG9yeU5hbWUsIG51bGxwdHIpOworICAgIEFTU0VSVChlbGVtZW50KTsKKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IGNhcHR1cmVyTmFtZShnX3N0cmR1cF9wcmludGYoIiVzX2NhcHR1
cmVyXyVzXyVwIiwgbmFtZSgpLCBHU1RfT0JKRUNUX05BTUUoZWxlbWVudCksIHRoaXMpKTsKKyAg
ICBnc3Rfb2JqZWN0X3NldF9uYW1lKEdTVF9PQkpFQ1QoZWxlbWVudCksIGNhcHR1cmVyTmFtZS5n
ZXQoKSk7CisKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJl
cjo6YWRkU2luayhHc3RFbGVtZW50KiBuZXdTaW5rKQoreworICAgIEFTU0VSVChtX3BpcGVsaW5l
KTsKKyAgICBBU1NFUlQobV90ZWUpOworCisgICAgYXV0byBxdWV1ZSA9IG1ha2VFbGVtZW50KCJx
dWV1ZSIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihwaXBlbGluZSgpKSwgcXVldWUs
IG5ld1NpbmssIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQocXVldWUpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobmV3U2lu
ayk7CisKKyAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkcyhtX3RlZS5nZXQoKSwgInNyY18l
dSIsIHF1ZXVlLCAic2luayIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rKHF1ZXVlLCBu
ZXdTaW5rKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChuZXdTaW5rID09IG1fc2luay5nZXQoKSkgeworICAgICAgICBH
U1RfSU5GT19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlNldHRpbmcgcXVldWUgYXMgbGVha3kg
dXBzdHJlYW0iCisgICAgICAgICAgICAiIHNvIHRoYXQgdGhlIHBsYXllciBjYW4gc2V0IHRoZSBz
aW5rIHRvIFBBVVNFRCB3aXRob3V0ICIKKyAgICAgICAgICAgICIgc2V0dGluZyB0aGUgd2hvbGUg
Y2FwdHVyZXIgdG8gUEFVU0VEIik7CisgICAgICAgIGdfb2JqZWN0X3NldChxdWV1ZSwgImxlYWt5
IiwgMiAvKiB1cHN0cmVhbSAqLywgbnVsbHB0cik7CisgICAgfQorCisgICAgR1NUX0lORk9fT0JK
RUNUKHBpcGVsaW5lKCksICJBZGRpbmcgc2luazogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1Npbmsp
OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkdW1wTmFtZShnX3N0cmR1cF9wcmludGYoIiVzX3Np
bmtfJXNfYWRkZWQiLCBHU1RfT0JKRUNUX05BTUUocGlwZWxpbmUoKSksIEdTVF9PQkpFQ1RfTkFN
RShuZXdTaW5rKSkpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1Rf
QklOKHBpcGVsaW5lKCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGR1bXBOYW1lLmdldCgp
KTsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6cGxheSgpCit7CisgICAgQVNTRVJUKG1f
cGlwZWxpbmUpOworCisgICAgR1NUX0lORk9fT0JKRUNUKChncG9pbnRlcikgcGlwZWxpbmUoKSwg
IkdvaW5nIHRvIFBMQVlJTkchIik7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUocGlwZWxp
bmUoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworfQorCit2b2lkIEdTdHJlYW1lckNhcHR1cmVyOjpz
dG9wKCkKK3sKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CisKKyAgICBHU1RfSU5GT19PQkpFQ1Qo
KGdwb2ludGVyKSBwaXBlbGluZSgpLCAiVGVhcmluZyBkb3duISIpOworCisgICAgLy8gTWFrZSBz
dXJlIHRvIHJlbW92ZSBzeW5jIGhhbmRsZXIgYmVmb3JlIHRlYXJpbmcgZG93biwgYXZvaWRpbmcK
KyAgICAvLyBwb3NzaWJsZSBkZWFkbG9ja3MuCisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFk
b3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUocGlwZWxpbmUoKSkpKTsK
KyAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShwaXBlbGluZSgpLCBHU1Rf
U1RBVEVfTlVMTCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYg
VVNFKEdTVFJFQU1FUikgJiYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJDYXB0dXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi43YmZjZWRhZDgwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5oCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1
dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJF
QU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKworI2luY2x1
ZGUgPGdzdC9nc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJD
YXB0dXJlciB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyQ2FwdHVyZXIoR1N0cmVhbWVyQ2FwdHVy
ZURldmljZSwgR1JlZlB0cjxHc3RDYXBzPik7CisgICAgR1N0cmVhbWVyQ2FwdHVyZXIoY29uc3Qg
Y2hhciogc291cmNlRmFjdG9yeSwgR1JlZlB0cjxHc3RDYXBzPik7CisgICAgfkdTdHJlYW1lckNh
cHR1cmVyKCk7CisKKyAgICB2b2lkIHNldHVwUGlwZWxpbmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAgR3N0Q2FwcyogY2FwcygpOwor
ICAgIHZvaWQgYWRkU2luayhHc3RFbGVtZW50ICpuZXdTaW5rKTsKKyAgICBHc3RFbGVtZW50KiBt
YWtlRWxlbWVudChjb25zdCBjaGFyKiBmYWN0b3J5TmFtZSk7CisgICAgR3N0RWxlbWVudCogY3Jl
YXRlU291cmNlKCk7CisgICAgR3N0RWxlbWVudCogc291cmNlKCkgeyByZXR1cm4gbV9zcmMuZ2V0
KCk7ICB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgPSAwOworCisgICAgR3N0RWxl
bWVudCogc2luaygpIGNvbnN0IHsgcmV0dXJuIG1fc2luay5nZXQoKTsgfQorICAgIHZvaWQgc2V0
U2luayhHc3RFbGVtZW50KiBzaW5rKSB7IG1fc2luayA9IGFkb3B0R1JlZihzaW5rKTsgfTsKKwor
ICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9waXBlbGluZS5nZXQo
KTsgfQorICAgIHZpcnR1YWwgR3N0RWxlbWVudCogY3JlYXRlQ29udmVydGVyKCkgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Npbms7CisgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBtX3NyYzsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdGVlOworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzZmlsdGVyOworICAgIEdSZWZQdHI8R3N0RGV2aWNlPiBt
X2RldmljZTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY2FwczsKKyAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IG1fcGlwZWxpbmU7CisKK3ByaXZhdGU6CisgICAgY29uc3QgY2hhciogbV9zb3VyY2VG
YWN0b3J5OworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExZGM5ZjY5MWNmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMCwwICsxLDUzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGli
YXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8g
Ry4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KEdTVFJFQU1FUikKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjZW5kaWYKKworI2lmIEVOQUJMRShW
SURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisjaW5jbHVkZSAiR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKworI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJWaWRlb1RyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvRGF0YS5o
IgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9n
c3RmbG93Y29tYmluZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCB3
ZWJraXRNZWRpYVN0cmVhbVNyY1B1c2hWaWRlb1NhbXBsZShXZWJLaXRNZWRpYVN0cmVhbVNyYyog
c2VsZiwgR3N0U2FtcGxlKiBnc3RzYW1wbGUpOworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJl
YW1TcmNQdXNoQXVkaW9TYW1wbGUoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBs
ZSogZ3N0c2FtcGxlKTsKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjVHJhY2tFbmRl
ZChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKTsK
Kworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvU3JjVGVtcGxhdGUgPSBHU1RfU1RB
VElDX1BBRF9URU1QTEFURSgidmlkZW9fc3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1Rf
UEFEX1NPTUVUSU1FUywKKyAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3IikpOworCitz
dGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgYXVkaW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNf
UEFEX1RFTVBMQVRFKCJhdWRpb19zcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURf
U09NRVRJTUVTLAorICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC1yYXcoQU5ZKTsiKSk7CisK
K3N0YXRpYyBHc3RUYWdMaXN0KiBtZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUdldFRhZ3MoTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrKQoreworICAgIGF1dG8gdGFnbGlzdCA9IGdzdF90YWdf
bGlzdF9uZXdfZW1wdHkoKTsKKworICAgIGlmICghdHJhY2stPmxhYmVsKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQs
CisgICAgICAgICAgICBHU1RfVEFHX1RJVExFLCB0cmFjay0+bGFiZWwoKS51dGY4KCkuZGF0YSgp
LCBudWxscHRyKTsKKyAgICB9CisKKyAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbykgeworICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ2xp
c3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0tJTkQsCisg
ICAgICAgICAgICAoZ2ludClBdWRpb1RyYWNrUHJpdmF0ZTo6S2luZDo6TWFpbiwgbnVsbHB0cik7
CisgICAgfSBlbHNlIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGU6OlZpZGVvKSB7CisgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFnbGlzdCwgR1NUX1RBR19N
RVJHRV9BUFBFTkQsIFdFQktJVF9NRURJQV9UUkFDS19UQUdfS0lORCwKKyAgICAgICAgICAgIChn
aW50KVZpZGVvVHJhY2tQcml2YXRlOjpLaW5kOjpNYWluLCBudWxscHRyKTsKKworICAgICAgICBp
ZiAodHJhY2stPmlzQ2FwdHVyZVRyYWNrKCkpIHsKKyAgICAgICAgICAgIEdTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZSYgc291cmNlID0gc3RhdGljX2Nhc3Q8R1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlJj4oCisgICAgICAgICAgICAgICAgdHJhY2stPnNvdXJjZSgpKTsKKworICAgICAgICAg
ICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKKyAgICAg
ICAgICAgICAgICBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJRFRILCBzb3VyY2Uuc2l6ZSgpLndp
ZHRoKCksCisgICAgICAgICAgICAgICAgV0VCS0lUX01FRElBX1RSQUNLX1RBR19IRUlHSFQsIHNv
dXJjZS5zaXplKCkuaGVpZ2h0KCksIG51bGxwdHIpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRhZ2xpc3Q7Cit9CisKK0dzdFN0cmVhbSogd2Via2l0TWVkaWFTdHJlYW1OZXcoTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrKQoreworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2Fw
czsKKyAgICBHc3RTdHJlYW1UeXBlIHR5cGU7CisKKyAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBS
ZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbykgeworICAgICAgICBjYXBzID0gYWRvcHRH
UmVmKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKCZhdWRpb1NyY1RlbXBsYXRlKSk7
CisgICAgICAgIHR5cGUgPSBHU1RfU1RSRUFNX1RZUEVfQVVESU87CisgICAgfSBlbHNlIGlmICh0
cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKSB7CisgICAg
ICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMoJnZp
ZGVvU3JjVGVtcGxhdGUpKTsKKyAgICAgICAgdHlwZSA9IEdTVF9TVFJFQU1fVFlQRV9WSURFTzsK
KyAgICB9IGVsc2UgeworICAgICAgICBHU1RfRklYTUUoIkhhbmRsZSAlZCB0eXBlIiwgKGdpbnQp
IHRyYWNrLT50eXBlKCkpOworCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGF1dG8gZ3N0c3RyZWFtID0gKEdzdFN0cmVhbSopZ3N0X3N0cmVhbV9uZXcodHJhY2stPmlkKCku
dXRmOCgpLmRhdGEoKSwKKyAgICAgICAgY2Fwcy5nZXQoKSwgdHlwZSwgR1NUX1NUUkVBTV9GTEFH
X1NFTEVDVCk7CisgICAgYXV0byB0YWdzID0gYWRvcHRHUmVmKG1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlR2V0VGFncyh0cmFjaykpOworICAgIGdzdF9zdHJlYW1fc2V0X3RhZ3MoZ3N0c3RyZWFtLCB0
YWdzLmdldCgpKTsKKworICAgIHJldHVybiBnc3RzdHJlYW07Cit9CisKK2NsYXNzIFdlYktpdE1l
ZGlhU3RyZWFtVHJhY2tPYnNlcnZlcgorICAgIDogcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViS2l0TWVkaWFTdHJlYW1U
cmFja09ic2VydmVyKCkgeyB9OworICAgIFdlYktpdE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcihX
ZWJLaXRNZWRpYVN0cmVhbVNyYyogc3JjKQorICAgICAgICA6IG1fbWVkaWFTdHJlYW1TcmMoc3Jj
KSB7IH0KKyAgICB2b2lkIHRyYWNrU3RhcnRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZp
bmFsIHsgfTsKKworICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYg
dHJhY2spIGZpbmFsCisgICAgeworICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5k
ZWQobV9tZWRpYVN0cmVhbVNyYywgdHJhY2spOworICAgIH0KKworICAgIHZvaWQgdHJhY2tNdXRl
ZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07CisgICAgdm9pZCB0
cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfTsK
KyAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBm
aW5hbCB7IH07CisgICAgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSYpIGZpbmFsIHsgfTsKKworICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsCisgICAgeworICAg
ICAgICBhdXRvIGdzdHNhbXBsZSA9IHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlR1N0cmVhbWVyKj4o
JnNhbXBsZSktPnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmdzdFNhbXBsZTsKKworICAgICAgICB3
ZWJraXRNZWRpYVN0cmVhbVNyY1B1c2hWaWRlb1NhbXBsZShtX21lZGlhU3RyZWFtU3JjLCBnc3Rz
YW1wbGUpOworICAgIH0KKworICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0Rh
dGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCkgZmlu
YWwKKyAgICB7CisgICAgICAgIGF1dG8gYXVkaW9kYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgR1N0
cmVhbWVyQXVkaW9EYXRhJj4oYXVkaW9EYXRhKTsKKworICAgICAgICB3ZWJraXRNZWRpYVN0cmVh
bVNyY1B1c2hBdWRpb1NhbXBsZShtX21lZGlhU3RyZWFtU3JjLCBhdWRpb2RhdGEuZ2V0U2FtcGxl
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogbV9tZWRp
YVN0cmVhbVNyYzsKK307CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyY0Ns
YXNzIFdlYktpdE1lZGlhU3RyZWFtU3JjQ2xhc3M7CitzdHJ1Y3QgX1dlYktpdE1lZGlhU3RyZWFt
U3JjIHsKKyAgICBHc3RCaW4gcGFyZW50X2luc3RhbmNlOworCisgICAgZ2NoYXIqIHVyaTsKKwor
ICAgIEdzdEVsZW1lbnQqIGF1ZGlvU3JjOworICAgIEdzdEVsZW1lbnQqIHZpZGVvU3JjOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcj4gb2JzZXJ2
ZXI7CisgICAgU3RyaW5nIHZpZGVvVHJhY2tJRDsKKyAgICB2b2xhdGlsZSBnaW50IG5wYWRzOwor
ICAgIGd1bG9uZyBwcm9iZWlkOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IHN0cmVh
bTsKKworICAgIEdzdEZsb3dDb21iaW5lciogZmxvd0NvbWJpbmVyOworICAgIEdSZWZQdHI8R3N0
U3RyZWFtQ29sbGVjdGlvbj4gc3RyZWFtQ29sbGVjdGlvbjsKK307CisKK3N0cnVjdCBfV2ViS2l0
TWVkaWFTdHJlYW1TcmNDbGFzcyB7CisgICAgR3N0QmluQ2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfSVNfTElWRSwKKyAgICBQUk9QX0xBU1QK
K307CisKK3N0YXRpYyBHc3RVUklUeXBlIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRf
dHlwZShHVHlwZSkKK3sKKyAgICByZXR1cm4gR1NUX1VSSV9TUkM7Cit9CisKK3N0YXRpYyBjb25z
dCBnY2hhciogY29uc3QqIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfcHJvdG9jb2xz
KEdUeXBlKQoreworICAgIHN0YXRpYyBjb25zdCBnY2hhciogcHJvdG9jb2xzW10gPSB7ICJtZWRp
YXN0cmVhbSIsIG51bGxwdHIgfTsKKworICAgIHJldHVybiBwcm90b2NvbHM7Cit9CisKK3N0YXRp
YyBnY2hhciogd2Via2l0X21lZGlhX3N0cmVhbV9zcmNfdXJpX2dldF91cmkoR3N0VVJJSGFuZGxl
ciogaGFuZGxlcikKK3sKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdFQktJVF9N
RURJQV9TVFJFQU1fU1JDKGhhbmRsZXIpOworCisgICAgLyogRklYTUU6IG1ha2UgdGhyZWFkLXNh
ZmUgKi8KKyAgICByZXR1cm4gZ19zdHJkdXAoc2VsZi0+dXJpKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdE1lZGlhU3RyZWFtU3JjVXJpU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIs
IGNvbnN0IGdjaGFyKiB1cmksCisgICAgR0Vycm9yKiopCit7CisgICAgV2ViS2l0TWVkaWFTdHJl
YW1TcmMqIHNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhoYW5kbGVyKTsKKyAgICBzZWxm
LT51cmkgPSBnX3N0cmR1cCh1cmkpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ19pZmFjZSwg
Z3BvaW50ZXIpCit7CisgICAgR3N0VVJJSGFuZGxlckludGVyZmFjZSogaWZhY2UgPSAoR3N0VVJJ
SGFuZGxlckludGVyZmFjZSopZ19pZmFjZTsKKworICAgIGlmYWNlLT5nZXRfdHlwZSA9IHdlYmtp
dF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfdHlwZTsKKyAgICBpZmFjZS0+Z2V0X3Byb3RvY29s
cyA9IHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfcHJvdG9jb2xzOworICAgIGlmYWNl
LT5nZXRfdXJpID0gd2Via2l0X21lZGlhX3N0cmVhbV9zcmNfdXJpX2dldF91cmk7CisgICAgaWZh
Y2UtPnNldF91cmkgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaVNldFVyaTsKK30KKworR1NUX0RF
QlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnKTsKKyNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhU3RyZWFtU3JjRGVidWcKKworI2RlZmluZSBkb0lu
aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIHdlYmtpdE1lZGlhU3RyZWFt
U3JjVXJpSGFuZGxlckluaXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHU1Rf
REVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnLCAid2Via2l0d2Vi
bWVkaWFzdHJlYW1zcmMiLCAwLCAibWVkaWFzdHJlYW1zcmMgZWxlbWVudCIpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdz
dF90YWdfcmVnaXN0ZXJfc3RhdGljKFdFQktJVF9NRURJQV9UUkFDS19UQUdfV0lEVEgsIEdTVF9U
QUdfRkxBR19NRVRBLCBHX1RZUEVfSU5ULCAiV2Via2l0IE1lZGlhU3RyZWFtIHdpZHRoIiwgIldl
YmtpdCBNZWRpYVN0cmVhbSB3aWR0aCIsIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KTsgICAgXAor
ICAgIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljKFdFQktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hU
LCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX0lOVCwgIldlYmtpdCBNZWRpYVN0cmVhbSBoZWln
aHQiLCAiV2Via2l0IE1lZGlhU3RyZWFtIGhlaWdodCIsIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0
KTsgXAorICAgIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljKFdFQktJVF9NRURJQV9UUkFDS19UQUdf
S0lORCwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9JTlQsICJXZWJraXQgTWVkaWFTdHJlYW0g
S2luZCIsICJXZWJraXQgTWVkaWFTdHJlYW0gS2luZCIsIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0
KTsKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0TWVkaWFTdHJlYW1TcmMsIHdlYmtp
dF9tZWRpYV9zdHJlYW1fc3JjLCBHU1RfVFlQRV9CSU4sIGRvSW5pdCk7CisKK3N0YXRpYyB2b2lk
IHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIHN3
aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0dldFByb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwKKyAgICBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1Bf
SVNfTElWRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgVFJVRSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0Rpc3Bvc2UoR09iamVjdCog
b2JqZWN0KQoreworICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElB
X1NUUkVBTV9TUkMob2JqZWN0KTsKKworICAgIGlmIChzZWxmLT5hdWRpb1NyYykgeworICAgICAg
ICBnc3RfYmluX3JlbW92ZShHU1RfQklOKHNlbGYpLCBzZWxmLT5hdWRpb1NyYyk7CisgICAgICAg
IHNlbGYtPmF1ZGlvU3JjID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+dmlkZW9T
cmMpIHsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwgc2VsZi0+dmlkZW9T
cmMpOworICAgICAgICBzZWxmLT52aWRlb1NyYyA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JD
KG9iamVjdCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc2VsZik7CisgICAgZm9yIChhdXRvJiB0
cmFjayA6IHNlbGYtPnN0cmVhbS0+dHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5yZW1vdmVPYnNl
cnZlcigqc2VsZi0+b2JzZXJ2ZXIuZ2V0KCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYp
OworCisgICAgZ19jbGVhcl9wb2ludGVyKCZzZWxmLT51cmksIGdfZnJlZSk7CisgICAgZ3N0X2Zs
b3dfY29tYmluZXJfZnJlZShzZWxmLT5mbG93Q29tYmluZXIpOworfQorCitzdGF0aWMgR3N0U3Rh
dGVDaGFuZ2VSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50
KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICAgIEdzdFN0YXRlQ2hh
bmdlUmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVBTV9T
UkMoZWxlbWVudCk7CisKKyAgICBpZiAodHJhbnNpdGlvbiA9PSBHU1RfU1RBVEVfQ0hBTkdFX1BB
VVNFRF9UT19SRUFEWSkgeworCisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKKyAgICAg
ICAgZm9yIChhdXRvJiB0cmFjayA6IHNlbGYtPnN0cmVhbS0+dHJhY2tzKCkpCisgICAgICAgICAg
ICB0cmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnNlbGYtPm9ic2VydmVyLmdldCgpKTsKKyAgICAgICAg
R1NUX09CSkVDVF9VTkxPQ0soc2VsZik7CisgICAgfQorCisgICAgcmVzdWx0ID0gR1NUX0VMRU1F
TlRfQ0xBU1Mod2Via2l0X21lZGlhX3N0cmVhbV9zcmNfcGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0
YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOworCisgICAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NU
QVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQpCisgICAgICAgIHJlc3VsdCA9IEdTVF9TVEFURV9D
SEFOR0VfTk9fUFJFUk9MTDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTdHJlYW1TcmND
bGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0gR19PQkpF
Q1RfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyogZ3N0ZWxlbWVudF9rbGFzcyA9
IChHc3RFbGVtZW50Q2xhc3MqKWtsYXNzOworCisgICAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRNZWRpYVN0cmVhbVNyY0ZpbmFsaXplOworICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bv
c2UgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY0Rpc3Bvc2U7CisgICAgZ29iamVjdF9jbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0TWVkaWFTdHJlYW1TcmNHZXRQcm9wZXJ0eTsKKyAgICBnb2JqZWN0
X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFByb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9Q
X0lTX0xJVkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJpcy1saXZlIiwgIklzIExp
dmUiLAorICAgICAgICAgICAgIkxldCBwbGF5YmluMyBrbm93IHdlIGFyZSBhIGxpdmUgc291cmNl
LiIsCisgICAgICAgICAgICBUUlVFLCAoR1BhcmFtRmxhZ3MpKEdfUEFSQU1fUkVBREFCTEUgfCBH
X1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOworCisgICAgZ3N0ZWxlbWVudF9rbGFzcy0+Y2hhbmdl
X3N0YXRlID0gd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFuZ2VTdGF0ZTsKKyAgICBnc3RfZWxlbWVu
dF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGdzdGVsZW1lbnRfa2xhc3MsCisgICAgICAgIGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmdmlkZW9TcmNUZW1wbGF0ZSkpOworICAgIGdzdF9lbGVt
ZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZ3N0ZWxlbWVudF9rbGFzcywKKyAgICAgICAgZ3N0
X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZhdWRpb1NyY1RlbXBsYXRlKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX2luaXQoV2ViS2l0TWVkaWFTdHJlYW1TcmMq
IHNlbGYpCit7CisgICAgc2VsZi0+b2JzZXJ2ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYktpdE1l
ZGlhU3RyZWFtVHJhY2tPYnNlcnZlcj4oc2VsZik7CisgICAgc2VsZi0+Zmxvd0NvbWJpbmVyID0g
Z3N0X2Zsb3dfY29tYmluZXJfbmV3KCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJL
aXRNZWRpYVN0cmVhbVNyYyogc2VsZjsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+IHRyYWNrOworICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRfdGVtcGxhdGU7Cit9IFBy
b2JlRGF0YTsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFp
bihHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBvYmplY3QsIEdzdEJ1ZmZlciogYnVmZmVyKQorewor
ICAgIEdzdEZsb3dSZXR1cm4gcmVzdWx0OworICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFTdHJlYW1T
cmM+IHNlbGYgPSBhZG9wdEdSZWYoV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoZ3N0X29iamVjdF9n
ZXRfcGFyZW50KG9iamVjdCkpKTsKKworICAgIHJlc3VsdCA9IGdzdF9mbG93X2NvbWJpbmVyX3Vw
ZGF0ZV9wYWRfZmxvdyhzZWxmLmdldCgpLT5mbG93Q29tYmluZXIsIHBhZCwKKyAgICAgICAgZ3N0
X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0KHBhZCwgR1NUX09CSkVDVChzZWxmLmdldCgpKSwgYnVm
ZmVyKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFBhZChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0UGFkKiB0YXJn
ZXQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRfdGVtcGxhdGUpCit7CisgICAgYXV0byBwYWRu
YW1lID0gU3RyaW5nOjpmb3JtYXQoInNyY18ldSIsIGdfYXRvbWljX2ludF9hZGQoJihzZWxmLT5u
cGFkcyksIDEpKTsKKyAgICBhdXRvIGdob3N0cGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90
ZW1wbGF0ZShwYWRuYW1lLnV0ZjgoKS5kYXRhKCksIHRhcmdldCwKKyAgICAgICAgZ3N0X3N0YXRp
Y19wYWRfdGVtcGxhdGVfZ2V0KHBhZF90ZW1wbGF0ZSkpOworCisgICAgR1NUX0RFQlVHX09CSkVD
VChzZWxmLCAiJXMgR2hvc3RpbmcgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgIGdzdF9vYmpl
Y3RfZ2V0X3BhdGhfc3RyaW5nKEdTVF9PQkpFQ1RfQ0FTVChzZWxmKSksCisgICAgICAgIHRhcmdl
dCk7CisKKyAgICBhdXRvIHByb3h5cGFkID0gYWRvcHRHUmVmKEdTVF9QQUQoZ3N0X3Byb3h5X3Bh
ZF9nZXRfaW50ZXJuYWwoR1NUX1BST1hZX1BBRChnaG9zdHBhZCkpKSk7CisgICAgZ3N0X3BhZF9z
ZXRfY2hhaW5fZnVuY3Rpb24ocHJveHlwYWQuZ2V0KCksCisgICAgICAgIChHc3RQYWRDaGFpbkZ1
bmN0aW9uKXdlYmtpdE1lZGlhU3RyZWFtU3JjQ2hhaW4pOworICAgIGdzdF9wYWRfc2V0X2FjdGl2
ZShnaG9zdHBhZCwgVFJVRSk7CisgICAgZ19hc3NlcnQoZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1Rf
RUxFTUVOVChzZWxmKSwgKEdzdFBhZCopZ2hvc3RwYWQpKTsKK30KKworc3RhdGljIEdzdFBhZFBy
b2JlUmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFtU3JjUGFkUHJvYmVDYihHc3RQYWQqIHBhZCwgR3N0
UGFkUHJvYmVJbmZvKiBpbmZvLCBQcm9iZURhdGEqIGRhdGEpCit7CisgICAgR3N0RXZlbnQqIGV2
ZW50ID0gR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKGluZm8pOworICAgIFdlYktpdE1lZGlhU3Ry
ZWFtU3JjKiBzZWxmID0gZGF0YS0+c2VsZjsKKworICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUo
ZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOiB7CisgICAgICAgIGNv
bnN0IGdjaGFyKiBzdHJlYW1faWQ7CisgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0g
PSBudWxscHRyOworCisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoZXZlbnQs
ICZzdHJlYW1faWQpOworICAgICAgICBpZiAoIWdfc3RyY21wMChzdHJlYW1faWQsIGRhdGEtPnRy
YWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCkpKSB7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGFkLCAiRXZlbnQgaGFzIGJlZW4gc3RpY2tlZCBhbHJlYWR5Iik7CisgICAgICAgICAgICByZXR1
cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc3RyZWFtX3N0
YXJ0ID0gZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQoZGF0YS0+dHJhY2stPmlkKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQoc3RyZWFtX3N0YXJ0LCAx
KTsKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKworICAgICAgICBnc3RfcGFkX3B1
c2hfZXZlbnQocGFkLCBzdHJlYW1fc3RhcnQpOworICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQo
cGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uKHNlbGYtPnN0cmVhbUNvbGxlY3Rp
b24uZ2V0KCkpKTsKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgZ3N0X2V2ZW50X25l
d190YWcobWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKGRhdGEtPnRyYWNrLmdldCgpKSkp
OworCisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNlbGYsIHBhZCwgZGF0YS0+
cGFkX3RlbXBsYXRlKTsKKworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9IQU5ETEVEOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
R1NUX1BBRF9QUk9CRV9PSzsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdE1lZGlhU3RyZWFt
U3JjU2V0dXBTcmMoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsCisgICAgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUqIHRyYWNrLCBHc3RFbGVtZW50KiBlbGVtZW50LAorICAgIEdzdFN0YXRpY1Bh
ZFRlbXBsYXRlKiBwYWRfdGVtcGxhdGUsIGdib29sZWFuIG9ic2VydmVfdHJhY2spCit7CisgICAg
YXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwg
InNyYyIpKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc2VsZiksIGVsZW1lbnQpOworCisK
KyAgICBQcm9iZURhdGEqIGRhdGEgPSBuZXcgUHJvYmVEYXRhOworICAgIGRhdGEtPnNlbGYgPSBX
RUJLSVRfTUVESUFfU1RSRUFNX1NSQyhzZWxmKTsKKyAgICBkYXRhLT5wYWRfdGVtcGxhdGUgPSBw
YWRfdGVtcGxhdGU7CisgICAgZGF0YS0+dHJhY2sgPSB0cmFjazsKKworICAgIHNlbGYtPnByb2Jl
aWQgPSBnc3RfcGFkX2FkZF9wcm9iZShwYWQuZ2V0KCksIChHc3RQYWRQcm9iZVR5cGUpR1NUX1BB
RF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCisgICAgICAgIChHc3RQYWRQcm9iZUNhbGxi
YWNrKXdlYmtpdE1lZGlhU3RyZWFtU3JjUGFkUHJvYmVDYiwgZGF0YSwKKyAgICAgICAgW10oZ3Bv
aW50ZXIgZGF0YSkgeworICAgICAgICAgICAgZGVsZXRlIChQcm9iZURhdGEqKWRhdGE7CisgICAg
ICAgIH0pOworCisgICAgaWYgKG9ic2VydmVfdHJhY2spCisgICAgICAgIHRyYWNrLT5hZGRPYnNl
cnZlcigqc2VsZi0+b2JzZXJ2ZXIuZ2V0KCkpOworCisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0
ZV93aXRoX3BhcmVudChlbGVtZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBBcHBTcmMoV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIHNlbGYsCisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrLCBHc3RFbGVtZW50
KiogZWxlbWVudCwKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkX3RlbXBsYXRlKQorewor
ICAgICplbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCBudWxscHRy
KTsKKyAgICBnX29iamVjdF9zZXQoKmVsZW1lbnQsICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIs
IEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gd2Via2l0TWVkaWFTdHJl
YW1TcmNTZXR1cFNyYyhzZWxmLCB0cmFjaywgKmVsZW1lbnQsIHBhZF90ZW1wbGF0ZSwgVFJVRSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9zdFN0cmVhbUNvbGxlY3Rp
b24oV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtUHJpdmF0ZSogc3RyZWFt
KQoreworICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKKyAgICBzZWxmLT5zdHJlYW1Db2xsZWN0
aW9uID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXcoc3RyZWFtLT5pZCgpLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogc3RyZWFtLT50cmFja3MoKSkg
eworICAgICAgICBhdXRvIGdzdHN0cmVhbSA9IHdlYmtpdE1lZGlhU3RyZWFtTmV3KHRyYWNrLmdl
dCgpKTsKKworICAgICAgICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbShzZWxmLT5z
dHJlYW1Db2xsZWN0aW9uLmdldCgpLCBnc3RzdHJlYW0pOworICAgIH0KKyAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzZWxmKTsKKworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVO
VChzZWxmKSwKKyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9uKEdTVF9P
QkpFQ1Qoc2VsZiksIHNlbGYtPnN0cmVhbUNvbGxlY3Rpb24uZ2V0KCkpKTsKK30KKworZ2Jvb2xl
YW4gd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJlYW0oV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNl
bGYsIE1lZGlhU3RyZWFtUHJpdmF0ZSogc3RyZWFtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNlbGYpLCBGQUxTRSk7CisKKyAgICBpZiAo
c2VsZi0+YXVkaW9TcmMpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNlbGYtPmF1
ZGlvU3JjLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4o
c2VsZiksIHNlbGYtPmF1ZGlvU3JjKTsKKyAgICAgICAgc2VsZi0+YXVkaW9TcmMgPSBudWxscHRy
OworICAgIH0KKworICAgIGlmIChzZWxmLT52aWRlb1NyYykgeworICAgICAgICBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUoc2VsZi0+dmlkZW9TcmMsIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgZ3N0
X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwgc2VsZi0+dmlkZW9TcmMpOworICAgICAgICBzZWxm
LT52aWRlb1NyYyA9IG51bGxwdHI7CisgICAgfQorCisgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQ
b3N0U3RyZWFtQ29sbGVjdGlvbihzZWxmLCBzdHJlYW0pOworCisgICAgc2VsZi0+c3RyZWFtID0g
c3RyZWFtOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzdHJlYW0tPnRyYWNrcygpKSB7CisgICAg
ICAgIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlv
KSB7CisgICAgICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwQXBwU3JjKHNlbGYsIHRy
YWNrLmdldCgpLCAmc2VsZi0+YXVkaW9TcmMsCisgICAgICAgICAgICAgICAgJmF1ZGlvU3JjVGVt
cGxhdGUpOworICAgICAgICB9IGVsc2UgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6VmlkZW8pIHsKKyAgICAgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3Jj
U2V0dXBBcHBTcmMoc2VsZiwgdHJhY2suZ2V0KCksICZzZWxmLT52aWRlb1NyYywKKyAgICAgICAg
ICAgICAgICAmdmlkZW9TcmNUZW1wbGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBHU1RfSU5GTygiVW5zdXBvcnRlZCB0cmFjayB0eXBlOiAlZCIsIChnaW50KSB0cmFjay0+dHlw
ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaFZpZGVv
U2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RTYW1wbGUqIGdzdHNhbXBsZSkK
K3sKKyAgICBpZiAoc2VsZi0+dmlkZW9TcmMpCisgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hfc2Ft
cGxlKEdTVF9BUFBfU1JDKHNlbGYtPnZpZGVvU3JjKSwgZ3N0c2FtcGxlKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUoV2ViS2l0TWVkaWFTdHJl
YW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogZ3N0c2FtcGxlKQoreworICAgIGlmIChzZWxmLT5hdWRp
b1NyYykKKyAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoR1NUX0FQUF9TUkMoc2VsZi0+
YXVkaW9TcmMpLCBnc3RzYW1wbGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVh
bVNyY1RyYWNrRW5kZWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsCisgICAgTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGUmIHRyYWNrKQoreworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBudWxs
cHRyOworCisgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOworICAgIGZvciAoYXV0byB0bXAgPSBH
U1RfRUxFTUVOVChzZWxmKS0+c3JjcGFkczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKKyAgICAg
ICAgR3N0UGFkKiB0bXBwYWQgPSBHU1RfUEFEKHRtcC0+ZGF0YSk7CisgICAgICAgIGNvbnN0IGdj
aGFyKiBzdHJlYW1faWQ7CisKKyAgICAgICAgR3N0RXZlbnQqIHN0cmVhbV9zdGFydCA9IGdzdF9w
YWRfZ2V0X3N0aWNreV9ldmVudCh0bXBwYWQsIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsIDApOwor
ICAgICAgICBpZiAoIXN0cmVhbV9zdGFydCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFtX3N0YXJ0LCAmc3RyZWFtX2lk
KTsKKyAgICAgICAgaWYgKFN0cmluZyhzdHJlYW1faWQpID09IHRyYWNrLmlkKCkpIHsKKyAgICAg
ICAgICAgIHBhZCA9IHRtcHBhZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworCisgICAgaWYgKCFwYWQpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8gcGFkIGZvdW5kIGZvciAlcyIsIHRyYWNrLmlk
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSB2aWRlby52aWRlb1dpZHRoIGlzIHJlc2V0IHRvIDAKKyAgICB3ZWJr
aXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKHNlbGYsIHNlbGYtPnN0cmVhbS5n
ZXQoKSk7CisgICAgYXV0byB0YWdzID0gbWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKCZ0
cmFjayk7CisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld190
YWcodGFncykpOworICAgIGdzdF9wYWRfcHVzaF9ldmVudChwYWQuZ2V0KCksIGdzdF9ldmVudF9u
ZXdfZW9zKCkpOworfQorCit9IC8vIFdlYkNvcmUKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFT
dHJlYW1Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5lYjQxMTJlNzA3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5p
ZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2Fs
aWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRl
LmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKworI2RlZmluZSBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJRFRIICJ3ZWJraXQt
bWVkaWEtc3RyZWFtLXdpZHRoIgorI2RlZmluZSBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdI
VCAid2Via2l0LW1lZGlhLXN0cmVhbS1oZWlnaHQiCisjZGVmaW5lIFdFQktJVF9NRURJQV9UUkFD
S19UQUdfS0lORCAid2Via2l0LW1lZGlhLXN0cmVhbS1raW5kIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyYyBXZWJLaXRNZWRpYVN0
cmVhbVNyYzsKKworI2RlZmluZSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhvKSAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG8pLCBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDLCBXZWJL
aXRNZWRpYVN0cmVhbVNyYykpCisjZGVmaW5lIFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKG8p
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgobyksIFdFQktJVF9UWVBFX01FRElBX1NUUkVB
TV9TUkMpKQorI2RlZmluZSBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDICh3ZWJraXRfbWVk
aWFfc3RyZWFtX3NyY19nZXRfdHlwZSgpKQorR1R5cGUgd2Via2l0X21lZGlhX3N0cmVhbV9zcmNf
Z2V0X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOworZ2Jvb2xlYW4gd2Via2l0TWVkaWFTdHJlYW1T
cmNTZXRTdHJlYW0oV2ViS2l0TWVkaWFTdHJlYW1TcmMqLCBNZWRpYVN0cmVhbVByaXZhdGUqKTsK
K30gLy8gV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMTZjYTUyNmZjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBp
Z2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3Qv
YXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJm
YWNlLmg+CisjaW5jbHVkZSA8d2VicnRjL2FwaS9wZWVyY29ubmVjdGlvbmludGVyZmFjZS5oPgor
I2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvY29tbW9uLmg+CisjaW5jbHVkZSA8d2Vi
cnRjL21lZGlhL2VuZ2luZS93ZWJydGN2aWRlb2NhcHR1cmVyLmg+CisjaW5jbHVkZSA8d2VicnRj
L21lZGlhL2VuZ2luZS93ZWJydGN2aWRlb2NhcHR1cmVyZmFjdG9yeS5oPgorI2luY2x1ZGUgPHdl
YnJ0Yy9tb2R1bGVzL3ZpZGVvX2NhcHR1cmUvdmlkZW9fY2FwdHVyZV9kZWZpbmVzLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qgc3RhdGljIGludCBkZWZhdWx0V2lkdGggPSA2NDA7
Citjb25zdCBzdGF0aWMgaW50IGRlZmF1bHRIZWlnaHQgPSA0ODA7CisKK0dTVF9ERUJVR19DQVRF
R09SWSh3ZWJraXRfdmlkZW9fY2FwdHVyZV9zb3VyY2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FU
X0RFRkFVTFQgd2Via2l0X3ZpZGVvX2NhcHR1cmVfc291cmNlX2RlYnVnCisKK3N0YXRpYyB2b2lk
IGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGRlYnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVk
RmxhZywgW10geworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfdmlkZW9f
Y2FwdHVyZV9zb3VyY2VfZGVidWcsICJ3ZWJraXR2aWRlb2NhcHR1cmVzb3VyY2UiLCAwLAorICAg
ICAgICAgICAgIldlYktpdCBWaWRlbyBDYXB0dXJlIFNvdXJjZS4iKTsKKyAgICB9KTsKK30KKwor
Y2xhc3MgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlRmFjdG9yeSBmaW5hbCA6IHB1YmxpYyBS
ZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBD
YXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGVWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVy
ZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykgZmlu
YWwKKyAgICB7CisgICAgICAgIHJldHVybiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmNy
ZWF0ZShkZXZpY2UucGVyc2lzdGVudElkKCksIGNvbnN0cmFpbnRzKTsKKyAgICB9Cit9OworCitS
ZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBsaWJXZWJSVENWaWRlb0Nh
cHR1cmVTb3VyY2VGYWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlRmFjdG9yeT4gZmFjdG9yeTsKKyAgICByZXR1cm4gZmFjdG9y
eS5nZXQoKTsKK30KKworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyogY29uc3RyYWludHMpCit7CisgICAgYXV0byBkZXZpY2UgPSBHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5nc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGRl
dmljZUlEKTsKKyAgICBpZiAoIWRldmljZSkgeworICAgICAgICBhdXRvIGVycm9yTWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZSgpOiBH
U3RyZWFtZXIgZGlkIG5vdCBmaW5kIHRoZSBkZXZpY2U6ICVzLiIsIGRldmljZUlELnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShlcnJv
ck1lc3NhZ2UpKTsKKyAgICB9CisKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgR1N0
cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKGRldmljZS52YWx1ZSgpKSk7CisKKyAgICBpZiAoY29u
c3RyYWludHMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWlu
dHMoKmNvbnN0cmFpbnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpLmZpcnN0KTsKKyAgICB9CisgICAgcmV0dXJuIENhcHR1
cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6ZmFj
dG9yeSgpCit7CisgICAgcmV0dXJuIGxpYldlYlJUQ1ZpZGVvQ2FwdHVyZVNvdXJjZUZhY3Rvcnko
KTsKK30KKworR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBnY2hhciAqc291cmNlX2ZhY3RvcnkpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGRldmlj
ZUlELCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgbmFtZSkKKyAgICAsIG1fY2Fw
dHVyZXIoc3RkOjptYWtlX3VuaXF1ZTxHU3RyZWFtZXJWaWRlb0NhcHR1cmVyPihzb3VyY2VfZmFj
dG9yeSkpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9CisKK0dTdHJlYW1l
clZpZGVvQ2FwdHVyZVNvdXJjZTo6R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKEdTdHJlYW1l
ckNhcHR1cmVEZXZpY2UgZGV2aWNlKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShkZXZpY2Uu
cGVyc2lzdGVudElkKCksIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBkZXZpY2Uu
bGFiZWwoKSkKKyAgICAsIG1fY2FwdHVyZXIoc3RkOjptYWtlX3VuaXF1ZTxHU3RyZWFtZXJWaWRl
b0NhcHR1cmVyPihkZXZpY2UpKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpOwor
fQorCitHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6On5HU3RyZWFtZXJWaWRlb0NhcHR1cmVT
b3VyY2UoKQoreworfQorCitib29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlT
aXplKGNvbnN0IEludFNpemUgJnNpemUpCit7CisgICAgbV9jYXB0dXJlci0+c2V0U2l6ZShzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUZyYW1lUmF0ZShkb3VibGUgZnJhbWVy
YXRlKQoreworICAgIG1fY2FwdHVyZXItPnNldEZyYW1lUmF0ZShmcmFtZXJhdGUpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdGFy
dFByb2R1Y2luZ0RhdGEoKQoreworICAgIG1fY2FwdHVyZXItPnNldHVwUGlwZWxpbmUoKTsKKyAg
ICBtX2NhcHR1cmVyLT5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwor
ICAgIG1fY2FwdHVyZXItPnNldEZyYW1lUmF0ZShmcmFtZVJhdGUoKSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChtX2NhcHR1cmVyLT5zaW5rKCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdT
YW1wbGVDYWxsYmFjayksIHRoaXMpOworICAgIG1fY2FwdHVyZXItPnBsYXkoKTsKK30KKworR3N0
Rmxvd1JldHVybiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6Om5ld1NhbXBsZUNhbGxiYWNr
KEdzdEVsZW1lbnQqIHNpbmssIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSogc291cmNlKQor
eworICAgIGF1dG8gZ3N0U2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBs
ZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVkaWFTYW1w
bGVHU3RyZWFtZXI6OmNyZWF0ZShXVEZNb3ZlKGdzdFNhbXBsZSksIFdlYkNvcmU6OkZsb2F0U2l6
ZSgpLCBTdHJpbmcoKSk7CisKKyAgICAvLyBGSVhNRSAtIENoZWNrIGhvdyBwcmVzZW50YXRpb25T
aXplIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaGVyZS4KKyAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqc291cmNlKSwgbWVkaWFTYW1wbGUgPSBXVEZNb3ZlKG1l
ZGlhU2FtcGxlKV0geworICAgICAgICBwcm90ZWN0ZWRUaGlzLT52aWRlb1NhbXBsZUF2YWlsYWJs
ZShtZWRpYVNhbXBsZS5nZXQoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0
YSgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY2FwdHVy
ZXItPnNpbmsoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obmV3U2FtcGxlQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBtX2NhcHR1cmVyLT5zdG9wKCk7CisKKyAgICBHU1RfSU5GTygiUmVzZXQg
aGVpZ2h0IGFuZCB3aWR0aCBhZnRlciBzdG9wcGluZyBzb3VyY2UiKTsKKyAgICBzZXRIZWlnaHQo
MCk7CisgICAgc2V0V2lkdGgoMCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29u
c3QKK3sKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMpCisgICAgICAgIHJldHVybiBtX2NhcGFiaWxp
dGllcy52YWx1ZSgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyBjYXBh
YmlsaXRpZXMoc2V0dGluZ3MoKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpKTsKKyAgICBHUmVmUHRy
PEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYobV9jYXB0dXJlci0+Y2FwcygpKTsKKyAgICBpbnQz
Ml90IG1pbldpZHRoID0gR19NQVhJTlQzMiwgbWF4V2lkdGggPSAwLCBtaW5IZWlnaHQgPSBHX01B
WElOVDMyLCBtYXhIZWlnaHQgPSAwOworICAgIGRvdWJsZSBtaW5GcmFtZXJhdGUgPSBHX01BWERP
VUJMRSwgbWF4RnJhbWVyYXRlID0gR19NSU5ET1VCTEU7CisKKyAgICBmb3IgKGd1aW50IGkgPSAw
OyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUoY2Fwcy5nZXQoKSk7IGkrKykgeworICAgICAgICBHc3RT
dHJ1Y3R1cmUqIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgaSk7CisK
KyAgICAgICAgLy8gT25seSBhY2NlcHQgcmF3IHZpZGVvIGZvciBub3cuCisgICAgICAgIGlmICgh
Z3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHIsICJ2aWRlby94LXJhdyIpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgaW50MzJfdCB0bXBNaW5XaWR0aCwgdG1wTWluSGVpZ2h0LCB0
bXBNaW5GUFNOdW1lcmF0b3IsIHRtcE1pbkZQU0Rlbm9taW5hdG9yOworICAgICAgICBpbnQzMl90
IHRtcE1heFdpZHRoLCB0bXBNYXhIZWlnaHQsIHRtcE1heEZQU051bWVyYXRvciwgdG1wTWF4RlBT
RGVub21pbmF0b3I7CisgICAgICAgIGRvdWJsZSB0bXBNaW5GcmFtZXJhdGUgPSBHX01BWERPVUJM
RSwgdG1wTWF4RnJhbWVyYXRlID0gR19NSU5ET1VCTEU7CisKKyAgICAgICAgaWYgKCFnc3Rfc3Ry
dWN0dXJlX2dldChzdHIsICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgJnRtcE1pbldpZHRo
LCAmdG1wTWF4V2lkdGgsICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsICZ0bXBNaW5IZWln
aHQsICZ0bXBNYXhIZWlnaHQsIG51bGxwdHIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydChnc3Rf
c3RydWN0dXJlX2dldChzdHIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsICZ0bXBNaW5XaWR0aCwgImhl
aWdodCIsIEdfVFlQRV9JTlQsICZ0bXBNaW5IZWlnaHQsIG51bGxwdHIpKTsKKyAgICAgICAgICAg
IHRtcE1heFdpZHRoID0gdG1wTWluV2lkdGg7CisgICAgICAgICAgICB0bXBNYXhIZWlnaHQgPSB0
bXBNaW5IZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXQo
c3RyLCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsICZ0bXBNaW5GUFNOdW1l
cmF0b3IsICZ0bXBNaW5GUFNEZW5vbWluYXRvciwgJnRtcE1heEZQU051bWVyYXRvciwgJnRtcE1h
eEZQU0Rlbm9taW5hdG9yLCBudWxscHRyKSkgeworICAgICAgICAgICAgZ3N0X3V0aWxfZnJhY3Rp
b25fdG9fZG91YmxlICh0bXBNaW5GUFNOdW1lcmF0b3IsIHRtcE1pbkZQU0Rlbm9taW5hdG9yLCAm
dG1wTWluRnJhbWVyYXRlKTsKKyAgICAgICAgICAgIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJs
ZSAodG1wTWF4RlBTTnVtZXJhdG9yLCB0bXBNYXhGUFNEZW5vbWluYXRvciwgJnRtcE1heEZyYW1l
cmF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9nZXQoc3RyLAorICAgICAg
ICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAmdG1wTWluRlBTTnVtZXJhdG9y
LCAmdG1wTWluRlBTRGVub21pbmF0b3IsIG51bGxwdHIpKSB7CisgICAgICAgICAgICB0bXBNYXhG
UFNOdW1lcmF0b3IgPSB0bXBNaW5GUFNOdW1lcmF0b3I7CisgICAgICAgICAgICB0bXBNYXhGUFNE
ZW5vbWluYXRvciA9IHRtcE1pbkZQU0Rlbm9taW5hdG9yOworICAgICAgICAgICAgZ3N0X3V0aWxf
ZnJhY3Rpb25fdG9fZG91YmxlICh0bXBNaW5GUFNOdW1lcmF0b3IsIHRtcE1pbkZQU0Rlbm9taW5h
dG9yLCAmdG1wTWluRnJhbWVyYXRlKTsKKyAgICAgICAgICAgIGdzdF91dGlsX2ZyYWN0aW9uX3Rv
X2RvdWJsZSAodG1wTWF4RlBTTnVtZXJhdG9yLCB0bXBNYXhGUFNEZW5vbWluYXRvciwgJnRtcE1h
eEZyYW1lcmF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBHVmFsdWUq
IGZyYW1lUmF0ZXMoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoc3RyLCAiZnJhbWVyYXRlIikpOwor
ICAgICAgICAgICAgdG1wTWluRnJhbWVyYXRlID0gR19NQVhET1VCTEU7CisgICAgICAgICAgICB0
bXBNYXhGcmFtZXJhdGUgPSAwLjA7CisKKyAgICAgICAgICAgIGd1aW50IGZyYW1lUmF0ZXNMZW5n
dGggPSBzdGF0aWNfY2FzdDxndWludD4oZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUoZnJhbWVSYXRl
cykpIC0gMTsKKworICAgICAgICAgICAgZm9yIChndWludCBpID0gMDsgaSA8IGZyYW1lUmF0ZXNM
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGRvdWJsZSB0bXBGcmFtZVJhdGU7CisgICAg
ICAgICAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWwgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUo
ZnJhbWVSYXRlcywgaSk7CisKKyAgICAgICAgICAgICAgICBnX2Fzc2VydChHX1ZBTFVFX1RZUEUo
dmFsKSA9PSBHU1RfVFlQRV9GUkFDVElPTik7CisgICAgICAgICAgICAgICAgZ3N0X3V0aWxfZnJh
Y3Rpb25fdG9fZG91YmxlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcih2YWwpLAor
ICAgICAgICAgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yKHZh
bCksICZ0bXBGcmFtZVJhdGUpOworCisgICAgICAgICAgICAgICAgdG1wTWluRnJhbWVyYXRlID0g
c3RkOjptaW4odG1wTWluRnJhbWVyYXRlLCB0bXBGcmFtZVJhdGUpOworICAgICAgICAgICAgICAg
IHRtcE1heEZyYW1lcmF0ZSA9IHN0ZDo6bWF4KHRtcE1heEZyYW1lcmF0ZSwgdG1wRnJhbWVSYXRl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAg
ICAgICAgbWluV2lkdGggPSBzdGQ6Om1pbih0bXBNaW5XaWR0aCwgbWluV2lkdGgpOworICAgICAg
ICAgICAgICAgIG1pbkhlaWdodCA9IHN0ZDo6bWluKHRtcE1pbkhlaWdodCwgbWluSGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICBtaW5GcmFtZXJhdGUgPSBzdGQ6Om1pbih0bXBNaW5GcmFtZXJhdGUs
IG1pbkZyYW1lcmF0ZSk7CisKKyAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IHN0ZDo6bWF4KHRt
cE1heFdpZHRoLCBtYXhXaWR0aCk7CisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gc3RkOjpt
YXgodG1wTWF4SGVpZ2h0LCBtYXhIZWlnaHQpOworICAgICAgICAgICAgICAgIG1heEZyYW1lcmF0
ZSA9IHN0ZDo6bWF4KHRtcE1heEZyYW1lcmF0ZSwgbWF4RnJhbWVyYXRlKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWluV2lkdGggPSB0bXBNaW5XaWR0aDsKKyAgICAg
ICAgICAgICAgICBtaW5IZWlnaHQgPSB0bXBNaW5IZWlnaHQ7CisgICAgICAgICAgICAgICAgbWlu
RnJhbWVyYXRlID0gdG1wTWluRnJhbWVyYXRlOworCisgICAgICAgICAgICAgICAgbWF4V2lkdGgg
PSB0bXBNYXhXaWR0aDsKKyAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSB0bXBNYXhIZWlnaHQ7
CisgICAgICAgICAgICAgICAgbWF4RnJhbWVyYXRlID0gdG1wTWF4RnJhbWVyYXRlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2FwYWJpbGl0aWVzLnNldERldmljZUlkKGlk
KCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5n
ZShtaW5XaWR0aCwgbWF4V2lkdGgpKTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLnNldEhlaWdodChD
YXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pbkhlaWdodCwgbWF4SGVpZ2h0KSk7CisgICAgICAgIGNh
cGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZShtaW5GcmFtZXJh
dGUsIG1heEZyYW1lcmF0ZSkpOworICAgICAgICBtX2NhcGFiaWxpdGllcyA9IFdURk1vdmUoY2Fw
YWJpbGl0aWVzKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXMudmFsdWUoKTsK
K30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVTb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY3VycmVudFNldHRp
bmdzKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBzZXR0aW5nczsKKyAg
ICAgICAgc2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7CisKKyAgICAgICAgUmVhbHRpbWVNZWRp
YVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBvcnRlZENvbnN0cmFpbnRzOworICAgICAg
ICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOworICAgICAg
ICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZhY2luZ01vZGUodHJ1ZSk7CisgICAg
ICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7CisgICAgICAg
IHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOworICAgICAgICBz
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVjdFJhdGlvKHRydWUpOworICAgICAg
ICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZyYW1lUmF0ZSh0cnVlKTsKKyAgICAg
ICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVkQ29uc3RyYWludHMp
OworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7CisgICAg
fQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFdpZHRoKHNpemUoKS53aWR0aCgpKTsKKyAg
ICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSk7CisgICAgbV9j
dXJyZW50U2V0dGluZ3MtPnNldEZyYW1lUmF0ZShmcmFtZVJhdGUoKSk7CisgICAgbV9jdXJyZW50
U2V0dGluZ3MtPnNldEFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKCkpOworICAgIG1fY3VycmVudFNl
dHRpbmdzLT5zZXRGYWNpbmdNb2RlKGZhY2luZ01vZGUoKSk7CisgICAgcmV0dXJuIG1fY3VycmVu
dFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM3OWJhN2UwZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8
dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFs
ZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UgOiBwdWJs
aWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIENhcHR1cmVTb3Vy
Y2VPckVycm9yIGNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0
cmFpbnRzKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpZGVvQ2FwdHVyZUZhY3Rvcnkm
IGZhY3RvcnkoKTsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMm
IGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBHc3RFbGVtZW50
KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fY2FwdHVyZXItPnBpcGVsaW5lKCk7IH0KKyAgICBHU3Ry
ZWFtZXJDYXB0dXJlciogY2FwdHVyZXIoKSB7IHJldHVybiBtX2NhcHR1cmVyLmdldCgpOyB9CisK
KworcHJvdGVjdGVkOgorICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJp
bmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IGdjaGFyICogc291cmNlX2Zh
Y3RvcnkpOworICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShHU3RyZWFtZXJDYXB0dXJl
RGV2aWNlKTsKKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoKTsKKyAg
ICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcFByb2R1
Y2luZ0RhdGEoKSBvdmVycmlkZTsKKworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBtdXRhYmxlIHN0
ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5n
czsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFj
ayhHc3RFbGVtZW50KiwgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKik7CisKKyAgICBib29s
IGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29s
IGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7CisgICAgYm9vbCBhcHBseUZyYW1lUmF0
ZShkb3VibGUpIGZpbmFsOworICAgIGJvb2wgYXBwbHlBc3BlY3RSYXRpbyhkb3VibGUpIGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVyPiBtX2NhcHR1cmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODhiNjA1MDIxNmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1
bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcu
IENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2lu
Y2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0
YXBwc2luay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZXI6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZpY2Up
CisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdf
ZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKSkKK3sKK30KKworR1N0cmVhbWVyVmlkZW9DYXB0
dXJlcjo6R1N0cmVhbWVyVmlkZW9DYXB0dXJlcihjb25zdCBjaGFyKiBzb3VyY2VGYWN0b3J5KQor
ICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoc291cmNlRmFjdG9yeSwgYWRvcHRHUmVmKGdzdF9jYXBz
X25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtcmF3IikpKQoreworfQorCitHc3RFbGVtZW50KiBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIoKQoreworICAgIGF1dG8gY29u
dmVydGVyID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCJ2aWRlb3NjYWxlICEgdmlk
ZW9jb252ZXJ0ICEgdmlkZW9yYXRlIiwgVFJVRSwgbnVsbHB0cik7CisKKyAgICBBU1NFUlQoY29u
dmVydGVyKTsKKworICAgIHJldHVybiBjb252ZXJ0ZXI7Cit9CisKK0dzdFZpZGVvSW5mbyBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVyOjpnZXRCZXN0Rm9ybWF0KCkKK3sKKyAgICBHUmVmUHRyPEdzdENh
cHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZml4YXRlKGdzdF9kZXZpY2VfZ2V0X2NhcHMo
bV9kZXZpY2UuZ2V0KCkpKSk7CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisgICAgZ3N0X3ZpZGVv
X2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzLmdldCgpKTsKKworICAgIHJldHVybiBpbmZvOwor
fQorCitib29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OnNldFNpemUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQoreworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkobV9jYXBzLmdldCgp
KSk7CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NhcHMuZ2V0KCksICJ3aWR0aCIsIEdfVFlQ
RV9JTlQsIHdpZHRoLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVpZ2h0LCBudWxscHRyKTsKKwor
ICAgIGlmICghbV9jYXBzZmlsdGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnX29i
amVjdF9zZXQobV9jYXBzZmlsdGVyLmdldCgpLCAiY2FwcyIsIG1fY2Fwcy5nZXQoKSwgbnVsbHB0
cik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVy
OjpzZXRGcmFtZVJhdGUoZG91YmxlIGZyYW1lUmF0ZSkKK3sKKyAgICBpbnQgbnVtZXJhdG9yLCBk
ZW5vbWluYXRvcjsKKworICAgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbihmcmFtZVJhdGUs
ICZudW1lcmF0b3IsICZkZW5vbWluYXRvcik7CisKKyAgICBpZiAobnVtZXJhdG9yIDwgLUdfTUFY
SU5UKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRnJhbWVy
YXRlICVmIG5vdCBhbGxvd2VkIiwgZnJhbWVSYXRlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmICghbnVtZXJhdG9yKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiRG8gbm90IGZvcmNlIHZhcmlhYmxlIGZyYW1lcmF0ZSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9j
YXBzX2NvcHkobV9jYXBzLmdldCgpKSk7CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NhcHMu
Z2V0KCksICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgbnVtZXJhdG9yLCBkZW5vbWlu
YXRvciwgbnVsbHB0cik7CisKKyAgICBpZiAoIW1fY2Fwc2ZpbHRlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc2ZpbHRlci5nZXQoKSwgImNhcHMiLCBt
X2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShM
SUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZp
ZGVvQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTdi
MGI0Njg2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
IEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhv
cjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFN
RVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlci5oIgorCisjaW5jbHVkZSA8Z3N0L3Zp
ZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlciA6IHB1YmxpYyBHU3RyZWFtZXJDYXB0dXJlciB7CitwdWJsaWM6CisgICAgR1N0
cmVhbWVyVmlkZW9DYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAgICBHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJjZV9mYWN0b3J5KTsKKworICAgIEdzdEVs
ZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpIGZpbmFsOworICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBm
aW5hbCB7IHJldHVybiAiVmlkZW8iOyB9CisKKyAgICBib29sIHNldFNpemUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KTsKKyAgICBib29sIHNldEZyYW1lUmF0ZShkb3VibGUpOworICAgIEdzdFZpZGVv
SW5mbyBnZXRCZXN0Rm9ybWF0KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0
dXJlU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTk1
ZjA1NzIwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAg
LTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNv
bT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VC
UlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIk1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIk1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBlZE1vY2tSZWFsdGltZUF1ZGlvU291cmNl
IDogcHVibGljIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlIHsKK3B1YmxpYzoKKyAgICBXcmFwcGVk
TW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgICAgICA6IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlKGRldmljZUlELCBu
YW1lKQorICAgIHsKKyAgICB9Cit9OworCitDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRp
bWVBdWRpb1NvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsCisgICAgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAg
ICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZShkZXZpY2VJRCwgbmFtZSkpOworCisgICAgaWYgKGNvbnN0cmFpbnRzICYmIHNvdXJjZS0+
YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gTW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiBj
b25zdHJhaW50cykKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoY29u
c3RyYWludHMpOworICAgIHJldHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmFwcGx5
Q29uc3RyYWludHMoY29uc3RyYWludHMpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29u
c3RyYWludHMsIFN1Y2Nlc3NIYW5kbGVyJiYgc3VjY2Vzc0hhbmRsZXIsIEZhaWx1cmVIYW5kbGVy
JiYgZmFpbHVyZUhhbmRsZXIpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5hcHBseUNvbnN0cmFp
bnRzKGNvbnN0cmFpbnRzLCBXVEZNb3ZlKHN1Y2Nlc3NIYW5kbGVyKSwgV1RGTW92ZShmYWlsdXJl
SGFuZGxlcikpOworfQorCitNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpNb2NrR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0
cmluZyYgbmFtZSkKKyAgICA6IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwg
bmFtZSkKKyAgICAsIG1fd3JhcHBlZFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPFdyYXBwZWRNb2Nr
UmVhbHRpbWVBdWRpb1NvdXJjZT4oZGV2aWNlSUQsIG5hbWUpKQoreworICAgIG1fd3JhcHBlZFNv
dXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworfQorCitNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlOjp+TW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSgpCit7CisgICAgbV93cmFw
cGVkU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIG1fd3JhcHBl
ZFNvdXJjZS0+c3RvcCgpOworCisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpzdG9w
UHJvZHVjaW5nRGF0YSgpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICBtX3dyYXBwZWRTb3VyY2UtPnN0YXJ0KCk7
Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgTW9ja0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3dyYXBw
ZWRTb3VyY2UtPnNldHRpbmdzKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygp
IGNvbnN0Cit7CisgICAgbV9jYXBhYmlsaXRpZXMgPSBtX3dyYXBwZWRTb3VyY2UtPmNhcGFiaWxp
dGllcygpOworICAgIG1fY3VycmVudFNldHRpbmdzID0gbV93cmFwcGVkU291cmNlLT5zZXR0aW5n
cygpOworICAgIHJldHVybiBtX3dyYXBwZWRTb3VyY2UtPmNhcGFiaWxpdGllcygpOworfQorCit2
b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVGYWlsZWQoKQorewor
ICAgIHN0b3AoKTsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpjYXB0dXJlRmFpbGVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmMxMWYxNzliOTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJl
YW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQg
U2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENh
c3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJH
U3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlIGZpbmFsIDogcHVibGljIEdTdHJl
YW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6T2JzZXJ2ZXIgewor
cHVibGljOgorICAgIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB+TW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZSgpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4gYXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRpYUNvbnN0cmFpbnRzJik7CisgICAgdm9p
ZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmLCBTdWNjZXNzSGFuZGxl
ciYmLCBGYWlsdXJlSGFuZGxlciYmKSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0b3BQ
cm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5h
bDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29u
c3QgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2Fw
YWJpbGl0aWVzKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gbV93cmFwcGVkU291cmNlOwor
CisgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpIG92ZXJyaWRlIHsg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJl
YW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkZmFiZWRkNDZmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC0wLDAgKzEsMTQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRo
b3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFs
ZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVB
TUVSKQorI2luY2x1ZGUgIk1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworI2lu
Y2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBlZE1vY2tSZWFsdGltZVZpZGVvU291cmNlIDogcHVi
bGljIE1vY2tSZWFsdGltZVZpZGVvU291cmNlIHsKK3B1YmxpYzoKKyAgICBXcmFwcGVkTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBu
YW1lKQorICAgICAgICA6IE1vY2tSZWFsdGltZVZpZGVvU291cmNlKGRldmljZUlELCBuYW1lKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZVNhbXBsZUJ1ZmZlcigpCisgICAgeworICAg
ICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWluYXRvcjsKKyAgICAgICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCk7CisKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJh
Y3Rpb24oZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7CisgICAg
ICAgIGF1dG8gZGF0YSA9IGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCk7CisgICAgICAgIGF1dG8g
c2l6ZSA9IGRhdGEuc2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlX3NpemUgPSBpbWFnZUJ1ZmZl
ci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8gZ3N0c2FtcGxlID0gZ3N0X3NhbXBsZV9u
ZXcoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChzdGF0aWNfY2FzdDxndWludDgqPihkYXRhLnJlbGVh
c2VCdWZmZXIoKS5nZXQoKSksIHNpemUpLAorICAgICAgICAgICAgYWRvcHRHUmVmKGdzdF9jYXBz
X25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKKyAgICAgICAgICAgICAgICAiZm9ybWF0IiwgR19U
WVBFX1NUUklORywgIkJHUkEiLAorICAgICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQs
IGltYWdlX3NpemUud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lO
VCwgaW1hZ2Vfc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NU
X1RZUEVfRlJBQ1RJT04sIGZwc051bWVyYXRvciwgZnBzRGVub21pbmF0b3IsCisgICAgICAgICAg
ICAgICAgbnVsbHB0cikpLmdldCgpLAorICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0cik7CisK
KyAgICAgICAgYXV0byBzYW1wbGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlKFdURk1v
dmUoZ3N0c2FtcGxlKSwKKyAgICAgICAgICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSgpLCBTdHJpbmco
KSk7CisgICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKHNhbXBsZSk7CisgICAgfQorfTsKKwor
Q2FwdHVyZVNvdXJjZU9yRXJyb3IgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZShjb25z
dCBTdHJpbmcmIGRldmljZUlELAorICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgTWVkaWFD
b25zdHJhaW50cyogY29uc3RyYWludHMpCit7CisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigq
bmV3IE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoZGV2aWNlSUQsIG5hbWUpKTsKKwor
ICAgIGlmIChjb25zdHJhaW50cyAmJiBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFp
bnRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JF
cnJvcihXVEZNb3ZlKHNvdXJjZSkpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICBtX3dyYXBwZWRTb3VyY2UtPnN0
YXJ0KCk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6c3RvcFBy
b2R1Y2luZ0RhdGEoKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+c3RvcCgpOworCisgICAgR1N0
cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpOworfQorCit2b2lk
IE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1l
ZGlhU2FtcGxlJiBzYW1wbGUpCit7CisgICAgYXV0byBzcmMgPSBjYXB0dXJlcigpLT5zb3VyY2Uo
KTsKKworICAgIGlmIChzcmMpIHsKKyAgICAgICAgYXV0byBnc3RzYW1wbGUgPSBzdGF0aWNfY2Fz
dDxNZWRpYVNhbXBsZUdTdHJlYW1lcio+KCZzYW1wbGUpLT5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBs
ZS5nc3RTYW1wbGU7CisgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKEdTVF9BUFBfU1JD
KHNyYyksIGdzdHNhbXBsZSk7CisgICAgfQorfQorCitNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlOjpNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2
aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNv
dXJjZShkZXZpY2VJRCwgbmFtZSwgImFwcHNyYyIpCisgICAgLCBtX3dyYXBwZWRTb3VyY2Uoc3Rk
OjptYWtlX3VuaXF1ZTxXcmFwcGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U+KGRldmljZUlELCBu
YW1lKSkKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKK30KKwor
TW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6fk1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2UoKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMp
OworfQorCitzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IE1vY2tHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFDb25z
dHJhaW50cyYgY29uc3RyYWludHMpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5hcHBseUNvbnN0
cmFpbnRzKGNvbnN0cmFpbnRzKTsKKyAgICByZXR1cm4gR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKK30KKwordm9pZCBNb2NrR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3Ry
YWludHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxlciYmIHN1Y2Nlc3NIYW5kbGVyLCBGYWls
dXJlSGFuZGxlciYmIGZhaWx1cmVIYW5kbGVyKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+YXBw
bHlDb25zdHJhaW50cyhjb25zdHJhaW50cywgV1RGTW92ZShzdWNjZXNzSGFuZGxlciksIFdURk1v
dmUoZmFpbHVyZUhhbmRsZXIpKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzJiBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd3JhcHBlZFNvdXJjZS0+c2V0dGluZ3MoKTsKK30KKworY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNv
dXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBtX2NhcGFiaWxpdGllcyA9IG1fd3Jh
cHBlZFNvdXJjZS0+Y2FwYWJpbGl0aWVzKCk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBtX3dy
YXBwZWRTb3VyY2UtPnNldHRpbmdzKCk7CisgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnZhbHVl
KCk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZUZh
aWxlZCgpCit7CisgICAgc3RvcCgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6Y2FwdHVy
ZUZhaWxlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01v
Y2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRjODAyNzY4ZDdmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaApAQCAtMCwwICsxLDU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRo
b3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFs
ZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisK
KyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJNb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdy
YXBwZWRNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTsKKy8vIFdlIGFyZSBzdWJjbGFzc2luZyBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UgYW5kIG5vdCBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZQor
Ly8gYmVjYXVzZSB0aGUgTWVkaWFQbGF5ZXIgZXhwZWN0cyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVT
b3VyY2UgdG8gYmUgYWJsZSB0byBwcm9wZXJseQorLy8gYnVpbGQgdGhlIEdTdHJlYW1lciBwaXBl
bGluZS4gU3RpbGwgd2UgbWFrZSBpdCBzbyB0aGF0IGl0IGJlaGF2ZXMgYXMgY2xvc2VseSBhcyBw
b3NzaWJsZQorLy8gdG8gdGhlIE1vY2tSZWFsdGltZU1lZGlhU291cmNlIGNsYXNzIGJ5IHdyYXBw
aW5nIG91ciBvd24gc3ViY2xhc3Mgb2YgaXQuCitjbGFzcyBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSwgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIE1vY2tHU3RyZWFtZXJW
aWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKKyAgICB+TW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSgpOworICAgIHN0ZDo6
b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gYXBwbHlDb25zdHJhaW50cyhjb25z
dCBNZWRpYUNvbnN0cmFpbnRzJik7CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1l
ZGlhQ29uc3RyYWludHMmLCBTdWNjZXNzSGFuZGxlciYmLCBGYWlsdXJlSGFuZGxlciYmKSBmaW5h
bDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAg
dm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IG1fd3JhcHBlZFNvdXJjZTsKKyAgICBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgdmlkZW9TYW1w
bGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJS
VEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJU
Qy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmJkY2UxZDZlNjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJMaWJXZWJSVEMuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1
bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3Ry
byA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlckxpYldlYlJUQy5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjphdWRpb0NhcHR1cmVTb3VyY2VGYWN0
b3J5KCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6
c2luZ2xldG9uKCkuYXVkaW9GYWN0b3J5KCk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJMaWJXZWJSVEMmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OnNpbmdsZXRv
bigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQz4gY2VudGVyOworICAgIHJl
dHVybiBjZW50ZXI7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXImIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6c2luZ2xldG9uKCk7Cit9CisKK1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJS
VEMoKQorICAgIDogbV9saWJXZWJSVENQcm92aWRlcihMaWJXZWJSVENQcm92aWRlcjo6Y3JlYXRl
KCkpCit7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6On5SZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDKCkKK3sKK30KKworUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJU
Qzo6YXVkaW9GYWN0b3J5KCkKK3sKKyAgICBpZiAobV9hdWRpb0ZhY3RvcnlPdmVycmlkZSkKKyAg
ICAgICAgcmV0dXJuICptX2F1ZGlvRmFjdG9yeU92ZXJyaWRlOworCisgICAgcmV0dXJuIEdTdHJl
YW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpOworfQorCitSZWFsdGltZU1lZGlhU291
cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2Vi
UlRDOjp2aWRlb0ZhY3RvcnkoKQoreworICAgIHJldHVybiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVT
b3VyY2U6OmZhY3RvcnkoKTsKK30KKworQ2FwdHVyZURldmljZU1hbmFnZXImIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OmF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIoKQorewor
ICAgIHJldHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24o
KTsKK30KKworQ2FwdHVyZURldmljZU1hbmFnZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJM
aWJXZWJSVEM6OnZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXIoKQoreworICAgIHJldHVybiBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKK30KKworQ2FwdHVy
ZURldmljZU1hbmFnZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OmRpc3Bs
YXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lckRpc3BsYXlD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJM
aWJXZWJSVEMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTIxMjg0
ZTE3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oCkBAIC0w
LDAgKzEsNjggQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+
CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisKKyNp
bmNsdWRlICJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ1Byb3Zp
ZGVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKKworI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvcGVlcmNvbm5l
Y3Rpb25pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyYgc2luZ2xldG9uKCk7CisKKyAgICB3ZWJydGM6
OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZSogZmFjdG9yeSgpIHsgcmV0dXJuIG1fbGli
V2ViUlRDUHJvdmlkZXItPmZhY3RvcnkoKTsgfQorCisgICAgc3RhdGljIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIHZpZGVvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKTsK
KyAgICBzdGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgYXVk
aW9DYXB0dXJlU291cmNlRmFjdG9yeSgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBO
ZXZlckRlc3Ryb3llZDxSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDPjsKKyAgICBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDKCk7CisgICAgflJlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXJMaWJXZWJSVEMoKTsKKworICAgIHZvaWQgc2V0QXVkaW9GYWN0b3J5KFJlYWx0
aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkpIGZpbmFsIHsgbV9h
dWRpb0ZhY3RvcnlPdmVycmlkZSA9ICZmYWN0b3J5OyB9CisgICAgdm9pZCB1bnNldEF1ZGlvRmFj
dG9yeShSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JikgZmluYWwgeyBt
X2F1ZGlvRmFjdG9yeU92ZXJyaWRlID0gbnVsbHB0cjsgfQorCisgICAgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgYXVkaW9GYWN0b3J5KCkgZmluYWw7CisgICAgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgdmlkZW9GYWN0b3J5KCkgZmlu
YWw7CisKKyAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgYXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdl
cigpIGZpbmFsOworICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyJiB2aWRlb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyKCkgZmluYWw7CisgICAgQ2FwdHVyZURldmljZU1hbmFnZXImIGRpc3BsYXlDYXB0dXJl
RGV2aWNlTWFuYWdlcigpIGZpbmFsOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9D
YXB0dXJlRmFjdG9yeSogbV9hdWRpb0ZhY3RvcnlPdmVycmlkZSB7IG51bGxwdHIgfTsKKyAgICBV
bmlxdWVSZWY8TGliV2ViUlRDUHJvdmlkZXI+IG1fbGliV2ViUlRDUHJvdmlkZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoTElCV0VCUlRDKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwCmluZGV4IGM1MGFiY2I3YTMyLi45YzYw
MjRlNTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAg
IH0KIH07CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQorI2lmICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpICYmICEoVVNFKEdTVFJFQU1FUikgJiYgVVNFKExJ
QldFQlJUQykpCiBDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZTo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
TWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7CiAgICAgYXV0byBzb3VyY2UgPSBhZG9w
dFJlZigqbmV3IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlKGRldmljZUlELCBuYW1lKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwCmluZGV4IDllODYwZDZjZjVhLi5lZGVkYTgzYTBlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAKQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotI2lmICFQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JN
KElPUykgJiYgIShVU0UoR1NUUkVBTUVSKSAmJiBVU0UoTElCV0VCUlRDKSkKIENhcHR1cmVTb3Vy
Y2VPckVycm9yIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBk
ZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25z
dHJhaW50cykKIHsKICAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UoZGV2aWNlSUQsIG5hbWUpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxNGVjMzU0ZTg1MC4uMGVjODE2NzIwZGQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAxOC0wNS0xOCAgVGhpYmF1bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dUS11bV1BFXSBTdGFydCBpbXBsZW1lbnRpbmcgTWVkaWFTdHJlYW0gQVBJ
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3ODcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogQXBwbHkgc3BlY2lhbCBmb3JtYXR0aW5nIHJ1
bGVzIGZvciBuZXcgR09iamVjdCBzdWJjbGFzc2VzLgorICAgICAgICAqIGdzdHJlYW1lci9qaGJ1
aWxkLm1vZHVsZXM6IEFkZGVkIGEgcGF0Y2ggZm9yIHRoZSBnc3QtcGx1Z2lucy1iYXNlLgorICAg
ICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhc2UtMDAwMS1wYXJzZWJpbi1Q
b3N0LVNUUkVBTV9DT0xMRUNUSU9OLW9uLUVWRU5UX1NUUkVBTV9DT0xMLnBhdGNoOgorICAgICAg
ICBBZGRlZCB0aGlzIGZpeCB0byBnc3QtcGx1Z2luZ3MtYmFzZSB0byBmaXggdGhlIGRlY29kZWJp
bjMuIE1lcmdlZCBhcyA4OWQwZTljYzkyYTg2YWEwMjI3ZWU4NzQwNjczN2I2ZDMxNjcwYWVhCisK
IDIwMTgtMDUtMzEgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IGV4cG9ydC13M2MtdGVzdC1jaGFuZ2VzIHNob3VsZCB1c2UgdGhlIG5ldyBsb2NhdGlvbiAmIG5h
bWUgb2YgdGhlIFdQVCByZXBvCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkK
aW5kZXggMzMzZGNlMjY1NjcuLmE1OTA4ZTYwMTZhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5CkBAIC0yMDcsNiArMjA3LDggQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVS
ID0gWwogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScs
ICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCcpLAogICAg
ICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGlj
cycsICdnc3RyZWFtZXInLCAnV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCcpLAogICAgICAg
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdhdWRpbycsICdn
c3RyZWFtZXInLCAnV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwJyksCisgICAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFt
JywgJ2dzdHJlYW1lcicsICdHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oJyksCisgICAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFt
JywgJ2dzdHJlYW1lcicsICdHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAnKSwKICAgICAg
IG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbmV0d29yaycs
ICdzb3VwJywgJ1Byb3h5UmVzb2x2ZXJTb3VwLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICduZXR3b3JrJywgJ3NvdXAnLCAnUHJveHlS
ZXNvbHZlclNvdXAuaCcpXSwKICAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nIiwKZGlmZiAtLWdp
dCBhL1Rvb2xzL2dzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9nc3RyZWFtZXIvamhi
dWlsZC5tb2R1bGVzCmluZGV4IDVhZWI3NTZlYzBhLi5jOTBhMGNiNDY4YyAxMDA2NDQKLS0tIGEv
VG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9nc3RyZWFtZXIvamhi
dWlsZC5tb2R1bGVzCkBAIC01Nyw3ICs1Nyw5IEBACiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAg
IDxkZXAgcGFja2FnZT0iZ3N0cmVhbWVyIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgPGJy
YW5jaCBoYXNoPSJzaGE6MTAyNmM3YzMwODJkODI1ZDliNWQwMzRjMWE2ZGQ4YTRlYmFiNjBlYjM3
MzhiMGEwYWZkZTRhZDJkYzBiMGRiNSIgbW9kdWxlPSJnc3QtcGx1Z2lucy1iYXNlL2dzdC1wbHVn
aW5zLWJhc2UtJHt2ZXJzaW9ufS50YXIueHoiIHJlcG89ImdzdHJlYW1lciIgdmVyc2lvbj0iMS4x
NC4xIiAvPgorICAgIDxicmFuY2ggaGFzaD0ic2hhOjEwMjZjN2MzMDgyZDgyNWQ5YjVkMDM0YzFh
NmRkOGE0ZWJhYjYwZWIzNzM4YjBhMGFmZGU0YWQyZGMwYjBkYjUiIG1vZHVsZT0iZ3N0LXBsdWdp
bnMtYmFzZS9nc3QtcGx1Z2lucy1iYXNlLSR7dmVyc2lvbn0udGFyLnh6IiByZXBvPSJnc3RyZWFt
ZXIiIHZlcnNpb249IjEuMTQuMSIgPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJh
c2UtMDAwMS1wYXJzZWJpbi1Qb3N0LVNUUkVBTV9DT0xMRUNUSU9OLW9uLUVWRU5UX1NUUkVBTV9D
T0xMLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCBhcyA4OWQwZTljYzkyYTg2YWEwMjI3
ZWU4NzQwNjczN2I2ZDMxNjcwYWVhIC0tPgorICAgIDwvYnJhbmNoPgogICA8L2F1dG90b29scz4K
IAogICA8YXV0b3Rvb2xzIGlkPSJnc3QtcGx1Z2lucy1nb29kIiBhdXRvZ2VuLXNoPSJjb25maWd1
cmUiIGF1dG9nZW5hcmdzPSItLWRpc2FibGUtZXhhbXBsZXMgLS1kaXNhYmxlLWd0ay1kb2MgLS1k
aXNhYmxlLWludHJvc3BlY3Rpb24iPgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNo
ZXMvZ3N0LXBsdWdpbnMtYmFzZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04t
b24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3Qt
cGx1Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1fQ09MTEVDVElPTi1vbi1FVkVO
VF9TVFJFQU1fQ09MTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNjgwYmMyZGI0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hl
cy9nc3QtcGx1Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1fQ09MTEVDVElPTi1v
bi1FVkVOVF9TVFJFQU1fQ09MTC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDg5ZDBlOWNj
OTJhODZhYTAyMjdlZTg3NDA2NzM3YjZkMzE2NzBhZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx
CitGcm9tOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorRGF0ZTogV2Vk
LCAxOCBBcHIgMjAxOCAxNjowNjowNyAtMDMwMAorU3ViamVjdDogW1BBVENIXSBwYXJzZWJpbjog
UG9zdCBTVFJFQU1fQ09MTEVDVElPTiBvbiBFVkVOVF9TVFJFQU1fQ09MTEVDVElPTgorCitPdGhl
cndpc2UgZGVjb2RlYmluIHdvbid0IGdldCBub3RpZmllZCBhYm91dCBTVFJFQU1fQ09MTEVDVElP
TiBjb21taW5nCitmcm9tIHRoZSBzb3VyY2VzIGFuZCB0aHVzIHdpbGwgbmV2ZXIgZ2V0IGluZm9y
bW9yZWQgYWJvdXQgaXQuIFdpdGhvdXQKK2JlaW5nIGluZm9ybWVkIGFib3V0IHRoZSBzdHJlYW0g
Y29sbGVjdGlvbiBkZWNvZGViaW4gd29uJ3QgYmUgYWJsZSB0bworc2VsZWN0IGFueSBzdHJlYW1z
LiBJdCBlbmRzIHVwIG5vdCBjcmVhdGluZyBhbnkgb3V0cHV0IGZvciB0aGUgc3RyZWFtcworZGVm
aW5lZCBmcm9tIG91dHNpZGUgcGFyc2VyYmluLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzk1MzY0CistLS0KKyBnc3QvcGxheWJhY2svZ3N0cGFyc2ViaW4u
YyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0
IGEvZ3N0L3BsYXliYWNrL2dzdHBhcnNlYmluLmMgYi9nc3QvcGxheWJhY2svZ3N0cGFyc2ViaW4u
YworaW5kZXggNGM1YmZjMTlkLi5mOTY2MmViNDkgMTAwNjQ0CistLS0gYS9nc3QvcGxheWJhY2sv
Z3N0cGFyc2ViaW4uYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHBhcnNlYmluLmMKK0BAIC00MDQ2
LDYgKzQwNDYsOSBAQCBnc3RfcGFyc2VfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdFBhZFBy
b2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKKyAgICAgICBHc3RTdHJlYW1Db2xs
ZWN0aW9uICpjb2xsZWN0aW9uID0gTlVMTDsKKyAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFt
X2NvbGxlY3Rpb24gKGV2ZW50LCAmY29sbGVjdGlvbik7CisgICAgICAgZ3N0X3BhcnNlX3BhZF91
cGRhdGVfc3RyZWFtX2NvbGxlY3Rpb24gKHBhcnNlcGFkLCBjb2xsZWN0aW9uKTsKKysgICAgICBn
c3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChwYXJzZXBhZC0+cGFyc2ViaW4p
LAorKyAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24gKEdTVF9PQkpF
Q1QgKHBhcnNlcGFkLT5wYXJzZWJpbiksCisrICAgICAgICAgICAgICBjb2xsZWN0aW9uKSk7Cisg
ICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOnsKKy0tIAorMi4x
Ny4wCisKLS0gCjIuMTcuMQ==
</data>
<flag name="review"
          id="360238"
          type_id="1"
          status="-"
          setter="pnormand"
    />
    <flag name="commit-queue"
          id="360239"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342160</attachid>
            <date>2018-06-07 07:47:43 -0700</date>
            <delta_ts>2018-06-07 08:17:18 -0700</delta_ts>
            <desc>Addressed comments.</desc>
            <filename>GTKWPE-Implement-MediaStream-API.patch</filename>
            <type>text/plain</type>
            <size>150257</size>
            <attacher name="Thibault Saunier">tsaunier</attacher>
            
              <data encoding="base64">RnJvbSBhNzUzMjZmMWZmZDhlZWFkN2QzYzZkZjIyN2E3YTc3NmY3MjAwMjRiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQWxlamFuZHJvIEcuIENhc3RybyIgPGFsZXhAaWdhbGlhLmNv
bT4KRGF0ZTogVGh1LCAyNCBNYXkgMjAxOCAxMjo1NTowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
eHNlcnZlcl0gW0dUS11bV1BFXTogSW1wbGVtZW50IE1lZGlhU3RyZWFtIEFQSQoKaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NwotLS0KIExheW91dFRlc3RzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyAgICAgfCAgMzMgKy0KIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICB8IDExNyArKysrCiBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZSAgICAgICAgICAgICAgfCAgIDIgKwogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlICAgICAgIHwgIDE2ICsKIC4uLi9wbGF0Zm9ybS9hdWRpby9B
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmggICB8ICAgMSArCiAuLi4vcGxhdGZvcm0vYXVkaW8vUGxh
dGZvcm1BdWRpb0RhdGEuaCAgICAgICAgfCAgIDEgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwICAgIHwgIDQ3ICsrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5oICAgICAgfCAgIDMgKwogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIHwgIDYzICsrLQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCAgIHwgICA3ICstCiAuLi4vTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHAgICAgICAgfCAgIDcgKwogLi4uL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAgIHwgICA4ICsKIC4uLi9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlLmggICAgICAgICB8ICAgMiArLQogLi4uL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwIHwgICA3IC0KIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmNwcCB8IDIwMiArKysrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICAgfCAgNjUgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuY3BwICAgICAgfCAgNzMgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuaCAgICAgICAgfCAgNDMgKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRh
LmggICAgICAgICAgICB8ICA1OSArKwogLi4uL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaCAgICAgICAgIHwgMTA1ICsrKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURl
dmljZS5oICAgICAgICB8ICA1MCArKwogLi4uL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmNwcCAgICAgICAgIHwgMTM0ICsrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmggfCAgODEgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVy
LmNwcCAgICAgICAgICAgfCAxOTggKysrKysrKwogLi4uL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlci5oIHwgIDcyICsrKwogLi4uL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5jcHAgIHwgNTMxICsrKysrKysrKysrKysrKysrKwogLi4uL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oICAgIHwgIDQ2ICsrCiAuLi4vZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgfCAyNzAgKysrKysrKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oICAgfCAgNjQgKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwICAgICAgfCAxMDQgKysrKwogLi4uL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmggICAgICAgIHwgIDQ2ICsrCiAuLi4vTW9j
a0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxMDYgKysrKwogLi4uL01v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCAgICAgICAgIHwgIDUxICsrCiAuLi4vTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxNDYgKysrKysKIC4uLi9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmggICAgICAgICB8ICA1NiArKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwICAgIHwgIDkxICsrKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuaCAgICAgIHwgIDY4ICsrKwogLi4uL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIHwgICAyICstCiAuLi4vcGxh
dGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgfCAgIDIgKy0KIFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArCiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgICAgICAgfCAgIDIgKwogVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcyAgICAgICAgICAgICAgIHwgICA0ICstCiAuLi5SRUFNX0NPTExF
Q1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2ggfCAgMzMgKysKIDQ0IGZpbGVzIGNoYW5n
ZWQsIDI5OTggaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0
dXJlRGV2aWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1
cmVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9nc3Ry
ZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1f
Q09MTEVDVElPTi1vbi1FVkVOVF9TVFJFQU1fQ09MTC5wYXRjaAoKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4MzJjZjZiODI1
ZC4uN2JjYmY0ZjZkNmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOC0wNS0xOCAgVGhpYmF1
bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBT
dGFydCBpbXBsZW1lbnRpbmcgTWVkaWFTdHJlYW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3ODcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OiBSZWFjdGl2YXRlIE1lZGlhU3RyZWFtIHRlc3RzIGFuZCBlbmFibGUgYWxsIHRlc3RzCisgICAg
ICAgIHJlbGF0ZWQgdG8gdGhlIG1lZGlhRGV2aWNlLmVudW1lcmF0ZURldmljZXMgYW5kIE1lZGlh
U3RyZWFtIChub3QgUlRDUGVlckNvbm5lY3Rpb24gbm9yCisgICAgICAgIHdlYmF1ZGlvKS4KKwog
MjAxOC0wNi0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
SFRUUCBIZWFkZXIgdmFsdWVzIHZhbGlkYXRpb24gaXMgdG9vIHN0cmljdApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhN2U2NzQ3N2QwMS4uNTk3NTIzNzBk
Y2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC01NzIs
NDAgKzU3MiwzMSBAQCB3ZWJraXQub3JnL2IvOTkwMzYgZmFzdC9zaGFkb3ctZG9tL3BvaW50ZXJs
b2NrZWxlbWVudC1pbi1zbG90Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi84NTIxMSBpZXRl
c3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtYWxpZ24tc3RyZXRjaC0wMDEuaHRtIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODUyMTIgaWV0ZXN0Y2VudGVyL2NzczMvZmxl
eGJveC9mbGV4Ym94LWxheW91dC0wMDIuaHRtIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKLSMgU2tp
cHBpbmcgdW50aWwgYmFja2VuZCBpcyBpbXBsZW1lbnRlZAotZmFzdC9tZWRpYXN0cmVhbSBbIFNr
aXAgXQogd2VicnRjIFsgU2tpcCBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy8gWyBTa2lwIF0KIGh0dHAvdGVzdHMvd2VicnRjIFsgU2tpcCBdCiAjIFRoZSBNZWRpYVN0
cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHN0aWxsIG5vdCBjb21wbGV0ZWQKIHdlYmtpdC5v
cmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21vY2stbWVkaWEtc291cmNlLXdlYmF1ZGlvLmh0
bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL2dldFVz
ZXJNZWRpYS13ZWJhdWRpby5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50LXRy
YWNrLXN0b3AuaHRtbCBbIFBhc3MgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC10cmFjay1zdG9wLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWR0bWYuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50Lmh0bWwgWyBGYWlsdXJl
IENyYXNoIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLW1lZGlhLXNldHVwLXR3by1kaWFsb2dzLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdl
YmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1J0cFNlbmRlci1yZXBsYWNlVHJh
Y2suaHRtbCBbIEZhaWx1cmUgXQogIyBDcmFzaCBpcyB3ZWJraXQub3JnL2IvMTg0MjkyCiB3ZWJr
aXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGRJY2VD
YW5kaWRhdGUuaHRtbCBbIEZhaWx1cmUgUGFzcyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1jbG9zZWQtc3RhdGUuaHRtbCBbIFRp
bWVvdXQgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24taWNlLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZS1ldmVudC5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UtZXZlbnQuaHRtbCBbIEZhaWx1
cmUgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pY2UuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LWFuc3dlci5odG1s
IFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWJ1bmRsZVBvbGljeS1idW5kbGUtb25seS5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxlZ2FjeS1zdHJlYW0tYmFzZWQt
YXBpLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0
bWwgWyBDcmFzaCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIwMyB3ZWJhdWRpby9tZWRpYXN0
cmVhbWF1ZGlvc291cmNlbm9kZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50LWRpc3BsYXlzLWJ1ZmZl
ci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQtdGhlbi1lbmFibGVk
Lmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS12aWRlby1lbGVtZW50Lmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hZHZhbmNlZC5odG1sIFsgQ3Jhc2gg
XQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8t
ZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQtdGhlbi1lbmFibGVkLmh0bWwgWyBUaW1lb3V0
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0tdmlkZW8tZWxlbWVudC1kaXNwbGF5cy1idWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0
Lm9yZy9iLzc5MjAzIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2dldHVzZXJtZWRpYS13
aXRoLWNhbnZhcy5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXNldE9iamVjdC1udWxsLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXN0YXRzLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL2NhcHR1cmVTdHJlYW0vY2FudmFzMmQtaGVhdnktZHJhd2luZy5odG1sIFsgVGltZW91
dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9nZXQtdXNlci1tZWRpYS1v
bi1sb2FkZWRtZXRhZGF0YS5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9sb2NhbC1hdWRpby1wbGF5aW5nLWV2ZW50Lmh0bWwgWyBUaW1lb3V0IF0K
LXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21lZGlhLXN0cmVhbS10cmFjay1z
b3VyY2UtZmFpbHVyZS5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cmVh
bS1NZWRpYUVsZW1lbnQtcHJlbG9hZC1ub25lLmh0dHBzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi83OTIwMyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhY2FwdHVy
ZS1zdHJlYW1zL01lZGlhU3RyZWFtVHJhY2stZW5kLW1hbnVhbC5odHRwcy5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvMTUxMzQ0IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRk
LWVuZGVkLXRyYWNrcy5odG1sIFsgVGltZW91dCBdCkBAIC02MTYsNiArNjA3LDkgQEAgd2Via2l0
Lm9yZy9iLzE3MzI1NyBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ncmFudC1wZXJzaXN0
ZW5jeTMuaHRtbCBbIFBhc3MKIAogIyBDYW52YXMgY2FwdHVyZVN0cmVhbSBzdXBwb3J0IGlzIG5v
dCBpbXBsZW1lbnRlZAogd2Via2l0Lm9yZy9iLzE2OTgxMSBmYXN0L21lZGlhY2FwdHVyZWZyb21l
bGVtZW50IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTY5ODExIGZhc3QvbWVkaWFzdHJlYW0vY2Fw
dHVyZVN0cmVhbS8gWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0
cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtp
dC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczNkLmh0
bWwgWyBDcmFzaCBUaW1lb3V0IF0KIAogIyBSZXF1aXJlcyBSZXNvbHV0aW9uIE1lZGlhIFF1ZXJ5
IHN1cHBvcnQKIHdlYmtpdC5vcmcvYi8xMDAxMzcgZmFzdC9tZWRpYS9tcS1yZXNvbHV0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KQEAgLTEyNDEsMjUgKzEyMzUsMTggQEAgd2Via2l0Lm9yZy9iLzEzMTU0
NiBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwgWyBDcmFzaCBUaW1lb3V0IEZhaWx1cmUg
XQogCiB3ZWJraXQub3JnL2IvMTYzNzgyIG1lZGlhL3ZpZGVvLXBsYXllZC1yYW5nZXMtMS5odG1s
IFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9j
YXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KLXdlYmtpdC5vcmcv
Yi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczNkLmh0bWwgWyBD
cmFzaCBUaW1lb3V0IF0KLQogd2Via2l0Lm9yZy9iLzE3MjI4MSBhY2Nlc3NpYmlsaXR5L2luc2Vy
dC1jaGlsZHJlbi1hc3NlcnQuaHRtbCBbIENyYXNoIF0KIAogd2Via2l0Lm9yZy9iLzE3Mjk1NSBt
ZWRpYS92aWRlby1wcmVsb2FkLmh0bWwgWyBDcmFzaCBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3
NTU3NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcmVhZHktc3RhdGVzL2F1dG9wbGF5LXdpdGgtc2xv
dy10ZXh0LXRyYWNrcy5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8xNzY4MDEg
ZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hdWRpby5odG1sIFsgQ3Jhc2ggXQog
d2Via2l0Lm9yZy9iLzE3NjgwMSBmYXN0L21lZGlhc3RyZWFtL2FyZ3VtZW50LXR5cGVzLmh0bWwg
WyBDcmFzaCBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3NjgwMyBodHRwL3Rlc3RzL2xvY2FsL2Js
b2Ivc2VuZC1oeWJyaWQtYmxvYi11c2luZy1vcGVuLXBhbmVsLmh0bWwgWyBDcmFzaCBdCiAKLXdl
YmtpdC5vcmcvYi8xNzY4NTYgZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy12aWRl
by5odG1sIFsgQ3Jhc2ggXQotCiAjIFNlZSBhbHNvIHdlYmtpdC5vcmcvYi8xNDE2OTkKIHdlYmtp
dC5vcmcvYi8xNzc1MzQgZmFzdC9hdHRhY2htZW50L2F0dGFjaG1lbnQtcmVzcGVjdHMtY3NzLXNp
emUuaHRtbCBbIENyYXNoIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE3NzUzNSBm
YXN0L21lZGlhc3RyZWFtL21lZGlhLWRldmljZS1pbmZvLmh0bWwgWyBDcmFzaCBQYXNzIF0KICMg
U2VlIGFsc28gd2Via2l0Lm9yZy9iLzE2MzUyOCBUaHJlYWRlZCBjb21wb3NpdG9yIGZhaWx1cmVz
IGNhdXNlZCBieSBvbmUgb2YgcjIwMzQ5NiwgcjIwMzQ5Nywgb3IgcjIwMzQ5OAogd2Via2l0Lm9y
Zy9iLzE3NzUzNiBtZWRpYS92aWRlby1vYmplY3QtZml0Lmh0bWwgWyBDcmFzaCBJbWFnZU9ubHlG
YWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI5Mjk4NTYxN2UxLi4xNjk2ZDM0NGJmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxOC0wNS0zMCAgVGhpYmF1bHQgU2F1bmllciAgPHRz
YXVuaWVyQGlnYWxpYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gU3RhcnQgaW1wbGVtZW50aW5nIE1lZGlhU3RyZWFt
IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1
Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
YXJlIGFkZGluZyBhbGwgdGhlIHJlcXVpcmVkIGNsYXNzZXMgdG8gbWFrZSB0aGUKKyAgICAgICAg
TWVkaWFTdHJlYW0gQVBJIHdvcmssIHRoYXQgbWVhbnMgb3VyIG93biBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTGliV2ViUlRDCisgICAgICAgIGZvciB0aGUgcGxhdGZvcm0sIHRoZSBHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlTWFuYWdlciwgdGhlIGF1ZGlvL3ZpZGVvIGNhcHR1cmVycworICAgICAg
ICBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBhdWRpby92aWRlbyBzb3VyY2VzIGFzIHdlbGwgYXMgYSBk
ZWRpY2F0ZWQgR1N0cmVhbWVyIFNvdXJjZQorICAgICAgICB0aGF0IGFkZHMgc3VwcG9ydCBmb3Ig
dXNpbmcgTWVkaWFTdHJlYW0gc3RyZWFtIGluc2lkZSBwbGF5YmluMy4KKyAgICAgICAgV2UgYXJl
IHVzaW5nIHRoZSBHc3REZXZpY2VNb25pdG9yIHRvIGxpc3QgZGV2aWNlcyBvbiB0aGUgZGV2aWNl
cy4KKworICAgICAgICBFbmFibGUgbWVkaWFzdHJlYW0gdGVzdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2U6IEFkZGVkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIGNvbXBpbGF0
aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDog
QWRkZWQgbmV3IEdTdHJlYW1lciB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1BsYXRm
b3JtQXVkaW9EYXRhLmg6IEFkZGVkIG5ldyBHU3RyZWFtZXIgdHlwZSBmb3IKKyAgICAgICAgdGhl
IEdTdHJlYW1lckF1ZGlvRGF0YSBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpbXBsZUJ1
c01lc3NhZ2VDYWxsYmFjayk6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBuZXh0CisgICAgICAgIG9u
ZSBoZWxwIHVzIHRvIGNvbm5lY3QgYSBtb25pdG9yaW5nIGNhbGxiYWNrIHRvIGEgcGlwZWxpbmUg
Zm9yCisgICAgICAgIGRlYnVnZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3RTaW1wbGVC
dXNNZXNzYWdlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmg6IERpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQpOiBNYWtlIHVzZSBv
ZiB0aGUgbG9hZEZ1bGwoKSBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKTogVmVyeSBzaW1pbGFyIHRvIGxvYWQoKQorICAgICAg
ICBidXQgYWxsb3dzIHNwZWNpZnlpbmcgd2hhdCBwaXBlbGluZSB0eXBlIHRvIHVzZSAobnVsbCB0
byBsZXQgdGhlIGZ1bmN0aW9uIGRldGVybWluZQorICAgICAgICB3aGljaCBvbmUgc2hvdWxkIGJl
IHVzZWQpLiBUaGlzIGlzIHJlcXVpcmVkIGFzIHdlIGZvcmNlIHRvIGFsd2F5cyB1c2UgcGxheWJp
bjMgZm9yIHRoZQorICAgICAgICBtZWRpYXN0cmVhbSBzb3VyY2UgYXMgaXQgcmVsaWVzIG9uIHRo
ZSBHc3RTdHJlYW0gQVBJLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uIGNvbnN0KTogU3R5bGUgZml4LgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSBjb25zdCk6IEFk
ZGVkLCB1c2UgTWVkaWFTdHJlYW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFj
a3MpOiBTb21lIHN0eWxlIGZpeGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogRW5oYW5jZSBkb3RmaWxlcyBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxl
T2ZDb250ZW50c0VudHJ5KTogTWlub3IgZm9ybWF0dGluZyBmaXguCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKTogU2V0IE1lZGlhU3Ry
ZWFtIG9uIFdlYktpdE1lZGlhU3RyZWFtU291cmNlIHdoZW4gc2V0dGluZyBpdCB1cC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKTog
QWR2ZXJ0aXNlIHRoYXQgd2Ugc3VwcG9ydCBNZWRpYVN0cmVhbSBpZiBzdXBwb3J0IGlzIGJ1aWx0
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVH
U1RQbGF5QmluKTogTWFrZSBzdXJlIHBsYXliaW4zIGlzIGZvcmNlZCB3aGVuIGxvYWRpbmcgYSBN
ZWRpYVN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgTWVkaWFTdHJl
YW0gb2JqZWN0IGFuZCBkZWNsYXJlIGxvYWRGdWxsIGFuZCBuYXR1cmFsU2l6ZSBvdmVycmlkZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlcldlYktpdEdTdHJl
YW1lckVsZW1lbnRzKTogUmVnaXN0ZXIgdGhlIG5ldyBNZWRpYVN0cmVhbVNyYyBlbGVtZW50Lgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOiBNYWtlIHN1cmUgdGhhdCBNZWRpYVN0cmVh
bSBNQUlOIHRyYWNrcyBhcmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4gV2UgaGF2ZSBubyB3YXkgdG8g
ZG8gaXQgaW4gTWVkaWFTdHJlYW1TcmMgbm93IGFzIHRoZSBHc3RTdHJlYW1Db2xsZWN0aW9uIGlz
IHJlY3JlYXRlZCBieSBwYXJzZWJpbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlLmg6IE1ha2UgQ2FwdHVyZUZhaWxlZCBhIHZpcnR1YWwgbWV0aG9k
IGFzIGluIG91ciBtb2NrcyB3ZSByZXF1aXJlIG5lZWQgdG8gbWFrZQorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKTogUmVtb3ZlIHRo
ZSBjb2RlCisgICAgICAgIHVzZWQgZm9yIGNvbXBpbGF0aW9uIGZvciB0aGUgcGxhdGZvcm0gd2hl
biB3ZSBkbyBub3QgaGF2ZSBhCisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJX
ZWJSVEMuIE5vdyB3ZSByZXR1cm4gdGhlIHByb3BlciBjbGFzcworICAgICAgICBmb3IgdGhlIHBs
YXRmb3JtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICBBZGRlZCBjbGFzcyByZXByZXNlbnRp
bmcgdGhlIFJlYWx0aW1lTWVkaWFTb3VyY2UgZm9yIHRoZSBBdWRpbworICAgICAgICB3aXRoIEdT
dHJlYW1lci4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlLmg6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcDogQWRk
ZWQKKyAgICAgICAgdGhpcyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIEdTdHJlYW1lciBwaXBl
bGluZSB0aGF0IGNhcHR1cmVzCisgICAgICAgIGF1ZGlvIGZyb20gdGhlIHN5c3RlbSBkZXZpY2Vz
LCBpdCBpbmhlcml0cyBmcm9tIEdTdHJlYW1lckNhcHR1cmVyLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmg6IERpdG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0
YS5oOiBBZGRlZCB0aGlzCisgICAgICAgIGNsYXNzIGltcGxlbWVudGluZyBQbGF0Zm9ybUF1ZGlv
RGF0YSBmb3IgdGhlIEdTdHJlYW1lciBwbGF0Zm9ybSwKKyAgICAgICAgdXNlZCB0byBwYXNzIHRo
ZSBzYW1wbGVzIGluZm9ybWF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIEFkZGVk
IHRoaXMgY2xhc3MgaW1wbGVtZW50aW5nIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG8gZXhwb3J0
IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXVkaW8gc3RyZWFtIHRvIGxpYndl
YnJ0Yy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZURldmljZS5oOiBBZGRlZAorICAgICAgICB0aGlzIGJhc2UgY2xhc3MgZm9yIHRoZSBh
dWRpbyBhbmQgdmlkZW8gY2FwdHVyaW5nIGRldmljZXMsIGl0CisgICAgICAgIGltcGxlbWVudHMg
Z2VuZXJhbCBXZWJLaXQgQ2FwdHVyZURldmljZSBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwOgor
ICAgICAgICBBZGRlZCB0aGlzIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc3lzdGVtIG1vbml0
b3IgdG8gZ2V0IHRoZQorICAgICAgICBsaXN0IG9mIGF2YWlsYWJsZSBkZXZpY2VzIGluIHRoZSBz
eXN0ZW0uIEl0IHVzZXMgR3N0RGV2aWNlTW9uaXRvcgorICAgICAgICB0byBoYW5kbGUgdGhlIG9w
ZXJhdGlvbi4gSXQgdXNlcyB0d28gc2luZ2xldG9uIGRldmljZSBtYW5hZ2VycyBvbmUKKyAgICAg
ICAgZm9yIGF1ZGlvIGFuZCBhbm90aGVyIG9uZSBmb3IgdmlkZW8sIGFzIHJlcXVpcmVkIGJ5IHRo
ZQorICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIGRlc2lnbi4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVyLmNwcDogQWRkZWQgdGhpcworICAgICAgICBiYXNlIGNsYXNzIHJlcHJl
c2VudGluZyBob3cgR1N0cmVhbWVyIGNhcHR1cmVzIHRoZSBtZWRpYSBmcm9tIHRoZQorICAgICAg
ICBpbnB1dCBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uIFR3byBjbGFzc2VzIGluaGVyaXQgZnJvbSB0
aGlzIG9uZSB0bworICAgICAgICBjYXB0dXJlIGF1ZGlvIGFuZCB2aWRlby4gSXQgc2V0dXBzIHRo
ZSBHU3RyZWFtZXIgcGlwZWxpbmUgYW5kIGFkZHMKKyAgICAgICAgZnVuY3Rpb25zIHRvIGNvbnRy
b2wgaXQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckNhcHR1cmVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICBJbXBs
ZW1lbnRzIGEgc3ViY2xhc3Mgb2YgR3N0QmluIGFzIGEgc291cmNlIGVsZW1lbnQgdGhhdCB3aWxs
IGNvbnRhaW4gc2V2ZXJhbAorICAgICAgICBHc3RBcHBTcmMsIGJhc2ljYWxseSBvbmUgcGVyIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9mIHRoZSBNZWRpYVN0cmVhbVByaXZhdGUKKyAgICAgICAg
cGFzc2VkIGluIHBhcmFtZXRlci4gSXQgYWRkcyBPYnNlcnZlcnMgb24gdGhlIE1lZGlhU3RyZWFt
VHJhY2tzIGFuZAorICAgICAgICBwdXNoZXMgdGhlIGRhdGEgdG8gdGhlIHNvdXJjZXMgYXMgcmVx
dWlyZWQuIFRoZSBlbGVtZW50IGltcGxlbWVudHMgdGhlIEdzdFVSSUhhbmRsZXIKKyAgICAgICAg
aW50ZXJmYWNlIHNvIGl0IGNhbiBiZSB1c2VkIGluIHBsYXliaW4uIFRoZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIgaXMgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHBhc3NpbmcgdGhlIE1l
ZGlhU3RyZWFtUHJpdmF0ZSBvYmplY3QgdG8gdGhlIHNvdXJjZSB3aGVuIHJlcXVpcmVkLgorICAg
ICAgICAoV2ViQ29yZTo6d2Via2l0TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKTogRXZlbnQgcHJv
YmUgdGhhdCBmaXhlcyBzdHJlYW1fc3RhcnQgZXZlbnRzIChzZXR0aW5nIHRoZSBJRCBldGMpCisg
ICAgICAgIGFuZCBmaW5hbGx5IGFkZCBzcmMgcGFkcyB0byB0aGUgcGlwZWxpbmUuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICBBZGRlZCB0aGlzIFJlYWx0
aW1lTWVkaWFTb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICAgIHZp
ZGVvIGRhdGEgZm9yIHRoZSBHU3RyZWFtZXIgcGxhdGZvcm0uIEl0IGhhbmRsZXMgdGhlIHNldHRp
bmdzIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2YgdGhlIHNvdXJjZSBhbmQgY3JlYXRlcyB0
aGUgY2FwdHVyZXIgdXNlZCB0bworICAgICAgICBjb250cm9sIHRoZSBvcGVyYXRpb24gb2YgdGhl
IHN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcDogQWRkZWQKKyAgICAg
ICAgdGhpcyBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gdGhlIEdTdHJlYW1lckNhcHR1cmVyIGFu
ZCBjb250cm9scworICAgICAgICB0aGUgR1N0cmVhbWVyIHBpcGVsaW5lcyBvZiB0aGUgdmlkZW8g
c3RyZWFtcyBvZiB0aGUgc3lzdGVtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNl
LmNwcDogQWRkZWQuIEltcGxlbWVudGF0aW9uIG9mIGEgTW9jayBjYXB0dXJlciBmb3IgYXVkaW8g
c3RyZWFtLgorICAgICAgICBTdWJjbGFzc2VzIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIgYW5kIHdy
YXBzIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2Ugc28gdGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRo
ZSBzYW1lIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UKKyAgICAgICAgYnV0IHN0aWxsIHRoZSBH
U3RyZWFtZXIgaW1wbGVtZW50YXRpb24gY29kZSBwYXRocyBhcmUgdGVzdGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcDogQWRkZWQuIEltcGxlbWVudGF0
aW9uIG9mIGEgTW9jayBjYXB0dXJlciBmb3IgdmlkZW8gc3RyZWFtLgorICAgICAgICBTdWJjbGFz
c2VzIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXIgYW5kIHdyYXBzIGEgTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2Ugc28gdGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIGEgTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UKKyAgICAgICAgYnV0IHN0aWxsIHRoZSBHU3RyZWFtZXIgaW1wbGVtZW50YXRpb24g
Y29kZSBwYXRocyBhcmUgdGVzdGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDLmNwcDoKKyAgICAgICAgQWRkZWQgdGhpcyBjbGFzcyB0aGF0IGltcGxlbWVu
dHMgdGhlIGtleSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyCisgICAgICAgIGZ1bmN0aW9ucyB0
byBjb25maWd1cmUgdGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBwbGF0Zm9ybSwgdXNpbmcgdGhlCisg
ICAgICAgIG90aGVyIEdTdHJlYW1lciBjbGFzc2VzLgorICAgICAgICAqIHBsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwOiBEbyBub3QgYnVpbGQgOjpjcmVhdGUgaWYgR1N0
cmVhbWVyIGltcGxlbWVudGF0aW9uIGlzIGJ1aWx0CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6IERvIG5vdCBidWlsZCA6OmNyZWF0ZSBpZiBHU3Ry
ZWFtZXIgaW1wbGVtZW50YXRpb24gaXMgYnVpbHQKKwogMjAxOC0wNi0wNyAgVGhpYmF1bHQgU2F1
bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gRml4IHRo
ZSB3YXkgR3N0U3RyZWFtQ29sbGVjdGlvbiBpcyBoYW5kbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDgyM2M3N2RkYjIxLi5jMmQ0Y2FlMGY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTI0LDEyICsyNCwxNCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrIgogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2dseCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL3gxMSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3RrIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvZ3RrIgogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggM2Q1YTZlMDAyNWEuLjMzM2YxZDY1YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0zMyw2ICszMywyMiBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvUGxheWJhY2tQaXBlbGluZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAor
CisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCisgICAgICAgIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKyAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKKworICAgICAgICBwbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVN
X0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAppbmRleCBlNDQwZGM5MGEzZS4uMmJhNTg1
YzljMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTM1LDYgKzM1LDcgQEAgc3RydWN0IFBsYXRmb3JtRGVz
Y3JpcHRpb24gewogICAgIGVudW0gewogICAgICAgICBOb25lLAogICAgICAgICBDQUF1ZGlvU3Ry
ZWFtQmFzaWNUeXBlLAorICAgICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLAog
ICAgIH0gdHlwZTsKICAgICBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBjb25zdCBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlwdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QbGF0Zm9ybUF1ZGlvRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUGxhdGZvcm1BdWRpb0RhdGEuaAppbmRleCBlNDU0NGY2MzI1NC4u
Y2RhNzJlOGFiM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Bs
YXRmb3JtQXVkaW9EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUGxh
dGZvcm1BdWRpb0RhdGEuaApAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFz
cyBLaW5kIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgV2ViQXVkaW9CdWZmZXJMaXN0LAorICAg
ICAgICBHU3RyZWFtZXJBdWRpb0RhdGEsCiAgICAgfTsKIAogICAgIHZpcnR1YWwgS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gS2luZDo6Tm9uZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNw
cAppbmRleCBlNTE0ZmUzNDI4ZC4uZDU0NzViNzRjZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvR0xpYlV0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KIAogI2lmIEVOQUJM
RShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCiAjZGVmaW5lIEdTVF9VU0Vf
VU5TVEFCTEVfQVBJCkBAIC0zMjAsNiArMzIxLDUyIEBAIGJvb2wgZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBz
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdzdEJpbiogcGlwZWxpbmUpCit7
CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1Rf
TUVTU0FHRV9FUlJPUjoKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwaXBlbGluZSwgIkdvdCBt
ZXNzYWdlOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbWVzc2FnZSk7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIFdURjo6U3RyaW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzX2Vycm9yIiwg
R1NUX09CSkVDVF9OQU1FKHBpcGVsaW5lKSk7CisgICAgICAgICAgICBHU1RfREVCVUdfQklOX1RP
X0RPVF9GSUxFX1dJVEhfVFMocGlwZWxpbmUsIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90
RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOgorICAgICAgICBpZiAoR1NUX01FU1NBR0Vf
U1JDKG1lc3NhZ2UpID09IEdTVF9PQkpFQ1QocGlwZWxpbmUpKSB7CisgICAgICAgICAgICBHc3RT
dGF0ZSBvbGRTdGF0ZSwgbmV3U3RhdGUsIHBlbmRpbmc7CisgICAgICAgICAgICBnc3RfbWVzc2Fn
ZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKG1lc3NhZ2UsICZvbGRTdGF0ZSwgJm5ld1N0YXRlLCAmcGVu
ZGluZyk7CisKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSwgIlN0YXRlIGNo
YW5nZWQgKG9sZDogJXMsIG5ldzogJXMsIHBlbmRpbmc6ICVzKSIsCisgICAgICAgICAgICAgICAg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUob2xkU3RhdGUpLAorICAgICAgICAgICAgICAgIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSwKKyAgICAgICAgICAgICAgICBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgICAgIFdURjo6U3Ry
aW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzXyVzXyVzIiwKKyAgICAgICAgICAg
ICAgICBHU1RfT0JKRUNUX05BTUUocGlwZWxpbmUpLAorICAgICAgICAgICAgICAgIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKG9sZFN0YXRlKSwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpOworCisgICAgICAgICAgICBHU1RfREVCVUdfQklO
X1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihwaXBlbGluZSksIEdTVF9ERUJVR19HUkFQSF9T
SE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIGRp
c2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCAqcGlwZWxpbmUpCit7
CisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1
cyhHU1RfUElQRUxJTkUocGlwZWxpbmUpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKGJ1cy5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oc2ltcGxl
QnVzTWVzc2FnZUNhbGxiYWNrKSwgcGlwZWxpbmUpOworfQorCit2b2lkIGNvbm5lY3RTaW1wbGVC
dXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCAqcGlwZWxpbmUpCit7CisgICAgR1JlZlB0cjxH
c3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUo
cGlwZWxpbmUpKSk7CisgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwoYnVzLmdldCgp
LCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1bkxvb3BEaXNwYXRjaGVyKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGJ1cy5nZXQoKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLKHNpbXBsZUJ1c01lc3Nh
Z2VDYWxsYmFjayksIHBpcGVsaW5lKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCAyNTkyNTVlNzQxZS4uY2JiNDkzMjNhNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTgyLDYgKzgyLDkgQEAgaW5saW5lIEdzdENs
b2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKIH0KIAog
Ym9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR0xpc3QqIGVsZW1lbnRGYWN0
b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwordm9pZCBjb25uZWN0U2ltcGxlQnVzTWVz
c2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKTsKK3ZvaWQgZGlzY29ubmVjdFNpbXBs
ZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBlbGluZSk7CisKIH0KIAogI2lmbmRl
ZiBHU1RfQlVGRkVSX0RUU19PUl9QVFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggN2Q4NDdmMThkNzYuLjBlYzRiMTNmODkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNTEsNiAr
NTEsMTAgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0
cmVhbVNvdXJjZS5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAjaW5jbHVk
ZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJJbmJhbmRNZXRhZGF0
YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKQEAgLTIzNyw2ICsyNDEsMTEgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmwp
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQoreworICAgIGxvYWRGdWxsKHVybFN0cmluZywgbnVsbHB0cik7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgY29uc3QgZ2NoYXIgKnBsYXliaW5OYW1lKQogewogICAgIC8vIEZJWE1FOiBU
aGlzIG1ldGhvZCBpcyBzdGlsbCBjYWxsZWQgZXZlbiBpZiBzdXBwb3J0c1R5cGUoKSByZXR1cm5l
ZAogICAgIC8vIElzTm90U3VwcG9ydGVkLiBUaGlzIHdvdWxkIGRlc2VydmUgbW9yZSBpbnZlc3Rp
Z2F0aW9uIGJ1dCBtZWFud2hpbGUgbWFrZQpAQCAtMjU0LDcgKzI2Myw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIGNyZWF0ZUdTVFBs
YXlCaW4oaXNNZWRpYVNvdXJjZSgpID8gInBsYXliaW4iIDogbnVsbHB0cik7CisgICAgICAgIGNy
ZWF0ZUdTVFBsYXlCaW4oaXNNZWRpYVNvdXJjZSgpID8gInBsYXliaW4iIDogcGxheWJpbk5hbWUp
OwogCiAgICAgaWYgKG1fZmlsbFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZmlsbFRpbWVy
LnN0b3AoKTsKQEAgLTI5MiwxMiArMzAxLDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUmKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0pCiB7CisjaWYg
R1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisgICAgbV9zdHJlYW1Qcml2YXRlID0gJnN0cmVh
bTsKKyAgICBsb2FkRnVsbChTdHJpbmcoIm1lZGlhc3RyZWFtOi8vIikgKyBzdHJlYW0uaWQoKSwg
InBsYXliaW4zIik7CisgICAgZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0KCk7CisgICAgbV9wbGF5
ZXItPnBsYXkoKTsKKyNlbHNlCiAgICAgLy8gUHJvcGVybHkgZmFpbCBzbyB0aGUgZ2xvYmFsIE1l
ZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1lZGlhUGxheWVyUHJpdmF0
ZS4KICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKICAgICBt
X3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwogICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
ZW5kaWYKIH0KICNlbmRpZgogCkBAIC0zMzAsNyArMzQ2LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0CiAKICAgICAvLyBQ
b3NpdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBubyBhc3luYyBzdGF0ZSBjaGFuZ2UgaXMgZ29p
bmcgb24gYW5kIHRoZSBzdGF0ZSBpcyBlaXRoZXIgcGF1c2VkIG9yIHBsYXlpbmcuCiAgICAgZ2lu
dDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBHc3RRdWVyeSogcXVlcnk9
IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBHc3RRdWVyeSog
cXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7CiAgICAgaWYg
KGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5KSkKICAgICAgICAgZ3N0
X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwogICAgIGdzdF9xdWVy
eV91bnJlZihxdWVyeSk7CkBAIC02NDgsNiArNjY0LDI1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpjbGVhclRyYWNrcygpCiAgICAgICAgICAgICBtX2N1cnJlbnQjI1R5cGUj
I1N0cmVhbUlkID0gU3RyaW5nKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQorCitGbG9hdFNp
emUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7Cisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmICFt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI+IHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChtX2N1
cnJlbnRWaWRlb1N0cmVhbUlkKTsKKworICAgICAgICBpZiAodmlkZW9UcmFjaykgeworICAgICAg
ICAgICAgYXV0byB0YWdzID0gZ3N0X3N0cmVhbV9nZXRfdGFncyh2aWRlb1RyYWNrLT5zdHJlYW0o
KSk7CisgICAgICAgICAgICBnaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICAgICAgICAgIGlmIChn
c3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLCBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJRFRILCAm
d2lkdGgpICYmIGdzdF90YWdfbGlzdF9nZXRfaW50KHRhZ3MsIFdFQktJVF9NRURJQV9UUkFDS19U
QUdfSEVJR0hULCAmaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0
dXJhbFNpemUoKTsKK30KICNlbHNlCiAjZGVmaW5lIENSRUFURV9UUkFDSyh0eXBlLCBfaWQsIHRy
YWNrcywgbWV0aG9kLCBzdHJlYW0pIG1faGFzIyNUeXBlIyMgPSB0cnVlOwogI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKQEAgLTExNjUsNyArMTIwMCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAg
ICAgIC8vIENvbnN0cnVjdCBhIGZpbGVuYW1lIGZvciB0aGUgZ3JhcGh2aXogZG90IGZpbGUgb3V0
cHV0LgogICAgICAgICBHc3RTdGF0ZSBuZXdTdGF0ZTsKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFy
c2Vfc3RhdGVfY2hhbmdlZChtZXNzYWdlLCAmY3VycmVudFN0YXRlLCAmbmV3U3RhdGUsIG51bGxw
dHIpOwotICAgICAgICBDU3RyaW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIndlYmtp
dC12aWRlby4lc18lcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSks
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSkudXRmOCgpOworICAgICAgICBD
U3RyaW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzLiVzXyVzIiwgR1NUX09CSkVD
VF9OQU1FKG1fcGlwZWxpbmUuZ2V0KCkpLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3Rh
dGUpKS51dGY4KCk7CiAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhH
U1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZp
bGVOYW1lLmRhdGEoKSk7CiAKICAgICAgICAgYnJlYWs7CkBAIC0xNDMxLDcgKzE0NjcsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0Vu
dHJ5KEdzdFRvY0VudHJ5KiBlbnRyeQogCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90b2Nf
ZW50cnlfZ2V0X3RhZ3MoZW50cnkpOwogICAgIGlmICh0YWdzKSB7Ci0gICAgICAgIGdjaGFyKiB0
aXRsZSA9ICBudWxscHRyOworICAgICAgICBnY2hhciogdGl0bGUgPSBudWxscHRyOwogICAgICAg
ICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyh0YWdzLCBHU1RfVEFHX1RJVExFLCAmdGl0bGUpOwog
ICAgICAgICBpZiAodGl0bGUpIHsKICAgICAgICAgICAgIGN1ZS0+c2V0Q29udGVudCh0aXRsZSk7
CkBAIC0xNzI2LDYgKzE3NjIsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiAgICAgaWYgKFdFQktJVF9J
U19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgewogICAgICAgICB3ZWJLaXRXZWJTcmNTZXRNZWRp
YVBsYXllcihXRUJLSVRfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSksIG1fcGxheWVyKTsKICAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChHU1RfRUxFTUVOVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpLCAi
ZWxlbWVudC1hZGRlZCIsIEdfQ0FMTEJBQ0sodXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tfVkVSU0lP
TigxLCAxMCwgMCkKKyAgICB9IGVsc2UgaWYgKFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNv
dXJjZUVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gc3RyZWFtID0gbV9zdHJlYW1Qcml2YXRlLmdl
dCgpOworICAgICAgICBBU1NFUlQoc3RyZWFtKTsKKyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1T
cmNTZXRTdHJlYW0oV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCksIHN0cmVh
bSk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTIyNjksOCArMjMxMSwxMCBAQCBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBl
KGNvbnN0IE1lZGlhRQogICAgICAgICByZXR1cm4gcmVzdWx0OwogI2VuZGlmCiAKKyNpZiAhRU5B
QkxFKE1FRElBX1NUUkVBTSkgfHwgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgIGlm
IChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5k
aWYKIAogICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMjQzMywxNyArMjQ3NywyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBnY2hhciogcGxheWJpbk5hbWUpCiAgICAg
QVNTRVJUKCFtX3BpcGVsaW5lKTsKIAogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQot
ICAgIG1faXNMZWdhY3lQbGF5YmluID0gIWdfZ2V0ZW52KCJVU0VfUExBWUJJTjMiKTsKLSAgICBp
ZiAoIW1faXNMZWdhY3lQbGF5YmluKQorICAgIGlmIChnX2dldGVudigiVVNFX1BMQVlCSU4zIikp
CiAgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKKyNlbHNlCisgICAgcGxheWJpbk5h
bWUgPSAicGxheWJpbiI7CiAjZW5kaWYKIAogICAgIGlmICghcGxheWJpbk5hbWUpCiAgICAgICAg
IHBsYXliaW5OYW1lID0gInBsYXliaW4iOwogCisgICAgbV9pc0xlZ2FjeVBsYXliaW4gPSAhZ19z
dHJjbXAwKHBsYXliaW5OYW1lLCAicGxheWJpbiIpOworCiAgICAgLy8gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwogICAgIC8vIHdlIHNo
b3VsZCBub3QgYWRvcHQuCi0gICAgc2V0UGlwZWxpbmUoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KHBsYXliaW5OYW1lLCAicGxheSIpKTsKKyAgICBzZXRQaXBlbGluZShnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UocGxheWJpbk5hbWUsIFN0cmluZzo6Zm9ybWF0KCJwbGF5XyVwIiwgdGhpcykudXRm
OCgpLmRhdGEoKSkpOwogICAgIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVBTV9WT0xV
TUUobV9waXBlbGluZS5nZXQoKSkpOwogCiAgICAgR1NUX0lORk8oIlVzaW5nIGxlZ2FjeSBwbGF5
YmluIGVsZW1lbnQ6ICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNMZWdhY3lQbGF5YmluKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMWFlNGE1
NGJhZTAuLmIyZWU1ZTY5NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oCkBAIC0xNzksNiArMTc5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKik7CiAKICAgICB2b2lkIHNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmxTdHJpbmcp
OworICAgIHZvaWQgbG9hZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGdjaGFyICpwbGF5
YmluTmFtZSk7CiAKICNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKICAgICB2b2lkIHVw
ZGF0ZVRyYWNrcygpOwpAQCAtMjYyLDcgKzI2MywxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c0xlZ2FjeVBsYXliaW47CiAjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiAgICAgR1Jl
ZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBtX3N0cmVhbUNvbGxlY3Rpb247Ci0jZW5kaWYKKyAg
ICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IG1fc3RyZWFtUHJpdmF0ZTsK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlmIC8vIEdTVF9DSEVDS19WRVJT
SU9OKDEsIDEwLCAwKQogICAgIFN0cmluZyBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkOwogICAgIFN0
cmluZyBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkOwogICAgIFN0cmluZyBtX2N1cnJlbnRUZXh0U3Ry
ZWFtSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5jcHAKaW5kZXggMmViNDQxZDI3NTMuLjYyN2M0YjJhMjdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC04MSw2ICs4
MSwxMCBAQAogI2VuZGlmIC8vICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKICNlbmRpZiAv
LyBVU0UoTElCRVBPWFkpCiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tf
VkVSU0lPTigxLCAxMCwgMCkKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5o
IgorI2VuZGlmCisKICNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKICNpbmNsdWRlIDxnc3Qv
Z2wvZ2wuaD4KICN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQpAQCAtMTQzLDYgKzE0Nyw5IEBA
IHZvaWQgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cygpCiAgICAgaWYgKCFjbGVhcktl
eURlY3J5cHRvckZhY3RvcnkpCiAgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIs
ICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAxMDAsIFdFQktJVF9UWVBFX01F
RElBX0NLX0RFQ1JZUFQpOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgR1NU
X0NIRUNLX1ZFUlNJT04oMSwxMCwwKQorICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIs
ICJtZWRpYXN0cmVhbXNyYyIsIEdTVF9SQU5LX1BSSU1BUlksIFdFQktJVF9UWVBFX01FRElBX1NU
UkVBTV9TUkMpOworI2VuZGlmCiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYzU0MjAw
ZWFlODEuLjRkOTk3ODZlMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAKQEAgLTQ4LDYgKzQ4LDE0IEBAIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0
CiAgICAgOiBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBzdHJlYW0pCiAg
ICAgLCBtX3BsYXllcihwbGF5ZXIpCiB7CisgICAgZ2ludCBraW5kOworICAgIGF1dG8gdGFncyA9
IGdzdF9zdHJlYW1fZ2V0X3RhZ3MobV9zdHJlYW0uZ2V0KCkpOworCisgICAgaWYgKGdzdF90YWdf
bGlzdF9nZXRfaW50KHRhZ3MsICJ3ZWJraXQtbWVkaWEtc3RyZWFtLWtpbmQiLCAma2luZCkgJiYg
a2luZCA9PSBzdGF0aWNfY2FzdDxpbnQ+KFZpZGVvVHJhY2tQcml2YXRlOjpLaW5kOjpNYWluKSkg
eworICAgICAgICBHc3RTdHJlYW1GbGFncyBzdHJlYW1GbGFncyA9IGdzdF9zdHJlYW1fZ2V0X3N0
cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpOworICAgICAgICBnc3Rfc3RyZWFtX3NldF9zdHJlYW1f
ZmxhZ3Moc3RyZWFtLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RTdHJlYW1GbGFncz4oc3RyZWFtRmxh
Z3MgfCBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSk7CisgICAgfQorCiAgICAgbV9pZCA9IGdzdF9z
dHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpOwogICAgIHNldEFjdGl2ZShnc3Rfc3Ry
ZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKSAmIEdTVF9TVFJFQU1fRkxBR19TRUxF
Q1QpOwogICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgK
aW5kZXggOWI0NTEyMDVlNWIuLjU0MTEwODVjNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC0y
MTYsNyArMjE2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG1vbml0b3JPcmllbnRh
dGlvbihPcmllbnRhdGlvbk5vdGlmaWVyJikgeyB9CiAKLSAgICB2b2lkIGNhcHR1cmVGYWlsZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZUZhaWxlZCgpOwogCiAgICAgLy8gVGVzdGluZyBv
bmx5CiAgICAgdmlydHVhbCB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSB7IH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCmluZGV4IDJlZmI4MmQxZTU4Li4zODg2ZmY4NzVjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTY0LDE0ICs2NCw3IEBAIFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmds
ZXRvbigpCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciogb3ZlcnJpZGUgPSBtZWRpYVN0
cmVhbUNlbnRlck92ZXJyaWRlKCk7CiAgICAgaWYgKG92ZXJyaWRlKQogICAgICAgICByZXR1cm4g
Km92ZXJyaWRlOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIFJldHVybiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlciB0byBhdm9pZCBjcmFzaC4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI+IGNlbnRlcjsKLSAgICByZXR1cm4gY2VudGVyOwotI2Vs
c2UKICAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIo
KTsKLSNlbmRpZgogfQogCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNldFNoYXJl
ZFN0cmVhbUNlbnRlck92ZXJyaWRlKFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIqIGNlbnRlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjljNWFlYWZmZmNmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhv
cjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxl
amFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVB
TUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorCisjaW5jbHVk
ZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgi
CisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY29uc3Qgc3RhdGljIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UgZGVmYXVsdFZvbHVtZUNhcGFi
aWxpdHkgPSBDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDAuMCwgMS4wKTsKK2NvbnN0IHN0YXRpYyBS
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uIGRlZmF1bHRF
Y2hvQ2FuY2VsbGF0aW9uQ2FwYWJpbGl0eSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXM6OkVjaG9DYW5jZWxsYXRpb246OlJlYWRXcml0ZTsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdl
YmtpdF9hdWRpb19jYXB0dXJlX3NvdXJjZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVM
VCB3ZWJraXRfYXVkaW9fY2FwdHVyZV9zb3VyY2VfZGVidWcKKworc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUdTdHJlYW1lckRlYnVnKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdS
ZWdpc3RlcmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBb
XSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9hdWRpb19jYXB0dXJl
X3NvdXJjZV9kZWJ1ZywgIndlYmtpdGF1ZGlvY2FwdHVyZXNvdXJjZSIsIDAsICJXZWJLaXQgQXVk
aW8gQ2FwdHVyZSBTb3VyY2UuIik7CisgICAgfSk7Cit9CisKK2NsYXNzIEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZUZhY3RvcnkgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9D
YXB0dXJlRmFjdG9yeSB7CitwdWJsaWM6CisgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRl
QXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVk
aWFDb25zdHJhaW50cyogY29uc3RyYWludHMpIGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4g
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoZGV2aWNlLnBlcnNpc3RlbnRJZCgp
LCBjb25zdHJhaW50cyk7CisgICAgfQorfTsKKworc3RhdGljIEdTdHJlYW1lckF1ZGlvQ2FwdHVy
ZVNvdXJjZUZhY3RvcnkmIGxpYldlYlJUQ0F1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2VGYWN0
b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0b3J5LmdldCgpOworfQorCitDYXB0dXJlU291
cmNlT3JFcnJvciBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAg
ICBhdXRvIGRldmljZSA9IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmds
ZXRvbigpLmdzdHJlYW1lckRldmljZVdpdGhVSUQoZGV2aWNlSUQpOworICAgIGlmICghZGV2aWNl
KSB7CisgICAgICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIkdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKCk6IEdTdHJlYW1lciBkaWQgbm90IGZpbmQgdGhl
IGRldmljZTogJXMuIiwgZGV2aWNlSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBD
YXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKGVycm9yTWVzc2FnZSkpOworICAgIH0KKworICAg
IGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2Uo
ZGV2aWNlLnZhbHVlKCkpKTsKKworICAgIGlmIChjb25zdHJhaW50cykgeworICAgICAgICBhdXRv
IHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0LnZhbHVlKCku
Zmlyc3QpOworICAgIH0KKyAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShz
b3VyY2UpKTsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYg
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gbGli
V2ViUlRDQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSgpOworfQorCitHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2U6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShHU3RyZWFtZXJDYXB0dXJl
RGV2aWNlIGRldmljZSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlLnBlcnNpc3Rl
bnRJZCgpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywgZGV2aWNlLmxhYmVsKCkp
CisgICAgLCBtX2NhcHR1cmVyKHN0ZDo6bWFrZV91bmlxdWU8R1N0cmVhbWVyQXVkaW9DYXB0dXJl
cj4oZGV2aWNlKSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyRGVidWcoKTsKK30KKworR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoY29u
c3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogUmVhbHRpbWVN
ZWRpYVNvdXJjZShkZXZpY2VJRCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIG5h
bWUpCisgICAgLCBtX2NhcHR1cmVyKHN0ZDo6bWFrZV91bmlxdWU8R1N0cmVhbWVyQXVkaW9DYXB0
dXJlcj4oKSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyRGVidWcoKTsKK30KKworR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlOjp+R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKCkKK3sK
K30KKwordm9pZCBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0
YSgpCit7CisgICAgbV9jYXB0dXJlci0+c2V0dXBQaXBlbGluZSgpOworICAgIG1fY2FwdHVyZXIt
PnNldFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2Fw
dHVyZXItPnNpbmsoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1NhbXBsZUNhbGxiYWNr
KSwgdGhpcyk7CisgICAgbV9jYXB0dXJlci0+cGxheSgpOworfQorCitHc3RGbG93UmV0dXJuIEdT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6bmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCog
c2luaywgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKiBzb3VyY2UpCit7CisgICAgYXV0byBz
YW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhz
aW5rKSkpOworCisgICAgLy8gRklYTUUgLSBmaWd1cmUgb3V0IGEgd2F5IHRvIGF2b2lkIGNvcHlp
bmcgKG9uIHdyaXRlKSB0aGUgZGF0YS4KKyAgICBHc3RCdWZmZXIqIGJ1ZiA9IGdzdF9zYW1wbGVf
Z2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOworICAgIGF1dG8gZnJhbWVzKHN0ZDo6dW5pcXVlX3B0
cjxHU3RyZWFtZXJBdWRpb0RhdGE+KG5ldyBHU3RyZWFtZXJBdWRpb0RhdGEoV1RGTW92ZShzYW1w
bGUpKSkpOworICAgIGF1dG8gc3RyZWFtRGVzYyhzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbj4obmV3IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24o
ZnJhbWVzLT5nZXRBdWRpb0luZm8oKSkpKTsKKworICAgIHNvdXJjZS0+YXVkaW9TYW1wbGVzQXZh
aWxhYmxlKAorICAgICAgICBNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZF
Ul9QVFMoYnVmKSksIEdfVVNFQ19QRVJfU0VDKSwKKyAgICAgICAgKmZyYW1lcywgKnN0cmVhbURl
c2MsIGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmKSAvIGZyYW1lcy0+Z2V0QXVkaW9JbmZvKCkuYnBm
KTsKKworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKwordm9pZCBHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9jYXB0dXJlci0+c2luaygpLCByZWludGVycHJldF9jYXN0
PGdwb2ludGVyPihuZXdTYW1wbGVDYWxsYmFjayksIHRoaXMpOworICAgIG1fY2FwdHVyZXItPnN0
b3AoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIGlmICht
X2NhcGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnZhbHVlKCk7CisK
KyAgICB1aW50IGk7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gbV9jYXB0dXJlci0+Y2Fw
cygpOworICAgIGludCBtaW5TYW1wbGVSYXRlID0gMCwgbWF4U2FtcGxlUmF0ZSA9IDA7CisgICAg
Zm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOyBpKyspIHsKKyAg
ICAgICAgaW50IGNhcGFiaWxpdHlNaW5TYW1wbGVSYXRlID0gMCwgY2FwYWJpbGl0eU1heFNhbXBs
ZVJhdGUgPSAwOworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1
Y3R1cmUoY2Fwcy5nZXQoKSwgaSk7CisKKyAgICAgICAgLy8gT25seSBhY2NlcHQgcmF3IGF1ZGlv
IGZvciBub3cuCisgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHIsICJhdWRp
by94LXJhdyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9nZXQoc3RyLCAicmF0ZSIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgJmNhcGFiaWxpdHlNaW5TYW1w
bGVSYXRlLCAmY2FwYWJpbGl0eU1heFNhbXBsZVJhdGUsIG51bGxwdHIpOworICAgICAgICBpZiAo
aSA+IDApIHsKKyAgICAgICAgICAgIG1pblNhbXBsZVJhdGUgPSBzdGQ6Om1pbihtaW5TYW1wbGVS
YXRlLCBjYXBhYmlsaXR5TWluU2FtcGxlUmF0ZSk7CisgICAgICAgICAgICBtYXhTYW1wbGVSYXRl
ID0gc3RkOjptYXgobWF4U2FtcGxlUmF0ZSwgY2FwYWJpbGl0eU1heFNhbXBsZVJhdGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWluU2FtcGxlUmF0ZSA9IGNhcGFiaWxpdHlNaW5T
YW1wbGVSYXRlOworICAgICAgICAgICAgbWF4U2FtcGxlUmF0ZSA9IGNhcGFiaWxpdHlNYXhTYW1w
bGVSYXRlOworICAgICAgICB9CisgICAgfQorCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllcyBjYXBhYmlsaXRpZXMoc2V0dGluZ3MoKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpKTsK
KyAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQoaWQoKSk7CisgICAgY2FwYWJpbGl0aWVzLnNl
dEVjaG9DYW5jZWxsYXRpb24oZGVmYXVsdEVjaG9DYW5jZWxsYXRpb25DYXBhYmlsaXR5KTsKKyAg
ICBjYXBhYmlsaXRpZXMuc2V0Vm9sdW1lKGRlZmF1bHRWb2x1bWVDYXBhYmlsaXR5KTsKKyAgICBj
YXBhYmlsaXRpZXMuc2V0U2FtcGxlUmF0ZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pblNhbXBs
ZVJhdGUsIG1heFNhbXBsZVJhdGUpKTsKKyAgICBtX2NhcGFiaWxpdGllcyA9IFdURk1vdmUoY2Fw
YWJpbGl0aWVzKTsKKworICAgIHJldHVybiBtX2NhcGFiaWxpdGllcy52YWx1ZSgpOworfQorCiti
b29sIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlTYW1wbGVSYXRlKGludCBzYW1w
bGVSYXRlKQoreworICAgIHJldHVybiBtX2NhcHR1cmVyLT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJh
dGUpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIEdTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIGlmICghbV9jdXJyZW50
U2V0dGluZ3MpIHsKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHNldHRpbmdz
OworICAgICAgICBzZXR0aW5ncy5zZXREZXZpY2VJZChpZCgpKTsKKworICAgICAgICBSZWFsdGlt
ZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgc3VwcG9ydGVkQ29uc3RyYWludHM7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRWNob0NhbmNlbGxhdGlvbih0
cnVlKTsKKyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNWb2x1bWUodHJ1
ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzU2FtcGxlUmF0ZSh0
cnVlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVk
Q29uc3RyYWludHMpOworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RGTW92ZShzZXR0
aW5ncyk7CisgICAgfQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFZvbHVtZSh2b2x1bWUo
KSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSgpKTsK
KyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0RWNob0NhbmNlbGxhdGlvbihlY2hvQ2FuY2VsbGF0
aW9uKCkpOworCisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjNmYTRhOWMyZTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlh
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJX
RUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9DYXB0dXJl
ci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UgeworcHVi
bGljOgorICAgIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGUoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBBdWRpb0NhcHR1cmVGYWN0b3J5JiBmYWN0b3J5KCk7CisKKyAgICBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fY2Fw
dHVyZXItPnBpcGVsaW5lKCk7IH0KKyAgICBHU3RyZWFtZXJDYXB0dXJlciogY2FwdHVyZXIoKSB7
IHJldHVybiBtX2NhcHR1cmVyLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBHU3RyZWFtZXJB
dWRpb0NhcHR1cmVTb3VyY2UoR1N0cmVhbWVyQ2FwdHVyZURldmljZSk7CisgICAgR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CisgICAgdmlydHVhbCB+R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKCk7CisgICAg
dm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3BQcm9kdWNp
bmdEYXRhKCkgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVN
ZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJsZSBzdGQ6
Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBhcHBseVNhbXBsZVJhdGUoaW50KSBmaW5hbDsKKyAgICBi
b29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBi
b29sIGFwcGx5Vm9sdW1lKGRvdWJsZSkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI+IG1fY2FwdHVyZXI7CisKKyAgICBz
dGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiwgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlKik7CisgICAgdm9pZCB0cmlnZ2VyU2FtcGxlQXZhaWxhYmxl
KEdzdFNhbXBsZSopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjQxNTdlZjcwYTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVu
aWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJv
ICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAi
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oIgorCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Gb3Jt
YXQuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIo
R1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihk
ZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRl
IiwgR19UWVBFX0lOVCwgTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGUsIG51bGxwdHIp
KSkKK3sKK30KKworR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJl
cigpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXVkaW90ZXN0c3JjIiwgYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBMaWJX
ZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZSwgbnVsbHB0cikpKQoreworfQorCitHc3RFbGVt
ZW50KiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIoKQoreworICAgIGF1
dG8gY29udmVydGVyID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCJhdWRpb2NvbnZl
cnQgISBhdWRpb3Jlc2FtcGxlIiwgVFJVRSwgbnVsbHB0cik7CisKKyAgICBBU1NFUlQoY29udmVy
dGVyKTsKKworICAgIHJldHVybiBjb252ZXJ0ZXI7Cit9CisKK2Jvb2wgR1N0cmVhbWVyQXVkaW9D
YXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKK3sKKworICAgIGlmIChzYW1w
bGVSYXRlID4gMCkgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IlNldHRpbmcgU2FtcGxlUmF0ZSAlZCIsIHNhbXBsZVJhdGUpOworICAgICAgICBtX2NhcHMgPSBh
ZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQ
RV9JTlQsIHNhbXBsZVJhdGUsIG51bGxwdHIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5vdCBmb3JjaW5nIHNhbXBsZSByYXRlIik7
CisgICAgICAgIG1fY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJh
dWRpby94LXJhdyIpKTsKKyAgICB9CisKKyAgICBpZiAoIW1fY2Fwc2ZpbHRlci5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc2ZpbHRlci5nZXQo
KSwgImNhcHMiLCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9D
YXB0dXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uOWFhZjc2MWQ2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNv
bT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYg
VVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyQXVkaW9DYXB0dXJlciA6IHB1YmxpYyBH
U3RyZWFtZXJDYXB0dXJlciB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlcihH
U3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAgICBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKCk7CisK
KyAgICBHc3RFbGVtZW50KiBjcmVhdGVDb252ZXJ0ZXIoKSBmaW5hbDsKKyAgICBjb25zdCBjaGFy
KiBuYW1lKCkgZmluYWwgeyByZXR1cm4gIkF1ZGlvIjsgfQorCisgICAgYm9vbCBzZXRTYW1wbGVS
YXRlKGludCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckF1ZGlvRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi45NTNmM2E4YTBlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5j
b20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYm
IFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1BdWRpb0RhdGEuaCIKKworI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHU3RyZWFtZXJBdWRpb0RhdGEgOiBwdWJsaWMg
UGxhdGZvcm1BdWRpb0RhdGEgeworcHVibGljOgorICAgIEdTdHJlYW1lckF1ZGlvRGF0YShHUmVm
UHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUsIEdzdEF1ZGlvSW5mbyBpbmZvKQorICAgICAgICA6IG1f
c2FtcGxlKFdURk1vdmUoc2FtcGxlKSkKKyAgICAgICAgLCBtX2F1ZGlvSW5mbyhpbmZvKQorICAg
IHsKKyAgICB9CisKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEoR1JlZlB0cjxHc3RTYW1wbGU+JiYg
c2FtcGxlKQorICAgICAgICA6IG1fc2FtcGxlKFdURk1vdmUoc2FtcGxlKSkKKyAgICB7CisgICAg
ICAgIGdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcygmbV9hdWRpb0luZm8sIGdzdF9zYW1wbGVfZ2V0
X2NhcHMobV9zYW1wbGUuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBHc3RTYW1wbGUqIGdldFNhbXBs
ZSgpIHsgcmV0dXJuIG1fc2FtcGxlLmdldCgpOyB9CisgICAgR3N0QXVkaW9JbmZvIGdldEF1ZGlv
SW5mbygpIHtyZXR1cm4gbV9hdWRpb0luZm87IH0KKworcHJpdmF0ZToKKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBLaW5kOjpHU3RyZWFtZXJBdWRpb0RhdGE7IH0KKyAgICBHUmVmUHRy
PEdzdFNhbXBsZT4gbV9zYW1wbGU7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NhcHM7CisKKyAg
ICBHc3RBdWRpb0luZm8gbV9hdWRpb0luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBV
U0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjFmZjU5YjJhMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApA
QCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEu
Y29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZmluYWw6IHB1YmxpYyBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uIHsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKEdzdEF1ZGlvSW5mbyBpbmZvKQorICAgICAgICA6IG1faW5mbyhpbmZvKQorICAgICAg
ICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCisg
ICAgeworICAgIH0KKworICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oR3N0QXVk
aW9JbmZvICppbmZvKQorICAgICAgICA6IG1faW5mbygqaW5mbykKKyAgICAgICAgLCBtX2NhcHMo
YWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQorICAgIHsKKyAgICB9
CisKKyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkKKyAgICB7CisgICAgICAg
IGdzdF9hdWRpb19pbmZvX2luaXQoJm1faW5mbyk7CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBP
UlQgfkdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKSB7IH07CisKKyAgICBjb25zdCBQ
bGF0Zm9ybURlc2NyaXB0aW9uJiBwbGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IHsgUGxhdGZvcm1EZXNjcmlwdGlvbjo6R1N0
cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPigmbV9pbmZvKSB9OworCisgICAgICAgIHJldHVybiBt
X3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgUENNRm9y
bWF0IGZvcm1hdCgpIGNvbnN0IGZpbmFsIHsKKyAgICAgICAgc3dpdGNoIChHU1RfQVVESU9fSU5G
T19GT1JNQVQoJm1faW5mbykpIHsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNkxF
OgorICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzE2QkU6CisgICAgICAgICAgICByZXR1
cm4gSW50MTY7CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMzJMRToKKyAgICAgICAg
Y2FzZSBHU1RfQVVESU9fRk9STUFUX1MzMkJFOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyTEU6CisgICAgICAgIGNhc2UgR1NUX0FV
RElPX0ZPUk1BVF9GMzJCRToKKyAgICAgICAgICAgIHJldHVybiBGbG9hdDMyOworICAgICAgICBj
YXNlIEdTVF9BVURJT19GT1JNQVRfRjY0TEU6CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1B
VF9GNjRCRToKKyAgICAgICAgICAgIHJldHVybiBGbG9hdDY0OworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vbmU7CisgICAg
fQorCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVE
SU9fSU5GT19SQVRFKCZtX2luZm8pOyB9CisgICAgYm9vbCBpc1BDTSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGZvcm1hdCgpICE9IE5vbmU7IH0KKyAgICBib29sIGlzSW50ZXJsZWF2ZWQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9fSU5GT19MQVlPVVQoJm1faW5mbykgPT0gR1NUX0FV
RElPX0xBWU9VVF9JTlRFUkxFQVZFRDsgfQorICAgIGJvb2wgaXNTaWduZWRJbnRlZ2VyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fSVNfSU5URUdFUigmbV9pbmZvKTsgfQor
ICAgIGJvb2wgaXNOYXRpdmVFbmRpYW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9f
SU5GT19FTkRJQU5ORVNTKCZtX2luZm8pID09IEdfQllURV9PUkRFUjsgfQorICAgIGJvb2wgaXNG
bG9hdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0lTX0ZMT0FUKCZtX2lu
Zm8pOyB9CisKKyAgICB1aW50MzJfdCBudW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBpc0ludGVybGVhdmVkKCkgPyBHU1RfQVVESU9fSU5GT19DSEFOTkVM
UygmbV9pbmZvKSA6IFRSVUU7IH0KKyAgICB1aW50MzJfdCBudW1iZXJPZkNoYW5uZWxTdHJlYW1z
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMoJm1faW5mbyk7
IH0KKyAgICB1aW50MzJfdCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
R1NUX0FVRElPX0lORk9fQ0hBTk5FTFMoJm1faW5mbyk7IH0KKyAgICB1aW50MzJfdCBzYW1wbGVX
b3JkU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0JQUygmbV9pbmZv
KTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBnc3RfYXVkaW9faW5mb19pc19lcXVhbCgmbV9pbmZv
LCAmb3RoZXIubV9pbmZvKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhl
cik7IH0KKworICAgIEdzdENhcHMqIGNhcHMoKSB7IHJldHVybiBtX2NhcHMuZ2V0KCk7IH0KKyAg
ICBHc3RBdWRpb0luZm8qIGdldEluZm8oKSB7IHJldHVybiAmbV9pbmZvOyB9CisKK3ByaXZhdGU6
CisgICAgR3N0QXVkaW9JbmZvIG1faW5mbzsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY2FwczsK
KyAgICBtdXRhYmxlIFBsYXRmb3JtRGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwor
fTsKKworfSAvLyBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjY0MjJkZGQ4M2EzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2UuaApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBB
dXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRl
ICJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisKKyNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
Q2FwdHVyZURldmljZSA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBHU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlKEdSZWZQdHI8R3N0RGV2aWNlPiYmIGRldmljZSwgY29uc3QgU3Ry
aW5nJiBwZXJzaXN0ZW50SWQsIERldmljZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsYWJlbCwg
Y29uc3QgU3RyaW5nJiBncm91cElkID0gZW1wdHlTdHJpbmcoKSkKKyAgICAgICAgOiBDYXB0dXJl
RGV2aWNlKHBlcnNpc3RlbnRJZCwgdHlwZSwgbGFiZWwsIGdyb3VwSWQpCisgICAgICAgICwgbV9k
ZXZpY2UoZGV2aWNlKQorICAgIHsKKyAgICB9CisKKyAgICBHc3RDYXBzKiBjYXBzKCkgY29uc3Qg
eyByZXR1cm4gZ3N0X2RldmljZV9nZXRfY2FwcyhtX2RldmljZS5nZXQoKSk7IH0KKyAgICBHc3RE
ZXZpY2UqIGRldmljZSgpIHsgcmV0dXJuIG1fZGV2aWNlLmdldCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgR1JlZlB0cjxHc3REZXZpY2U+IG1fZGV2aWNlOworfTsKKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkgICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2I3ODI4N2U3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2Fw
dHVyZURldmljZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNh
dW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0
cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyJiBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyPiBtYW5h
Z2VyOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCitHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyJiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24o
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyPiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCitHU3RyZWFtZXJE
aXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXImIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVh
bWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyPiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5h
Z2VyOworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lckNhcHR1cmVEZXZpY2U+IEdTdHJlYW1l
ckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGNvbnN0IFN0cmlu
ZyYgZGV2aWNlSUQpCit7CisgICAgY2FwdHVyZURldmljZXMoKTsKKworICAgIGZvciAoYXV0byYg
ZGV2aWNlIDogbV9nc3RyZWFtZXJEZXZpY2VzKSB7CisgICAgICAgIGlmIChkZXZpY2UucGVyc2lz
dGVudElkKCkgPT0gZGV2aWNlSUQpCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlOworICAgIH0K
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitjb25zdCBWZWN0b3I8Q2FwdHVyZURldmlj
ZT4mIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlcygpCit7Cisg
ICAgaW5pdGlhbGl6ZUdTdHJlYW1lcigpOworICAgIGlmIChtX2RldmljZXMuaXNFbXB0eSgpKQor
ICAgICAgICByZWZyZXNoQ2FwdHVyZURldmljZXMoKTsKKworICAgIHJldHVybiBtX2RldmljZXM7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZUFkZGVkKEdS
ZWZQdHI8R3N0RGV2aWNlPiYmIGRldmljZSkKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVy
ZT4gcHJvcGVydGllcyhnc3RfZGV2aWNlX2dldF9wcm9wZXJ0aWVzKGRldmljZS5nZXQoKSkpOwor
ICAgIGNvbnN0IGNoYXIqIGtsYXNzID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHByb3BlcnRp
ZXMuZ2V0KCksICJkZXZpY2UuY2xhc3MiKTsKKworICAgIGlmIChrbGFzcyAmJiAhZ19zdHJjbXAw
KGtsYXNzLCAibW9uaXRvciIpKQorICAgICAgICByZXR1cm47CisKKyAgICBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlIHR5cGUgPSBkZXZpY2VUeXBlKCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBk
ZXZpY2VDbGFzc0NoYXIoZ3N0X2RldmljZV9nZXRfZGV2aWNlX2NsYXNzKGRldmljZS5nZXQoKSkp
OworICAgIFN0cmluZyBkZXZpY2VDbGFzcyhTdHJpbmcoZGV2aWNlQ2xhc3NDaGFyLmdldCgpKSk7
CisgICAgaWYgKHR5cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSAm
JiAhZGV2aWNlQ2xhc3Muc3RhcnRzV2l0aCgiQXVkaW8iKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICh0eXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSAmJiAhZGV2aWNl
Q2xhc3Muc3RhcnRzV2l0aCgiVmlkZW8iKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhp
cyBpc24ndCByZWFsbHkgYSBVSUQgYnV0IHNob3VsZCBiZSBnb29kIGVub3VnaCAobGlid2VicnRj
CisgICAgLy8gaXRzZWxmIGRvZXMgdGhhdCBhdCBsZWFzdCBmb3IgcHVsc2VhdWRpbyBkZXZpY2Vz
KS4KKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRldmljZU5hbWUoZ3N0X2RldmljZV9nZXRfZGlzcGxh
eV9uYW1lKGRldmljZS5nZXQoKSkpOworICAgIFN0cmluZyBpZGVudGlmaWVyID0gU3RyaW5nOjpm
cm9tVVRGOChkZXZpY2VOYW1lLmdldCgpKTsKKworICAgIGF1dG8gZ3N0Q2FwdHVyZURldmljZSA9
IEdTdHJlYW1lckNhcHR1cmVEZXZpY2UoV1RGTW92ZShkZXZpY2UpLCBpZGVudGlmaWVyLCB0eXBl
LCBpZGVudGlmaWVyKTsKKyAgICBnc3RDYXB0dXJlRGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7Cisg
ICAgbV9nc3RyZWFtZXJEZXZpY2VzLmFwcGVuZChXVEZNb3ZlKGdzdENhcHR1cmVEZXZpY2UpKTsK
KyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIENhcHR1cmVEZXZpY2UgY29weSBpbiBvdGhlciB2ZWN0
b3IganVzdCBmb3IgY2FwdHVyZURldmljZXMgQVBJLgorICAgIGF1dG8gY2FwdHVyZURldmljZSA9
IENhcHR1cmVEZXZpY2UoaWRlbnRpZmllciwgdHlwZSwgaWRlbnRpZmllcik7CisgICAgY2FwdHVy
ZURldmljZS5zZXRFbmFibGVkKHRydWUpOworICAgIG1fZGV2aWNlcy5hcHBlbmQoV1RGTW92ZShj
YXB0dXJlRGV2aWNlKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXI6
OnJlZnJlc2hDYXB0dXJlRGV2aWNlcygpCit7CisgICAgaWYgKCFtX2RldmljZU1vbml0b3IpIHsK
KyAgICAgICAgbV9kZXZpY2VNb25pdG9yID0gYWRvcHRHUmVmKGdzdF9kZXZpY2VfbW9uaXRvcl9u
ZXcoKSk7CisKKyAgICAgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlID0gZGV2aWNl
VHlwZSgpOworICAgICAgICBpZiAodHlwZSA9PSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpD
YW1lcmEpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKTsKKyAgICAgICAgICAgIGdz
dF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyKG1fZGV2aWNlTW9uaXRvci5nZXQoKSwgIlZpZGVv
L1NvdXJjZSIsIGNhcHMuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkgeworICAgICAgICAgICAgR1JlZlB0cjxH
c3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoImF1ZGlv
L3gtcmF3IikpOworICAgICAgICAgICAgZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXIobV9k
ZXZpY2VNb25pdG9yLmdldCgpLCAiQXVkaW8vU291cmNlIiwgY2Fwcy5nZXQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBtb25pdG9yIGZvciBhZGRlZC9yZW1vdmVkIG1lc3Nh
Z2VzIG9uIHRoZSBidXMuCisgICAgfQorCisgICAgaWYgKCFnc3RfZGV2aWNlX21vbml0b3Jfc3Rh
cnQobV9kZXZpY2VNb25pdG9yLmdldCgpKSkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qo
bV9kZXZpY2VNb25pdG9yLmdldCgpLCAiQ291bGQgbm90IHN0YXJ0IGRldmljZSBtb25pdG9yIik7
CisgICAgICAgIG1fZGV2aWNlTW9uaXRvciA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEdMaXN0KiBkZXZpY2VzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZp
Y2VzKG1fZGV2aWNlTW9uaXRvci5nZXQoKSk7CisgICAgd2hpbGUgKGRldmljZXMpIHsKKyAgICAg
ICAgR1JlZlB0cjxHc3REZXZpY2U+IGRldmljZSA9IGFkb3B0R1JlZihHU1RfREVWSUNFX0NBU1Qo
ZGV2aWNlcy0+ZGF0YSkpOworICAgICAgICBkZXZpY2VBZGRlZChXVEZNb3ZlKGRldmljZSkpOwor
ICAgICAgICBkZXZpY2VzID0gZ19saXN0X2RlbGV0ZV9saW5rKGRldmljZXMsIGRldmljZXMpOwor
ICAgIH0KKworICAgIGdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wKG1fZGV2aWNlTW9uaXRvci5nZXQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi44NjM5MjQxNGQwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFu
YWdlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJF
QU1FUikKKworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdl
ciA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RkOjpvcHRp
b25hbDxHU3RyZWFtZXJDYXB0dXJlRGV2aWNlPiBnc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGNvbnN0
IFN0cmluZyYpOworCisgICAgdm9pZCByZWZyZXNoQ2FwdHVyZURldmljZXMoKSBmaW5hbDsKKyAg
ICBjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7Cisg
ICAgdmlydHVhbCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSA9IDA7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBkZXZpY2VBZGRlZChHUmVmUHRyPEdzdERldmljZT4mJik7CisK
KyAgICBHUmVmUHRyPEdzdERldmljZU1vbml0b3I+IG1fZGV2aWNlTW9uaXRvcjsKKyAgICBWZWN0
b3I8R1N0cmVhbWVyQ2FwdHVyZURldmljZT4gbV9nc3RyZWFtZXJEZXZpY2VzOworICAgIFZlY3Rv
cjxDYXB0dXJlRGV2aWNlPiBtX2RldmljZXM7Cit9OworCitjbGFzcyBHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VN
YW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyQXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZURldmljZU1hbmFnZXImIHNpbmdsZXRvbigpOworICAgIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGUgZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6Ok1pY3JvcGhvbmU7IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKKyAgICB+R1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKK307CisKK2NsYXNzIEdTdHJlYW1lclZpZGVvQ2FwdHVy
ZURldmljZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIgeworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0NhcHR1
cmVEZXZpY2VNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVhbWVyVmlkZW9DYXB0
dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CisgICAgc3RhdGljIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIHZpZGVvRmFjdG9yeSgpOworICAgIENhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZp
Y2U6OkRldmljZVR5cGU6OkNhbWVyYTsgfQorcHJpdmF0ZToKKyAgICBHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJWaWRlb0NhcHR1
cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworfTsKKworY2xhc3MgR1N0cmVhbWVyRGlzcGxh
eUNhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZp
Y2VNYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyRGlz
cGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVhbWVy
RGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaW5nbGV0b24oKTsKKyAgICBDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlOjpTY3JlZW47IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyRGlzcGxheUNh
cHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJEaXNwbGF5Q2Fw
dHVyZURldmljZU1hbmFnZXIoKSA9IGRlZmF1bHQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQ2FwdHVyZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5l
Y2ZmMDM1MWI5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKQEAgLTAsMCArMSwxOTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
IEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhv
cjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2VuZGlmCisK
KyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJS
VEMpICYmIFVTRShHU1RSRUFNRVIpICYmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQorI2lu
Y2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNp
bmsuaD4KKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KKworR1NUX0RFQlVH
X0NBVEVHT1JZKHdlYmtpdF9jYXB0dXJlcl9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVM
VCB3ZWJraXRfY2FwdHVyZXJfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
dm9pZCBpbml0aWFsaXplR1N0cmVhbWVyQW5kRGVidWcoKQoreworICAgIGluaXRpYWxpemVHU3Ry
ZWFtZXIoKTsKKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFn
OworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAgICAgICAg
R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X2NhcHR1cmVyX2RlYnVnLCAid2Via2l0Y2Fw
dHVyZXIiLCAwLCAiV2ViS2l0IENhcHR1cmVyIik7CisgICAgfSk7Cit9CisKK0dTdHJlYW1lckNh
cHR1cmVyOjpHU3RyZWFtZXJDYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSwg
R1JlZlB0cjxHc3RDYXBzPiBjYXBzKQorICAgIDogbV9kZXZpY2UoZGV2aWNlLmRldmljZSgpKQor
ICAgICwgbV9jYXBzKGNhcHMpCisgICAgLCBtX3NvdXJjZUZhY3RvcnkobnVsbHB0cikKK3sKKyAg
ICBpbml0aWFsaXplR1N0cmVhbWVyQW5kRGVidWcoKTsKK30KKworR1N0cmVhbWVyQ2FwdHVyZXI6
OkdTdHJlYW1lckNhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJjZUZhY3RvcnksIEdSZWZQdHI8R3N0
Q2Fwcz4gY2FwcykKKyAgICA6IG1fZGV2aWNlKG51bGxwdHIpCisgICAgLCBtX2NhcHMoY2FwcykK
KyAgICAsIG1fc291cmNlRmFjdG9yeShzb3VyY2VGYWN0b3J5KQoreworICAgIGluaXRpYWxpemVH
U3RyZWFtZXJBbmREZWJ1ZygpOworfQorCitHU3RyZWFtZXJDYXB0dXJlcjo6fkdTdHJlYW1lckNh
cHR1cmVyKCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZGlzY29ubmVjdFNpbXBs
ZUJ1c01lc3NhZ2VDYWxsYmFjayhwaXBlbGluZSgpKTsKK30KKworR3N0RWxlbWVudCogR1N0cmVh
bWVyQ2FwdHVyZXI6OmNyZWF0ZVNvdXJjZSgpCit7CisgICAgaWYgKG1fc291cmNlRmFjdG9yeSkg
eworICAgICAgICBtX3NyYyA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CisgICAgICAg
IGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCisgICAgICAgICAgICBnX29iamVjdF9z
ZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElN
RSwgbnVsbHB0cik7CisKKyAgICAgICAgQVNTRVJUKG1fc3JjKTsKKyAgICAgICAgcmV0dXJuIG1f
c3JjLmdldCgpOworICAgIH0KKworICAgIEFTU0VSVChtX2RldmljZSk7CisgICAgR1VuaXF1ZVB0
cjxjaGFyPiBzb3VyY2VOYW1lKGdfc3RyZHVwX3ByaW50ZigiJXNfJXAiLCBuYW1lKCksIHRoaXMp
KTsKKyAgICBtX3NyYyA9IGdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnQobV9kZXZpY2UuZ2V0KCks
IHNvdXJjZU5hbWUuZ2V0KCkpOworICAgIEFTU0VSVChtX3NyYyk7CisKKyAgICByZXR1cm4gbV9z
cmMuZ2V0KCk7Cit9CisKK0dzdENhcHMqIEdTdHJlYW1lckNhcHR1cmVyOjpjYXBzKCkKK3sKKyAg
ICBpZiAobV9zb3VyY2VGYWN0b3J5KSB7CisgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gZWxl
bWVudCA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CisgICAgICAgIGF1dG8gcGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGVsZW1lbnQuZ2V0KCksICJzcmMi
KSk7CisKKyAgICAgICAgcmV0dXJuIGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQuZ2V0KCksIG51bGxw
dHIpOworICAgIH0KKworICAgIEFTU0VSVChtX2RldmljZSk7CisgICAgcmV0dXJuIGdzdF9kZXZp
Y2VfZ2V0X2NhcHMobV9kZXZpY2UuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lckNhcHR1cmVy
OjpzZXR1cFBpcGVsaW5lKCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZGlzY29u
bmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhwaXBlbGluZSgpKTsKKworICAgIG1fcGlwZWxp
bmUgPSBtYWtlRWxlbWVudCgicGlwZWxpbmUiKTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
c291cmNlID0gY3JlYXRlU291cmNlKCk7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBjb252ZXJ0
ZXIgPSBjcmVhdGVDb252ZXJ0ZXIoKTsKKworICAgIG1fY2Fwc2ZpbHRlciA9IG1ha2VFbGVtZW50
KCJjYXBzZmlsdGVyIik7CisgICAgbV90ZWUgPSBtYWtlRWxlbWVudCgidGVlIik7CisgICAgbV9z
aW5rID0gbWFrZUVsZW1lbnQoImFwcHNpbmsiKTsKKworICAgIGdzdF9hcHBfc2lua19zZXRfZW1p
dF9zaWduYWxzKEdTVF9BUFBfU0lOSyhtX3NpbmsuZ2V0KCkpLCBUUlVFKTsKKyAgICBnX29iamVj
dF9zZXQobV9jYXBzZmlsdGVyLmdldCgpLCAiY2FwcyIsIG1fY2Fwcy5nZXQoKSwgbnVsbHB0cik7
CisKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIHNvdXJj
ZS5nZXQoKSwgY29udmVydGVyLmdldCgpLCBtX2NhcHNmaWx0ZXIuZ2V0KCksIG1fdGVlLmdldCgp
LCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkoc291cmNlLmdldCgpLCBjb252
ZXJ0ZXIuZ2V0KCksIG1fY2Fwc2ZpbHRlci5nZXQoKSwgbV90ZWUuZ2V0KCksIG51bGxwdHIpOwor
CisgICAgYWRkU2luayhtX3NpbmsuZ2V0KCkpOworCisgICAgY29ubmVjdFNpbXBsZUJ1c01lc3Nh
Z2VDYWxsYmFjayhwaXBlbGluZSgpKTsKK30KKworR3N0RWxlbWVudCogR1N0cmVhbWVyQ2FwdHVy
ZXI6Om1ha2VFbGVtZW50KGNvbnN0IGNoYXIqIGZhY3RvcnlOYW1lKQoreworICAgIGF1dG8gZWxl
bWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShmYWN0b3J5TmFtZSwgbnVsbHB0cik7Cisg
ICAgQVNTRVJUKGVsZW1lbnQpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gY2FwdHVyZXJOYW1lKGdf
c3RyZHVwX3ByaW50ZigiJXNfY2FwdHVyZXJfJXNfJXAiLCBuYW1lKCksIEdTVF9PQkpFQ1RfTkFN
RShlbGVtZW50KSwgdGhpcykpOworICAgIGdzdF9vYmplY3Rfc2V0X25hbWUoR1NUX09CSkVDVChl
bGVtZW50KSwgY2FwdHVyZXJOYW1lLmdldCgpKTsKKworICAgIHJldHVybiBlbGVtZW50OworfQor
Cit2b2lkIEdTdHJlYW1lckNhcHR1cmVyOjphZGRTaW5rKEdzdEVsZW1lbnQqIG5ld1NpbmspCit7
CisgICAgQVNTRVJUKG1fcGlwZWxpbmUpOworICAgIEFTU0VSVChtX3RlZSk7CisKKyAgICBhdXRv
IHF1ZXVlID0gbWFrZUVsZW1lbnQoInF1ZXVlIik7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1Rf
QklOKHBpcGVsaW5lKCkpLCBxdWV1ZSwgbmV3U2luaywgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1l
bnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19z
dGF0ZV93aXRoX3BhcmVudChuZXdTaW5rKTsKKworICAgIGlmICghZ3N0X2VsZW1lbnRfbGlua19w
YWRzKG1fdGVlLmdldCgpLCAic3JjXyV1IiwgcXVldWUsICJzaW5rIikpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWdz
dF9lbGVtZW50X2xpbmsocXVldWUsIG5ld1NpbmspKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5ld1NpbmsgPT0gbV9z
aW5rLmdldCgpKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
U2V0dGluZyBxdWV1ZSBhcyBsZWFreSB1cHN0cmVhbSIKKyAgICAgICAgICAgICIgc28gdGhhdCB0
aGUgcGxheWVyIGNhbiBzZXQgdGhlIHNpbmsgdG8gUEFVU0VEIHdpdGhvdXQgIgorICAgICAgICAg
ICAgIiBzZXR0aW5nIHRoZSB3aG9sZSBjYXB0dXJlciB0byBQQVVTRUQiKTsKKyAgICAgICAgZ19v
YmplY3Rfc2V0KHF1ZXVlLCAibGVha3kiLCAyIC8qIHVwc3RyZWFtICovLCBudWxscHRyKTsKKyAg
ICB9CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkFkZGluZyBzaW5rOiAlIiBH
U1RfUFRSX0ZPUk1BVCwgbmV3U2luayk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGR1bXBOYW1l
KGdfc3RyZHVwX3ByaW50ZigiJXNfc2lua18lc19hZGRlZCIsIEdTVF9PQkpFQ1RfTkFNRShwaXBl
bGluZSgpKSwgR1NUX09CSkVDVF9OQU1FKG5ld1NpbmspKSk7CisgICAgR1NUX0RFQlVHX0JJTl9U
T19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4ocGlwZWxpbmUoKSksIEdTVF9ERUJVR19HUkFQSF9T
SE9XX0FMTCwgZHVtcE5hbWUuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lckNhcHR1cmVyOjpw
bGF5KCkKK3sKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CisKKyAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkdvaW5nIHRvIFBMQVlJTkchIik7CisKKyAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUocGlwZWxpbmUoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworfQorCit2b2lkIEdTdHJlYW1l
ckNhcHR1cmVyOjpzdG9wKCkKK3sKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CisKKyAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlRlYXJpbmcgZG93biEiKTsKKworICAgIC8vIE1ha2Ug
c3VyZSB0byByZW1vdmUgc3luYyBoYW5kbGVyIGJlZm9yZSB0ZWFyaW5nIGRvd24sIGF2b2lkaW5n
CisgICAgLy8gcG9zc2libGUgZGVhZGxvY2tzLgorICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBh
ZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKHBpcGVsaW5lKCkpKSk7
CisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUocGlwZWxpbmUoKSwgR1NU
X1NUQVRFX05VTEwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYm
IFVTRShHU1RSRUFNRVIpICYmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckNhcHR1cmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uN2JmY2VkYWQ4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBB
dXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RS
RUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgiCisKKyNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
Q2FwdHVyZXIgeworcHVibGljOgorICAgIEdTdHJlYW1lckNhcHR1cmVyKEdTdHJlYW1lckNhcHR1
cmVEZXZpY2UsIEdSZWZQdHI8R3N0Q2Fwcz4pOworICAgIEdTdHJlYW1lckNhcHR1cmVyKGNvbnN0
IGNoYXIqIHNvdXJjZUZhY3RvcnksIEdSZWZQdHI8R3N0Q2Fwcz4pOworICAgIH5HU3RyZWFtZXJD
YXB0dXJlcigpOworCisgICAgdm9pZCBzZXR1cFBpcGVsaW5lKCk7CisgICAgdmlydHVhbCB2b2lk
IHBsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgIEdzdENhcHMqIGNhcHMoKTsK
KyAgICB2b2lkIGFkZFNpbmsoR3N0RWxlbWVudCAqbmV3U2luayk7CisgICAgR3N0RWxlbWVudCog
bWFrZUVsZW1lbnQoY29uc3QgY2hhciogZmFjdG9yeU5hbWUpOworICAgIEdzdEVsZW1lbnQqIGNy
ZWF0ZVNvdXJjZSgpOworICAgIEdzdEVsZW1lbnQqIHNvdXJjZSgpIHsgcmV0dXJuIG1fc3JjLmdl
dCgpOyAgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpID0gMDsKKworICAgIEdzdEVs
ZW1lbnQqIHNpbmsoKSBjb25zdCB7IHJldHVybiBtX3NpbmsuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dFNpbmsoR3N0RWxlbWVudCogc2luaykgeyBtX3NpbmsgPSBhZG9wdEdSZWYoc2luayk7IH07CisK
KyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0
KCk7IH0KKyAgICB2aXJ0dWFsIEdzdEVsZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpID0gMDsKKwor
cHJvdGVjdGVkOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zaW5rOworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV9zcmM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3RlZTsKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IG1fY2Fwc2ZpbHRlcjsKKyAgICBHUmVmUHRyPEdzdERldmljZT4g
bV9kZXZpY2U7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NhcHM7CisgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3BpcGVsaW5lOworCitwcml2YXRlOgorICAgIGNvbnN0IGNoYXIqIG1fc291cmNl
RmFjdG9yeTsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OTk0MDVjMjljNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKQEAgLTAsMCArMSw1MzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhp
YmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJv
IEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShHU1RSRUFNRVIpCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2VuZGlmCisKKyNpZiBFTkFCTEUo
VklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShH
U1RSRUFNRVIpICYmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQorI2luY2x1ZGUgIkdTdHJl
YW1lck1lZGlhU3RyZWFtU291cmNlLmgiCisKKyNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiVmlkZW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0RhdGEu
aCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2Uv
Z3N0Zmxvd2NvbWJpbmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQg
d2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoVmlkZW9TYW1wbGUoV2ViS2l0TWVkaWFTdHJlYW1TcmMq
IHNlbGYsIEdzdFNhbXBsZSogZ3N0c2FtcGxlKTsKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjUHVzaEF1ZGlvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RTYW1w
bGUqIGdzdHNhbXBsZSk7CitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5k
ZWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJik7
CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB2aWRlb1NyY1RlbXBsYXRlID0gR1NUX1NU
QVRJQ19QQURfVEVNUExBVEUoInZpZGVvX3NyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NU
X1BBRF9TT01FVElNRVMsCisgICAgR1NUX1NUQVRJQ19DQVBTKCJ2aWRlby94LXJhdyIpKTsKKwor
c3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElD
X1BBRF9URU1QTEFURSgiYXVkaW9fc3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFE
X1NPTUVUSU1FUywKKyAgICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtcmF3KEFOWSk7IikpOwor
CitzdGF0aWMgR3N0VGFnTGlzdCogbWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaykKK3sKKyAgICBhdXRvIHRhZ2xpc3QgPSBnc3RfdGFn
X2xpc3RfbmV3X2VtcHR5KCk7CisKKyAgICBpZiAoIXRyYWNrLT5sYWJlbCgpLmlzRW1wdHkoKSkg
eworICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5E
LAorICAgICAgICAgICAgR1NUX1RBR19USVRMRSwgdHJhY2stPmxhYmVsKCkudXRmOCgpLmRhdGEo
KSwgbnVsbHB0cik7CisgICAgfQorCisgICAgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pIHsKKyAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWds
aXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19LSU5ELAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihBdWRpb1RyYWNrUHJpdmF0ZTo6S2luZDo6TWFp
biksIG51bGxwdHIpOworICAgIH0gZWxzZSBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpWaWRlbykgeworICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ2xp
c3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0tJTkQsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KFZpZGVvVHJhY2tQcml2YXRlOjpLaW5kOjpNYWlu
KSwgbnVsbHB0cik7CisKKyAgICAgICAgaWYgKHRyYWNrLT5pc0NhcHR1cmVUcmFjaygpKSB7Cisg
ICAgICAgICAgICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UmIHNvdXJjZSA9IHN0YXRpY19j
YXN0PEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSY+KAorICAgICAgICAgICAgICAgIHRyYWNr
LT5zb3VyY2UoKSk7CisKKyAgICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFnbGlzdCwgR1NU
X1RBR19NRVJHRV9BUFBFTkQsCisgICAgICAgICAgICAgICAgV0VCS0lUX01FRElBX1RSQUNLX1RB
R19XSURUSCwgc291cmNlLnNpemUoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgIFdFQktJVF9N
RURJQV9UUkFDS19UQUdfSEVJR0hULCBzb3VyY2Uuc2l6ZSgpLmhlaWdodCgpLCBudWxscHRyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0YWdsaXN0OworfQorCitHc3RTdHJlYW0q
IHdlYmtpdE1lZGlhU3RyZWFtTmV3KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaykKK3sK
KyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7CisgICAgR3N0U3RyZWFtVHlwZSB0eXBlOworCisg
ICAgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8p
IHsKKyAgICAgICAgY2FwcyA9IGFkb3B0R1JlZihnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRf
Y2FwcygmYXVkaW9TcmNUZW1wbGF0ZSkpOworICAgICAgICB0eXBlID0gR1NUX1NUUkVBTV9UWVBF
X0FVRElPOworICAgIH0gZWxzZSBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlOjpWaWRlbykgeworICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9zdGF0aWNf
cGFkX3RlbXBsYXRlX2dldF9jYXBzKCZ2aWRlb1NyY1RlbXBsYXRlKSk7CisgICAgICAgIHR5cGUg
PSBHU1RfU1RSRUFNX1RZUEVfVklERU87CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0ZJWE1F
KCJIYW5kbGUgJWQgdHlwZSIsIChnaW50KSB0cmFjay0+dHlwZSgpKTsKKworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGdzdHN0cmVhbSA9IChHc3RTdHJlYW0qKWdz
dF9zdHJlYW1fbmV3KHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIGNhcHMuZ2V0
KCksIHR5cGUsIEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpOworICAgIGF1dG8gdGFncyA9IGFkb3B0
R1JlZihtZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUdldFRhZ3ModHJhY2spKTsKKyAgICBnc3Rfc3Ry
ZWFtX3NldF90YWdzKGdzdHN0cmVhbSwgdGFncy5nZXQoKSk7CisKKyAgICByZXR1cm4gZ3N0c3Ry
ZWFtOworfQorCitjbGFzcyBXZWJLaXRNZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXIKKyAgICA6IHB1
YmxpYyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgfldlYktpdE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcigpIHsgfTsKKyAgICBXZWJLaXRN
ZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXIoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNyYykKKyAgICAg
ICAgOiBtX21lZGlhU3RyZWFtU3JjKHNyYykgeyB9CisgICAgdm9pZCB0cmFja1N0YXJ0ZWQoTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07CisKKyAgICB2b2lkIHRyYWNrRW5kZWQo
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNrKSBmaW5hbAorICAgIHsKKyAgICAgICAgd2Vi
a2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKG1fbWVkaWFTdHJlYW1TcmMsIHRyYWNrKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
JikgZmluYWwgeyB9OworICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUmKSBmaW5hbCB7IH07CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9OworICAgIHZvaWQgcmVhZHlTdGF0ZUNo
YW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07CisKKyAgICB2b2lkIHNh
bXBsZUJ1ZmZlclVwZGF0ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYg
c2FtcGxlKSBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0byBnc3RzYW1wbGUgPSBzdGF0aWNfY2Fz
dDxNZWRpYVNhbXBsZUdTdHJlYW1lcio+KCZzYW1wbGUpLT5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBs
ZS5nc3RTYW1wbGU7CisKKyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoVmlkZW9TYW1w
bGUobV9tZWRpYVN0cmVhbVNyYywgZ3N0c2FtcGxlKTsKKyAgICB9CisKKyAgICB2b2lkIGF1ZGlv
U2FtcGxlc0F2YWlsYWJsZShNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIGNvbnN0IE1lZGlhVGlt
ZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mLCBzaXplX3QpIGZpbmFsCisgICAgeworICAgICAgICBhdXRvIGF1ZGlvZGF0
YSA9IHN0YXRpY19jYXN0PGNvbnN0IEdTdHJlYW1lckF1ZGlvRGF0YSY+KGF1ZGlvRGF0YSk7CisK
KyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUobV9tZWRpYVN0cmVh
bVNyYywgYXVkaW9kYXRhLmdldFNhbXBsZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2Vi
S2l0TWVkaWFTdHJlYW1TcmMqIG1fbWVkaWFTdHJlYW1TcmM7Cit9OworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0TWVkaWFTdHJlYW1TcmNDbGFzcyBXZWJLaXRNZWRpYVN0cmVhbVNyY0NsYXNzOwor
c3RydWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyYyB7CisgICAgR3N0QmluIHBhcmVudF9pbnN0YW5j
ZTsKKworICAgIGdjaGFyKiB1cmk7CisKKyAgICBHc3RFbGVtZW50KiBhdWRpb1NyYzsKKyAgICBH
c3RFbGVtZW50KiB2aWRlb1NyYzsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXRNZWRpYVN0
cmVhbVRyYWNrT2JzZXJ2ZXI+IG9ic2VydmVyOworICAgIFN0cmluZyB2aWRlb1RyYWNrSUQ7Cisg
ICAgdm9sYXRpbGUgZ2ludCBucGFkczsKKyAgICBndWxvbmcgcHJvYmVpZDsKKyAgICBSZWZQdHI8
TWVkaWFTdHJlYW1Qcml2YXRlPiBzdHJlYW07CisKKyAgICBHc3RGbG93Q29tYmluZXIqIGZsb3dD
b21iaW5lcjsKKyAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IHN0cmVhbUNvbGxlY3Rp
b247Cit9OworCitzdHJ1Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjQ2xhc3MgeworICAgIEdzdEJp
bkNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9Q
X0lTX0xJVkUsCisgICAgUFJPUF9MQVNUCit9OworCitzdGF0aWMgR3N0VVJJVHlwZSB3ZWJraXRf
bWVkaWFfc3RyZWFtX3NyY191cmlfZ2V0X3R5cGUoR1R5cGUpCit7CisgICAgcmV0dXJuIEdTVF9V
UklfU1JDOworfQorCitzdGF0aWMgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfbWVkaWFfc3Ry
ZWFtX3NyY191cmlfZ2V0X3Byb3RvY29scyhHVHlwZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgZ2No
YXIqIHByb3RvY29sc1tdID0geyAibWVkaWFzdHJlYW0iLCBudWxscHRyIH07CisKKyAgICByZXR1
cm4gcHJvdG9jb2xzOworfQorCitzdGF0aWMgZ2NoYXIqIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3Jj
X3VyaV9nZXRfdXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCit7CisgICAgV2ViS2l0TWVkaWFT
dHJlYW1TcmMqIHNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhoYW5kbGVyKTsKKworICAg
IC8qIEZJWE1FOiBtYWtlIHRocmVhZC1zYWZlICovCisgICAgcmV0dXJuIGdfc3RyZHVwKHNlbGYt
PnVyaSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaVNldFVy
aShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLAorICAgIEdFcnJvcioq
KQoreworICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVB
TV9TUkMoaGFuZGxlcik7CisgICAgc2VsZi0+dXJpID0gZ19zdHJkdXAodXJpKTsKKworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaUhhbmRs
ZXJJbml0KGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyKQoreworICAgIEdzdFVSSUhhbmRsZXJJ
bnRlcmZhY2UqIGlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqKWdfaWZhY2U7CisKKyAg
ICBpZmFjZS0+Z2V0X3R5cGUgPSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY191cmlfZ2V0X3R5cGU7
CisgICAgaWZhY2UtPmdldF9wcm90b2NvbHMgPSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY191cmlf
Z2V0X3Byb3RvY29sczsKKyAgICBpZmFjZS0+Z2V0X3VyaSA9IHdlYmtpdF9tZWRpYV9zdHJlYW1f
c3JjX3VyaV9nZXRfdXJpOworICAgIGlmYWNlLT5zZXRfdXJpID0gd2Via2l0TWVkaWFTdHJlYW1T
cmNVcmlTZXRVcmk7Cit9CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFT
dHJlYW1TcmNEZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVh
bVNyY0RlYnVnCisKKyNkZWZpbmUgZG9Jbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKEdTVF9UWVBFX1VSSV9I
QU5ETEVSLCB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaUhhbmRsZXJJbml0KTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0TWVkaWFT
dHJlYW1TcmNEZWJ1ZywgIndlYmtpdHdlYm1lZGlhc3RyZWFtc3JjIiwgMCwgIm1lZGlhc3RyZWFt
c3JjIGVsZW1lbnQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyhXRUJLSVRfTUVE
SUFfVFJBQ0tfVEFHX1dJRFRILCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX0lOVCwgIldlYmtp
dCBNZWRpYVN0cmVhbSB3aWR0aCIsICJXZWJraXQgTWVkaWFTdHJlYW0gd2lkdGgiLCBnc3RfdGFn
X21lcmdlX3VzZV9maXJzdCk7ICAgIFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyhXRUJL
SVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdIVCwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9JTlQs
ICJXZWJraXQgTWVkaWFTdHJlYW0gaGVpZ2h0IiwgIldlYmtpdCBNZWRpYVN0cmVhbSBoZWlnaHQi
LCBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7IFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRp
YyhXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0tJTkQsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVf
SU5ULCAiV2Via2l0IE1lZGlhU3RyZWFtIEtpbmQiLCAiV2Via2l0IE1lZGlhU3RyZWFtIEtpbmQi
LCBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdl
YktpdE1lZGlhU3RyZWFtU3JjLCB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyYywgR1NUX1RZUEVfQklO
LCBkb0luaXQpOworCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFByb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUqLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
TWVkaWFTdHJlYW1TcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQs
IEdWYWx1ZSogdmFsdWUsCisgICAgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgc3dpdGNoIChw
cm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0lTX0xJVkU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIFRSVUUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFT
dHJlYW1TcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRNZWRpYVN0cmVh
bVNyYyogc2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG9iamVjdCk7CisKKyAgICBpZiAo
c2VsZi0+YXVkaW9TcmMpIHsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwg
c2VsZi0+YXVkaW9TcmMpOworICAgICAgICBzZWxmLT5hdWRpb1NyYyA9IG51bGxwdHI7CisgICAg
fQorCisgICAgaWYgKHNlbGYtPnZpZGVvU3JjKSB7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdT
VF9CSU4oc2VsZiksIHNlbGYtPnZpZGVvU3JjKTsKKyAgICAgICAgc2VsZi0+dmlkZW9TcmMgPSBu
dWxscHRyOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNGaW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYg
PSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhvYmplY3QpOworCisgICAgR1NUX09CSkVDVF9MT0NL
KHNlbGYpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzZWxmLT5zdHJlYW0tPnRyYWNrcygpKQor
ICAgICAgICB0cmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnNlbGYtPm9ic2VydmVyLmdldCgpKTsKKyAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxmKTsKKworICAgIGdfY2xlYXJfcG9pbnRlcigmc2VsZi0+
dXJpLCBnX2ZyZWUpOworICAgIGdzdF9mbG93X2NvbWJpbmVyX2ZyZWUoc2VsZi0+Zmxvd0NvbWJp
bmVyKTsKK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFt
U3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNp
dGlvbikKK3sKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQ7CisgICAgYXV0byogc2Vs
ZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKGVsZW1lbnQpOworCisgICAgaWYgKHRyYW5zaXRp
b24gPT0gR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFkpIHsKKworICAgICAgICBHU1Rf
T0JKRUNUX0xPQ0soc2VsZik7CisgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBzZWxmLT5zdHJl
YW0tPnRyYWNrcygpKQorICAgICAgICAgICAgdHJhY2stPnJlbW92ZU9ic2VydmVyKCpzZWxmLT5v
YnNlcnZlci5nZXQoKSk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworICAgIH0K
KworICAgIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0NMQVNTKHdlYmtpdF9tZWRpYV9zdHJlYW1fc3Jj
X3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKKworICAg
IGlmICh0cmFuc2l0aW9uID09IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEKQorICAg
ICAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY19jbGFzc19p
bml0KFdlYktpdE1lZGlhU3RyZWFtU3JjQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50
Q2xhc3MqIGdzdGVsZW1lbnRfa2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAg
ICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjRmluYWxpemU7
CisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjRGlzcG9z
ZTsKKyAgICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRNZWRpYVN0cmVhbVNy
Y0dldFByb3BlcnR5OworICAgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdE1l
ZGlhU3RyZWFtU3JjU2V0UHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfSVNfTElWRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oImlzLWxpdmUiLCAiSXMgTGl2ZSIsCisgICAgICAgICAgICAiTGV0IHBsYXliaW4z
IGtub3cgd2UgYXJlIGEgbGl2ZSBzb3VyY2UuIiwKKyAgICAgICAgICAgIFRSVUUsIChHUGFyYW1G
bGFncykoR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7CisKKyAg
ICBnc3RlbGVtZW50X2tsYXNzLT5jaGFuZ2Vfc3RhdGUgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY0No
YW5nZVN0YXRlOworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZ3N0ZWxl
bWVudF9rbGFzcywKKyAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZ2aWRlb1Ny
Y1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShnc3Rl
bGVtZW50X2tsYXNzLAorICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJmF1ZGlv
U3JjVGVtcGxhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3N0cmVhbV9zcmNf
aW5pdChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZikKK3sKKyAgICBzZWxmLT5vYnNlcnZlciA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0TWVkaWFTdHJlYW1UcmFja09ic2VydmVyPihzZWxmKTsK
KyAgICBzZWxmLT5mbG93Q29tYmluZXIgPSBnc3RfZmxvd19jb21iaW5lcl9uZXcoKTsKK30KKwor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmOworICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gdHJhY2s7CisgICAgR3N0U3RhdGljUGFkVGVt
cGxhdGUqIHBhZF90ZW1wbGF0ZTsKK30gUHJvYmVEYXRhOworCitzdGF0aWMgR3N0Rmxvd1JldHVy
biB3ZWJraXRNZWRpYVN0cmVhbVNyY0NoYWluKEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIG9iamVj
dCwgR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgR3N0Rmxvd1JldHVybiByZXN1bHQ7CisgICAg
R1JlZlB0cjxXZWJLaXRNZWRpYVN0cmVhbVNyYz4gc2VsZiA9IGFkb3B0R1JlZihXRUJLSVRfTUVE
SUFfU1RSRUFNX1NSQyhnc3Rfb2JqZWN0X2dldF9wYXJlbnQob2JqZWN0KSkpOworCisgICAgcmVz
dWx0ID0gZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93KHNlbGYuZ2V0KCktPmZsb3dD
b21iaW5lciwgcGFkLAorICAgICAgICBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQocGFkLCBH
U1RfT0JKRUNUKHNlbGYuZ2V0KCkpLCBidWZmZXIpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKFdlYktpdE1lZGlhU3Ry
ZWFtU3JjKiBzZWxmLCBHc3RQYWQqIHRhcmdldCwgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZF90
ZW1wbGF0ZSkKK3sKKyAgICBhdXRvIHBhZG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgic3JjXyV1Iiwg
Z19hdG9taWNfaW50X2FkZCgmKHNlbGYtPm5wYWRzKSwgMSkpOworICAgIGF1dG8gZ2hvc3RwYWQg
PSBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlKHBhZG5hbWUudXRmOCgpLmRhdGEoKSwg
dGFyZ2V0LAorICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQocGFkX3RlbXBsYXRl
KSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICIlcyBHaG9zdGluZyAlIiBHU1RfUFRS
X0ZPUk1BVCwKKyAgICAgICAgZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcoR1NUX09CSkVDVF9D
QVNUKHNlbGYpKSwKKyAgICAgICAgdGFyZ2V0KTsKKworICAgIGF1dG8gcHJveHlwYWQgPSBhZG9w
dEdSZWYoR1NUX1BBRChnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbChHU1RfUFJPWFlfUEFEKGdo
b3N0cGFkKSkpKTsKKyAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbihwcm94eXBhZC5nZXQo
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3N0UGFkQ2hhaW5GdW5jdGlvbj4od2Via2l0TWVkaWFT
dHJlYW1TcmNDaGFpbikpOworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShnaG9zdHBhZCwgVFJVRSk7
CisgICAgQVNTRVJUKGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQoc2VsZiksIEdTVF9Q
QUQgKGdob3N0cGFkKSkpOworfQorCitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gd2Via2l0TWVk
aWFTdHJlYW1TcmNQYWRQcm9iZUNiKEdzdFBhZCogcGFkLCBHc3RQYWRQcm9iZUluZm8qIGluZm8s
IFByb2JlRGF0YSogZGF0YSkKK3sKKyAgICBHc3RFdmVudCogZXZlbnQgPSBHU1RfUEFEX1BST0JF
X0lORk9fRVZFTlQoaW5mbyk7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBkYXRh
LT5zZWxmOworCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNl
IEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6IHsKKyAgICAgICAgY29uc3QgZ2NoYXIqIHN0cmVhbV9p
ZDsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IG51bGxwdHI7CisKKyAgICAg
ICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydChldmVudCwgJnN0cmVhbV9pZCk7CisgICAg
ICAgIGlmICghZ19zdHJjbXAwKHN0cmVhbV9pZCwgZGF0YS0+dHJhY2stPmlkKCkudXRmOCgpLmRh
dGEoKSkpIHsKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwYWQsICJFdmVudCBoYXMgYmVl
biBzdGlja2VkIGFscmVhZHkiKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09L
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBzdHJlYW1fc3RhcnQgPSBnc3RfZXZlbnRfbmV3
X3N0cmVhbV9zdGFydChkYXRhLT50cmFjay0+aWQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
Z3N0X2V2ZW50X3NldF9ncm91cF9pZChzdHJlYW1fc3RhcnQsIDEpOworICAgICAgICBnc3RfZXZl
bnRfdW5yZWYoZXZlbnQpOworCisgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudChwYWQsIHN0cmVh
bV9zdGFydCk7CisgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudChwYWQsIGdzdF9ldmVudF9uZXdf
c3RyZWFtX2NvbGxlY3Rpb24oc2VsZi0+c3RyZWFtQ29sbGVjdGlvbi5nZXQoKSkpOworICAgICAg
ICBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLCBnc3RfZXZlbnRfbmV3X3RhZyhtZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZUdldFRhZ3MoZGF0YS0+dHJhY2suZ2V0KCkpKSk7CisKKyAgICAgICAgd2Via2l0
TWVkaWFTdHJlYW1TcmNBZGRQYWQoc2VsZiwgcGFkLCBkYXRhLT5wYWRfdGVtcGxhdGUpOworCisg
ICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX0hBTkRMRUQ7CisgICAgfQorICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0TWVkaWFTdHJlYW1TcmNTZXR1cFNyYyhXZWJLaXRN
ZWRpYVN0cmVhbVNyYyogc2VsZiwKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdHJhY2ss
IEdzdEVsZW1lbnQqIGVsZW1lbnQsCisgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZF90ZW1w
bGF0ZSwgZ2Jvb2xlYW4gb2JzZXJ2ZV90cmFjaykKK3sKKyAgICBhdXRvIHBhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChlbGVtZW50LCAic3JjIikpOworCisgICAgZ3N0
X2Jpbl9hZGQoR1NUX0JJTihzZWxmKSwgZWxlbWVudCk7CisKKworICAgIFByb2JlRGF0YSogZGF0
YSA9IG5ldyBQcm9iZURhdGE7CisgICAgZGF0YS0+c2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1f
U1JDKHNlbGYpOworICAgIGRhdGEtPnBhZF90ZW1wbGF0ZSA9IHBhZF90ZW1wbGF0ZTsKKyAgICBk
YXRhLT50cmFjayA9IHRyYWNrOworCisgICAgc2VsZi0+cHJvYmVpZCA9IGdzdF9wYWRfYWRkX3By
b2JlKHBhZC5nZXQoKSwgKEdzdFBhZFByb2JlVHlwZSlHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRf
RE9XTlNUUkVBTSwKKyAgICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spd2Via2l0TWVkaWFTdHJl
YW1TcmNQYWRQcm9iZUNiLCBkYXRhLAorICAgICAgICBbXShncG9pbnRlciBkYXRhKSB7CisgICAg
ICAgICAgICBkZWxldGUgKFByb2JlRGF0YSopZGF0YTsKKyAgICAgICAgfSk7CisKKyAgICBpZiAo
b2JzZXJ2ZV90cmFjaykKKyAgICAgICAgdHJhY2stPmFkZE9ic2VydmVyKCpzZWxmLT5vYnNlcnZl
ci5nZXQoKSk7CisKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGVsZW1l
bnQpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0TWVkaWFT
dHJlYW1TcmNTZXR1cEFwcFNyYyhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwKKyAgICBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSogdHJhY2ssIEdzdEVsZW1lbnQqKiBlbGVtZW50LAorICAgIEdz
dFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRfdGVtcGxhdGUpCit7CisgICAgKmVsZW1lbnQgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNyYyIsIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3Nl
dCgqZWxlbWVudCwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCBu
dWxscHRyKTsKKworICAgIHJldHVybiB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwU3JjKHNlbGYs
IHRyYWNrLCAqZWxlbWVudCwgcGFkX3RlbXBsYXRlLCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0TWVkaWFTdHJlYW1TcmNQb3N0U3RyZWFtQ29sbGVjdGlvbihXZWJLaXRNZWRpYVN0cmVh
bVNyYyogc2VsZiwgTWVkaWFTdHJlYW1Qcml2YXRlKiBzdHJlYW0pCit7CisgICAgR1NUX09CSkVD
VF9MT0NLKHNlbGYpOworICAgIHNlbGYtPnN0cmVhbUNvbGxlY3Rpb24gPSBhZG9wdEdSZWYoZ3N0
X3N0cmVhbV9jb2xsZWN0aW9uX25ldyhzdHJlYW0tPmlkKCkudXRmOCgpLmRhdGEoKSkpOworICAg
IGZvciAoYXV0byYgdHJhY2sgOiBzdHJlYW0tPnRyYWNrcygpKSB7CisgICAgICAgIGF1dG8gZ3N0
c3RyZWFtID0gd2Via2l0TWVkaWFTdHJlYW1OZXcodHJhY2suZ2V0KCkpOworCisgICAgICAgIGdz
dF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtKHNlbGYtPnN0cmVhbUNvbGxlY3Rpb24uZ2V0
KCksIGdzdHN0cmVhbSk7CisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworCisg
ICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLAorICAgICAgICBn
c3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24oR1NUX09CSkVDVChzZWxmKSwgc2VsZi0+
c3RyZWFtQ29sbGVjdGlvbi5nZXQoKSkpOworfQorCitnYm9vbGVhbiB3ZWJraXRNZWRpYVN0cmVh
bVNyY1NldFN0cmVhbShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1Qcml2
YXRlKiBzdHJlYW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX01FRElB
X1NUUkVBTV9TUkMoc2VsZiksIEZBTFNFKTsKKworICAgIGlmIChzZWxmLT5hdWRpb1NyYykgewor
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoc2VsZi0+YXVkaW9TcmMsIEdTVF9TVEFURV9O
VUxMKTsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwgc2VsZi0+YXVkaW9T
cmMpOworICAgICAgICBzZWxmLT5hdWRpb1NyYyA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYg
KHNlbGYtPnZpZGVvU3JjKSB7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShzZWxmLT52
aWRlb1NyYywgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklO
KHNlbGYpLCBzZWxmLT52aWRlb1NyYyk7CisgICAgICAgIHNlbGYtPnZpZGVvU3JjID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9u
KHNlbGYsIHN0cmVhbSk7CisKKyAgICBzZWxmLT5zdHJlYW0gPSBzdHJlYW07CisgICAgZm9yIChh
dXRvJiB0cmFjayA6IHN0cmVhbS0+dHJhY2tzKCkpIHsKKyAgICAgICAgaWYgKHRyYWNrLT50eXBl
KCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pIHsKKyAgICAgICAgICAgIHdl
YmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBBcHBTcmMoc2VsZiwgdHJhY2suZ2V0KCksICZzZWxmLT5h
dWRpb1NyYywKKyAgICAgICAgICAgICAgICAmYXVkaW9TcmNUZW1wbGF0ZSk7CisgICAgICAgIH0g
ZWxzZSBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRl
bykgeworICAgICAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNTZXR1cEFwcFNyYyhzZWxmLCB0
cmFjay5nZXQoKSwgJnNlbGYtPnZpZGVvU3JjLAorICAgICAgICAgICAgICAgICZ2aWRlb1NyY1Rl
bXBsYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9JTkZPKCJVbnN1cG9y
dGVkIHRyYWNrIHR5cGU6ICVkIiwgKGdpbnQpIHRyYWNrLT50eXBlKCkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoVmlkZW9TYW1wbGUoV2ViS2l0TWVkaWFT
dHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogZ3N0c2FtcGxlKQoreworICAgIGlmIChzZWxmLT52
aWRlb1NyYykKKyAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoR1NUX0FQUF9TUkMoc2Vs
Zi0+dmlkZW9TcmMpLCBnc3RzYW1wbGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0
cmVhbVNyY1B1c2hBdWRpb1NhbXBsZShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0U2Ft
cGxlKiBnc3RzYW1wbGUpCit7CisgICAgaWYgKHNlbGYtPmF1ZGlvU3JjKQorICAgICAgICBnc3Rf
YXBwX3NyY19wdXNoX3NhbXBsZShHU1RfQVBQX1NSQyhzZWxmLT5hdWRpb1NyYyksIGdzdHNhbXBs
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjVHJhY2tFbmRlZChXZWJL
aXRNZWRpYVN0cmVhbVNyYyogc2VsZiwKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJh
Y2spCit7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IG51bGxwdHI7CisKKyAgICBHU1RfT0JK
RUNUX0xPQ0soc2VsZik7CisgICAgZm9yIChhdXRvIHRtcCA9IEdTVF9FTEVNRU5UKHNlbGYpLT5z
cmNwYWRzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgeworICAgICAgICBHc3RQYWQqIHRtcHBhZCA9
IEdTVF9QQUQodG1wLT5kYXRhKTsKKyAgICAgICAgY29uc3QgZ2NoYXIqIHN0cmVhbV9pZDsKKwor
ICAgICAgICBHc3RFdmVudCogc3RyZWFtX3N0YXJ0ID0gZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50
KHRtcHBhZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCk7CisgICAgICAgIGlmICghc3RyZWFt
X3N0YXJ0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNl
X3N0cmVhbV9zdGFydChzdHJlYW1fc3RhcnQsICZzdHJlYW1faWQpOworICAgICAgICBpZiAoU3Ry
aW5nKHN0cmVhbV9pZCkgPT0gdHJhY2suaWQoKSkgeworICAgICAgICAgICAgcGFkID0gdG1wcGFk
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgR1NUX09CSkVDVF9V
TkxPQ0soc2VsZik7CisKKyAgICBpZiAoIXBhZCkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJObyBwYWQgZm91bmQgZm9yICVzIiwgdHJhY2suaWQoKS51dGY4KCkuZGF0YSgpKTsK
KworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHZp
ZGVvLnZpZGVvV2lkdGggaXMgcmVzZXQgdG8gMAorICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9z
dFN0cmVhbUNvbGxlY3Rpb24oc2VsZiwgc2VsZi0+c3RyZWFtLmdldCgpKTsKKyAgICBhdXRvIHRh
Z3MgPSBtZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUdldFRhZ3MoJnRyYWNrKTsKKyAgICBnc3RfcGFk
X3B1c2hfZXZlbnQocGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X3RhZyh0YWdzKSk7CisgICAgZ3N0
X3BhZF9wdXNoX2V2ZW50KHBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld19lb3MoKSk7Cit9CisKK30g
Ly8gV2ViQ29yZQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlh
U3RyZWFtU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVi
NDExMmU3MDdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmgKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICog
QXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJX
RUJSVEMpCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjZGVmaW5l
IFdFQktJVF9NRURJQV9UUkFDS19UQUdfV0lEVEggIndlYmtpdC1tZWRpYS1zdHJlYW0td2lkdGgi
CisjZGVmaW5lIFdFQktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hUICJ3ZWJraXQtbWVkaWEtc3Ry
ZWFtLWhlaWdodCIKKyNkZWZpbmUgV0VCS0lUX01FRElBX1RSQUNLX1RBR19LSU5EICJ3ZWJraXQt
bWVkaWEtc3RyZWFtLWtpbmQiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjIFdlYktpdE1lZGlhU3RyZWFtU3JjOworCisjZGVmaW5l
IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG8pIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
byksIFdFQktJVF9UWVBFX01FRElBX1NUUkVBTV9TUkMsIFdlYktpdE1lZGlhU3RyZWFtU3JjKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX01FRElBX1NUUkVBTV9TUkMobykgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvKSwgV0VCS0lUX1RZUEVfTUVESUFfU1RSRUFNX1NSQykpCisjZGVmaW5lIFdF
QktJVF9UWVBFX01FRElBX1NUUkVBTV9TUkMgKHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX2dldF90
eXBlKCkpCitHVHlwZSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY19nZXRfdHlwZSh2b2lkKSBHX0dO
VUNfQ09OU1Q7CitnYm9vbGVhbiB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbShXZWJLaXRN
ZWRpYVN0cmVhbVNyYyosIE1lZGlhU3RyZWFtUHJpdmF0ZSopOworfSAvLyBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJX
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3Vy
Y2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YWUxZGVmYjBj
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC0wLDAgKzEsMjcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRo
b3I6IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNF
KEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTWVk
aWFTYW1wbGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgor
I2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3
ZWJydGMvYXBpL3BlZXJjb25uZWN0aW9uaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d2VicnRjL21l
ZGlhL2Jhc2UvdmlkZW9jb21tb24uaD4KKyNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvZW5naW5lL3dl
YnJ0Y3ZpZGVvY2FwdHVyZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0
Y3ZpZGVvY2FwdHVyZXJmYWN0b3J5Lmg+CisjaW5jbHVkZSA8d2VicnRjL21vZHVsZXMvdmlkZW9f
Y2FwdHVyZS92aWRlb19jYXB0dXJlX2RlZmluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citjb25zdCBzdGF0aWMgaW50IGRlZmF1bHRXaWR0aCA9IDY0MDsKK2NvbnN0IHN0YXRpYyBpbnQg
ZGVmYXVsdEhlaWdodCA9IDQ4MDsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF92aWRlb19j
YXB0dXJlX3NvdXJjZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfdmlk
ZW9fY2FwdHVyZV9zb3VyY2VfZGVidWcKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdTdHJlYW1l
ckRlYnVnKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxh
ZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7CisgICAgICAg
IEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF92aWRlb19jYXB0dXJlX3NvdXJjZV9kZWJ1
ZywgIndlYmtpdHZpZGVvY2FwdHVyZXNvdXJjZSIsIDAsCisgICAgICAgICAgICAiV2ViS2l0IFZp
ZGVvIENhcHR1cmUgU291cmNlLiIpOworICAgIH0pOworfQorCitjbGFzcyBHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2VGYWN0b3J5IGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlZpZGVvQ2FwdHVyZUZhY3RvcnkgeworcHVibGljOgorICAgIENhcHR1cmVTb3VyY2VPckVycm9y
IGNyZWF0ZVZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2UsIGNv
bnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKSBmaW5hbAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0
ZW50SWQoKSwgY29uc3RyYWludHMpOworICAgIH0KK307CisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6
OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIGxpYldlYlJUQ1ZpZGVvQ2FwdHVyZVNvdXJjZUZhY3Rvcnko
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3Vy
Y2VGYWN0b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0b3J5LmdldCgpOworfQorCitDYXB0
dXJlU291cmNlT3JFcnJvciBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25z
dCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykK
K3sKKyAgICBhdXRvIGRldmljZSA9IEdTdHJlYW1lclZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXI6
OnNpbmdsZXRvbigpLmdzdHJlYW1lckRldmljZVdpdGhVSUQoZGV2aWNlSUQpOworICAgIGlmICgh
ZGV2aWNlKSB7CisgICAgICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIkdT
dHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKCk6IEdTdHJlYW1lciBkaWQgbm90IGZp
bmQgdGhlIGRldmljZTogJXMuIiwgZGV2aWNlSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKGVycm9yTWVzc2FnZSkpOworICAgIH0K
KworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVT
b3VyY2UoZGV2aWNlLnZhbHVlKCkpKTsKKworICAgIGlmIChjb25zdHJhaW50cykgeworICAgICAg
ICBhdXRvIHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpOwor
ICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0LnZh
bHVlKCkuZmlyc3QpOworICAgIH0KKyAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RG
TW92ZShzb3VyY2UpKTsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFj
dG9yeSYgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCkKK3sKKyAgICByZXR1
cm4gbGliV2ViUlRDVmlkZW9DYXB0dXJlU291cmNlRmFjdG9yeSgpOworfQorCitHU3RyZWFtZXJW
aWRlb0NhcHR1cmVTb3VyY2U6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJp
bmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IGdjaGFyICpzb3VyY2VfZmFj
dG9yeSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlSUQsIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvLCBuYW1lKQorICAgICwgbV9jYXB0dXJlcihzdGQ6Om1ha2VfdW5p
cXVlPEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI+KHNvdXJjZV9mYWN0b3J5KSkKK3sKKyAgICBpbml0
aWFsaXplR1N0cmVhbWVyRGVidWcoKTsKK30KKworR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
OjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoR1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZp
Y2UpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8sIGRldmljZS5sYWJlbCgpKQorICAgICwgbV9j
YXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI+KGRldmljZSkp
Cit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9CisKK0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZTo6fkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSgpCit7Cit9CisKK2Jv
b2wgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBseVNpemUoY29uc3QgSW50U2l6ZSAm
c2l6ZSkKK3sKKyAgICBtX2NhcHR1cmVyLT5zZXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2U6OmFwcGx5RnJhbWVSYXRlKGRvdWJsZSBmcmFtZXJhdGUpCit7CisgICAgbV9jYXB0
dXJlci0+c2V0RnJhbWVSYXRlKGZyYW1lcmF0ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7
CisgICAgbV9jYXB0dXJlci0+c2V0dXBQaXBlbGluZSgpOworICAgIG1fY2FwdHVyZXItPnNldFNp
emUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAgbV9jYXB0dXJlci0+c2V0
RnJhbWVSYXRlKGZyYW1lUmF0ZSgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2FwdHVyZXIt
PnNpbmsoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1NhbXBsZUNhbGxiYWNrKSwgdGhp
cyk7CisgICAgbV9jYXB0dXJlci0+cGxheSgpOworfQorCitHc3RGbG93UmV0dXJuIEdTdHJlYW1l
clZpZGVvQ2FwdHVyZVNvdXJjZTo6bmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCogc2luaywg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKiBzb3VyY2UpCit7CisgICAgYXV0byBnc3RTYW1w
bGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5r
KSkpOworICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRl
KFdURk1vdmUoZ3N0U2FtcGxlKSwgV2ViQ29yZTo6RmxvYXRTaXplKCksIFN0cmluZygpKTsKKwor
ICAgIC8vIEZJWE1FIC0gQ2hlY2sgaG93IHByZXNlbnRhdGlvblNpemUgaXMgc3VwcG9zZWQgdG8g
YmUgdXNlZCBoZXJlLgorICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCpzb3VyY2UpLCBtZWRpYVNhbXBsZSA9IFdURk1vdmUobWVkaWFTYW1wbGUpXSB7CisgICAg
ICAgIHByb3RlY3RlZFRoaXMtPnZpZGVvU2FtcGxlQXZhaWxhYmxlKG1lZGlhU2FtcGxlLmdldCgp
KTsKKyAgICB9KTsKKworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKwordm9pZCBHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jYXB0dXJlci0+c2luaygpLCByZWludGVy
cHJldF9jYXN0PGdwb2ludGVyPihuZXdTYW1wbGVDYWxsYmFjayksIHRoaXMpOworICAgIG1fY2Fw
dHVyZXItPnN0b3AoKTsKKworICAgIEdTVF9JTkZPKCJSZXNldCBoZWlnaHQgYW5kIHdpZHRoIGFm
dGVyIHN0b3BwaW5nIHNvdXJjZSIpOworICAgIHNldEhlaWdodCgwKTsKKyAgICBzZXRXaWR0aCgw
KTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgR1N0cmVhbWVy
VmlkZW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIGlmIChtX2Nh
cGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnZhbHVlKCk7CisKKyAg
ICBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcyhzZXR0aW5ncygp
LnN1cHBvcnRlZENvbnN0cmFpbnRzKCkpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFk
b3B0R1JlZihtX2NhcHR1cmVyLT5jYXBzKCkpOworICAgIGludDMyX3QgbWluV2lkdGggPSBHX01B
WElOVDMyLCBtYXhXaWR0aCA9IDAsIG1pbkhlaWdodCA9IEdfTUFYSU5UMzIsIG1heEhlaWdodCA9
IDA7CisgICAgZG91YmxlIG1pbkZyYW1lcmF0ZSA9IEdfTUFYRE9VQkxFLCBtYXhGcmFtZXJhdGUg
PSBHX01JTkRPVUJMRTsKKworICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRf
c2l6ZShjYXBzLmdldCgpKTsgaSsrKSB7CisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RyID0gZ3N0
X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLmdldCgpLCBpKTsKKworICAgICAgICAvLyBPbmx5IGFj
Y2VwdCByYXcgdmlkZW8gZm9yIG5vdy4KKyAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19u
YW1lKHN0ciwgInZpZGVvL3gtcmF3IikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpbnQzMl90IHRtcE1pbldpZHRoLCB0bXBNaW5IZWlnaHQsIHRtcE1pbkZQU051bWVyYXRvciwg
dG1wTWluRlBTRGVub21pbmF0b3I7CisgICAgICAgIGludDMyX3QgdG1wTWF4V2lkdGgsIHRtcE1h
eEhlaWdodCwgdG1wTWF4RlBTTnVtZXJhdG9yLCB0bXBNYXhGUFNEZW5vbWluYXRvcjsKKyAgICAg
ICAgZG91YmxlIHRtcE1pbkZyYW1lcmF0ZSA9IEdfTUFYRE9VQkxFLCB0bXBNYXhGcmFtZXJhdGUg
PSBHX01JTkRPVUJMRTsKKworICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgIndp
ZHRoIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAmdG1wTWluV2lkdGgsICZ0bXBNYXhXaWR0aCwgImhl
aWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgJnRtcE1pbkhlaWdodCwgJnRtcE1heEhlaWdodCwg
bnVsbHB0cikpIHsKKyAgICAgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXQoc3RyLCAid2lk
dGgiLCBHX1RZUEVfSU5ULCAmdG1wTWluV2lkdGgsICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAmdG1w
TWluSGVpZ2h0LCBudWxscHRyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgdG1wTWF4V2lkdGggPSB0bXBNaW5XaWR0aDsKKyAgICAgICAgICAgIHRtcE1heEhlaWdo
dCA9IHRtcE1pbkhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJl
X2dldChzdHIsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgJnRtcE1pbkZQ
U051bWVyYXRvciwgJnRtcE1pbkZQU0Rlbm9taW5hdG9yLCAmdG1wTWF4RlBTTnVtZXJhdG9yLCAm
dG1wTWF4RlBTRGVub21pbmF0b3IsIG51bGxwdHIpKSB7CisgICAgICAgICAgICBnc3RfdXRpbF9m
cmFjdGlvbl90b19kb3VibGUgKHRtcE1pbkZQU051bWVyYXRvciwgdG1wTWluRlBTRGVub21pbmF0
b3IsICZ0bXBNaW5GcmFtZXJhdGUpOworICAgICAgICAgICAgZ3N0X3V0aWxfZnJhY3Rpb25fdG9f
ZG91YmxlICh0bXBNYXhGUFNOdW1lcmF0b3IsIHRtcE1heEZQU0Rlbm9taW5hdG9yLCAmdG1wTWF4
RnJhbWVyYXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2dldChzdHIsCisg
ICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sICZ0bXBNaW5GUFNOdW1l
cmF0b3IsICZ0bXBNaW5GUFNEZW5vbWluYXRvciwgbnVsbHB0cikpIHsKKyAgICAgICAgICAgIHRt
cE1heEZQU051bWVyYXRvciA9IHRtcE1pbkZQU051bWVyYXRvcjsKKyAgICAgICAgICAgIHRtcE1h
eEZQU0Rlbm9taW5hdG9yID0gdG1wTWluRlBTRGVub21pbmF0b3I7CisgICAgICAgICAgICBnc3Rf
dXRpbF9mcmFjdGlvbl90b19kb3VibGUgKHRtcE1pbkZQU051bWVyYXRvciwgdG1wTWluRlBTRGVu
b21pbmF0b3IsICZ0bXBNaW5GcmFtZXJhdGUpOworICAgICAgICAgICAgZ3N0X3V0aWxfZnJhY3Rp
b25fdG9fZG91YmxlICh0bXBNYXhGUFNOdW1lcmF0b3IsIHRtcE1heEZQU0Rlbm9taW5hdG9yLCAm
dG1wTWF4RnJhbWVyYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IEdW
YWx1ZSogZnJhbWVSYXRlcyhnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShzdHIsICJmcmFtZXJhdGUi
KSk7CisgICAgICAgICAgICB0bXBNaW5GcmFtZXJhdGUgPSBHX01BWERPVUJMRTsKKyAgICAgICAg
ICAgIHRtcE1heEZyYW1lcmF0ZSA9IDAuMDsKKworICAgICAgICAgICAgZ3VpbnQgZnJhbWVSYXRl
c0xlbmd0aCA9IHN0YXRpY19jYXN0PGd1aW50Pihnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZShmcmFt
ZVJhdGVzKSkgLSAxOworCisgICAgICAgICAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgZnJhbWVS
YXRlc0xlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIHRtcEZyYW1lUmF0ZTsK
KyAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZhbCA9IGdzdF92YWx1ZV9saXN0X2dldF92
YWx1ZShmcmFtZVJhdGVzLCBpKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChHX1ZBTFVFX1RZ
UEUodmFsKSA9PSBHU1RfVFlQRV9GUkFDVElPTik7CisgICAgICAgICAgICAgICAgZ3N0X3V0aWxf
ZnJhY3Rpb25fdG9fZG91YmxlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcih2YWwp
LAorICAgICAgICAgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9y
KHZhbCksICZ0bXBGcmFtZVJhdGUpOworCisgICAgICAgICAgICAgICAgdG1wTWluRnJhbWVyYXRl
ID0gc3RkOjptaW4odG1wTWluRnJhbWVyYXRlLCB0bXBGcmFtZVJhdGUpOworICAgICAgICAgICAg
ICAgIHRtcE1heEZyYW1lcmF0ZSA9IHN0ZDo6bWF4KHRtcE1heEZyYW1lcmF0ZSwgdG1wRnJhbWVS
YXRlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAg
ICAgICAgICAgbWluV2lkdGggPSBzdGQ6Om1pbih0bXBNaW5XaWR0aCwgbWluV2lkdGgpOworICAg
ICAgICAgICAgICAgIG1pbkhlaWdodCA9IHN0ZDo6bWluKHRtcE1pbkhlaWdodCwgbWluSGVpZ2h0
KTsKKyAgICAgICAgICAgICAgICBtaW5GcmFtZXJhdGUgPSBzdGQ6Om1pbih0bXBNaW5GcmFtZXJh
dGUsIG1pbkZyYW1lcmF0ZSk7CisKKyAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IHN0ZDo6bWF4
KHRtcE1heFdpZHRoLCBtYXhXaWR0aCk7CisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gc3Rk
OjptYXgodG1wTWF4SGVpZ2h0LCBtYXhIZWlnaHQpOworICAgICAgICAgICAgICAgIG1heEZyYW1l
cmF0ZSA9IHN0ZDo6bWF4KHRtcE1heEZyYW1lcmF0ZSwgbWF4RnJhbWVyYXRlKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWluV2lkdGggPSB0bXBNaW5XaWR0aDsKKyAg
ICAgICAgICAgICAgICBtaW5IZWlnaHQgPSB0bXBNaW5IZWlnaHQ7CisgICAgICAgICAgICAgICAg
bWluRnJhbWVyYXRlID0gdG1wTWluRnJhbWVyYXRlOworCisgICAgICAgICAgICAgICAgbWF4V2lk
dGggPSB0bXBNYXhXaWR0aDsKKyAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSB0bXBNYXhIZWln
aHQ7CisgICAgICAgICAgICAgICAgbWF4RnJhbWVyYXRlID0gdG1wTWF4RnJhbWVyYXRlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2FwYWJpbGl0aWVzLnNldERldmljZUlk
KGlkKCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JS
YW5nZShtaW5XaWR0aCwgbWF4V2lkdGgpKTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLnNldEhlaWdo
dChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pbkhlaWdodCwgbWF4SGVpZ2h0KSk7CisgICAgICAg
IGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZShtaW5GcmFt
ZXJhdGUsIG1heEZyYW1lcmF0ZSkpOworICAgICAgICBtX2NhcGFiaWxpdGllcyA9IFdURk1vdmUo
Y2FwYWJpbGl0aWVzKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXMudmFsdWUo
KTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY3VycmVudFNl
dHRpbmdzKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBzZXR0aW5nczsK
KyAgICAgICAgc2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7CisKKyAgICAgICAgUmVhbHRpbWVN
ZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBvcnRlZENvbnN0cmFpbnRzOworICAg
ICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOworICAg
ICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZhY2luZ01vZGUodHJ1ZSk7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7CisgICAg
ICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOworICAgICAg
ICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVjdFJhdGlvKHRydWUpOworICAg
ICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZyYW1lUmF0ZSh0cnVlKTsKKyAg
ICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVkQ29uc3RyYWlu
dHMpOworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Cisg
ICAgfQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFdpZHRoKHNpemUoKS53aWR0aCgpKTsK
KyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSk7CisgICAg
bV9jdXJyZW50U2V0dGluZ3MtPnNldEZyYW1lUmF0ZShmcmFtZVJhdGUoKSk7CisgICAgbV9jdXJy
ZW50U2V0dGluZ3MtPnNldEFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKCkpOworICAgIG1fY3VycmVu
dFNldHRpbmdzLT5zZXRGYWNpbmdNb2RlKGZhY2luZ01vZGUoKSk7CisgICAgcmV0dXJuIG1fY3Vy
cmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
VmlkZW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM3OWJhN2UwZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmll
ciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
ICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVy
VmlkZW9DYXB0dXJlci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UgOiBw
dWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIENhcHR1cmVT
b3VyY2VPckVycm9yIGNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNv
bnN0cmFpbnRzKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpZGVvQ2FwdHVyZUZhY3Rv
cnkmIGZhY3RvcnkoKTsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBHc3RFbGVt
ZW50KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fY2FwdHVyZXItPnBpcGVsaW5lKCk7IH0KKyAgICBH
U3RyZWFtZXJDYXB0dXJlciogY2FwdHVyZXIoKSB7IHJldHVybiBtX2NhcHR1cmVyLmdldCgpOyB9
CisKKworcHJvdGVjdGVkOgorICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBT
dHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IGdjaGFyICogc291cmNl
X2ZhY3RvcnkpOworICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShHU3RyZWFtZXJDYXB0
dXJlRGV2aWNlKTsKKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoKTsK
KyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcFBy
b2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKKworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBtdXRhYmxl
IHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0
aW5nczsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxs
YmFjayhHc3RFbGVtZW50KiwgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKik7CisKKyAgICBi
b29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBi
b29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7CisgICAgYm9vbCBhcHBseUZyYW1l
UmF0ZShkb3VibGUpIGZpbmFsOworICAgIGJvb2wgYXBwbHlBc3BlY3RSYXRpbyhkb3VibGUpIGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJWaWRl
b0NhcHR1cmVyPiBtX2NhcHR1cmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODhiNjA1MDIxNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhp
YmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQor
I2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAv
Z3N0YXBwc2luay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lclZpZGVvQ2Fw
dHVyZXI6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZp
Y2UpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19u
ZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKSkKK3sKK30KKworR1N0cmVhbWVyVmlkZW9D
YXB0dXJlcjo6R1N0cmVhbWVyVmlkZW9DYXB0dXJlcihjb25zdCBjaGFyKiBzb3VyY2VGYWN0b3J5
KQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoc291cmNlRmFjdG9yeSwgYWRvcHRHUmVmKGdzdF9j
YXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtcmF3IikpKQoreworfQorCitHc3RFbGVtZW50
KiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIoKQoreworICAgIGF1dG8g
Y29udmVydGVyID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCJ2aWRlb3NjYWxlICEg
dmlkZW9jb252ZXJ0ICEgdmlkZW9yYXRlIiwgVFJVRSwgbnVsbHB0cik7CisKKyAgICBBU1NFUlQo
Y29udmVydGVyKTsKKworICAgIHJldHVybiBjb252ZXJ0ZXI7Cit9CisKK0dzdFZpZGVvSW5mbyBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpnZXRCZXN0Rm9ybWF0KCkKK3sKKyAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZml4YXRlKGdzdF9kZXZpY2VfZ2V0X2Nh
cHMobV9kZXZpY2UuZ2V0KCkpKSk7CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisgICAgZ3N0X3Zp
ZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzLmdldCgpKTsKKworICAgIHJldHVybiBpbmZv
OworfQorCitib29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OnNldFNpemUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkobV9jYXBzLmdl
dCgpKSk7CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NhcHMuZ2V0KCksICJ3aWR0aCIsIEdf
VFlQRV9JTlQsIHdpZHRoLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVpZ2h0LCBudWxscHRyKTsK
KworICAgIGlmICghbV9jYXBzZmlsdGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBn
X29iamVjdF9zZXQobV9jYXBzZmlsdGVyLmdldCgpLCAiY2FwcyIsIG1fY2Fwcy5nZXQoKSwgbnVs
bHB0cik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHU3RyZWFtZXJWaWRlb0NhcHR1
cmVyOjpzZXRGcmFtZVJhdGUoZG91YmxlIGZyYW1lUmF0ZSkKK3sKKyAgICBpbnQgbnVtZXJhdG9y
LCBkZW5vbWluYXRvcjsKKworICAgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbihmcmFtZVJh
dGUsICZudW1lcmF0b3IsICZkZW5vbWluYXRvcik7CisKKyAgICBpZiAobnVtZXJhdG9yIDwgLUdf
TUFYSU5UKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRnJh
bWVyYXRlICVmIG5vdCBhbGxvd2VkIiwgZnJhbWVSYXRlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghbnVtZXJhdG9yKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiRG8gbm90IGZvcmNlIHZhcmlhYmxlIGZyYW1lcmF0ZSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdz
dF9jYXBzX2NvcHkobV9jYXBzLmdldCgpKSk7CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2Nh
cHMuZ2V0KCksICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgbnVtZXJhdG9yLCBkZW5v
bWluYXRvciwgbnVsbHB0cik7CisKKyAgICBpZiAoIW1fY2Fwc2ZpbHRlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc2ZpbHRlci5nZXQoKSwgImNhcHMi
LCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
NTdiMGI0Njg2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oCkBAIC0wLDAgKzEs
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1
dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RS
RUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlci5oIgorCisjaW5jbHVkZSA8Z3N0
L3ZpZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
VmlkZW9DYXB0dXJlciA6IHB1YmxpYyBHU3RyZWFtZXJDYXB0dXJlciB7CitwdWJsaWM6CisgICAg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAgICBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJjZV9mYWN0b3J5KTsKKworICAgIEdz
dEVsZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpIGZpbmFsOworICAgIGNvbnN0IGNoYXIqIG5hbWUo
KSBmaW5hbCB7IHJldHVybiAiVmlkZW8iOyB9CisKKyAgICBib29sIHNldFNpemUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKyAgICBib29sIHNldEZyYW1lUmF0ZShkb3VibGUpOworICAgIEdzdFZp
ZGVvSW5mbyBnZXRCZXN0Rm9ybWF0KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9D
YXB0dXJlU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
OTk1ZjA1NzIwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAK
QEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlh
LmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElC
V0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIk1vY2tHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIk1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBlZE1vY2tSZWFsdGltZUF1ZGlvU291
cmNlIDogcHVibGljIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlIHsKK3B1YmxpYzoKKyAgICBXcmFw
cGVkTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQorICAgICAgICA6IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlKGRldmljZUlE
LCBuYW1lKQorICAgIHsKKyAgICB9Cit9OworCitDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsCisgICAgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sK
KyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVy
ZVNvdXJjZShkZXZpY2VJRCwgbmFtZSkpOworCisgICAgaWYgKGNvbnN0cmFpbnRzICYmIHNvdXJj
ZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gTW9ja0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRpYUNvbnN0cmFpbnRz
JiBjb25zdHJhaW50cykKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2UtPmFwcGx5Q29uc3RyYWludHMo
Y29uc3RyYWludHMpOworICAgIHJldHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmFw
cGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYg
Y29uc3RyYWludHMsIFN1Y2Nlc3NIYW5kbGVyJiYgc3VjY2Vzc0hhbmRsZXIsIEZhaWx1cmVIYW5k
bGVyJiYgZmFpbHVyZUhhbmRsZXIpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5hcHBseUNvbnN0
cmFpbnRzKGNvbnN0cmFpbnRzLCBXVEZNb3ZlKHN1Y2Nlc3NIYW5kbGVyKSwgV1RGTW92ZShmYWls
dXJlSGFuZGxlcikpOworfQorCitNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpNb2Nr
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKKyAgICA6IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJ
RCwgbmFtZSkKKyAgICAsIG1fd3JhcHBlZFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPFdyYXBwZWRN
b2NrUmVhbHRpbWVBdWRpb1NvdXJjZT4oZGV2aWNlSUQsIG5hbWUpKQoreworICAgIG1fd3JhcHBl
ZFNvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworfQorCitNb2NrR1N0cmVhbWVyQXVkaW9DYXB0
dXJlU291cmNlOjp+TW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSgpCit7CisgICAgbV93
cmFwcGVkU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Cit9CisKK3ZvaWQgTW9ja0dTdHJl
YW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIG1fd3Jh
cHBlZFNvdXJjZS0+c3RvcCgpOworCisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpz
dG9wUHJvZHVjaW5nRGF0YSgpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVT
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICBtX3dyYXBwZWRTb3VyY2UtPnN0YXJ0
KCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgTW9ja0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3dy
YXBwZWRTb3VyY2UtPnNldHRpbmdzKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VD
YXBhYmlsaXRpZXMmIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGll
cygpIGNvbnN0Cit7CisgICAgbV9jYXBhYmlsaXRpZXMgPSBtX3dyYXBwZWRTb3VyY2UtPmNhcGFi
aWxpdGllcygpOworICAgIG1fY3VycmVudFNldHRpbmdzID0gbV93cmFwcGVkU291cmNlLT5zZXR0
aW5ncygpOworICAgIHJldHVybiBtX3dyYXBwZWRTb3VyY2UtPmNhcGFiaWxpdGllcygpOworfQor
Cit2b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVGYWlsZWQoKQor
eworICAgIHN0b3AoKTsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpjYXB0dXJlRmFpbGVkKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmMxMWYxNzliOTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1
bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcu
IENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRl
ICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlIGZpbmFsIDogcHVibGljIEdT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6T2JzZXJ2ZXIg
eworcHVibGljOgorICAgIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgU3Ry
aW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB+TW9ja0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZSgpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywg
U3RyaW5nPj4gYXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRpYUNvbnN0cmFpbnRzJik7CisgICAg
dm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmLCBTdWNjZXNzSGFu
ZGxlciYmLCBGYWlsdXJlSGFuZGxlciYmKSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0
b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBm
aW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkg
Y29uc3QgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYg
Y2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gbV93cmFwcGVkU291cmNl
OworCisgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpIG92ZXJyaWRl
IHsgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkZmFiZWRkNDZmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC0wLDAgKzEsMTQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBB
dXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6
IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NU
UkVBTUVSKQorI2luY2x1ZGUgIk1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKwor
I2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBlZE1vY2tSZWFsdGltZVZpZGVvU291cmNlIDog
cHVibGljIE1vY2tSZWFsdGltZVZpZGVvU291cmNlIHsKK3B1YmxpYzoKKyAgICBXcmFwcGVkTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5n
JiBuYW1lKQorICAgICAgICA6IE1vY2tSZWFsdGltZVZpZGVvU291cmNlKGRldmljZUlELCBuYW1l
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZVNhbXBsZUJ1ZmZlcigpCisgICAgewor
ICAgICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWluYXRvcjsKKyAgICAgICAgYXV0byBp
bWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCk7CisKKyAgICAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9f
ZnJhY3Rpb24oZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Cisg
ICAgICAgIGF1dG8gZGF0YSA9IGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCk7CisgICAgICAgIGF1
dG8gc2l6ZSA9IGRhdGEuc2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlX3NpemUgPSBpbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8gZ3N0c2FtcGxlID0gZ3N0X3NhbXBs
ZV9uZXcoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChzdGF0aWNfY2FzdDxndWludDgqPihkYXRhLnJl
bGVhc2VCdWZmZXIoKS5nZXQoKSksIHNpemUpLAorICAgICAgICAgICAgYWRvcHRHUmVmKGdzdF9j
YXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKKyAgICAgICAgICAgICAgICAiZm9ybWF0Iiwg
R19UWVBFX1NUUklORywgIkJHUkEiLAorICAgICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9J
TlQsIGltYWdlX3NpemUud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAiaGVpZ2h0IiwgR19UWVBF
X0lOVCwgaW1hZ2Vfc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwg
R1NUX1RZUEVfRlJBQ1RJT04sIGZwc051bWVyYXRvciwgZnBzRGVub21pbmF0b3IsCisgICAgICAg
ICAgICAgICAgbnVsbHB0cikpLmdldCgpLAorICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0cik7
CisKKyAgICAgICAgYXV0byBzYW1wbGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlKFdU
Rk1vdmUoZ3N0c2FtcGxlKSwKKyAgICAgICAgICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSgpLCBTdHJp
bmcoKSk7CisgICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKHNhbXBsZSk7CisgICAgfQorfTsK
KworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZShj
b25zdCBTdHJpbmcmIGRldmljZUlELAorICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgTWVk
aWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCit7CisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJl
ZigqbmV3IE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoZGV2aWNlSUQsIG5hbWUpKTsK
KworICAgIGlmIChjb25zdHJhaW50cyAmJiBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0
cmFpbnRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBDYXB0dXJlU291cmNl
T3JFcnJvcihXVEZNb3ZlKHNvdXJjZSkpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICBtX3dyYXBwZWRTb3VyY2Ut
PnN0YXJ0KCk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6c3Rv
cFByb2R1Y2luZ0RhdGEoKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+c3RvcCgpOworCisgICAg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpOworfQorCit2
b2lkIE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KE1lZGlhU2FtcGxlJiBzYW1wbGUpCit7CisgICAgYXV0byBzcmMgPSBjYXB0dXJlcigpLT5zb3Vy
Y2UoKTsKKworICAgIGlmIChzcmMpIHsKKyAgICAgICAgYXV0byBnc3RzYW1wbGUgPSBzdGF0aWNf
Y2FzdDxNZWRpYVNhbXBsZUdTdHJlYW1lcio+KCZzYW1wbGUpLT5wbGF0Zm9ybVNhbXBsZSgpLnNh
bXBsZS5nc3RTYW1wbGU7CisgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKEdTVF9BUFBf
U1JDKHNyYyksIGdzdHNhbXBsZSk7CisgICAgfQorfQorCitNb2NrR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlOjpNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYg
ZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEdTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZShkZXZpY2VJRCwgbmFtZSwgImFwcHNyYyIpCisgICAgLCBtX3dyYXBwZWRTb3VyY2Uo
c3RkOjptYWtlX3VuaXF1ZTxXcmFwcGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U+KGRldmljZUlE
LCBuYW1lKSkKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKK30K
KworTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6fk1vY2tHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVTb3VyY2UoKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRo
aXMpOworfQorCitzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IE1vY2tH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFD
b25zdHJhaW50cyYgY29uc3RyYWludHMpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5hcHBseUNv
bnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKKyAgICByZXR1cm4gR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKK30KKwordm9pZCBNb2NrR1N0
cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29u
c3RyYWludHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxlciYmIHN1Y2Nlc3NIYW5kbGVyLCBG
YWlsdXJlSGFuZGxlciYmIGZhaWx1cmVIYW5kbGVyKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+
YXBwbHlDb25zdHJhaW50cyhjb25zdHJhaW50cywgV1RGTW92ZShzdWNjZXNzSGFuZGxlciksIFdU
Rk1vdmUoZmFpbHVyZUhhbmRsZXIpKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fd3JhcHBlZFNvdXJjZS0+c2V0dGluZ3MoKTsKK30KKworY29uc3Qg
UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBtX2NhcGFiaWxpdGllcyA9IG1f
d3JhcHBlZFNvdXJjZS0+Y2FwYWJpbGl0aWVzKCk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBt
X3dyYXBwZWRTb3VyY2UtPnNldHRpbmdzKCk7CisgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnZh
bHVlKCk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVy
ZUZhaWxlZCgpCit7CisgICAgc3RvcCgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6Y2Fw
dHVyZUZhaWxlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRjODAyNzY4ZDdmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaApAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBB
dXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6
IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIp
CisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFdyYXBwZWRNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTsKKy8vIFdlIGFyZSBzdWJjbGFzc2luZyBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UgYW5kIG5vdCBNb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZQorLy8gYmVjYXVzZSB0aGUgTWVkaWFQbGF5ZXIgZXhwZWN0cyBHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2UgdG8gYmUgYWJsZSB0byBwcm9wZXJseQorLy8gYnVpbGQgdGhlIEdTdHJlYW1lciBw
aXBlbGluZS4gU3RpbGwgd2UgbWFrZSBpdCBzbyB0aGF0IGl0IGJlaGF2ZXMgYXMgY2xvc2VseSBh
cyBwb3NzaWJsZQorLy8gdG8gdGhlIE1vY2tSZWFsdGltZU1lZGlhU291cmNlIGNsYXNzIGJ5IHdy
YXBwaW5nIG91ciBvd24gc3ViY2xhc3Mgb2YgaXQuCitjbGFzcyBNb2NrR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSwg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIE1vY2tHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKyAgICB+TW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSgpOworICAgIHN0
ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gYXBwbHlDb25zdHJhaW50cyhj
b25zdCBNZWRpYUNvbnN0cmFpbnRzJik7CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0
IE1lZGlhQ29uc3RyYWludHMmLCBTdWNjZXNzSGFuZGxlciYmLCBGYWlsdXJlSGFuZGxlciYmKSBm
aW5hbDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7Cisg
ICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IG1fd3JhcHBlZFNvdXJjZTsKKyAgICBjb25zdCBS
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgdmlkZW9T
YW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJX
RUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldl
YlJUQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkY2UxZDZlNjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQg
U2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENh
c3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckxpYldlYlJUQy5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5
JiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjphdWRpb0NhcHR1cmVTb3VyY2VG
YWN0b3J5KCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJU
Qzo6c2luZ2xldG9uKCkuYXVkaW9GYWN0b3J5KCk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJMaWJXZWJSVEMmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OnNpbmds
ZXRvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQz4gY2VudGVyOworICAg
IHJldHVybiBjZW50ZXI7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXImIFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCkKK3sKKyAgICByZXR1cm4gUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6c2luZ2xldG9uKCk7Cit9CisKK1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJX
ZWJSVEMoKQorICAgIDogbV9saWJXZWJSVENQcm92aWRlcihMaWJXZWJSVENQcm92aWRlcjo6Y3Jl
YXRlKCkpCit7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6On5SZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDKCkKK3sKK30KKworUmVhbHRpbWVNZWRpYVNv
dXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldl
YlJUQzo6YXVkaW9GYWN0b3J5KCkKK3sKKyAgICBpZiAobV9hdWRpb0ZhY3RvcnlPdmVycmlkZSkK
KyAgICAgICAgcmV0dXJuICptX2F1ZGlvRmFjdG9yeU92ZXJyaWRlOworCisgICAgcmV0dXJuIEdT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpOworfQorCitSZWFsdGltZU1lZGlh
U291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGli
V2ViUlRDOjp2aWRlb0ZhY3RvcnkoKQoreworICAgIHJldHVybiBHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2U6OmZhY3RvcnkoKTsKK30KKworQ2FwdHVyZURldmljZU1hbmFnZXImIFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OmF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIoKQor
eworICAgIHJldHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0
b24oKTsKK30KKworQ2FwdHVyZURldmljZU1hbmFnZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJMaWJXZWJSVEM6OnZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXIoKQoreworICAgIHJldHVybiBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKK30KKworQ2Fw
dHVyZURldmljZU1hbmFnZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OmRp
c3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lckRpc3Bs
YXlDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJMaWJXZWJSVEMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTIx
Mjg0ZTE3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oCkBA
IC0wLDAgKzEsNjggQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5j
b20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisK
KyNpbmNsdWRlICJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ1By
b3ZpZGVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKKworI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvcGVlcmNv
bm5lY3Rpb25pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyYgc2luZ2xldG9uKCk7CisKKyAgICB3ZWJy
dGM6OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZSogZmFjdG9yeSgpIHsgcmV0dXJuIG1f
bGliV2ViUlRDUHJvdmlkZXItPmZhY3RvcnkoKTsgfQorCisgICAgc3RhdGljIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIHZpZGVvQ2FwdHVyZVNvdXJjZUZhY3Rvcnko
KTsKKyAgICBzdGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYg
YXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBOZXZlckRlc3Ryb3llZDxSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDPjsKKyAg
ICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDKCk7CisgICAgflJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMoKTsKKworICAgIHZvaWQgc2V0QXVkaW9GYWN0b3J5KFJl
YWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkpIGZpbmFsIHsg
bV9hdWRpb0ZhY3RvcnlPdmVycmlkZSA9ICZmYWN0b3J5OyB9CisgICAgdm9pZCB1bnNldEF1ZGlv
RmFjdG9yeShSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JikgZmluYWwg
eyBtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlID0gbnVsbHB0cjsgfQorCisgICAgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgYXVkaW9GYWN0b3J5KCkgZmluYWw7CisgICAg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgdmlkZW9GYWN0b3J5KCkg
ZmluYWw7CisKKyAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgYXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlcigpIGZpbmFsOworICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyJiB2aWRlb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyKCkgZmluYWw7CisgICAgQ2FwdHVyZURldmljZU1hbmFnZXImIGRpc3BsYXlDYXB0
dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFsOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVk
aW9DYXB0dXJlRmFjdG9yeSogbV9hdWRpb0ZhY3RvcnlPdmVycmlkZSB7IG51bGxwdHIgfTsKKyAg
ICBVbmlxdWVSZWY8TGliV2ViUlRDUHJvdmlkZXI+IG1fbGliV2ViUlRDUHJvdmlkZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoTElCV0VCUlRDKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwCmluZGV4IGM1MGFiY2I3YTMyLi45
YzYwMjRlNTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgog
ICAgIH0KIH07CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQorI2lmICFQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpICYmICEoVVNFKEdTVFJFQU1FUikgJiYgVVNF
KExJQldFQlJUQykpCiBDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVBdWRpb1NvdXJj
ZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7CiAgICAgYXV0byBzb3VyY2UgPSBh
ZG9wdFJlZigqbmV3IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlKGRldmljZUlELCBuYW1lKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVv
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwCmluZGV4IDllODYwZDZjZjVhLi5lZGVkYTgzYTBlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZS5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotI2lmICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKElPUykgJiYgIShVU0UoR1NUUkVBTUVSKSAmJiBVU0UoTElCV0VCUlRDKSkKIENhcHR1cmVT
b3VyY2VPckVycm9yIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBj
b25zdHJhaW50cykKIHsKICAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UoZGV2aWNlSUQsIG5hbWUpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMmQ0MjE4YTUyMi4uNDFkM2IyOWY5NjUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxOC0wNS0xOCAgVGhpYmF1bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS11bV1BFXSBTdGFydCBpbXBsZW1lbnRpbmcgTWVkaWFTdHJlYW0g
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogQXBwbHkgc3BlY2lhbCBmb3JtYXR0aW5n
IHJ1bGVzIGZvciBuZXcgR09iamVjdCBzdWJjbGFzc2VzLgorICAgICAgICAqIGdzdHJlYW1lci9q
aGJ1aWxkLm1vZHVsZXM6IEFkZGVkIGEgcGF0Y2ggZm9yIHRoZSBnc3QtcGx1Z2lucy1iYXNlLgor
ICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhc2UtMDAwMS1wYXJzZWJp
bi1Qb3N0LVNUUkVBTV9DT0xMRUNUSU9OLW9uLUVWRU5UX1NUUkVBTV9DT0xMLnBhdGNoOgorICAg
ICAgICBBZGRlZCB0aGlzIGZpeCB0byBnc3QtcGx1Z2luZ3MtYmFzZSB0byBmaXggdGhlIGRlY29k
ZWJpbjMuIE1lcmdlZCBhcyA4OWQwZTljYzkyYTg2YWEwMjI3ZWU4NzQwNjczN2I2ZDMxNjcwYWVh
CisKIDIwMTgtMDYtMDcgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+
CiAKICAgICAgICAgW1dpbl1bTWluaUJyb3dzZXJdIFN1cHBvcnQgbXVsdGlwbGUgd2luZG93cyBw
cm9wZXJseQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDMzM2Rj
ZTI2NTY3Li5hNTkwOGU2MDE2YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weQpAQCAtMjA3LDYgKzIwNyw4IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAg
IG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3Mn
LCAnZ3N0cmVhbWVyJywgJ1ZpZGVvU2lua0dTdHJlYW1lci5jcHAnKSwKICAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVh
bWVyJywgJ1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAnKSwKICAgICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnYXVkaW8nLCAnZ3N0cmVhbWVyJywg
J1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCcpLAorICAgICAgb3MucGF0aC5qb2lu
KCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdtZWRpYXN0cmVhbScsICdnc3RyZWFt
ZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCcpLAorICAgICAgb3MucGF0aC5qb2lu
KCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdtZWRpYXN0cmVhbScsICdnc3RyZWFt
ZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwJyksCiAgICAgICBvcy5wYXRoLmpv
aW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ25ldHdvcmsnLCAnc291cCcsICdQ
cm94eVJlc29sdmVyU291cC5jcHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dl
YkNvcmUnLCAncGxhdGZvcm0nLCAnbmV0d29yaycsICdzb3VwJywgJ1Byb3h5UmVzb2x2ZXJTb3Vw
LmgnKV0sCiAgICAgIFsiLXJlYWRhYmlsaXR5L25hbWluZyIsCmRpZmYgLS1naXQgYS9Ub29scy9n
c3RyZWFtZXIvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxl
cwppbmRleCA1YWViNzU2ZWMwYS4uYzkwYTBjYjQ2OGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2dzdHJl
YW1lci9qaGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxl
cwpAQCAtNTcsNyArNTcsOSBAQAogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICA8ZGVwIHBhY2th
Z2U9ImdzdHJlYW1lciIvPgogICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxicmFuY2ggaGFzaD0i
c2hhOjEwMjZjN2MzMDgyZDgyNWQ5YjVkMDM0YzFhNmRkOGE0ZWJhYjYwZWIzNzM4YjBhMGFmZGU0
YWQyZGMwYjBkYjUiIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFzZS9nc3QtcGx1Z2lucy1iYXNlLSR7
dmVyc2lvbn0udGFyLnh6IiByZXBvPSJnc3RyZWFtZXIiIHZlcnNpb249IjEuMTQuMSIgLz4KKyAg
ICA8YnJhbmNoIGhhc2g9InNoYToxMDI2YzdjMzA4MmQ4MjVkOWI1ZDAzNGMxYTZkZDhhNGViYWI2
MGViMzczOGIwYTBhZmRlNGFkMmRjMGIwZGI1IiBtb2R1bGU9ImdzdC1wbHVnaW5zLWJhc2UvZ3N0
LXBsdWdpbnMtYmFzZS0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9u
PSIxLjE0LjEiID4KKyAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1iYXNlLTAwMDEtcGFy
c2ViaW4tUG9zdC1TVFJFQU1fQ09MTEVDVElPTi1vbi1FVkVOVF9TVFJFQU1fQ09MTC5wYXRjaCIg
c3RyaXA9IjEiLz4gPCEtLSBNZXJnZWQgYXMgODlkMGU5Y2M5MmE4NmFhMDIyN2VlODc0MDY3Mzdi
NmQzMTY3MGFlYSAtLT4KKyAgICA8L2JyYW5jaD4KICAgPC9hdXRvdG9vbHM+CiAKICAgPGF1dG90
b29scyBpZD0iZ3N0LXBsdWdpbnMtZ29vZCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIiBhdXRvZ2Vu
YXJncz0iLS1kaXNhYmxlLWV4YW1wbGVzIC0tZGlzYWJsZS1ndGstZG9jIC0tZGlzYWJsZS1pbnRy
b3NwZWN0aW9uIj4KZGlmZiAtLWdpdCBhL1Rvb2xzL2dzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVn
aW5zLWJhc2UtMDAwMS1wYXJzZWJpbi1Qb3N0LVNUUkVBTV9DT0xMRUNUSU9OLW9uLUVWRU5UX1NU
UkVBTV9DT0xMLnBhdGNoIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFz
ZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04tb24tRVZFTlRfU1RSRUFNX0NP
TEwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY4MGJjMmRi
NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdp
bnMtYmFzZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04tb24tRVZFTlRfU1RS
RUFNX0NPTEwucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4OWQwZTljYzkyYTg2YWEwMjI3
ZWU4NzQwNjczN2I2ZDMxNjcwYWVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhp
YmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KK0RhdGU6IFdlZCwgMTggQXByIDIw
MTggMTY6MDY6MDcgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFyc2ViaW46IFBvc3QgU1RSRUFN
X0NPTExFQ1RJT04gb24gRVZFTlRfU1RSRUFNX0NPTExFQ1RJT04KKworT3RoZXJ3aXNlIGRlY29k
ZWJpbiB3b24ndCBnZXQgbm90aWZpZWQgYWJvdXQgU1RSRUFNX0NPTExFQ1RJT04gY29tbWluZwor
ZnJvbSB0aGUgc291cmNlcyBhbmQgdGh1cyB3aWxsIG5ldmVyIGdldCBpbmZvcm1vcmVkIGFib3V0
IGl0LiBXaXRob3V0CitiZWluZyBpbmZvcm1lZCBhYm91dCB0aGUgc3RyZWFtIGNvbGxlY3Rpb24g
ZGVjb2RlYmluIHdvbid0IGJlIGFibGUgdG8KK3NlbGVjdCBhbnkgc3RyZWFtcy4gSXQgZW5kcyB1
cCBub3QgY3JlYXRpbmcgYW55IG91dHB1dCBmb3IgdGhlIHN0cmVhbXMKK2RlZmluZWQgZnJvbSBv
dXRzaWRlIHBhcnNlcmJpbi4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcu
Y2dpP2lkPTc5NTM2NAorLS0tCisgZ3N0L3BsYXliYWNrL2dzdHBhcnNlYmluLmMgfCAzICsrKwor
IDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5
YmFjay9nc3RwYXJzZWJpbi5jIGIvZ3N0L3BsYXliYWNrL2dzdHBhcnNlYmluLmMKK2luZGV4IDRj
NWJmYzE5ZC4uZjk2NjJlYjQ5IDEwMDY0NAorLS0tIGEvZ3N0L3BsYXliYWNrL2dzdHBhcnNlYmlu
LmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RwYXJzZWJpbi5jCitAQCAtNDA0Niw2ICs0MDQ2LDkg
QEAgZ3N0X3BhcnNlX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBp
bmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCisgICAgICAgR3N0U3RyZWFtQ29sbGVjdGlvbiAqY29s
bGVjdGlvbiA9IE5VTEw7CisgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9u
IChldmVudCwgJmNvbGxlY3Rpb24pOworICAgICAgIGdzdF9wYXJzZV9wYWRfdXBkYXRlX3N0cmVh
bV9jb2xsZWN0aW9uIChwYXJzZXBhZCwgY29sbGVjdGlvbik7CisrICAgICAgZ3N0X2VsZW1lbnRf
cG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAocGFyc2VwYWQtPnBhcnNlYmluKSwKKysgICAgICAg
ICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9uIChHU1RfT0JKRUNUIChwYXJzZXBh
ZC0+cGFyc2ViaW4pLAorKyAgICAgICAgICAgICAgY29sbGVjdGlvbikpOworICAgICAgIGJyZWFr
OworICAgICB9CisgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzp7CistLSAKKzIuMTcuMAorCi0tIAoy
LjE3LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342168</attachid>
            <date>2018-06-07 08:17:18 -0700</date>
            <delta_ts>2018-06-07 10:45:32 -0700</delta_ts>
            <desc>Fix styling issues.</desc>
            <filename>GTKWPE-Implement-MediaStream-API.patch</filename>
            <type>text/plain</type>
            <size>150202</size>
            <attacher name="Thibault Saunier">tsaunier</attacher>
            
              <data encoding="base64">RnJvbSAzNWQ1Y2FjNWI1Y2I5NzIyMjM3ZjFiYzg5MjJiZGFjNGI0NDE3ZWQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQWxlamFuZHJvIEcuIENhc3RybyIgPGFsZXhAaWdhbGlhLmNv
bT4KRGF0ZTogVGh1LCAyNCBNYXkgMjAxOCAxMjo1NTowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
eHNlcnZlcl0gW0dUS11bV1BFXTogSW1wbGVtZW50IE1lZGlhU3RyZWFtIEFQSQoKaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NwotLS0KIExheW91dFRlc3RzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyAgICAgfCAgMzMgKy0KIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICB8IDExNyArKysrCiBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZSAgICAgICAgICAgICAgfCAgIDIgKwogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlICAgICAgIHwgIDE2ICsKIC4uLi9wbGF0Zm9ybS9hdWRpby9B
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmggICB8ICAgMSArCiAuLi4vcGxhdGZvcm0vYXVkaW8vUGxh
dGZvcm1BdWRpb0RhdGEuaCAgICAgICAgfCAgIDEgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwICAgIHwgIDQ3ICsrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5oICAgICAgfCAgIDMgKwogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIHwgIDYzICsrLQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCAgIHwgICA3ICstCiAuLi4vTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHAgICAgICAgfCAgIDcgKwogLi4uL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAgIHwgICA4ICsKIC4uLi9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlLmggICAgICAgICB8ICAgMiArLQogLi4uL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwIHwgICA3IC0KIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmNwcCB8IDIwMiArKysrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICAgfCAgNjUgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuY3BwICAgICAgfCAgNzMgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuaCAgICAgICAgfCAgNDMgKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRh
LmggICAgICAgICAgICB8ICA1OSArKwogLi4uL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaCAgICAgICAgIHwgMTA1ICsrKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURl
dmljZS5oICAgICAgICB8ICA1MCArKwogLi4uL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmNwcCAgICAgICAgIHwgMTM0ICsrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmggfCAgODEgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVy
LmNwcCAgICAgICAgICAgfCAxOTcgKysrKysrKwogLi4uL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlci5oIHwgIDcyICsrKwogLi4uL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5jcHAgIHwgNTMwICsrKysrKysrKysrKysrKysrKwogLi4uL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oICAgIHwgIDQ2ICsrCiAuLi4vZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgfCAyNzAgKysrKysrKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oICAgfCAgNjQgKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwICAgICAgfCAxMDQgKysrKwogLi4uL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmggICAgICAgIHwgIDQ2ICsrCiAuLi4vTW9j
a0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxMDYgKysrKwogLi4uL01v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCAgICAgICAgIHwgIDUxICsrCiAuLi4vTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxNDYgKysrKysKIC4uLi9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmggICAgICAgICB8ICA1NiArKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwICAgIHwgIDkxICsrKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuaCAgICAgIHwgIDY4ICsrKwogLi4uL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIHwgICAyICstCiAuLi4vcGxh
dGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgfCAgIDIgKy0KIFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArCiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgICAgICAgfCAgIDIgKwogVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcyAgICAgICAgICAgICAgIHwgICA0ICstCiAuLi5SRUFNX0NPTExF
Q1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2ggfCAgMzMgKysKIDQ0IGZpbGVzIGNoYW5n
ZWQsIDI5OTYgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0
dXJlRGV2aWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1
cmVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9nc3Ry
ZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1f
Q09MTEVDVElPTi1vbi1FVkVOVF9TVFJFQU1fQ09MTC5wYXRjaAoKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4MzJjZjZiODI1
ZC4uN2JjYmY0ZjZkNmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOC0wNS0xOCAgVGhpYmF1
bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBT
dGFydCBpbXBsZW1lbnRpbmcgTWVkaWFTdHJlYW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3ODcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OiBSZWFjdGl2YXRlIE1lZGlhU3RyZWFtIHRlc3RzIGFuZCBlbmFibGUgYWxsIHRlc3RzCisgICAg
ICAgIHJlbGF0ZWQgdG8gdGhlIG1lZGlhRGV2aWNlLmVudW1lcmF0ZURldmljZXMgYW5kIE1lZGlh
U3RyZWFtIChub3QgUlRDUGVlckNvbm5lY3Rpb24gbm9yCisgICAgICAgIHdlYmF1ZGlvKS4KKwog
MjAxOC0wNi0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
SFRUUCBIZWFkZXIgdmFsdWVzIHZhbGlkYXRpb24gaXMgdG9vIHN0cmljdApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhN2U2NzQ3N2QwMS4uNTk3NTIzNzBk
Y2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC01NzIs
NDAgKzU3MiwzMSBAQCB3ZWJraXQub3JnL2IvOTkwMzYgZmFzdC9zaGFkb3ctZG9tL3BvaW50ZXJs
b2NrZWxlbWVudC1pbi1zbG90Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi84NTIxMSBpZXRl
c3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtYWxpZ24tc3RyZXRjaC0wMDEuaHRtIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODUyMTIgaWV0ZXN0Y2VudGVyL2NzczMvZmxl
eGJveC9mbGV4Ym94LWxheW91dC0wMDIuaHRtIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKLSMgU2tp
cHBpbmcgdW50aWwgYmFja2VuZCBpcyBpbXBsZW1lbnRlZAotZmFzdC9tZWRpYXN0cmVhbSBbIFNr
aXAgXQogd2VicnRjIFsgU2tpcCBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy8gWyBTa2lwIF0KIGh0dHAvdGVzdHMvd2VicnRjIFsgU2tpcCBdCiAjIFRoZSBNZWRpYVN0
cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHN0aWxsIG5vdCBjb21wbGV0ZWQKIHdlYmtpdC5v
cmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21vY2stbWVkaWEtc291cmNlLXdlYmF1ZGlvLmh0
bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL2dldFVz
ZXJNZWRpYS13ZWJhdWRpby5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50LXRy
YWNrLXN0b3AuaHRtbCBbIFBhc3MgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC10cmFjay1zdG9wLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWR0bWYuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50Lmh0bWwgWyBGYWlsdXJl
IENyYXNoIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLW1lZGlhLXNldHVwLXR3by1kaWFsb2dzLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdl
YmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1J0cFNlbmRlci1yZXBsYWNlVHJh
Y2suaHRtbCBbIEZhaWx1cmUgXQogIyBDcmFzaCBpcyB3ZWJraXQub3JnL2IvMTg0MjkyCiB3ZWJr
aXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGRJY2VD
YW5kaWRhdGUuaHRtbCBbIEZhaWx1cmUgUGFzcyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1jbG9zZWQtc3RhdGUuaHRtbCBbIFRp
bWVvdXQgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24taWNlLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZS1ldmVudC5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UtZXZlbnQuaHRtbCBbIEZhaWx1
cmUgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pY2UuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LWFuc3dlci5odG1s
IFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWJ1bmRsZVBvbGljeS1idW5kbGUtb25seS5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxlZ2FjeS1zdHJlYW0tYmFzZWQt
YXBpLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0
bWwgWyBDcmFzaCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIwMyB3ZWJhdWRpby9tZWRpYXN0
cmVhbWF1ZGlvc291cmNlbm9kZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50LWRpc3BsYXlzLWJ1ZmZl
ci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQtdGhlbi1lbmFibGVk
Lmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS12aWRlby1lbGVtZW50Lmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hZHZhbmNlZC5odG1sIFsgQ3Jhc2gg
XQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8t
ZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQtdGhlbi1lbmFibGVkLmh0bWwgWyBUaW1lb3V0
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0tdmlkZW8tZWxlbWVudC1kaXNwbGF5cy1idWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0
Lm9yZy9iLzc5MjAzIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2dldHVzZXJtZWRpYS13
aXRoLWNhbnZhcy5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXNldE9iamVjdC1udWxsLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXN0YXRzLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL2NhcHR1cmVTdHJlYW0vY2FudmFzMmQtaGVhdnktZHJhd2luZy5odG1sIFsgVGltZW91
dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9nZXQtdXNlci1tZWRpYS1v
bi1sb2FkZWRtZXRhZGF0YS5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9sb2NhbC1hdWRpby1wbGF5aW5nLWV2ZW50Lmh0bWwgWyBUaW1lb3V0IF0K
LXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21lZGlhLXN0cmVhbS10cmFjay1z
b3VyY2UtZmFpbHVyZS5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cmVh
bS1NZWRpYUVsZW1lbnQtcHJlbG9hZC1ub25lLmh0dHBzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi83OTIwMyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhY2FwdHVy
ZS1zdHJlYW1zL01lZGlhU3RyZWFtVHJhY2stZW5kLW1hbnVhbC5odHRwcy5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvMTUxMzQ0IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRk
LWVuZGVkLXRyYWNrcy5odG1sIFsgVGltZW91dCBdCkBAIC02MTYsNiArNjA3LDkgQEAgd2Via2l0
Lm9yZy9iLzE3MzI1NyBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ncmFudC1wZXJzaXN0
ZW5jeTMuaHRtbCBbIFBhc3MKIAogIyBDYW52YXMgY2FwdHVyZVN0cmVhbSBzdXBwb3J0IGlzIG5v
dCBpbXBsZW1lbnRlZAogd2Via2l0Lm9yZy9iLzE2OTgxMSBmYXN0L21lZGlhY2FwdHVyZWZyb21l
bGVtZW50IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTY5ODExIGZhc3QvbWVkaWFzdHJlYW0vY2Fw
dHVyZVN0cmVhbS8gWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0
cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtp
dC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczNkLmh0
bWwgWyBDcmFzaCBUaW1lb3V0IF0KIAogIyBSZXF1aXJlcyBSZXNvbHV0aW9uIE1lZGlhIFF1ZXJ5
IHN1cHBvcnQKIHdlYmtpdC5vcmcvYi8xMDAxMzcgZmFzdC9tZWRpYS9tcS1yZXNvbHV0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KQEAgLTEyNDEsMjUgKzEyMzUsMTggQEAgd2Via2l0Lm9yZy9iLzEzMTU0
NiBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwgWyBDcmFzaCBUaW1lb3V0IEZhaWx1cmUg
XQogCiB3ZWJraXQub3JnL2IvMTYzNzgyIG1lZGlhL3ZpZGVvLXBsYXllZC1yYW5nZXMtMS5odG1s
IFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9j
YXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KLXdlYmtpdC5vcmcv
Yi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczNkLmh0bWwgWyBD
cmFzaCBUaW1lb3V0IF0KLQogd2Via2l0Lm9yZy9iLzE3MjI4MSBhY2Nlc3NpYmlsaXR5L2luc2Vy
dC1jaGlsZHJlbi1hc3NlcnQuaHRtbCBbIENyYXNoIF0KIAogd2Via2l0Lm9yZy9iLzE3Mjk1NSBt
ZWRpYS92aWRlby1wcmVsb2FkLmh0bWwgWyBDcmFzaCBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3
NTU3NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcmVhZHktc3RhdGVzL2F1dG9wbGF5LXdpdGgtc2xv
dy10ZXh0LXRyYWNrcy5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8xNzY4MDEg
ZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hdWRpby5odG1sIFsgQ3Jhc2ggXQog
d2Via2l0Lm9yZy9iLzE3NjgwMSBmYXN0L21lZGlhc3RyZWFtL2FyZ3VtZW50LXR5cGVzLmh0bWwg
WyBDcmFzaCBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3NjgwMyBodHRwL3Rlc3RzL2xvY2FsL2Js
b2Ivc2VuZC1oeWJyaWQtYmxvYi11c2luZy1vcGVuLXBhbmVsLmh0bWwgWyBDcmFzaCBdCiAKLXdl
YmtpdC5vcmcvYi8xNzY4NTYgZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy12aWRl
by5odG1sIFsgQ3Jhc2ggXQotCiAjIFNlZSBhbHNvIHdlYmtpdC5vcmcvYi8xNDE2OTkKIHdlYmtp
dC5vcmcvYi8xNzc1MzQgZmFzdC9hdHRhY2htZW50L2F0dGFjaG1lbnQtcmVzcGVjdHMtY3NzLXNp
emUuaHRtbCBbIENyYXNoIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE3NzUzNSBm
YXN0L21lZGlhc3RyZWFtL21lZGlhLWRldmljZS1pbmZvLmh0bWwgWyBDcmFzaCBQYXNzIF0KICMg
U2VlIGFsc28gd2Via2l0Lm9yZy9iLzE2MzUyOCBUaHJlYWRlZCBjb21wb3NpdG9yIGZhaWx1cmVz
IGNhdXNlZCBieSBvbmUgb2YgcjIwMzQ5NiwgcjIwMzQ5Nywgb3IgcjIwMzQ5OAogd2Via2l0Lm9y
Zy9iLzE3NzUzNiBtZWRpYS92aWRlby1vYmplY3QtZml0Lmh0bWwgWyBDcmFzaCBJbWFnZU9ubHlG
YWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI5Mjk4NTYxN2UxLi4xNjk2ZDM0NGJmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxOC0wNS0zMCAgVGhpYmF1bHQgU2F1bmllciAgPHRz
YXVuaWVyQGlnYWxpYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gU3RhcnQgaW1wbGVtZW50aW5nIE1lZGlhU3RyZWFt
IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1
Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
YXJlIGFkZGluZyBhbGwgdGhlIHJlcXVpcmVkIGNsYXNzZXMgdG8gbWFrZSB0aGUKKyAgICAgICAg
TWVkaWFTdHJlYW0gQVBJIHdvcmssIHRoYXQgbWVhbnMgb3VyIG93biBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTGliV2ViUlRDCisgICAgICAgIGZvciB0aGUgcGxhdGZvcm0sIHRoZSBHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlTWFuYWdlciwgdGhlIGF1ZGlvL3ZpZGVvIGNhcHR1cmVycworICAgICAg
ICBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBhdWRpby92aWRlbyBzb3VyY2VzIGFzIHdlbGwgYXMgYSBk
ZWRpY2F0ZWQgR1N0cmVhbWVyIFNvdXJjZQorICAgICAgICB0aGF0IGFkZHMgc3VwcG9ydCBmb3Ig
dXNpbmcgTWVkaWFTdHJlYW0gc3RyZWFtIGluc2lkZSBwbGF5YmluMy4KKyAgICAgICAgV2UgYXJl
IHVzaW5nIHRoZSBHc3REZXZpY2VNb25pdG9yIHRvIGxpc3QgZGV2aWNlcyBvbiB0aGUgZGV2aWNl
cy4KKworICAgICAgICBFbmFibGUgbWVkaWFzdHJlYW0gdGVzdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2U6IEFkZGVkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIGNvbXBpbGF0
aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDog
QWRkZWQgbmV3IEdTdHJlYW1lciB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1BsYXRm
b3JtQXVkaW9EYXRhLmg6IEFkZGVkIG5ldyBHU3RyZWFtZXIgdHlwZSBmb3IKKyAgICAgICAgdGhl
IEdTdHJlYW1lckF1ZGlvRGF0YSBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpbXBsZUJ1
c01lc3NhZ2VDYWxsYmFjayk6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBuZXh0CisgICAgICAgIG9u
ZSBoZWxwIHVzIHRvIGNvbm5lY3QgYSBtb25pdG9yaW5nIGNhbGxiYWNrIHRvIGEgcGlwZWxpbmUg
Zm9yCisgICAgICAgIGRlYnVnZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3RTaW1wbGVC
dXNNZXNzYWdlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmg6IERpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQpOiBNYWtlIHVzZSBv
ZiB0aGUgbG9hZEZ1bGwoKSBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKTogVmVyeSBzaW1pbGFyIHRvIGxvYWQoKQorICAgICAg
ICBidXQgYWxsb3dzIHNwZWNpZnlpbmcgd2hhdCBwaXBlbGluZSB0eXBlIHRvIHVzZSAobnVsbCB0
byBsZXQgdGhlIGZ1bmN0aW9uIGRldGVybWluZQorICAgICAgICB3aGljaCBvbmUgc2hvdWxkIGJl
IHVzZWQpLiBUaGlzIGlzIHJlcXVpcmVkIGFzIHdlIGZvcmNlIHRvIGFsd2F5cyB1c2UgcGxheWJp
bjMgZm9yIHRoZQorICAgICAgICBtZWRpYXN0cmVhbSBzb3VyY2UgYXMgaXQgcmVsaWVzIG9uIHRo
ZSBHc3RTdHJlYW0gQVBJLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uIGNvbnN0KTogU3R5bGUgZml4LgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSBjb25zdCk6IEFk
ZGVkLCB1c2UgTWVkaWFTdHJlYW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFj
a3MpOiBTb21lIHN0eWxlIGZpeGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogRW5oYW5jZSBkb3RmaWxlcyBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxl
T2ZDb250ZW50c0VudHJ5KTogTWlub3IgZm9ybWF0dGluZyBmaXguCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKTogU2V0IE1lZGlhU3Ry
ZWFtIG9uIFdlYktpdE1lZGlhU3RyZWFtU291cmNlIHdoZW4gc2V0dGluZyBpdCB1cC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKTog
QWR2ZXJ0aXNlIHRoYXQgd2Ugc3VwcG9ydCBNZWRpYVN0cmVhbSBpZiBzdXBwb3J0IGlzIGJ1aWx0
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVH
U1RQbGF5QmluKTogTWFrZSBzdXJlIHBsYXliaW4zIGlzIGZvcmNlZCB3aGVuIGxvYWRpbmcgYSBN
ZWRpYVN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgTWVkaWFTdHJl
YW0gb2JqZWN0IGFuZCBkZWNsYXJlIGxvYWRGdWxsIGFuZCBuYXR1cmFsU2l6ZSBvdmVycmlkZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlcldlYktpdEdTdHJl
YW1lckVsZW1lbnRzKTogUmVnaXN0ZXIgdGhlIG5ldyBNZWRpYVN0cmVhbVNyYyBlbGVtZW50Lgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOiBNYWtlIHN1cmUgdGhhdCBNZWRpYVN0cmVh
bSBNQUlOIHRyYWNrcyBhcmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4gV2UgaGF2ZSBubyB3YXkgdG8g
ZG8gaXQgaW4gTWVkaWFTdHJlYW1TcmMgbm93IGFzIHRoZSBHc3RTdHJlYW1Db2xsZWN0aW9uIGlz
IHJlY3JlYXRlZCBieSBwYXJzZWJpbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlLmg6IE1ha2UgQ2FwdHVyZUZhaWxlZCBhIHZpcnR1YWwgbWV0aG9k
IGFzIGluIG91ciBtb2NrcyB3ZSByZXF1aXJlIG5lZWQgdG8gbWFrZQorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKTogUmVtb3ZlIHRo
ZSBjb2RlCisgICAgICAgIHVzZWQgZm9yIGNvbXBpbGF0aW9uIGZvciB0aGUgcGxhdGZvcm0gd2hl
biB3ZSBkbyBub3QgaGF2ZSBhCisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJX
ZWJSVEMuIE5vdyB3ZSByZXR1cm4gdGhlIHByb3BlciBjbGFzcworICAgICAgICBmb3IgdGhlIHBs
YXRmb3JtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICBBZGRlZCBjbGFzcyByZXByZXNlbnRp
bmcgdGhlIFJlYWx0aW1lTWVkaWFTb3VyY2UgZm9yIHRoZSBBdWRpbworICAgICAgICB3aXRoIEdT
dHJlYW1lci4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlLmg6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcDogQWRk
ZWQKKyAgICAgICAgdGhpcyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIEdTdHJlYW1lciBwaXBl
bGluZSB0aGF0IGNhcHR1cmVzCisgICAgICAgIGF1ZGlvIGZyb20gdGhlIHN5c3RlbSBkZXZpY2Vz
LCBpdCBpbmhlcml0cyBmcm9tIEdTdHJlYW1lckNhcHR1cmVyLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmg6IERpdG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0
YS5oOiBBZGRlZCB0aGlzCisgICAgICAgIGNsYXNzIGltcGxlbWVudGluZyBQbGF0Zm9ybUF1ZGlv
RGF0YSBmb3IgdGhlIEdTdHJlYW1lciBwbGF0Zm9ybSwKKyAgICAgICAgdXNlZCB0byBwYXNzIHRo
ZSBzYW1wbGVzIGluZm9ybWF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIEFkZGVk
IHRoaXMgY2xhc3MgaW1wbGVtZW50aW5nIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG8gZXhwb3J0
IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXVkaW8gc3RyZWFtIHRvIGxpYndl
YnJ0Yy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZURldmljZS5oOiBBZGRlZAorICAgICAgICB0aGlzIGJhc2UgY2xhc3MgZm9yIHRoZSBh
dWRpbyBhbmQgdmlkZW8gY2FwdHVyaW5nIGRldmljZXMsIGl0CisgICAgICAgIGltcGxlbWVudHMg
Z2VuZXJhbCBXZWJLaXQgQ2FwdHVyZURldmljZSBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwOgor
ICAgICAgICBBZGRlZCB0aGlzIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc3lzdGVtIG1vbml0
b3IgdG8gZ2V0IHRoZQorICAgICAgICBsaXN0IG9mIGF2YWlsYWJsZSBkZXZpY2VzIGluIHRoZSBz
eXN0ZW0uIEl0IHVzZXMgR3N0RGV2aWNlTW9uaXRvcgorICAgICAgICB0byBoYW5kbGUgdGhlIG9w
ZXJhdGlvbi4gSXQgdXNlcyB0d28gc2luZ2xldG9uIGRldmljZSBtYW5hZ2VycyBvbmUKKyAgICAg
ICAgZm9yIGF1ZGlvIGFuZCBhbm90aGVyIG9uZSBmb3IgdmlkZW8sIGFzIHJlcXVpcmVkIGJ5IHRo
ZQorICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIGRlc2lnbi4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVyLmNwcDogQWRkZWQgdGhpcworICAgICAgICBiYXNlIGNsYXNzIHJlcHJl
c2VudGluZyBob3cgR1N0cmVhbWVyIGNhcHR1cmVzIHRoZSBtZWRpYSBmcm9tIHRoZQorICAgICAg
ICBpbnB1dCBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uIFR3byBjbGFzc2VzIGluaGVyaXQgZnJvbSB0
aGlzIG9uZSB0bworICAgICAgICBjYXB0dXJlIGF1ZGlvIGFuZCB2aWRlby4gSXQgc2V0dXBzIHRo
ZSBHU3RyZWFtZXIgcGlwZWxpbmUgYW5kIGFkZHMKKyAgICAgICAgZnVuY3Rpb25zIHRvIGNvbnRy
b2wgaXQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckNhcHR1cmVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICBJbXBs
ZW1lbnRzIGEgc3ViY2xhc3Mgb2YgR3N0QmluIGFzIGEgc291cmNlIGVsZW1lbnQgdGhhdCB3aWxs
IGNvbnRhaW4gc2V2ZXJhbAorICAgICAgICBHc3RBcHBTcmMsIGJhc2ljYWxseSBvbmUgcGVyIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9mIHRoZSBNZWRpYVN0cmVhbVByaXZhdGUKKyAgICAgICAg
cGFzc2VkIGluIHBhcmFtZXRlci4gSXQgYWRkcyBPYnNlcnZlcnMgb24gdGhlIE1lZGlhU3RyZWFt
VHJhY2tzIGFuZAorICAgICAgICBwdXNoZXMgdGhlIGRhdGEgdG8gdGhlIHNvdXJjZXMgYXMgcmVx
dWlyZWQuIFRoZSBlbGVtZW50IGltcGxlbWVudHMgdGhlIEdzdFVSSUhhbmRsZXIKKyAgICAgICAg
aW50ZXJmYWNlIHNvIGl0IGNhbiBiZSB1c2VkIGluIHBsYXliaW4uIFRoZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIgaXMgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHBhc3NpbmcgdGhlIE1l
ZGlhU3RyZWFtUHJpdmF0ZSBvYmplY3QgdG8gdGhlIHNvdXJjZSB3aGVuIHJlcXVpcmVkLgorICAg
ICAgICAoV2ViQ29yZTo6d2Via2l0TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKTogRXZlbnQgcHJv
YmUgdGhhdCBmaXhlcyBzdHJlYW1fc3RhcnQgZXZlbnRzIChzZXR0aW5nIHRoZSBJRCBldGMpCisg
ICAgICAgIGFuZCBmaW5hbGx5IGFkZCBzcmMgcGFkcyB0byB0aGUgcGlwZWxpbmUuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICBBZGRlZCB0aGlzIFJlYWx0
aW1lTWVkaWFTb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICAgIHZp
ZGVvIGRhdGEgZm9yIHRoZSBHU3RyZWFtZXIgcGxhdGZvcm0uIEl0IGhhbmRsZXMgdGhlIHNldHRp
bmdzIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2YgdGhlIHNvdXJjZSBhbmQgY3JlYXRlcyB0
aGUgY2FwdHVyZXIgdXNlZCB0bworICAgICAgICBjb250cm9sIHRoZSBvcGVyYXRpb24gb2YgdGhl
IHN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcDogQWRkZWQKKyAgICAg
ICAgdGhpcyBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gdGhlIEdTdHJlYW1lckNhcHR1cmVyIGFu
ZCBjb250cm9scworICAgICAgICB0aGUgR1N0cmVhbWVyIHBpcGVsaW5lcyBvZiB0aGUgdmlkZW8g
c3RyZWFtcyBvZiB0aGUgc3lzdGVtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNl
LmNwcDogQWRkZWQuIEltcGxlbWVudGF0aW9uIG9mIGEgTW9jayBjYXB0dXJlciBmb3IgYXVkaW8g
c3RyZWFtLgorICAgICAgICBTdWJjbGFzc2VzIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIgYW5kIHdy
YXBzIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2Ugc28gdGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRo
ZSBzYW1lIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UKKyAgICAgICAgYnV0IHN0aWxsIHRoZSBH
U3RyZWFtZXIgaW1wbGVtZW50YXRpb24gY29kZSBwYXRocyBhcmUgdGVzdGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcDogQWRkZWQuIEltcGxlbWVudGF0
aW9uIG9mIGEgTW9jayBjYXB0dXJlciBmb3IgdmlkZW8gc3RyZWFtLgorICAgICAgICBTdWJjbGFz
c2VzIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXIgYW5kIHdyYXBzIGEgTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2Ugc28gdGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIGEgTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UKKyAgICAgICAgYnV0IHN0aWxsIHRoZSBHU3RyZWFtZXIgaW1wbGVtZW50YXRpb24g
Y29kZSBwYXRocyBhcmUgdGVzdGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDLmNwcDoKKyAgICAgICAgQWRkZWQgdGhpcyBjbGFzcyB0aGF0IGltcGxlbWVu
dHMgdGhlIGtleSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyCisgICAgICAgIGZ1bmN0aW9ucyB0
byBjb25maWd1cmUgdGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBwbGF0Zm9ybSwgdXNpbmcgdGhlCisg
ICAgICAgIG90aGVyIEdTdHJlYW1lciBjbGFzc2VzLgorICAgICAgICAqIHBsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwOiBEbyBub3QgYnVpbGQgOjpjcmVhdGUgaWYgR1N0
cmVhbWVyIGltcGxlbWVudGF0aW9uIGlzIGJ1aWx0CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6IERvIG5vdCBidWlsZCA6OmNyZWF0ZSBpZiBHU3Ry
ZWFtZXIgaW1wbGVtZW50YXRpb24gaXMgYnVpbHQKKwogMjAxOC0wNi0wNyAgVGhpYmF1bHQgU2F1
bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gRml4IHRo
ZSB3YXkgR3N0U3RyZWFtQ29sbGVjdGlvbiBpcyBoYW5kbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDgyM2M3N2RkYjIxLi5jMmQ0Y2FlMGY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTI0LDEyICsyNCwxNCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrIgogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2dseCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL3gxMSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3RrIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvZ3RrIgogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggM2Q1YTZlMDAyNWEuLjMzM2YxZDY1YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0zMyw2ICszMywyMiBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvUGxheWJhY2tQaXBlbGluZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAor
CisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCisgICAgICAgIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKyAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKKworICAgICAgICBwbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZU1lZGlhU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVN
X0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAppbmRleCBlNDQwZGM5MGEzZS4uMmJhNTg1
YzljMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTM1LDYgKzM1LDcgQEAgc3RydWN0IFBsYXRmb3JtRGVz
Y3JpcHRpb24gewogICAgIGVudW0gewogICAgICAgICBOb25lLAogICAgICAgICBDQUF1ZGlvU3Ry
ZWFtQmFzaWNUeXBlLAorICAgICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLAog
ICAgIH0gdHlwZTsKICAgICBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBjb25zdCBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlwdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9QbGF0Zm9ybUF1ZGlvRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUGxhdGZvcm1BdWRpb0RhdGEuaAppbmRleCBlNDU0NGY2MzI1NC4u
Y2RhNzJlOGFiM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Bs
YXRmb3JtQXVkaW9EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUGxh
dGZvcm1BdWRpb0RhdGEuaApAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFz
cyBLaW5kIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgV2ViQXVkaW9CdWZmZXJMaXN0LAorICAg
ICAgICBHU3RyZWFtZXJBdWRpb0RhdGEsCiAgICAgfTsKIAogICAgIHZpcnR1YWwgS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gS2luZDo6Tm9uZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNw
cAppbmRleCBlNTE0ZmUzNDI4ZC4uZDU0NzViNzRjZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvR0xpYlV0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KIAogI2lmIEVOQUJM
RShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCiAjZGVmaW5lIEdTVF9VU0Vf
VU5TVEFCTEVfQVBJCkBAIC0zMjAsNiArMzIxLDUyIEBAIGJvb2wgZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBz
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdzdEJpbiogcGlwZWxpbmUpCit7
CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1Rf
TUVTU0FHRV9FUlJPUjoKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwaXBlbGluZSwgIkdvdCBt
ZXNzYWdlOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbWVzc2FnZSk7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIFdURjo6U3RyaW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzX2Vycm9yIiwg
R1NUX09CSkVDVF9OQU1FKHBpcGVsaW5lKSk7CisgICAgICAgICAgICBHU1RfREVCVUdfQklOX1RP
X0RPVF9GSUxFX1dJVEhfVFMocGlwZWxpbmUsIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90
RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOgorICAgICAgICBpZiAoR1NUX01FU1NBR0Vf
U1JDKG1lc3NhZ2UpID09IEdTVF9PQkpFQ1QocGlwZWxpbmUpKSB7CisgICAgICAgICAgICBHc3RT
dGF0ZSBvbGRTdGF0ZSwgbmV3U3RhdGUsIHBlbmRpbmc7CisgICAgICAgICAgICBnc3RfbWVzc2Fn
ZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKG1lc3NhZ2UsICZvbGRTdGF0ZSwgJm5ld1N0YXRlLCAmcGVu
ZGluZyk7CisKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSwgIlN0YXRlIGNo
YW5nZWQgKG9sZDogJXMsIG5ldzogJXMsIHBlbmRpbmc6ICVzKSIsCisgICAgICAgICAgICAgICAg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUob2xkU3RhdGUpLAorICAgICAgICAgICAgICAgIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSwKKyAgICAgICAgICAgICAgICBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgICAgIFdURjo6U3Ry
aW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzXyVzXyVzIiwKKyAgICAgICAgICAg
ICAgICBHU1RfT0JKRUNUX05BTUUocGlwZWxpbmUpLAorICAgICAgICAgICAgICAgIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKG9sZFN0YXRlKSwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpOworCisgICAgICAgICAgICBHU1RfREVCVUdfQklO
X1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihwaXBlbGluZSksIEdTVF9ERUJVR19HUkFQSF9T
SE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIGRp
c2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCAqcGlwZWxpbmUpCit7
CisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1
cyhHU1RfUElQRUxJTkUocGlwZWxpbmUpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKGJ1cy5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oc2ltcGxl
QnVzTWVzc2FnZUNhbGxiYWNrKSwgcGlwZWxpbmUpOworfQorCit2b2lkIGNvbm5lY3RTaW1wbGVC
dXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCAqcGlwZWxpbmUpCit7CisgICAgR1JlZlB0cjxH
c3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUo
cGlwZWxpbmUpKSk7CisgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwoYnVzLmdldCgp
LCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1bkxvb3BEaXNwYXRjaGVyKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGJ1cy5nZXQoKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLKHNpbXBsZUJ1c01lc3Nh
Z2VDYWxsYmFjayksIHBpcGVsaW5lKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCAyNTkyNTVlNzQxZS4uY2JiNDkzMjNhNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTgyLDYgKzgyLDkgQEAgaW5saW5lIEdzdENs
b2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKIH0KIAog
Ym9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR0xpc3QqIGVsZW1lbnRGYWN0
b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwordm9pZCBjb25uZWN0U2ltcGxlQnVzTWVz
c2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKTsKK3ZvaWQgZGlzY29ubmVjdFNpbXBs
ZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBlbGluZSk7CisKIH0KIAogI2lmbmRl
ZiBHU1RfQlVGRkVSX0RUU19PUl9QVFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggN2Q4NDdmMThkNzYuLjBlYzRiMTNmODkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNTEsNiAr
NTEsMTAgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0
cmVhbVNvdXJjZS5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAjaW5jbHVk
ZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJJbmJhbmRNZXRhZGF0
YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKQEAgLTIzNyw2ICsyNDEsMTEgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmwp
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQoreworICAgIGxvYWRGdWxsKHVybFN0cmluZywgbnVsbHB0cik7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgY29uc3QgZ2NoYXIgKnBsYXliaW5OYW1lKQogewogICAgIC8vIEZJWE1FOiBU
aGlzIG1ldGhvZCBpcyBzdGlsbCBjYWxsZWQgZXZlbiBpZiBzdXBwb3J0c1R5cGUoKSByZXR1cm5l
ZAogICAgIC8vIElzTm90U3VwcG9ydGVkLiBUaGlzIHdvdWxkIGRlc2VydmUgbW9yZSBpbnZlc3Rp
Z2F0aW9uIGJ1dCBtZWFud2hpbGUgbWFrZQpAQCAtMjU0LDcgKzI2Myw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIGNyZWF0ZUdTVFBs
YXlCaW4oaXNNZWRpYVNvdXJjZSgpID8gInBsYXliaW4iIDogbnVsbHB0cik7CisgICAgICAgIGNy
ZWF0ZUdTVFBsYXlCaW4oaXNNZWRpYVNvdXJjZSgpID8gInBsYXliaW4iIDogcGxheWJpbk5hbWUp
OwogCiAgICAgaWYgKG1fZmlsbFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZmlsbFRpbWVy
LnN0b3AoKTsKQEAgLTI5MiwxMiArMzAxLDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUmKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0pCiB7CisjaWYg
R1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisgICAgbV9zdHJlYW1Qcml2YXRlID0gJnN0cmVh
bTsKKyAgICBsb2FkRnVsbChTdHJpbmcoIm1lZGlhc3RyZWFtOi8vIikgKyBzdHJlYW0uaWQoKSwg
InBsYXliaW4zIik7CisgICAgZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0KCk7CisgICAgbV9wbGF5
ZXItPnBsYXkoKTsKKyNlbHNlCiAgICAgLy8gUHJvcGVybHkgZmFpbCBzbyB0aGUgZ2xvYmFsIE1l
ZGlhUGxheWVyIHRyaWVzIHRvIGZhbGxiYWNrIHRvIHRoZSBuZXh0IE1lZGlhUGxheWVyUHJpdmF0
ZS4KICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKICAgICBt
X3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwogICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
ZW5kaWYKIH0KICNlbmRpZgogCkBAIC0zMzAsNyArMzQ2LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0CiAKICAgICAvLyBQ
b3NpdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBubyBhc3luYyBzdGF0ZSBjaGFuZ2UgaXMgZ29p
bmcgb24gYW5kIHRoZSBzdGF0ZSBpcyBlaXRoZXIgcGF1c2VkIG9yIHBsYXlpbmcuCiAgICAgZ2lu
dDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBHc3RRdWVyeSogcXVlcnk9
IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBHc3RRdWVyeSog
cXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7CiAgICAgaWYg
KGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5KSkKICAgICAgICAgZ3N0
X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwogICAgIGdzdF9xdWVy
eV91bnJlZihxdWVyeSk7CkBAIC02NDgsNiArNjY0LDI1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpjbGVhclRyYWNrcygpCiAgICAgICAgICAgICBtX2N1cnJlbnQjI1R5cGUj
I1N0cmVhbUlkID0gU3RyaW5nKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQorCitGbG9hdFNp
emUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7Cisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmICFt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI+IHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChtX2N1
cnJlbnRWaWRlb1N0cmVhbUlkKTsKKworICAgICAgICBpZiAodmlkZW9UcmFjaykgeworICAgICAg
ICAgICAgYXV0byB0YWdzID0gZ3N0X3N0cmVhbV9nZXRfdGFncyh2aWRlb1RyYWNrLT5zdHJlYW0o
KSk7CisgICAgICAgICAgICBnaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICAgICAgICAgIGlmIChn
c3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLCBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJRFRILCAm
d2lkdGgpICYmIGdzdF90YWdfbGlzdF9nZXRfaW50KHRhZ3MsIFdFQktJVF9NRURJQV9UUkFDS19U
QUdfSEVJR0hULCAmaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0
dXJhbFNpemUoKTsKK30KICNlbHNlCiAjZGVmaW5lIENSRUFURV9UUkFDSyh0eXBlLCBfaWQsIHRy
YWNrcywgbWV0aG9kLCBzdHJlYW0pIG1faGFzIyNUeXBlIyMgPSB0cnVlOwogI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKQEAgLTExNjUsNyArMTIwMCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAg
ICAgIC8vIENvbnN0cnVjdCBhIGZpbGVuYW1lIGZvciB0aGUgZ3JhcGh2aXogZG90IGZpbGUgb3V0
cHV0LgogICAgICAgICBHc3RTdGF0ZSBuZXdTdGF0ZTsKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFy
c2Vfc3RhdGVfY2hhbmdlZChtZXNzYWdlLCAmY3VycmVudFN0YXRlLCAmbmV3U3RhdGUsIG51bGxw
dHIpOwotICAgICAgICBDU3RyaW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIndlYmtp
dC12aWRlby4lc18lcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSks
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSkudXRmOCgpOworICAgICAgICBD
U3RyaW5nIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzLiVzXyVzIiwgR1NUX09CSkVD
VF9OQU1FKG1fcGlwZWxpbmUuZ2V0KCkpLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3Rh
dGUpKS51dGY4KCk7CiAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhH
U1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZp
bGVOYW1lLmRhdGEoKSk7CiAKICAgICAgICAgYnJlYWs7CkBAIC0xNDMxLDcgKzE0NjcsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0Vu
dHJ5KEdzdFRvY0VudHJ5KiBlbnRyeQogCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90b2Nf
ZW50cnlfZ2V0X3RhZ3MoZW50cnkpOwogICAgIGlmICh0YWdzKSB7Ci0gICAgICAgIGdjaGFyKiB0
aXRsZSA9ICBudWxscHRyOworICAgICAgICBnY2hhciogdGl0bGUgPSBudWxscHRyOwogICAgICAg
ICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyh0YWdzLCBHU1RfVEFHX1RJVExFLCAmdGl0bGUpOwog
ICAgICAgICBpZiAodGl0bGUpIHsKICAgICAgICAgICAgIGN1ZS0+c2V0Q29udGVudCh0aXRsZSk7
CkBAIC0xNzI2LDYgKzE3NjIsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiAgICAgaWYgKFdFQktJVF9J
U19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgewogICAgICAgICB3ZWJLaXRXZWJTcmNTZXRNZWRp
YVBsYXllcihXRUJLSVRfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSksIG1fcGxheWVyKTsKICAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChHU1RfRUxFTUVOVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpLCAi
ZWxlbWVudC1hZGRlZCIsIEdfQ0FMTEJBQ0sodXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tfVkVSU0lP
TigxLCAxMCwgMCkKKyAgICB9IGVsc2UgaWYgKFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNv
dXJjZUVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gc3RyZWFtID0gbV9zdHJlYW1Qcml2YXRlLmdl
dCgpOworICAgICAgICBBU1NFUlQoc3RyZWFtKTsKKyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1T
cmNTZXRTdHJlYW0oV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCksIHN0cmVh
bSk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTIyNjksOCArMjMxMSwxMCBAQCBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBl
KGNvbnN0IE1lZGlhRQogICAgICAgICByZXR1cm4gcmVzdWx0OwogI2VuZGlmCiAKKyNpZiAhRU5B
QkxFKE1FRElBX1NUUkVBTSkgfHwgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgIGlm
IChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCiAgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5k
aWYKIAogICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMjQzMywxNyArMjQ3NywyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBnY2hhciogcGxheWJpbk5hbWUpCiAgICAg
QVNTRVJUKCFtX3BpcGVsaW5lKTsKIAogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQot
ICAgIG1faXNMZWdhY3lQbGF5YmluID0gIWdfZ2V0ZW52KCJVU0VfUExBWUJJTjMiKTsKLSAgICBp
ZiAoIW1faXNMZWdhY3lQbGF5YmluKQorICAgIGlmIChnX2dldGVudigiVVNFX1BMQVlCSU4zIikp
CiAgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKKyNlbHNlCisgICAgcGxheWJpbk5h
bWUgPSAicGxheWJpbiI7CiAjZW5kaWYKIAogICAgIGlmICghcGxheWJpbk5hbWUpCiAgICAgICAg
IHBsYXliaW5OYW1lID0gInBsYXliaW4iOwogCisgICAgbV9pc0xlZ2FjeVBsYXliaW4gPSAhZ19z
dHJjbXAwKHBsYXliaW5OYW1lLCAicGxheWJpbiIpOworCiAgICAgLy8gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwogICAgIC8vIHdlIHNo
b3VsZCBub3QgYWRvcHQuCi0gICAgc2V0UGlwZWxpbmUoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KHBsYXliaW5OYW1lLCAicGxheSIpKTsKKyAgICBzZXRQaXBlbGluZShnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UocGxheWJpbk5hbWUsIFN0cmluZzo6Zm9ybWF0KCJwbGF5XyVwIiwgdGhpcykudXRm
OCgpLmRhdGEoKSkpOwogICAgIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVBTV9WT0xV
TUUobV9waXBlbGluZS5nZXQoKSkpOwogCiAgICAgR1NUX0lORk8oIlVzaW5nIGxlZ2FjeSBwbGF5
YmluIGVsZW1lbnQ6ICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNMZWdhY3lQbGF5YmluKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMWFlNGE1
NGJhZTAuLmIyZWU1ZTY5NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oCkBAIC0xNzksNiArMTc5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKik7CiAKICAgICB2b2lkIHNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmxTdHJpbmcp
OworICAgIHZvaWQgbG9hZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGdjaGFyICpwbGF5
YmluTmFtZSk7CiAKICNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKICAgICB2b2lkIHVw
ZGF0ZVRyYWNrcygpOwpAQCAtMjYyLDcgKzI2MywxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c0xlZ2FjeVBsYXliaW47CiAjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiAgICAgR1Jl
ZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBtX3N0cmVhbUNvbGxlY3Rpb247Ci0jZW5kaWYKKyAg
ICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IG1fc3RyZWFtUHJpdmF0ZTsK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlmIC8vIEdTVF9DSEVDS19WRVJT
SU9OKDEsIDEwLCAwKQogICAgIFN0cmluZyBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkOwogICAgIFN0
cmluZyBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkOwogICAgIFN0cmluZyBtX2N1cnJlbnRUZXh0U3Ry
ZWFtSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5jcHAKaW5kZXggMmViNDQxZDI3NTMuLjYyN2M0YjJhMjdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC04MSw2ICs4
MSwxMCBAQAogI2VuZGlmIC8vICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKICNlbmRpZiAv
LyBVU0UoTElCRVBPWFkpCiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tf
VkVSU0lPTigxLCAxMCwgMCkKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5o
IgorI2VuZGlmCisKICNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKICNpbmNsdWRlIDxnc3Qv
Z2wvZ2wuaD4KICN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQpAQCAtMTQzLDYgKzE0Nyw5IEBA
IHZvaWQgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cygpCiAgICAgaWYgKCFjbGVhcktl
eURlY3J5cHRvckZhY3RvcnkpCiAgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIs
ICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAxMDAsIFdFQktJVF9UWVBFX01F
RElBX0NLX0RFQ1JZUFQpOwogI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgR1NU
X0NIRUNLX1ZFUlNJT04oMSwxMCwwKQorICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIs
ICJtZWRpYXN0cmVhbXNyYyIsIEdTVF9SQU5LX1BSSU1BUlksIFdFQktJVF9UWVBFX01FRElBX1NU
UkVBTV9TUkMpOworI2VuZGlmCiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYzU0MjAw
ZWFlODEuLjRkOTk3ODZlMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAKQEAgLTQ4LDYgKzQ4LDE0IEBAIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0
CiAgICAgOiBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBzdHJlYW0pCiAg
ICAgLCBtX3BsYXllcihwbGF5ZXIpCiB7CisgICAgZ2ludCBraW5kOworICAgIGF1dG8gdGFncyA9
IGdzdF9zdHJlYW1fZ2V0X3RhZ3MobV9zdHJlYW0uZ2V0KCkpOworCisgICAgaWYgKGdzdF90YWdf
bGlzdF9nZXRfaW50KHRhZ3MsICJ3ZWJraXQtbWVkaWEtc3RyZWFtLWtpbmQiLCAma2luZCkgJiYg
a2luZCA9PSBzdGF0aWNfY2FzdDxpbnQ+KFZpZGVvVHJhY2tQcml2YXRlOjpLaW5kOjpNYWluKSkg
eworICAgICAgICBHc3RTdHJlYW1GbGFncyBzdHJlYW1GbGFncyA9IGdzdF9zdHJlYW1fZ2V0X3N0
cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpOworICAgICAgICBnc3Rfc3RyZWFtX3NldF9zdHJlYW1f
ZmxhZ3Moc3RyZWFtLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RTdHJlYW1GbGFncz4oc3RyZWFtRmxh
Z3MgfCBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSk7CisgICAgfQorCiAgICAgbV9pZCA9IGdzdF9z
dHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpOwogICAgIHNldEFjdGl2ZShnc3Rfc3Ry
ZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKSAmIEdTVF9TVFJFQU1fRkxBR19TRUxF
Q1QpOwogICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgK
aW5kZXggOWI0NTEyMDVlNWIuLjU0MTEwODVjNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC0y
MTYsNyArMjE2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG1vbml0b3JPcmllbnRh
dGlvbihPcmllbnRhdGlvbk5vdGlmaWVyJikgeyB9CiAKLSAgICB2b2lkIGNhcHR1cmVGYWlsZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZUZhaWxlZCgpOwogCiAgICAgLy8gVGVzdGluZyBv
bmx5CiAgICAgdmlydHVhbCB2b2lkIGRlbGF5U2FtcGxlcyhTZWNvbmRzKSB7IH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCmluZGV4IDJlZmI4MmQxZTU4Li4zODg2ZmY4NzVjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTY0LDE0ICs2NCw3IEBAIFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmds
ZXRvbigpCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciogb3ZlcnJpZGUgPSBtZWRpYVN0
cmVhbUNlbnRlck92ZXJyaWRlKCk7CiAgICAgaWYgKG92ZXJyaWRlKQogICAgICAgICByZXR1cm4g
Km92ZXJyaWRlOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIFJldHVybiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlciB0byBhdm9pZCBjcmFzaC4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI+IGNlbnRlcjsKLSAgICByZXR1cm4gY2VudGVyOwotI2Vs
c2UKICAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIo
KTsKLSNlbmRpZgogfQogCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNldFNoYXJl
ZFN0cmVhbUNlbnRlck92ZXJyaWRlKFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIqIGNlbnRlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjljNWFlYWZmZmNmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhv
cjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxl
amFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVB
TUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorCisjaW5jbHVk
ZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgi
CisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY29uc3Qgc3RhdGljIENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UgZGVmYXVsdFZvbHVtZUNhcGFi
aWxpdHkgPSBDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDAuMCwgMS4wKTsKK2NvbnN0IHN0YXRpYyBS
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uIGRlZmF1bHRF
Y2hvQ2FuY2VsbGF0aW9uQ2FwYWJpbGl0eSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXM6OkVjaG9DYW5jZWxsYXRpb246OlJlYWRXcml0ZTsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdl
YmtpdF9hdWRpb19jYXB0dXJlX3NvdXJjZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVM
VCB3ZWJraXRfYXVkaW9fY2FwdHVyZV9zb3VyY2VfZGVidWcKKworc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUdTdHJlYW1lckRlYnVnKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdS
ZWdpc3RlcmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBb
XSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9hdWRpb19jYXB0dXJl
X3NvdXJjZV9kZWJ1ZywgIndlYmtpdGF1ZGlvY2FwdHVyZXNvdXJjZSIsIDAsICJXZWJLaXQgQXVk
aW8gQ2FwdHVyZSBTb3VyY2UuIik7CisgICAgfSk7Cit9CisKK2NsYXNzIEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZUZhY3RvcnkgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9D
YXB0dXJlRmFjdG9yeSB7CitwdWJsaWM6CisgICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRl
QXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVk
aWFDb25zdHJhaW50cyogY29uc3RyYWludHMpIGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4g
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoZGV2aWNlLnBlcnNpc3RlbnRJZCgp
LCBjb25zdHJhaW50cyk7CisgICAgfQorfTsKKworc3RhdGljIEdTdHJlYW1lckF1ZGlvQ2FwdHVy
ZVNvdXJjZUZhY3RvcnkmIGxpYldlYlJUQ0F1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2VGYWN0
b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0b3J5LmdldCgpOworfQorCitDYXB0dXJlU291
cmNlT3JFcnJvciBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAg
ICBhdXRvIGRldmljZSA9IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmds
ZXRvbigpLmdzdHJlYW1lckRldmljZVdpdGhVSUQoZGV2aWNlSUQpOworICAgIGlmICghZGV2aWNl
KSB7CisgICAgICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIkdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKCk6IEdTdHJlYW1lciBkaWQgbm90IGZpbmQgdGhl
IGRldmljZTogJXMuIiwgZGV2aWNlSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBD
YXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKGVycm9yTWVzc2FnZSkpOworICAgIH0KKworICAg
IGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2Uo
ZGV2aWNlLnZhbHVlKCkpKTsKKworICAgIGlmIChjb25zdHJhaW50cykgeworICAgICAgICBhdXRv
IHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0LnZhbHVlKCku
Zmlyc3QpOworICAgIH0KKyAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShz
b3VyY2UpKTsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYg
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gbGli
V2ViUlRDQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSgpOworfQorCitHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2U6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShHU3RyZWFtZXJDYXB0dXJl
RGV2aWNlIGRldmljZSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlLnBlcnNpc3Rl
bnRJZCgpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywgZGV2aWNlLmxhYmVsKCkp
CisgICAgLCBtX2NhcHR1cmVyKHN0ZDo6bWFrZV91bmlxdWU8R1N0cmVhbWVyQXVkaW9DYXB0dXJl
cj4oZGV2aWNlKSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyRGVidWcoKTsKK30KKworR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoY29u
c3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogUmVhbHRpbWVN
ZWRpYVNvdXJjZShkZXZpY2VJRCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIG5h
bWUpCisgICAgLCBtX2NhcHR1cmVyKHN0ZDo6bWFrZV91bmlxdWU8R1N0cmVhbWVyQXVkaW9DYXB0
dXJlcj4oKSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyRGVidWcoKTsKK30KKworR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlOjp+R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKCkKK3sK
K30KKwordm9pZCBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0
YSgpCit7CisgICAgbV9jYXB0dXJlci0+c2V0dXBQaXBlbGluZSgpOworICAgIG1fY2FwdHVyZXIt
PnNldFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2Fw
dHVyZXItPnNpbmsoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1NhbXBsZUNhbGxiYWNr
KSwgdGhpcyk7CisgICAgbV9jYXB0dXJlci0+cGxheSgpOworfQorCitHc3RGbG93UmV0dXJuIEdT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6bmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCog
c2luaywgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKiBzb3VyY2UpCit7CisgICAgYXV0byBz
YW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhz
aW5rKSkpOworCisgICAgLy8gRklYTUUgLSBmaWd1cmUgb3V0IGEgd2F5IHRvIGF2b2lkIGNvcHlp
bmcgKG9uIHdyaXRlKSB0aGUgZGF0YS4KKyAgICBHc3RCdWZmZXIqIGJ1ZiA9IGdzdF9zYW1wbGVf
Z2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOworICAgIGF1dG8gZnJhbWVzKHN0ZDo6dW5pcXVlX3B0
cjxHU3RyZWFtZXJBdWRpb0RhdGE+KG5ldyBHU3RyZWFtZXJBdWRpb0RhdGEoV1RGTW92ZShzYW1w
bGUpKSkpOworICAgIGF1dG8gc3RyZWFtRGVzYyhzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbj4obmV3IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24o
ZnJhbWVzLT5nZXRBdWRpb0luZm8oKSkpKTsKKworICAgIHNvdXJjZS0+YXVkaW9TYW1wbGVzQXZh
aWxhYmxlKAorICAgICAgICBNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZF
Ul9QVFMoYnVmKSksIEdfVVNFQ19QRVJfU0VDKSwKKyAgICAgICAgKmZyYW1lcywgKnN0cmVhbURl
c2MsIGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmKSAvIGZyYW1lcy0+Z2V0QXVkaW9JbmZvKCkuYnBm
KTsKKworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKwordm9pZCBHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9jYXB0dXJlci0+c2luaygpLCByZWludGVycHJldF9jYXN0
PGdwb2ludGVyPihuZXdTYW1wbGVDYWxsYmFjayksIHRoaXMpOworICAgIG1fY2FwdHVyZXItPnN0
b3AoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIGlmICht
X2NhcGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnZhbHVlKCk7CisK
KyAgICB1aW50IGk7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gbV9jYXB0dXJlci0+Y2Fw
cygpOworICAgIGludCBtaW5TYW1wbGVSYXRlID0gMCwgbWF4U2FtcGxlUmF0ZSA9IDA7CisgICAg
Zm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOyBpKyspIHsKKyAg
ICAgICAgaW50IGNhcGFiaWxpdHlNaW5TYW1wbGVSYXRlID0gMCwgY2FwYWJpbGl0eU1heFNhbXBs
ZVJhdGUgPSAwOworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1
Y3R1cmUoY2Fwcy5nZXQoKSwgaSk7CisKKyAgICAgICAgLy8gT25seSBhY2NlcHQgcmF3IGF1ZGlv
IGZvciBub3cuCisgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHIsICJhdWRp
by94LXJhdyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9nZXQoc3RyLCAicmF0ZSIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgJmNhcGFiaWxpdHlNaW5TYW1w
bGVSYXRlLCAmY2FwYWJpbGl0eU1heFNhbXBsZVJhdGUsIG51bGxwdHIpOworICAgICAgICBpZiAo
aSA+IDApIHsKKyAgICAgICAgICAgIG1pblNhbXBsZVJhdGUgPSBzdGQ6Om1pbihtaW5TYW1wbGVS
YXRlLCBjYXBhYmlsaXR5TWluU2FtcGxlUmF0ZSk7CisgICAgICAgICAgICBtYXhTYW1wbGVSYXRl
ID0gc3RkOjptYXgobWF4U2FtcGxlUmF0ZSwgY2FwYWJpbGl0eU1heFNhbXBsZVJhdGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWluU2FtcGxlUmF0ZSA9IGNhcGFiaWxpdHlNaW5T
YW1wbGVSYXRlOworICAgICAgICAgICAgbWF4U2FtcGxlUmF0ZSA9IGNhcGFiaWxpdHlNYXhTYW1w
bGVSYXRlOworICAgICAgICB9CisgICAgfQorCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllcyBjYXBhYmlsaXRpZXMoc2V0dGluZ3MoKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpKTsK
KyAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQoaWQoKSk7CisgICAgY2FwYWJpbGl0aWVzLnNl
dEVjaG9DYW5jZWxsYXRpb24oZGVmYXVsdEVjaG9DYW5jZWxsYXRpb25DYXBhYmlsaXR5KTsKKyAg
ICBjYXBhYmlsaXRpZXMuc2V0Vm9sdW1lKGRlZmF1bHRWb2x1bWVDYXBhYmlsaXR5KTsKKyAgICBj
YXBhYmlsaXRpZXMuc2V0U2FtcGxlUmF0ZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pblNhbXBs
ZVJhdGUsIG1heFNhbXBsZVJhdGUpKTsKKyAgICBtX2NhcGFiaWxpdGllcyA9IFdURk1vdmUoY2Fw
YWJpbGl0aWVzKTsKKworICAgIHJldHVybiBtX2NhcGFiaWxpdGllcy52YWx1ZSgpOworfQorCiti
b29sIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlTYW1wbGVSYXRlKGludCBzYW1w
bGVSYXRlKQoreworICAgIHJldHVybiBtX2NhcHR1cmVyLT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJh
dGUpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIEdTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIGlmICghbV9jdXJyZW50
U2V0dGluZ3MpIHsKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHNldHRpbmdz
OworICAgICAgICBzZXR0aW5ncy5zZXREZXZpY2VJZChpZCgpKTsKKworICAgICAgICBSZWFsdGlt
ZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgc3VwcG9ydGVkQ29uc3RyYWludHM7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRWNob0NhbmNlbGxhdGlvbih0
cnVlKTsKKyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNWb2x1bWUodHJ1
ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzU2FtcGxlUmF0ZSh0
cnVlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3VwcG9ydGVk
Q29uc3RyYWludHMpOworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RGTW92ZShzZXR0
aW5ncyk7CisgICAgfQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFZvbHVtZSh2b2x1bWUo
KSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSgpKTsK
KyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0RWNob0NhbmNlbGxhdGlvbihlY2hvQ2FuY2VsbGF0
aW9uKCkpOworCisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjNmYTRhOWMyZTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlh
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJX
RUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9DYXB0dXJl
ci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UgeworcHVi
bGljOgorICAgIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGUoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBBdWRpb0NhcHR1cmVGYWN0b3J5JiBmYWN0b3J5KCk7CisKKyAgICBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fY2Fw
dHVyZXItPnBpcGVsaW5lKCk7IH0KKyAgICBHU3RyZWFtZXJDYXB0dXJlciogY2FwdHVyZXIoKSB7
IHJldHVybiBtX2NhcHR1cmVyLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBHU3RyZWFtZXJB
dWRpb0NhcHR1cmVTb3VyY2UoR1N0cmVhbWVyQ2FwdHVyZURldmljZSk7CisgICAgR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CisgICAgdmlydHVhbCB+R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKCk7CisgICAg
dm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3BQcm9kdWNp
bmdEYXRhKCkgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVN
ZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJsZSBzdGQ6
Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBhcHBseVNhbXBsZVJhdGUoaW50KSBmaW5hbDsKKyAgICBi
b29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBi
b29sIGFwcGx5Vm9sdW1lKGRvdWJsZSkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI+IG1fY2FwdHVyZXI7CisKKyAgICBz
dGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiwgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlKik7CisgICAgdm9pZCB0cmlnZ2VyU2FtcGxlQXZhaWxhYmxl
KEdzdFNhbXBsZSopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjQxNTdlZjcwYTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVu
aWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJv
ICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAi
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oIgorCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Gb3Jt
YXQuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIo
R1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihk
ZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRl
IiwgR19UWVBFX0lOVCwgTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGUsIG51bGxwdHIp
KSkKK3sKK30KKworR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJl
cigpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXVkaW90ZXN0c3JjIiwgYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBMaWJX
ZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZSwgbnVsbHB0cikpKQoreworfQorCitHc3RFbGVt
ZW50KiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIoKQoreworICAgIGF1
dG8gY29udmVydGVyID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCJhdWRpb2NvbnZl
cnQgISBhdWRpb3Jlc2FtcGxlIiwgVFJVRSwgbnVsbHB0cik7CisKKyAgICBBU1NFUlQoY29udmVy
dGVyKTsKKworICAgIHJldHVybiBjb252ZXJ0ZXI7Cit9CisKK2Jvb2wgR1N0cmVhbWVyQXVkaW9D
YXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKK3sKKworICAgIGlmIChzYW1w
bGVSYXRlID4gMCkgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IlNldHRpbmcgU2FtcGxlUmF0ZSAlZCIsIHNhbXBsZVJhdGUpOworICAgICAgICBtX2NhcHMgPSBh
ZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQ
RV9JTlQsIHNhbXBsZVJhdGUsIG51bGxwdHIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5vdCBmb3JjaW5nIHNhbXBsZSByYXRlIik7
CisgICAgICAgIG1fY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJh
dWRpby94LXJhdyIpKTsKKyAgICB9CisKKyAgICBpZiAoIW1fY2Fwc2ZpbHRlci5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc2ZpbHRlci5nZXQo
KSwgImNhcHMiLCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9D
YXB0dXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uOWFhZjc2MWQ2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5oCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNv
bT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYg
VVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyQXVkaW9DYXB0dXJlciA6IHB1YmxpYyBH
U3RyZWFtZXJDYXB0dXJlciB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlcihH
U3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAgICBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKCk7CisK
KyAgICBHc3RFbGVtZW50KiBjcmVhdGVDb252ZXJ0ZXIoKSBmaW5hbDsKKyAgICBjb25zdCBjaGFy
KiBuYW1lKCkgZmluYWwgeyByZXR1cm4gIkF1ZGlvIjsgfQorCisgICAgYm9vbCBzZXRTYW1wbGVS
YXRlKGludCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckF1ZGlvRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi45NTNmM2E4YTBlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5j
b20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYm
IFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1BdWRpb0RhdGEuaCIKKworI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHU3RyZWFtZXJBdWRpb0RhdGEgOiBwdWJsaWMg
UGxhdGZvcm1BdWRpb0RhdGEgeworcHVibGljOgorICAgIEdTdHJlYW1lckF1ZGlvRGF0YShHUmVm
UHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUsIEdzdEF1ZGlvSW5mbyBpbmZvKQorICAgICAgICA6IG1f
c2FtcGxlKFdURk1vdmUoc2FtcGxlKSkKKyAgICAgICAgLCBtX2F1ZGlvSW5mbyhpbmZvKQorICAg
IHsKKyAgICB9CisKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEoR1JlZlB0cjxHc3RTYW1wbGU+JiYg
c2FtcGxlKQorICAgICAgICA6IG1fc2FtcGxlKFdURk1vdmUoc2FtcGxlKSkKKyAgICB7CisgICAg
ICAgIGdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcygmbV9hdWRpb0luZm8sIGdzdF9zYW1wbGVfZ2V0
X2NhcHMobV9zYW1wbGUuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBHc3RTYW1wbGUqIGdldFNhbXBs
ZSgpIHsgcmV0dXJuIG1fc2FtcGxlLmdldCgpOyB9CisgICAgR3N0QXVkaW9JbmZvIGdldEF1ZGlv
SW5mbygpIHtyZXR1cm4gbV9hdWRpb0luZm87IH0KKworcHJpdmF0ZToKKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBLaW5kOjpHU3RyZWFtZXJBdWRpb0RhdGE7IH0KKyAgICBHUmVmUHRy
PEdzdFNhbXBsZT4gbV9zYW1wbGU7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NhcHM7CisKKyAg
ICBHc3RBdWRpb0luZm8gbV9hdWRpb0luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBV
U0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjFmZjU5YjJhMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApA
QCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEu
Y29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZmluYWw6IHB1YmxpYyBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uIHsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKEdzdEF1ZGlvSW5mbyBpbmZvKQorICAgICAgICA6IG1faW5mbyhpbmZvKQorICAgICAg
ICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCisg
ICAgeworICAgIH0KKworICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oR3N0QXVk
aW9JbmZvICppbmZvKQorICAgICAgICA6IG1faW5mbygqaW5mbykKKyAgICAgICAgLCBtX2NhcHMo
YWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQorICAgIHsKKyAgICB9
CisKKyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkKKyAgICB7CisgICAgICAg
IGdzdF9hdWRpb19pbmZvX2luaXQoJm1faW5mbyk7CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBP
UlQgfkdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKSB7IH07CisKKyAgICBjb25zdCBQ
bGF0Zm9ybURlc2NyaXB0aW9uJiBwbGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IHsgUGxhdGZvcm1EZXNjcmlwdGlvbjo6R1N0
cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPigmbV9pbmZvKSB9OworCisgICAgICAgIHJldHVybiBt
X3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgUENNRm9y
bWF0IGZvcm1hdCgpIGNvbnN0IGZpbmFsIHsKKyAgICAgICAgc3dpdGNoIChHU1RfQVVESU9fSU5G
T19GT1JNQVQoJm1faW5mbykpIHsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNkxF
OgorICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzE2QkU6CisgICAgICAgICAgICByZXR1
cm4gSW50MTY7CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMzJMRToKKyAgICAgICAg
Y2FzZSBHU1RfQVVESU9fRk9STUFUX1MzMkJFOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyTEU6CisgICAgICAgIGNhc2UgR1NUX0FV
RElPX0ZPUk1BVF9GMzJCRToKKyAgICAgICAgICAgIHJldHVybiBGbG9hdDMyOworICAgICAgICBj
YXNlIEdTVF9BVURJT19GT1JNQVRfRjY0TEU6CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1B
VF9GNjRCRToKKyAgICAgICAgICAgIHJldHVybiBGbG9hdDY0OworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vbmU7CisgICAg
fQorCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVE
SU9fSU5GT19SQVRFKCZtX2luZm8pOyB9CisgICAgYm9vbCBpc1BDTSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGZvcm1hdCgpICE9IE5vbmU7IH0KKyAgICBib29sIGlzSW50ZXJsZWF2ZWQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9fSU5GT19MQVlPVVQoJm1faW5mbykgPT0gR1NUX0FV
RElPX0xBWU9VVF9JTlRFUkxFQVZFRDsgfQorICAgIGJvb2wgaXNTaWduZWRJbnRlZ2VyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fSVNfSU5URUdFUigmbV9pbmZvKTsgfQor
ICAgIGJvb2wgaXNOYXRpdmVFbmRpYW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9f
SU5GT19FTkRJQU5ORVNTKCZtX2luZm8pID09IEdfQllURV9PUkRFUjsgfQorICAgIGJvb2wgaXNG
bG9hdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0lTX0ZMT0FUKCZtX2lu
Zm8pOyB9CisKKyAgICB1aW50MzJfdCBudW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBpc0ludGVybGVhdmVkKCkgPyBHU1RfQVVESU9fSU5GT19DSEFOTkVM
UygmbV9pbmZvKSA6IFRSVUU7IH0KKyAgICB1aW50MzJfdCBudW1iZXJPZkNoYW5uZWxTdHJlYW1z
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMoJm1faW5mbyk7
IH0KKyAgICB1aW50MzJfdCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
R1NUX0FVRElPX0lORk9fQ0hBTk5FTFMoJm1faW5mbyk7IH0KKyAgICB1aW50MzJfdCBzYW1wbGVX
b3JkU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0JQUygmbV9pbmZv
KTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBnc3RfYXVkaW9faW5mb19pc19lcXVhbCgmbV9pbmZv
LCAmb3RoZXIubV9pbmZvKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhl
cik7IH0KKworICAgIEdzdENhcHMqIGNhcHMoKSB7IHJldHVybiBtX2NhcHMuZ2V0KCk7IH0KKyAg
ICBHc3RBdWRpb0luZm8qIGdldEluZm8oKSB7IHJldHVybiAmbV9pbmZvOyB9CisKK3ByaXZhdGU6
CisgICAgR3N0QXVkaW9JbmZvIG1faW5mbzsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY2FwczsK
KyAgICBtdXRhYmxlIFBsYXRmb3JtRGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwor
fTsKKworfSAvLyBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjY0MjJkZGQ4M2EzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2UuaApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBB
dXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRl
ICJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisKKyNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
Q2FwdHVyZURldmljZSA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBHU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlKEdSZWZQdHI8R3N0RGV2aWNlPiYmIGRldmljZSwgY29uc3QgU3Ry
aW5nJiBwZXJzaXN0ZW50SWQsIERldmljZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBsYWJlbCwg
Y29uc3QgU3RyaW5nJiBncm91cElkID0gZW1wdHlTdHJpbmcoKSkKKyAgICAgICAgOiBDYXB0dXJl
RGV2aWNlKHBlcnNpc3RlbnRJZCwgdHlwZSwgbGFiZWwsIGdyb3VwSWQpCisgICAgICAgICwgbV9k
ZXZpY2UoZGV2aWNlKQorICAgIHsKKyAgICB9CisKKyAgICBHc3RDYXBzKiBjYXBzKCkgY29uc3Qg
eyByZXR1cm4gZ3N0X2RldmljZV9nZXRfY2FwcyhtX2RldmljZS5nZXQoKSk7IH0KKyAgICBHc3RE
ZXZpY2UqIGRldmljZSgpIHsgcmV0dXJuIG1fZGV2aWNlLmdldCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgR1JlZlB0cjxHc3REZXZpY2U+IG1fZGV2aWNlOworfTsKKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkgICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2I3ODI4N2U3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2Fw
dHVyZURldmljZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNh
dW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0
cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyJiBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyPiBtYW5h
Z2VyOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCitHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyJiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24o
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyPiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCitHU3RyZWFtZXJE
aXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXImIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVh
bWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyPiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5h
Z2VyOworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lckNhcHR1cmVEZXZpY2U+IEdTdHJlYW1l
ckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGNvbnN0IFN0cmlu
ZyYgZGV2aWNlSUQpCit7CisgICAgY2FwdHVyZURldmljZXMoKTsKKworICAgIGZvciAoYXV0byYg
ZGV2aWNlIDogbV9nc3RyZWFtZXJEZXZpY2VzKSB7CisgICAgICAgIGlmIChkZXZpY2UucGVyc2lz
dGVudElkKCkgPT0gZGV2aWNlSUQpCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlOworICAgIH0K
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitjb25zdCBWZWN0b3I8Q2FwdHVyZURldmlj
ZT4mIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlcygpCit7Cisg
ICAgaW5pdGlhbGl6ZUdTdHJlYW1lcigpOworICAgIGlmIChtX2RldmljZXMuaXNFbXB0eSgpKQor
ICAgICAgICByZWZyZXNoQ2FwdHVyZURldmljZXMoKTsKKworICAgIHJldHVybiBtX2RldmljZXM7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZUFkZGVkKEdS
ZWZQdHI8R3N0RGV2aWNlPiYmIGRldmljZSkKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVy
ZT4gcHJvcGVydGllcyhnc3RfZGV2aWNlX2dldF9wcm9wZXJ0aWVzKGRldmljZS5nZXQoKSkpOwor
ICAgIGNvbnN0IGNoYXIqIGtsYXNzID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHByb3BlcnRp
ZXMuZ2V0KCksICJkZXZpY2UuY2xhc3MiKTsKKworICAgIGlmIChrbGFzcyAmJiAhZ19zdHJjbXAw
KGtsYXNzLCAibW9uaXRvciIpKQorICAgICAgICByZXR1cm47CisKKyAgICBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlIHR5cGUgPSBkZXZpY2VUeXBlKCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBk
ZXZpY2VDbGFzc0NoYXIoZ3N0X2RldmljZV9nZXRfZGV2aWNlX2NsYXNzKGRldmljZS5nZXQoKSkp
OworICAgIFN0cmluZyBkZXZpY2VDbGFzcyhTdHJpbmcoZGV2aWNlQ2xhc3NDaGFyLmdldCgpKSk7
CisgICAgaWYgKHR5cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSAm
JiAhZGV2aWNlQ2xhc3Muc3RhcnRzV2l0aCgiQXVkaW8iKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICh0eXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSAmJiAhZGV2aWNl
Q2xhc3Muc3RhcnRzV2l0aCgiVmlkZW8iKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhp
cyBpc24ndCByZWFsbHkgYSBVSUQgYnV0IHNob3VsZCBiZSBnb29kIGVub3VnaCAobGlid2VicnRj
CisgICAgLy8gaXRzZWxmIGRvZXMgdGhhdCBhdCBsZWFzdCBmb3IgcHVsc2VhdWRpbyBkZXZpY2Vz
KS4KKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRldmljZU5hbWUoZ3N0X2RldmljZV9nZXRfZGlzcGxh
eV9uYW1lKGRldmljZS5nZXQoKSkpOworICAgIFN0cmluZyBpZGVudGlmaWVyID0gU3RyaW5nOjpm
cm9tVVRGOChkZXZpY2VOYW1lLmdldCgpKTsKKworICAgIGF1dG8gZ3N0Q2FwdHVyZURldmljZSA9
IEdTdHJlYW1lckNhcHR1cmVEZXZpY2UoV1RGTW92ZShkZXZpY2UpLCBpZGVudGlmaWVyLCB0eXBl
LCBpZGVudGlmaWVyKTsKKyAgICBnc3RDYXB0dXJlRGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7Cisg
ICAgbV9nc3RyZWFtZXJEZXZpY2VzLmFwcGVuZChXVEZNb3ZlKGdzdENhcHR1cmVEZXZpY2UpKTsK
KyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIENhcHR1cmVEZXZpY2UgY29weSBpbiBvdGhlciB2ZWN0
b3IganVzdCBmb3IgY2FwdHVyZURldmljZXMgQVBJLgorICAgIGF1dG8gY2FwdHVyZURldmljZSA9
IENhcHR1cmVEZXZpY2UoaWRlbnRpZmllciwgdHlwZSwgaWRlbnRpZmllcik7CisgICAgY2FwdHVy
ZURldmljZS5zZXRFbmFibGVkKHRydWUpOworICAgIG1fZGV2aWNlcy5hcHBlbmQoV1RGTW92ZShj
YXB0dXJlRGV2aWNlKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXI6
OnJlZnJlc2hDYXB0dXJlRGV2aWNlcygpCit7CisgICAgaWYgKCFtX2RldmljZU1vbml0b3IpIHsK
KyAgICAgICAgbV9kZXZpY2VNb25pdG9yID0gYWRvcHRHUmVmKGdzdF9kZXZpY2VfbW9uaXRvcl9u
ZXcoKSk7CisKKyAgICAgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlID0gZGV2aWNl
VHlwZSgpOworICAgICAgICBpZiAodHlwZSA9PSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpD
YW1lcmEpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKTsKKyAgICAgICAgICAgIGdz
dF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyKG1fZGV2aWNlTW9uaXRvci5nZXQoKSwgIlZpZGVv
L1NvdXJjZSIsIGNhcHMuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkgeworICAgICAgICAgICAgR1JlZlB0cjxH
c3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoImF1ZGlv
L3gtcmF3IikpOworICAgICAgICAgICAgZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXIobV9k
ZXZpY2VNb25pdG9yLmdldCgpLCAiQXVkaW8vU291cmNlIiwgY2Fwcy5nZXQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBtb25pdG9yIGZvciBhZGRlZC9yZW1vdmVkIG1lc3Nh
Z2VzIG9uIHRoZSBidXMuCisgICAgfQorCisgICAgaWYgKCFnc3RfZGV2aWNlX21vbml0b3Jfc3Rh
cnQobV9kZXZpY2VNb25pdG9yLmdldCgpKSkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qo
bV9kZXZpY2VNb25pdG9yLmdldCgpLCAiQ291bGQgbm90IHN0YXJ0IGRldmljZSBtb25pdG9yIik7
CisgICAgICAgIG1fZGV2aWNlTW9uaXRvciA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEdMaXN0KiBkZXZpY2VzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZp
Y2VzKG1fZGV2aWNlTW9uaXRvci5nZXQoKSk7CisgICAgd2hpbGUgKGRldmljZXMpIHsKKyAgICAg
ICAgR1JlZlB0cjxHc3REZXZpY2U+IGRldmljZSA9IGFkb3B0R1JlZihHU1RfREVWSUNFX0NBU1Qo
ZGV2aWNlcy0+ZGF0YSkpOworICAgICAgICBkZXZpY2VBZGRlZChXVEZNb3ZlKGRldmljZSkpOwor
ICAgICAgICBkZXZpY2VzID0gZ19saXN0X2RlbGV0ZV9saW5rKGRldmljZXMsIGRldmljZXMpOwor
ICAgIH0KKworICAgIGdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wKG1fZGV2aWNlTW9uaXRvci5nZXQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi44NjM5MjQxNGQwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFu
YWdlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJF
QU1FUikKKworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdl
ciA6IHB1YmxpYyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RkOjpvcHRp
b25hbDxHU3RyZWFtZXJDYXB0dXJlRGV2aWNlPiBnc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGNvbnN0
IFN0cmluZyYpOworCisgICAgdm9pZCByZWZyZXNoQ2FwdHVyZURldmljZXMoKSBmaW5hbDsKKyAg
ICBjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7Cisg
ICAgdmlydHVhbCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSA9IDA7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBkZXZpY2VBZGRlZChHUmVmUHRyPEdzdERldmljZT4mJik7CisK
KyAgICBHUmVmUHRyPEdzdERldmljZU1vbml0b3I+IG1fZGV2aWNlTW9uaXRvcjsKKyAgICBWZWN0
b3I8R1N0cmVhbWVyQ2FwdHVyZURldmljZT4gbV9nc3RyZWFtZXJEZXZpY2VzOworICAgIFZlY3Rv
cjxDYXB0dXJlRGV2aWNlPiBtX2RldmljZXM7Cit9OworCitjbGFzcyBHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VN
YW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyQXVkaW9D
YXB0dXJlRGV2aWNlTWFuYWdlcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZURldmljZU1hbmFnZXImIHNpbmdsZXRvbigpOworICAgIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGUgZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6Ok1pY3JvcGhvbmU7IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKKyAgICB+R1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKK307CisKK2NsYXNzIEdTdHJlYW1lclZpZGVvQ2FwdHVy
ZURldmljZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIgeworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxHU3RyZWFtZXJWaWRlb0NhcHR1
cmVEZXZpY2VNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVhbWVyVmlkZW9DYXB0
dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CisgICAgc3RhdGljIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIHZpZGVvRmFjdG9yeSgpOworICAgIENhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZp
Y2U6OkRldmljZVR5cGU6OkNhbWVyYTsgfQorcHJpdmF0ZToKKyAgICBHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJWaWRlb0NhcHR1
cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworfTsKKworY2xhc3MgR1N0cmVhbWVyRGlzcGxh
eUNhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVEZXZp
Y2VNYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyRGlz
cGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR1N0cmVhbWVy
RGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaW5nbGV0b24oKTsKKyAgICBDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlOjpTY3JlZW47IH0KK3ByaXZhdGU6CisgICAgR1N0cmVhbWVyRGlzcGxheUNh
cHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5HU3RyZWFtZXJEaXNwbGF5Q2Fw
dHVyZURldmljZU1hbmFnZXIoKSA9IGRlZmF1bHQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQ2FwdHVyZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
MmJmYTQxNWEyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKQEAgLTAsMCArMSwxOTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
IEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhv
cjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJ
QldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlci5o
IgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8Z3N0L2FwcC9n
c3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlh
c3RyZWFtaW50ZXJmYWNlLmg+CisKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKwor
R1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9jYXB0dXJlcl9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9D
QVRfREVGQVVMVCB3ZWJraXRfY2FwdHVyZXJfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgdm9pZCBpbml0aWFsaXplR1N0cmVhbWVyQW5kRGVidWcoKQoreworICAgIGluaXRp
YWxpemVHU3RyZWFtZXIoKTsKKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lz
dGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsK
KyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X2NhcHR1cmVyX2RlYnVnLCAi
d2Via2l0Y2FwdHVyZXIiLCAwLCAiV2ViS2l0IENhcHR1cmVyIik7CisgICAgfSk7Cit9CisKK0dT
dHJlYW1lckNhcHR1cmVyOjpHU3RyZWFtZXJDYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNl
IGRldmljZSwgR1JlZlB0cjxHc3RDYXBzPiBjYXBzKQorICAgIDogbV9kZXZpY2UoZGV2aWNlLmRl
dmljZSgpKQorICAgICwgbV9jYXBzKGNhcHMpCisgICAgLCBtX3NvdXJjZUZhY3RvcnkobnVsbHB0
cikKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kRGVidWcoKTsKK30KKworR1N0cmVhbWVy
Q2FwdHVyZXI6OkdTdHJlYW1lckNhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJjZUZhY3RvcnksIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcykKKyAgICA6IG1fZGV2aWNlKG51bGxwdHIpCisgICAgLCBtX2Nh
cHMoY2FwcykKKyAgICAsIG1fc291cmNlRmFjdG9yeShzb3VyY2VGYWN0b3J5KQoreworICAgIGlu
aXRpYWxpemVHU3RyZWFtZXJBbmREZWJ1ZygpOworfQorCitHU3RyZWFtZXJDYXB0dXJlcjo6fkdT
dHJlYW1lckNhcHR1cmVyKCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZGlzY29u
bmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhwaXBlbGluZSgpKTsKK30KKworR3N0RWxlbWVu
dCogR1N0cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNvdXJjZSgpCit7CisgICAgaWYgKG1fc291cmNl
RmFjdG9yeSkgeworICAgICAgICBtX3NyYyA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7
CisgICAgICAgIGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCisgICAgICAgICAgICBn
X29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9G
T1JNQVRfVElNRSwgbnVsbHB0cik7CisKKyAgICAgICAgQVNTRVJUKG1fc3JjKTsKKyAgICAgICAg
cmV0dXJuIG1fc3JjLmdldCgpOworICAgIH0KKworICAgIEFTU0VSVChtX2RldmljZSk7CisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBzb3VyY2VOYW1lKGdfc3RyZHVwX3ByaW50ZigiJXNfJXAiLCBuYW1l
KCksIHRoaXMpKTsKKyAgICBtX3NyYyA9IGdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnQobV9kZXZp
Y2UuZ2V0KCksIHNvdXJjZU5hbWUuZ2V0KCkpOworICAgIEFTU0VSVChtX3NyYyk7CisKKyAgICBy
ZXR1cm4gbV9zcmMuZ2V0KCk7Cit9CisKK0dzdENhcHMqIEdTdHJlYW1lckNhcHR1cmVyOjpjYXBz
KCkKK3sKKyAgICBpZiAobV9zb3VyY2VGYWN0b3J5KSB7CisgICAgICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gZWxlbWVudCA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CisgICAgICAgIGF1
dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGVsZW1lbnQuZ2V0
KCksICJzcmMiKSk7CisKKyAgICAgICAgcmV0dXJuIGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQuZ2V0
KCksIG51bGxwdHIpOworICAgIH0KKworICAgIEFTU0VSVChtX2RldmljZSk7CisgICAgcmV0dXJu
IGdzdF9kZXZpY2VfZ2V0X2NhcHMobV9kZXZpY2UuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1l
ckNhcHR1cmVyOjpzZXR1cFBpcGVsaW5lKCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAg
ICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhwaXBlbGluZSgpKTsKKworICAg
IG1fcGlwZWxpbmUgPSBtYWtlRWxlbWVudCgicGlwZWxpbmUiKTsKKworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gc291cmNlID0gY3JlYXRlU291cmNlKCk7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBjb252ZXJ0ZXIgPSBjcmVhdGVDb252ZXJ0ZXIoKTsKKworICAgIG1fY2Fwc2ZpbHRlciA9IG1h
a2VFbGVtZW50KCJjYXBzZmlsdGVyIik7CisgICAgbV90ZWUgPSBtYWtlRWxlbWVudCgidGVlIik7
CisgICAgbV9zaW5rID0gbWFrZUVsZW1lbnQoImFwcHNpbmsiKTsKKworICAgIGdzdF9hcHBfc2lu
a19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lOSyhtX3NpbmsuZ2V0KCkpLCBUUlVFKTsKKyAg
ICBnX29iamVjdF9zZXQobV9jYXBzZmlsdGVyLmdldCgpLCAiY2FwcyIsIG1fY2Fwcy5nZXQoKSwg
bnVsbHB0cik7CisKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZS5nZXQo
KSksIHNvdXJjZS5nZXQoKSwgY29udmVydGVyLmdldCgpLCBtX2NhcHNmaWx0ZXIuZ2V0KCksIG1f
dGVlLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkoc291cmNlLmdl
dCgpLCBjb252ZXJ0ZXIuZ2V0KCksIG1fY2Fwc2ZpbHRlci5nZXQoKSwgbV90ZWUuZ2V0KCksIG51
bGxwdHIpOworCisgICAgYWRkU2luayhtX3NpbmsuZ2V0KCkpOworCisgICAgY29ubmVjdFNpbXBs
ZUJ1c01lc3NhZ2VDYWxsYmFjayhwaXBlbGluZSgpKTsKK30KKworR3N0RWxlbWVudCogR1N0cmVh
bWVyQ2FwdHVyZXI6Om1ha2VFbGVtZW50KGNvbnN0IGNoYXIqIGZhY3RvcnlOYW1lKQoreworICAg
IGF1dG8gZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShmYWN0b3J5TmFtZSwgbnVs
bHB0cik7CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gY2FwdHVy
ZXJOYW1lKGdfc3RyZHVwX3ByaW50ZigiJXNfY2FwdHVyZXJfJXNfJXAiLCBuYW1lKCksIEdTVF9P
QkpFQ1RfTkFNRShlbGVtZW50KSwgdGhpcykpOworICAgIGdzdF9vYmplY3Rfc2V0X25hbWUoR1NU
X09CSkVDVChlbGVtZW50KSwgY2FwdHVyZXJOYW1lLmdldCgpKTsKKworICAgIHJldHVybiBlbGVt
ZW50OworfQorCit2b2lkIEdTdHJlYW1lckNhcHR1cmVyOjphZGRTaW5rKEdzdEVsZW1lbnQqIG5l
d1NpbmspCit7CisgICAgQVNTRVJUKG1fcGlwZWxpbmUpOworICAgIEFTU0VSVChtX3RlZSk7CisK
KyAgICBhdXRvIHF1ZXVlID0gbWFrZUVsZW1lbnQoInF1ZXVlIik7CisgICAgZ3N0X2Jpbl9hZGRf
bWFueShHU1RfQklOKHBpcGVsaW5lKCkpLCBxdWV1ZSwgbmV3U2luaywgbnVsbHB0cik7CisgICAg
Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAgZ3N0X2VsZW1l
bnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChuZXdTaW5rKTsKKworICAgIGlmICghZ3N0X2VsZW1l
bnRfbGlua19wYWRzKG1fdGVlLmdldCgpLCAic3JjXyV1IiwgcXVldWUsICJzaW5rIikpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIWdzdF9lbGVtZW50X2xpbmsocXVldWUsIG5ld1NpbmspKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5ld1Np
bmsgPT0gbV9zaW5rLmdldCgpKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiU2V0dGluZyBxdWV1ZSBhcyBsZWFreSB1cHN0cmVhbSIKKyAgICAgICAgICAgICIg
c28gdGhhdCB0aGUgcGxheWVyIGNhbiBzZXQgdGhlIHNpbmsgdG8gUEFVU0VEIHdpdGhvdXQgIgor
ICAgICAgICAgICAgIiBzZXR0aW5nIHRoZSB3aG9sZSBjYXB0dXJlciB0byBQQVVTRUQiKTsKKyAg
ICAgICAgZ19vYmplY3Rfc2V0KHF1ZXVlLCAibGVha3kiLCAyIC8qIHVwc3RyZWFtICovLCBudWxs
cHRyKTsKKyAgICB9CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkFkZGluZyBz
aW5rOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3U2luayk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IGR1bXBOYW1lKGdfc3RyZHVwX3ByaW50ZigiJXNfc2lua18lc19hZGRlZCIsIEdTVF9PQkpFQ1Rf
TkFNRShwaXBlbGluZSgpKSwgR1NUX09CSkVDVF9OQU1FKG5ld1NpbmspKSk7CisgICAgR1NUX0RF
QlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4ocGlwZWxpbmUoKSksIEdTVF9ERUJV
R19HUkFQSF9TSE9XX0FMTCwgZHVtcE5hbWUuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lckNh
cHR1cmVyOjpwbGF5KCkKK3sKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CisKKyAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIkdvaW5nIHRvIFBMQVlJTkchIik7CisKKyAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUocGlwZWxpbmUoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworfQorCit2b2lk
IEdTdHJlYW1lckNhcHR1cmVyOjpzdG9wKCkKK3sKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CisK
KyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlRlYXJpbmcgZG93biEiKTsKKworICAg
IC8vIE1ha2Ugc3VyZSB0byByZW1vdmUgc3luYyBoYW5kbGVyIGJlZm9yZSB0ZWFyaW5nIGRvd24s
IGF2b2lkaW5nCisgICAgLy8gcG9zc2libGUgZGVhZGxvY2tzLgorICAgIEdSZWZQdHI8R3N0QnVz
PiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKHBpcGVs
aW5lKCkpKSk7CisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUocGlwZWxp
bmUoKSwgR1NUX1NUQVRFX05VTEwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RS
RUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YmZjZWRhZDgwMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0
dXJlci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldF
QlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZp
Y2UuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJMaWJXZWJSVENN
YWNyb3MuaCIKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJDYXB0dXJlciB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyQ2FwdHVy
ZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSwgR1JlZlB0cjxHc3RDYXBzPik7CisgICAgR1N0cmVh
bWVyQ2FwdHVyZXIoY29uc3QgY2hhciogc291cmNlRmFjdG9yeSwgR1JlZlB0cjxHc3RDYXBzPik7
CisgICAgfkdTdHJlYW1lckNhcHR1cmVyKCk7CisKKyAgICB2b2lkIHNldHVwUGlwZWxpbmUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAg
R3N0Q2FwcyogY2FwcygpOworICAgIHZvaWQgYWRkU2luayhHc3RFbGVtZW50ICpuZXdTaW5rKTsK
KyAgICBHc3RFbGVtZW50KiBtYWtlRWxlbWVudChjb25zdCBjaGFyKiBmYWN0b3J5TmFtZSk7Cisg
ICAgR3N0RWxlbWVudCogY3JlYXRlU291cmNlKCk7CisgICAgR3N0RWxlbWVudCogc291cmNlKCkg
eyByZXR1cm4gbV9zcmMuZ2V0KCk7ICB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkg
PSAwOworCisgICAgR3N0RWxlbWVudCogc2luaygpIGNvbnN0IHsgcmV0dXJuIG1fc2luay5nZXQo
KTsgfQorICAgIHZvaWQgc2V0U2luayhHc3RFbGVtZW50KiBzaW5rKSB7IG1fc2luayA9IGFkb3B0
R1JlZihzaW5rKTsgfTsKKworICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkgY29uc3QgeyByZXR1
cm4gbV9waXBlbGluZS5nZXQoKTsgfQorICAgIHZpcnR1YWwgR3N0RWxlbWVudCogY3JlYXRlQ29u
dmVydGVyKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Np
bms7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NyYzsKKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IG1fdGVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzZmlsdGVyOworICAgIEdS
ZWZQdHI8R3N0RGV2aWNlPiBtX2RldmljZTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY2FwczsK
KyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CisKK3ByaXZhdGU6CisgICAgY29u
c3QgY2hhciogbV9zb3VyY2VGYWN0b3J5OworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBV
U0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiYTFh
ZTYzMjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMCwwICsx
LDUzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICog
QXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlh
U3RyZWFtU291cmNlLmgiCisKKyNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lckF1ZGlvRGF0YS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIk1lZGlh
U2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGUuaCIKKworI2lu
Y2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Zmxvd2Nv
bWJpbmVyLmg+CisKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1B1c2hWaWRlb1Nh
bXBsZShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0U2FtcGxlKiBnc3RzYW1wbGUpOwor
c3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUoV2ViS2l0TWVk
aWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogZ3N0c2FtcGxlKTsKK3N0YXRpYyB2b2lkIHdl
YmtpdE1lZGlhU3RyZWFtU3JjVHJhY2tFbmRlZChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRl
IHZpZGVvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgidmlkZW9fc3JjIiwK
KyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX1NPTUVUSU1FUywKKyAgICBHU1RfU1RBVElD
X0NBUFMoInZpZGVvL3gtcmF3IikpOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgYXVk
aW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJhdWRpb19zcmMiLAorICAg
IEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfU09NRVRJTUVTLAorICAgIEdTVF9TVEFUSUNfQ0FQ
UygiYXVkaW8veC1yYXcoQU5ZKTsiKSk7CisKK3N0YXRpYyBHc3RUYWdMaXN0KiBtZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZUdldFRhZ3MoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrKQorewor
ICAgIGF1dG8gdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkoKTsKKworICAgIGlmICgh
dHJhY2stPmxhYmVsKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFn
bGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCisgICAgICAgICAgICBHU1RfVEFHX1RJVExFLCB0
cmFjay0+bGFiZWwoKS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBpZiAo
dHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbykgeworICAg
ICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBXRUJL
SVRfTUVESUFfVFJBQ0tfVEFHX0tJTkQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KEF1
ZGlvVHJhY2tQcml2YXRlOjpLaW5kOjpNYWluKSwgbnVsbHB0cik7CisgICAgfSBlbHNlIGlmICh0
cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKSB7CisgICAg
ICAgIGdzdF90YWdfbGlzdF9hZGQodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIFdFQktJ
VF9NRURJQV9UUkFDS19UQUdfS0lORCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oVmlk
ZW9UcmFja1ByaXZhdGU6OktpbmQ6Ok1haW4pLCBudWxscHRyKTsKKworICAgICAgICBpZiAodHJh
Y2stPmlzQ2FwdHVyZVRyYWNrKCkpIHsKKyAgICAgICAgICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZSYgc291cmNlID0gc3RhdGljX2Nhc3Q8R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
Jj4oCisgICAgICAgICAgICAgICAgdHJhY2stPnNvdXJjZSgpKTsKKworICAgICAgICAgICAgZ3N0
X3RhZ19saXN0X2FkZCh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKKyAgICAgICAgICAg
ICAgICBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJRFRILCBzb3VyY2Uuc2l6ZSgpLndpZHRoKCks
CisgICAgICAgICAgICAgICAgV0VCS0lUX01FRElBX1RSQUNLX1RBR19IRUlHSFQsIHNvdXJjZS5z
aXplKCkuaGVpZ2h0KCksIG51bGxwdHIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHRhZ2xpc3Q7Cit9CisKK0dzdFN0cmVhbSogd2Via2l0TWVkaWFTdHJlYW1OZXcoTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGUqIHRyYWNrKQoreworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAg
ICBHc3RTdHJlYW1UeXBlIHR5cGU7CisKKyAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbykgeworICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdz
dF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKCZhdWRpb1NyY1RlbXBsYXRlKSk7CisgICAg
ICAgIHR5cGUgPSBHU1RfU1RSRUFNX1RZUEVfQVVESU87CisgICAgfSBlbHNlIGlmICh0cmFjay0+
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKSB7CisgICAgICAgIGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMoJnZpZGVvU3Jj
VGVtcGxhdGUpKTsKKyAgICAgICAgdHlwZSA9IEdTVF9TVFJFQU1fVFlQRV9WSURFTzsKKyAgICB9
IGVsc2UgeworICAgICAgICBHU1RfRklYTUUoIkhhbmRsZSAlZCB0eXBlIiwgKGdpbnQpIHRyYWNr
LT50eXBlKCkpOworCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8g
Z3N0c3RyZWFtID0gKEdzdFN0cmVhbSopZ3N0X3N0cmVhbV9uZXcodHJhY2stPmlkKCkudXRmOCgp
LmRhdGEoKSwKKyAgICAgICAgY2Fwcy5nZXQoKSwgdHlwZSwgR1NUX1NUUkVBTV9GTEFHX1NFTEVD
VCk7CisgICAgYXV0byB0YWdzID0gYWRvcHRHUmVmKG1lZGlhU3RyZWFtVHJhY2tQcml2YXRlR2V0
VGFncyh0cmFjaykpOworICAgIGdzdF9zdHJlYW1fc2V0X3RhZ3MoZ3N0c3RyZWFtLCB0YWdzLmdl
dCgpKTsKKworICAgIHJldHVybiBnc3RzdHJlYW07Cit9CisKK2NsYXNzIFdlYktpdE1lZGlhU3Ry
ZWFtVHJhY2tPYnNlcnZlcgorICAgIDogcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpP
YnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViS2l0TWVkaWFTdHJlYW1UcmFja09i
c2VydmVyKCkgeyB9OworICAgIFdlYktpdE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcihXZWJLaXRN
ZWRpYVN0cmVhbVNyYyogc3JjKQorICAgICAgICA6IG1fbWVkaWFTdHJlYW1TcmMoc3JjKSB7IH0K
KyAgICB2b2lkIHRyYWNrU3RhcnRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsg
fTsKKworICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgdHJhY2sp
IGZpbmFsCisgICAgeworICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5kZWQobV9t
ZWRpYVN0cmVhbVNyYywgdHJhY2spOworICAgIH0KKworICAgIHZvaWQgdHJhY2tNdXRlZENoYW5n
ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07CisgICAgdm9pZCB0cmFja1Nl
dHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfTsKKyAgICB2
b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7
IH07CisgICAgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
IGZpbmFsIHsgfTsKKworICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsCisgICAgeworICAgICAgICBh
dXRvIGdzdHNhbXBsZSA9IHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlR1N0cmVhbWVyKj4oJnNhbXBs
ZSktPnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmdzdFNhbXBsZTsKKworICAgICAgICB3ZWJraXRN
ZWRpYVN0cmVhbVNyY1B1c2hWaWRlb1NhbXBsZShtX21lZGlhU3RyZWFtU3JjLCBnc3RzYW1wbGUp
OworICAgIH0KKworICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1
ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCkgZmluYWwKKyAg
ICB7CisgICAgICAgIGF1dG8gYXVkaW9kYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgR1N0cmVhbWVy
QXVkaW9EYXRhJj4oYXVkaW9EYXRhKTsKKworICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1B1
c2hBdWRpb1NhbXBsZShtX21lZGlhU3RyZWFtU3JjLCBhdWRpb2RhdGEuZ2V0U2FtcGxlKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogbV9tZWRpYVN0cmVh
bVNyYzsKK307CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyY0NsYXNzIFdl
YktpdE1lZGlhU3RyZWFtU3JjQ2xhc3M7CitzdHJ1Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjIHsK
KyAgICBHc3RCaW4gcGFyZW50X2luc3RhbmNlOworCisgICAgZ2NoYXIqIHVyaTsKKworICAgIEdz
dEVsZW1lbnQqIGF1ZGlvU3JjOworICAgIEdzdEVsZW1lbnQqIHZpZGVvU3JjOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYktpdE1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcj4gb2JzZXJ2ZXI7Cisg
ICAgU3RyaW5nIHZpZGVvVHJhY2tJRDsKKyAgICB2b2xhdGlsZSBnaW50IG5wYWRzOworICAgIGd1
bG9uZyBwcm9iZWlkOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IHN0cmVhbTsKKwor
ICAgIEdzdEZsb3dDb21iaW5lciogZmxvd0NvbWJpbmVyOworICAgIEdSZWZQdHI8R3N0U3RyZWFt
Q29sbGVjdGlvbj4gc3RyZWFtQ29sbGVjdGlvbjsKK307CisKK3N0cnVjdCBfV2ViS2l0TWVkaWFT
dHJlYW1TcmNDbGFzcyB7CisgICAgR3N0QmluQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfSVNfTElWRSwKKyAgICBQUk9QX0xBU1QKK307CisK
K3N0YXRpYyBHc3RVUklUeXBlIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfdHlwZShH
VHlwZSkKK3sKKyAgICByZXR1cm4gR1NUX1VSSV9TUkM7Cit9CisKK3N0YXRpYyBjb25zdCBnY2hh
ciogY29uc3QqIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfcHJvdG9jb2xzKEdUeXBl
KQoreworICAgIHN0YXRpYyBjb25zdCBnY2hhciogcHJvdG9jb2xzW10gPSB7ICJtZWRpYXN0cmVh
bSIsIG51bGxwdHIgfTsKKworICAgIHJldHVybiBwcm90b2NvbHM7Cit9CisKK3N0YXRpYyBnY2hh
ciogd2Via2l0X21lZGlhX3N0cmVhbV9zcmNfdXJpX2dldF91cmkoR3N0VVJJSGFuZGxlciogaGFu
ZGxlcikKK3sKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdFQktJVF9NRURJQV9T
VFJFQU1fU1JDKGhhbmRsZXIpOworCisgICAgLyogRklYTUU6IG1ha2UgdGhyZWFkLXNhZmUgKi8K
KyAgICByZXR1cm4gZ19zdHJkdXAoc2VsZi0+dXJpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdE1lZGlhU3RyZWFtU3JjVXJpU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0
IGdjaGFyKiB1cmksCisgICAgR0Vycm9yKiopCit7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMq
IHNlbGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhoYW5kbGVyKTsKKyAgICBzZWxmLT51cmkg
PSBnX3N0cmR1cCh1cmkpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdE1lZGlhU3RyZWFtU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ19pZmFjZSwgZ3BvaW50
ZXIpCit7CisgICAgR3N0VVJJSGFuZGxlckludGVyZmFjZSogaWZhY2UgPSAoR3N0VVJJSGFuZGxl
ckludGVyZmFjZSopZ19pZmFjZTsKKworICAgIGlmYWNlLT5nZXRfdHlwZSA9IHdlYmtpdF9tZWRp
YV9zdHJlYW1fc3JjX3VyaV9nZXRfdHlwZTsKKyAgICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IHdl
YmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfcHJvdG9jb2xzOworICAgIGlmYWNlLT5nZXRf
dXJpID0gd2Via2l0X21lZGlhX3N0cmVhbV9zcmNfdXJpX2dldF91cmk7CisgICAgaWZhY2UtPnNl
dF91cmkgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaVNldFVyaTsKK30KKworR1NUX0RFQlVHX0NB
VEVHT1JZX1NUQVRJQyh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnKTsKKyNkZWZpbmUgR1NUX0NB
VF9ERUZBVUxUIHdlYmtpdE1lZGlhU3RyZWFtU3JjRGVidWcKKworI2RlZmluZSBkb0luaXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIHdlYmtpdE1lZGlhU3RyZWFtU3JjVXJp
SGFuZGxlckluaXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHU1RfREVCVUdf
Q0FURUdPUllfSU5JVCh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnLCAid2Via2l0d2VibWVkaWFz
dHJlYW1zcmMiLCAwLCAibWVkaWFzdHJlYW1zcmMgZWxlbWVudCIpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdzdF90YWdf
cmVnaXN0ZXJfc3RhdGljKFdFQktJVF9NRURJQV9UUkFDS19UQUdfV0lEVEgsIEdTVF9UQUdfRkxB
R19NRVRBLCBHX1RZUEVfSU5ULCAiV2Via2l0IE1lZGlhU3RyZWFtIHdpZHRoIiwgIldlYmtpdCBN
ZWRpYVN0cmVhbSB3aWR0aCIsIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KTsgICAgXAorICAgIGdz
dF90YWdfcmVnaXN0ZXJfc3RhdGljKFdFQktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hULCBHU1Rf
VEFHX0ZMQUdfTUVUQSwgR19UWVBFX0lOVCwgIldlYmtpdCBNZWRpYVN0cmVhbSBoZWlnaHQiLCAi
V2Via2l0IE1lZGlhU3RyZWFtIGhlaWdodCIsIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KTsgXAor
ICAgIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljKFdFQktJVF9NRURJQV9UUkFDS19UQUdfS0lORCwg
R1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9JTlQsICJXZWJraXQgTWVkaWFTdHJlYW0gS2luZCIs
ICJXZWJraXQgTWVkaWFTdHJlYW0gS2luZCIsIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KTsKKwor
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0TWVkaWFTdHJlYW1TcmMsIHdlYmtpdF9tZWRp
YV9zdHJlYW1fc3JjLCBHU1RfVFlQRV9CSU4sIGRvSW5pdCk7CisKK3N0YXRpYyB2b2lkIHdlYmtp
dE1lZGlhU3RyZWFtU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lk
LAorICAgIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIHN3aXRjaCAo
cHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0dldFByb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfSVNfTElW
RToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgVFJVRSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVB
TV9TUkMob2JqZWN0KTsKKworICAgIGlmIChzZWxmLT5hdWRpb1NyYykgeworICAgICAgICBnc3Rf
YmluX3JlbW92ZShHU1RfQklOKHNlbGYpLCBzZWxmLT5hdWRpb1NyYyk7CisgICAgICAgIHNlbGYt
PmF1ZGlvU3JjID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+dmlkZW9TcmMpIHsK
KyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwgc2VsZi0+dmlkZW9TcmMpOwor
ICAgICAgICBzZWxmLT52aWRlb1NyYyA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBX
ZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG9iamVj
dCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc2VsZik7CisgICAgZm9yIChhdXRvJiB0cmFjayA6
IHNlbGYtPnN0cmVhbS0+dHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5yZW1vdmVPYnNlcnZlcigq
c2VsZi0+b2JzZXJ2ZXIuZ2V0KCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworCisg
ICAgZ19jbGVhcl9wb2ludGVyKCZzZWxmLT51cmksIGdfZnJlZSk7CisgICAgZ3N0X2Zsb3dfY29t
YmluZXJfZnJlZShzZWxmLT5mbG93Q29tYmluZXIpOworfQorCitzdGF0aWMgR3N0U3RhdGVDaGFu
Z2VSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVt
ZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICAgIEdzdFN0YXRlQ2hhbmdlUmV0
dXJuIHJlc3VsdDsKKyAgICBhdXRvKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoZWxl
bWVudCk7CisKKyAgICBpZiAodHJhbnNpdGlvbiA9PSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9U
T19SRUFEWSkgeworCisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKKyAgICAgICAgZm9y
IChhdXRvJiB0cmFjayA6IHNlbGYtPnN0cmVhbS0+dHJhY2tzKCkpCisgICAgICAgICAgICB0cmFj
ay0+cmVtb3ZlT2JzZXJ2ZXIoKnNlbGYtPm9ic2VydmVyLmdldCgpKTsKKyAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc2VsZik7CisgICAgfQorCisgICAgcmVzdWx0ID0gR1NUX0VMRU1FTlRfQ0xB
U1Mod2Via2l0X21lZGlhX3N0cmVhbV9zcmNfcGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVs
ZW1lbnQsIHRyYW5zaXRpb24pOworCisgICAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NUQVRFX0NI
QU5HRV9SRUFEWV9UT19QQVVTRUQpCisgICAgICAgIHJlc3VsdCA9IEdTVF9TVEFURV9DSEFOR0Vf
Tk9fUFJFUk9MTDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9tZWRpYV9zdHJlYW1fc3JjX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTdHJlYW1TcmNDbGFzcyog
a2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xB
U1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyogZ3N0ZWxlbWVudF9rbGFzcyA9IEdTVF9F
TEVNRU5UX0NMQVNTKGtsYXNzKTsKKworICAgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0TWVkaWFTdHJlYW1TcmNGaW5hbGl6ZTsKKyAgICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0g
d2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlOworICAgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjR2V0UHJvcGVydHk7CisgICAgZ29iamVjdF9jbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRQcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9JU19M
SVZFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigiaXMtbGl2ZSIsICJJcyBMaXZlIiwK
KyAgICAgICAgICAgICJMZXQgcGxheWJpbjMga25vdyB3ZSBhcmUgYSBsaXZlIHNvdXJjZS4iLAor
ICAgICAgICAgICAgVFJVRSwgKEdQYXJhbUZsYWdzKShHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJB
TV9TVEFUSUNfU1RSSU5HUykpKTsKKworICAgIGdzdGVsZW1lbnRfa2xhc3MtPmNoYW5nZV9zdGF0
ZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjQ2hhbmdlU3RhdGU7CisgICAgZ3N0X2VsZW1lbnRfY2xh
c3NfYWRkX3BhZF90ZW1wbGF0ZShnc3RlbGVtZW50X2tsYXNzLAorICAgICAgICBnc3Rfc3RhdGlj
X3BhZF90ZW1wbGF0ZV9nZXQoJnZpZGVvU3JjVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9j
bGFzc19hZGRfcGFkX3RlbXBsYXRlKGdzdGVsZW1lbnRfa2xhc3MsCisgICAgICAgIGdzdF9zdGF0
aWNfcGFkX3RlbXBsYXRlX2dldCgmYXVkaW9TcmNUZW1wbGF0ZSkpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY19pbml0KFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxm
KQoreworICAgIHNlbGYtPm9ic2VydmVyID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXRNZWRpYVN0
cmVhbVRyYWNrT2JzZXJ2ZXI+KHNlbGYpOworICAgIHNlbGYtPmZsb3dDb21iaW5lciA9IGdzdF9m
bG93X2NvbWJpbmVyX25ldygpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0TWVk
aWFTdHJlYW1TcmMqIHNlbGY7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0
cmFjazsKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkX3RlbXBsYXRlOworfSBQcm9iZURh
dGE7CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFtU3JjQ2hhaW4oR3N0
UGFkKiBwYWQsIEdzdE9iamVjdCogb2JqZWN0LCBHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBH
c3RGbG93UmV0dXJuIHJlc3VsdDsKKyAgICBHUmVmUHRyPFdlYktpdE1lZGlhU3RyZWFtU3JjPiBz
ZWxmID0gYWRvcHRHUmVmKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKGdzdF9vYmplY3RfZ2V0X3Bh
cmVudChvYmplY3QpKSk7CisKKyAgICByZXN1bHQgPSBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVf
cGFkX2Zsb3coc2VsZi5nZXQoKS0+Zmxvd0NvbWJpbmVyLCBwYWQsCisgICAgICAgIGdzdF9wcm94
eV9wYWRfY2hhaW5fZGVmYXVsdChwYWQsIEdTVF9PQkpFQ1Qoc2VsZi5nZXQoKSksIGJ1ZmZlcikp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJl
YW1TcmNBZGRQYWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFBhZCogdGFyZ2V0LCBH
c3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkX3RlbXBsYXRlKQoreworICAgIGF1dG8gcGFkbmFtZSA9
IFN0cmluZzo6Zm9ybWF0KCJzcmNfJXUiLCBnX2F0b21pY19pbnRfYWRkKCYoc2VsZi0+bnBhZHMp
LCAxKSk7CisgICAgYXV0byBnaG9zdHBhZCA9IGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxh
dGUocGFkbmFtZS51dGY4KCkuZGF0YSgpLCB0YXJnZXQsCisgICAgICAgIGdzdF9zdGF0aWNfcGFk
X3RlbXBsYXRlX2dldChwYWRfdGVtcGxhdGUpKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2Vs
ZiwgIiVzIEdob3N0aW5nICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgICBnc3Rfb2JqZWN0X2dl
dF9wYXRoX3N0cmluZyhHU1RfT0JKRUNUX0NBU1Qoc2VsZikpLAorICAgICAgICB0YXJnZXQpOwor
CisgICAgYXV0byBwcm94eXBhZCA9IGFkb3B0R1JlZihHU1RfUEFEKGdzdF9wcm94eV9wYWRfZ2V0
X2ludGVybmFsKEdTVF9QUk9YWV9QQUQoZ2hvc3RwYWQpKSkpOworICAgIGdzdF9wYWRfc2V0X2No
YWluX2Z1bmN0aW9uKHByb3h5cGFkLmdldCgpLAorICAgICAgICBzdGF0aWNfY2FzdDxHc3RQYWRD
aGFpbkZ1bmN0aW9uPih3ZWJraXRNZWRpYVN0cmVhbVNyY0NoYWluKSk7CisgICAgZ3N0X3BhZF9z
ZXRfYWN0aXZlKGdob3N0cGFkLCBUUlVFKTsKKyAgICBBU1NFUlQoZ3N0X2VsZW1lbnRfYWRkX3Bh
ZChHU1RfRUxFTUVOVChzZWxmKSwgR1NUX1BBRChnaG9zdHBhZCkpKTsKK30KKworc3RhdGljIEdz
dFBhZFByb2JlUmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFtU3JjUGFkUHJvYmVDYihHc3RQYWQqIHBh
ZCwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCBQcm9iZURhdGEqIGRhdGEpCit7CisgICAgR3N0RXZl
bnQqIGV2ZW50ID0gR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKGluZm8pOworICAgIFdlYktpdE1l
ZGlhU3RyZWFtU3JjKiBzZWxmID0gZGF0YS0+c2VsZjsKKworICAgIHN3aXRjaCAoR1NUX0VWRU5U
X1RZUEUoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOiB7CisgICAg
ICAgIGNvbnN0IGdjaGFyKiBzdHJlYW1faWQ7CisgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBz
dHJlYW0gPSBudWxscHRyOworCisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQo
ZXZlbnQsICZzdHJlYW1faWQpOworICAgICAgICBpZiAoIWdfc3RyY21wMChzdHJlYW1faWQsIGRh
dGEtPnRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCkpKSB7CisgICAgICAgICAgICBHU1RfSU5GT19P
QkpFQ1QocGFkLCAiRXZlbnQgaGFzIGJlZW4gc3RpY2tlZCBhbHJlYWR5Iik7CisgICAgICAgICAg
ICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc3Ry
ZWFtX3N0YXJ0ID0gZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQoZGF0YS0+dHJhY2stPmlkKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQoc3RyZWFtX3N0
YXJ0LCAxKTsKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKworICAgICAgICBnc3Rf
cGFkX3B1c2hfZXZlbnQocGFkLCBzdHJlYW1fc3RhcnQpOworICAgICAgICBnc3RfcGFkX3B1c2hf
ZXZlbnQocGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uKHNlbGYtPnN0cmVhbUNv
bGxlY3Rpb24uZ2V0KCkpKTsKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgZ3N0X2V2
ZW50X25ld190YWcobWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKGRhdGEtPnRyYWNrLmdl
dCgpKSkpOworCisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNlbGYsIHBhZCwg
ZGF0YS0+cGFkX3RlbXBsYXRlKTsKKworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9IQU5E
TEVEOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdE1lZGlh
U3RyZWFtU3JjU2V0dXBTcmMoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsCisgICAgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrLCBHc3RFbGVtZW50KiBlbGVtZW50LAorICAgIEdzdFN0
YXRpY1BhZFRlbXBsYXRlKiBwYWRfdGVtcGxhdGUsIGdib29sZWFuIG9ic2VydmVfdHJhY2spCit7
CisgICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxl
bWVudCwgInNyYyIpKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc2VsZiksIGVsZW1lbnQp
OworCisKKyAgICBQcm9iZURhdGEqIGRhdGEgPSBuZXcgUHJvYmVEYXRhOworICAgIGRhdGEtPnNl
bGYgPSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhzZWxmKTsKKyAgICBkYXRhLT5wYWRfdGVtcGxh
dGUgPSBwYWRfdGVtcGxhdGU7CisgICAgZGF0YS0+dHJhY2sgPSB0cmFjazsKKworICAgIHNlbGYt
PnByb2JlaWQgPSBnc3RfcGFkX2FkZF9wcm9iZShwYWQuZ2V0KCksIChHc3RQYWRQcm9iZVR5cGUp
R1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCisgICAgICAgIChHc3RQYWRQcm9i
ZUNhbGxiYWNrKXdlYmtpdE1lZGlhU3RyZWFtU3JjUGFkUHJvYmVDYiwgZGF0YSwKKyAgICAgICAg
W10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAgZGVsZXRlIChQcm9iZURhdGEqKWRhdGE7
CisgICAgICAgIH0pOworCisgICAgaWYgKG9ic2VydmVfdHJhY2spCisgICAgICAgIHRyYWNrLT5h
ZGRPYnNlcnZlcigqc2VsZi0+b2JzZXJ2ZXIuZ2V0KCkpOworCisgICAgZ3N0X2VsZW1lbnRfc3lu
Y19zdGF0ZV93aXRoX3BhcmVudChlbGVtZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBBcHBTcmMoV2ViS2l0TWVkaWFT
dHJlYW1TcmMqIHNlbGYsCisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHRyYWNrLCBHc3RF
bGVtZW50KiogZWxlbWVudCwKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkX3RlbXBsYXRl
KQoreworICAgICplbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCBu
dWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQoKmVsZW1lbnQsICJpcy1saXZlIiwgdHJ1ZSwgImZv
cm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gd2Via2l0TWVk
aWFTdHJlYW1TcmNTZXR1cFNyYyhzZWxmLCB0cmFjaywgKmVsZW1lbnQsIHBhZF90ZW1wbGF0ZSwg
VFJVRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9zdFN0cmVhbUNv
bGxlY3Rpb24oV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtUHJpdmF0ZSog
c3RyZWFtKQoreworICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsKKyAgICBzZWxmLT5zdHJlYW1D
b2xsZWN0aW9uID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXcoc3RyZWFtLT5p
ZCgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogc3RyZWFtLT50cmFj
a3MoKSkgeworICAgICAgICBhdXRvIGdzdHN0cmVhbSA9IHdlYmtpdE1lZGlhU3RyZWFtTmV3KHRy
YWNrLmdldCgpKTsKKworICAgICAgICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbShz
ZWxmLT5zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBnc3RzdHJlYW0pOworICAgIH0KKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzZWxmKTsKKworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1Rf
RUxFTUVOVChzZWxmKSwKKyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9u
KEdTVF9PQkpFQ1Qoc2VsZiksIHNlbGYtPnN0cmVhbUNvbGxlY3Rpb24uZ2V0KCkpKTsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJlYW0oV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIHNlbGYsIE1lZGlhU3RyZWFtUHJpdmF0ZSogc3RyZWFtKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNlbGYpLCBGQUxTRSk7CisKKyAg
ICBpZiAoc2VsZi0+YXVkaW9TcmMpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNl
bGYtPmF1ZGlvU3JjLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdT
VF9CSU4oc2VsZiksIHNlbGYtPmF1ZGlvU3JjKTsKKyAgICAgICAgc2VsZi0+YXVkaW9TcmMgPSBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChzZWxmLT52aWRlb1NyYykgeworICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUoc2VsZi0+dmlkZW9TcmMsIEdTVF9TVEFURV9OVUxMKTsKKyAgICAg
ICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwgc2VsZi0+dmlkZW9TcmMpOworICAgICAg
ICBzZWxmLT52aWRlb1NyYyA9IG51bGxwdHI7CisgICAgfQorCisgICAgd2Via2l0TWVkaWFTdHJl
YW1TcmNQb3N0U3RyZWFtQ29sbGVjdGlvbihzZWxmLCBzdHJlYW0pOworCisgICAgc2VsZi0+c3Ry
ZWFtID0gc3RyZWFtOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBzdHJlYW0tPnRyYWNrcygpKSB7
CisgICAgICAgIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OkF1ZGlvKSB7CisgICAgICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwQXBwU3JjKHNl
bGYsIHRyYWNrLmdldCgpLCAmc2VsZi0+YXVkaW9TcmMsCisgICAgICAgICAgICAgICAgJmF1ZGlv
U3JjVGVtcGxhdGUpOworICAgICAgICB9IGVsc2UgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pIHsKKyAgICAgICAgICAgIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjU2V0dXBBcHBTcmMoc2VsZiwgdHJhY2suZ2V0KCksICZzZWxmLT52aWRlb1NyYywKKyAg
ICAgICAgICAgICAgICAmdmlkZW9TcmNUZW1wbGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBHU1RfSU5GTygiVW5zdXBvcnRlZCB0cmFjayB0eXBlOiAlZCIsIChnaW50KSB0cmFj
ay0+dHlwZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVz
aFZpZGVvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RTYW1wbGUqIGdzdHNh
bXBsZSkKK3sKKyAgICBpZiAoc2VsZi0+dmlkZW9TcmMpCisgICAgICAgIGdzdF9hcHBfc3JjX3B1
c2hfc2FtcGxlKEdTVF9BUFBfU1JDKHNlbGYtPnZpZGVvU3JjKSwgZ3N0c2FtcGxlKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUoV2ViS2l0TWVk
aWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogZ3N0c2FtcGxlKQoreworICAgIGlmIChzZWxm
LT5hdWRpb1NyYykKKyAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoR1NUX0FQUF9TUkMo
c2VsZi0+YXVkaW9TcmMpLCBnc3RzYW1wbGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRp
YVN0cmVhbVNyY1RyYWNrRW5kZWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsCisgICAgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmIHRyYWNrKQoreworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQg
PSBudWxscHRyOworCisgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOworICAgIGZvciAoYXV0byB0
bXAgPSBHU1RfRUxFTUVOVChzZWxmKS0+c3JjcGFkczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsK
KyAgICAgICAgR3N0UGFkKiB0bXBwYWQgPSBHU1RfUEFEKHRtcC0+ZGF0YSk7CisgICAgICAgIGNv
bnN0IGdjaGFyKiBzdHJlYW1faWQ7CisKKyAgICAgICAgR3N0RXZlbnQqIHN0cmVhbV9zdGFydCA9
IGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCh0bXBwYWQsIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQs
IDApOworICAgICAgICBpZiAoIXN0cmVhbV9zdGFydCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFtX3N0YXJ0LCAmc3Ry
ZWFtX2lkKTsKKyAgICAgICAgaWYgKFN0cmluZyhzdHJlYW1faWQpID09IHRyYWNrLmlkKCkpIHsK
KyAgICAgICAgICAgIHBhZCA9IHRtcHBhZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworCisgICAgaWYgKCFwYWQpIHsK
KyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8gcGFkIGZvdW5kIGZvciAlcyIsIHRy
YWNrLmlkKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB2aWRlby52aWRlb1dpZHRoIGlzIHJlc2V0IHRvIDAKKyAg
ICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKHNlbGYsIHNlbGYtPnN0
cmVhbS5nZXQoKSk7CisgICAgYXV0byB0YWdzID0gbWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRU
YWdzKCZ0cmFjayk7CisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZC5nZXQoKSwgZ3N0X2V2ZW50
X25ld190YWcodGFncykpOworICAgIGdzdF9wYWRfcHVzaF9ldmVudChwYWQuZ2V0KCksIGdzdF9l
dmVudF9uZXdfZW9zKCkpOworfQorCit9IC8vIFdlYkNvcmUKKyNlbmRpZiAvLyBHU1RfQ0hFQ0tf
VkVSU0lPTigxLCAxMCwgMCkKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJNZWRpYVN0cmVhbVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5lYjQxMTJlNzA3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNv
bT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKwor
I2RlZmluZSBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJRFRIICJ3ZWJraXQtbWVkaWEtc3RyZWFt
LXdpZHRoIgorI2RlZmluZSBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdIVCAid2Via2l0LW1l
ZGlhLXN0cmVhbS1oZWlnaHQiCisjZGVmaW5lIFdFQktJVF9NRURJQV9UUkFDS19UQUdfS0lORCAi
d2Via2l0LW1lZGlhLXN0cmVhbS1raW5kIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyYyBXZWJLaXRNZWRpYVN0cmVhbVNyYzsKKwor
I2RlZmluZSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhvKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG8pLCBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDLCBXZWJLaXRNZWRpYVN0cmVh
bVNyYykpCisjZGVmaW5lIFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKG8pIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgobyksIFdFQktJVF9UWVBFX01FRElBX1NUUkVBTV9TUkMpKQorI2Rl
ZmluZSBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDICh3ZWJraXRfbWVkaWFfc3RyZWFtX3Ny
Y19nZXRfdHlwZSgpKQorR1R5cGUgd2Via2l0X21lZGlhX3N0cmVhbV9zcmNfZ2V0X3R5cGUodm9p
ZCkgR19HTlVDX0NPTlNUOworZ2Jvb2xlYW4gd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJlYW0o
V2ViS2l0TWVkaWFTdHJlYW1TcmMqLCBNZWRpYVN0cmVhbVByaXZhdGUqKTsKK30gLy8gV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWE5
ZGZiNTE3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAtMCww
ICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgor
ICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMp
ICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2luY2x1
ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNp
bmsuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5j
bHVkZSA8d2VicnRjL2FwaS9wZWVyY29ubmVjdGlvbmludGVyZmFjZS5oPgorI2luY2x1ZGUgPHdl
YnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvY29tbW9uLmg+CisjaW5jbHVkZSA8d2VicnRjL21lZGlhL2Vu
Z2luZS93ZWJydGN2aWRlb2NhcHR1cmVyLmg+CisjaW5jbHVkZSA8d2VicnRjL21lZGlhL2VuZ2lu
ZS93ZWJydGN2aWRlb2NhcHR1cmVyZmFjdG9yeS5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9tb2R1bGVz
L3ZpZGVvX2NhcHR1cmUvdmlkZW9fY2FwdHVyZV9kZWZpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY29uc3Qgc3RhdGljIGludCBkZWZhdWx0V2lkdGggPSA2NDA7Citjb25zdCBzdGF0
aWMgaW50IGRlZmF1bHRIZWlnaHQgPSA0ODA7CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRf
dmlkZW9fY2FwdHVyZV9zb3VyY2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Vi
a2l0X3ZpZGVvX2NhcHR1cmVfc291cmNlX2RlYnVnCisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVH
U3RyZWFtZXJEZWJ1ZygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGRlYnVnUmVnaXN0
ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxhZywgW10gewor
ICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfdmlkZW9fY2FwdHVyZV9zb3Vy
Y2VfZGVidWcsICJ3ZWJraXR2aWRlb2NhcHR1cmVzb3VyY2UiLCAwLAorICAgICAgICAgICAgIldl
YktpdCBWaWRlbyBDYXB0dXJlIFNvdXJjZS4iKTsKKyAgICB9KTsKK30KKworY2xhc3MgR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlRmFjdG9yeSBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1lZGlh
U291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBDYXB0dXJlU291cmNl
T3JFcnJvciBjcmVhdGVWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2
aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykgZmluYWwKKyAgICB7Cisg
ICAgICAgIHJldHVybiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2Uu
cGVyc2lzdGVudElkKCksIGNvbnN0cmFpbnRzKTsKKyAgICB9Cit9OworCitSZWFsdGltZU1lZGlh
U291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBsaWJXZWJSVENWaWRlb0NhcHR1cmVTb3VyY2VG
YWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlRmFjdG9yeT4gZmFjdG9yeTsKKyAgICByZXR1cm4gZmFjdG9yeS5nZXQoKTsKK30K
KworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3Ry
YWludHMpCit7CisgICAgYXV0byBkZXZpY2UgPSBHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpzaW5nbGV0b24oKS5nc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGRldmljZUlEKTsKKyAg
ICBpZiAoIWRldmljZSkgeworICAgICAgICBhdXRvIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZSgpOiBHU3RyZWFtZXIgZGlk
IG5vdCBmaW5kIHRoZSBkZXZpY2U6ICVzLiIsIGRldmljZUlELnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShlcnJvck1lc3NhZ2UpKTsK
KyAgICB9CisKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlKGRldmljZS52YWx1ZSgpKSk7CisKKyAgICBpZiAoY29uc3RyYWludHMpIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFp
bnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdC52YWx1ZSgpLmZpcnN0KTsKKyAgICB9CisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVy
cm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2Fw
dHVyZUZhY3RvcnkmIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCit7Cisg
ICAgcmV0dXJuIGxpYldlYlJUQ1ZpZGVvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKTsKK30KKworR1N0
cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoY29u
c3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBnY2hhciAqc291
cmNlX2ZhY3RvcnkpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGRldmljZUlELCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgbmFtZSkKKyAgICAsIG1fY2FwdHVyZXIoc3RkOjpt
YWtlX3VuaXF1ZTxHU3RyZWFtZXJWaWRlb0NhcHR1cmVyPihzb3VyY2VfZmFjdG9yeSkpCit7Cisg
ICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVnKCk7Cit9CisKK0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZTo6R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKEdTdHJlYW1lckNhcHR1cmVEZXZp
Y2UgZGV2aWNlKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShkZXZpY2UucGVyc2lzdGVudElk
KCksIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBkZXZpY2UubGFiZWwoKSkKKyAg
ICAsIG1fY2FwdHVyZXIoc3RkOjptYWtlX3VuaXF1ZTxHU3RyZWFtZXJWaWRlb0NhcHR1cmVyPihk
ZXZpY2UpKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpOworfQorCitHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2U6On5HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoKQorewor
fQorCitib29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlTaXplKGNvbnN0IElu
dFNpemUgJnNpemUpCit7CisgICAgbV9jYXB0dXJlci0+c2V0U2l6ZShzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlOjphcHBseUZyYW1lUmF0ZShkb3VibGUgZnJhbWVyYXRlKQoreworICAg
IG1fY2FwdHVyZXItPnNldEZyYW1lUmF0ZShmcmFtZXJhdGUpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0Rh
dGEoKQoreworICAgIG1fY2FwdHVyZXItPnNldHVwUGlwZWxpbmUoKTsKKyAgICBtX2NhcHR1cmVy
LT5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworICAgIG1fY2FwdHVy
ZXItPnNldEZyYW1lUmF0ZShmcmFtZVJhdGUoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2Nh
cHR1cmVyLT5zaW5rKCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdTYW1wbGVDYWxsYmFj
ayksIHRoaXMpOworICAgIG1fY2FwdHVyZXItPnBsYXkoKTsKK30KKworR3N0Rmxvd1JldHVybiBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6Om5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQq
IHNpbmssIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSogc291cmNlKQoreworICAgIGF1dG8g
Z3N0U2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJ
Tksoc2luaykpKTsKKyAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVHU3RyZWFtZXI6
OmNyZWF0ZShXVEZNb3ZlKGdzdFNhbXBsZSksIFdlYkNvcmU6OkZsb2F0U2l6ZSgpLCBTdHJpbmco
KSk7CisKKyAgICAvLyBGSVhNRSAtIENoZWNrIGhvdyBwcmVzZW50YXRpb25TaXplIGlzIHN1cHBv
c2VkIHRvIGJlIHVzZWQgaGVyZS4KKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqc291cmNlKSwgbWVkaWFTYW1wbGUgPSBXVEZNb3ZlKG1lZGlhU2FtcGxlKV0g
eworICAgICAgICBwcm90ZWN0ZWRUaGlzLT52aWRlb1NhbXBsZUF2YWlsYWJsZShtZWRpYVNhbXBs
ZS5nZXQoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY2FwdHVyZXItPnNpbmsoKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBtX2NhcHR1cmVyLT5zdG9wKCk7CisKKyAgICBHU1RfSU5GTygiUmVzZXQgaGVpZ2h0IGFuZCB3
aWR0aCBhZnRlciBzdG9wcGluZyBzb3VyY2UiKTsKKyAgICBzZXRIZWlnaHQoMCk7CisgICAgc2V0
V2lkdGgoMCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIEdT
dHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9jYXBhYmlsaXRpZXMpCisgICAgICAgIHJldHVybiBtX2NhcGFiaWxpdGllcy52YWx1ZSgp
OworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMoc2V0
dGluZ3MoKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpKTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNh
cHMgPSBhZG9wdEdSZWYobV9jYXB0dXJlci0+Y2FwcygpKTsKKyAgICBpbnQzMl90IG1pbldpZHRo
ID0gR19NQVhJTlQzMiwgbWF4V2lkdGggPSAwLCBtaW5IZWlnaHQgPSBHX01BWElOVDMyLCBtYXhI
ZWlnaHQgPSAwOworICAgIGRvdWJsZSBtaW5GcmFtZXJhdGUgPSBHX01BWERPVUJMRSwgbWF4RnJh
bWVyYXRlID0gR19NSU5ET1VCTEU7CisKKyAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgZ3N0X2Nh
cHNfZ2V0X3NpemUoY2Fwcy5nZXQoKSk7IGkrKykgeworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0
ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgaSk7CisKKyAgICAgICAgLy8g
T25seSBhY2NlcHQgcmF3IHZpZGVvIGZvciBub3cuCisgICAgICAgIGlmICghZ3N0X3N0cnVjdHVy
ZV9oYXNfbmFtZShzdHIsICJ2aWRlby94LXJhdyIpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaW50MzJfdCB0bXBNaW5XaWR0aCwgdG1wTWluSGVpZ2h0LCB0bXBNaW5GUFNOdW1l
cmF0b3IsIHRtcE1pbkZQU0Rlbm9taW5hdG9yOworICAgICAgICBpbnQzMl90IHRtcE1heFdpZHRo
LCB0bXBNYXhIZWlnaHQsIHRtcE1heEZQU051bWVyYXRvciwgdG1wTWF4RlBTRGVub21pbmF0b3I7
CisgICAgICAgIGRvdWJsZSB0bXBNaW5GcmFtZXJhdGUgPSBHX01BWERPVUJMRSwgdG1wTWF4RnJh
bWVyYXRlID0gR19NSU5ET1VCTEU7CisKKyAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChz
dHIsICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgJnRtcE1pbldpZHRoLCAmdG1wTWF4V2lk
dGgsICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsICZ0bXBNaW5IZWlnaHQsICZ0bXBNYXhI
ZWlnaHQsIG51bGxwdHIpKSB7CisgICAgICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0KHN0
ciwgIndpZHRoIiwgR19UWVBFX0lOVCwgJnRtcE1pbldpZHRoLCAiaGVpZ2h0IiwgR19UWVBFX0lO
VCwgJnRtcE1pbkhlaWdodCwgbnVsbHB0cikpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIHRtcE1heFdpZHRoID0gdG1wTWluV2lkdGg7CisgICAgICAgICAgICB0bXBN
YXhIZWlnaHQgPSB0bXBNaW5IZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXQoc3RyLCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsICZ0
bXBNaW5GUFNOdW1lcmF0b3IsICZ0bXBNaW5GUFNEZW5vbWluYXRvciwgJnRtcE1heEZQU051bWVy
YXRvciwgJnRtcE1heEZQU0Rlbm9taW5hdG9yLCBudWxscHRyKSkgeworICAgICAgICAgICAgZ3N0
X3V0aWxfZnJhY3Rpb25fdG9fZG91YmxlKHRtcE1pbkZQU051bWVyYXRvciwgdG1wTWluRlBTRGVu
b21pbmF0b3IsICZ0bXBNaW5GcmFtZXJhdGUpOworICAgICAgICAgICAgZ3N0X3V0aWxfZnJhY3Rp
b25fdG9fZG91YmxlKHRtcE1heEZQU051bWVyYXRvciwgdG1wTWF4RlBTRGVub21pbmF0b3IsICZ0
bXBNYXhGcmFtZXJhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0
ciwKKyAgICAgICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgJnRtcE1pbkZQ
U051bWVyYXRvciwgJnRtcE1pbkZQU0Rlbm9taW5hdG9yLCBudWxscHRyKSkgeworICAgICAgICAg
ICAgdG1wTWF4RlBTTnVtZXJhdG9yID0gdG1wTWluRlBTTnVtZXJhdG9yOworICAgICAgICAgICAg
dG1wTWF4RlBTRGVub21pbmF0b3IgPSB0bXBNaW5GUFNEZW5vbWluYXRvcjsKKyAgICAgICAgICAg
IGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSh0bXBNaW5GUFNOdW1lcmF0b3IsIHRtcE1pbkZQ
U0Rlbm9taW5hdG9yLCAmdG1wTWluRnJhbWVyYXRlKTsKKyAgICAgICAgICAgIGdzdF91dGlsX2Zy
YWN0aW9uX3RvX2RvdWJsZSh0bXBNYXhGUFNOdW1lcmF0b3IsIHRtcE1heEZQU0Rlbm9taW5hdG9y
LCAmdG1wTWF4RnJhbWVyYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0
IEdWYWx1ZSogZnJhbWVSYXRlcyhnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShzdHIsICJmcmFtZXJh
dGUiKSk7CisgICAgICAgICAgICB0bXBNaW5GcmFtZXJhdGUgPSBHX01BWERPVUJMRTsKKyAgICAg
ICAgICAgIHRtcE1heEZyYW1lcmF0ZSA9IDAuMDsKKworICAgICAgICAgICAgZ3VpbnQgZnJhbWVS
YXRlc0xlbmd0aCA9IHN0YXRpY19jYXN0PGd1aW50Pihnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZShm
cmFtZVJhdGVzKSkgLSAxOworCisgICAgICAgICAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgZnJh
bWVSYXRlc0xlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIHRtcEZyYW1lUmF0
ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZhbCA9IGdzdF92YWx1ZV9saXN0X2dl
dF92YWx1ZShmcmFtZVJhdGVzLCBpKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChHX1ZBTFVF
X1RZUEUodmFsKSA9PSBHU1RfVFlQRV9GUkFDVElPTik7CisgICAgICAgICAgICAgICAgZ3N0X3V0
aWxfZnJhY3Rpb25fdG9fZG91YmxlKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yKHZh
bCksCisgICAgICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0
b3IodmFsKSwgJnRtcEZyYW1lUmF0ZSk7CisKKyAgICAgICAgICAgICAgICB0bXBNaW5GcmFtZXJh
dGUgPSBzdGQ6Om1pbih0bXBNaW5GcmFtZXJhdGUsIHRtcEZyYW1lUmF0ZSk7CisgICAgICAgICAg
ICAgICAgdG1wTWF4RnJhbWVyYXRlID0gc3RkOjptYXgodG1wTWF4RnJhbWVyYXRlLCB0bXBGcmFt
ZVJhdGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAg
ICAgICAgICAgICBtaW5XaWR0aCA9IHN0ZDo6bWluKHRtcE1pbldpZHRoLCBtaW5XaWR0aCk7Cisg
ICAgICAgICAgICAgICAgbWluSGVpZ2h0ID0gc3RkOjptaW4odG1wTWluSGVpZ2h0LCBtaW5IZWln
aHQpOworICAgICAgICAgICAgICAgIG1pbkZyYW1lcmF0ZSA9IHN0ZDo6bWluKHRtcE1pbkZyYW1l
cmF0ZSwgbWluRnJhbWVyYXRlKTsKKworICAgICAgICAgICAgICAgIG1heFdpZHRoID0gc3RkOjpt
YXgodG1wTWF4V2lkdGgsIG1heFdpZHRoKTsKKyAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBz
dGQ6Om1heCh0bXBNYXhIZWlnaHQsIG1heEhlaWdodCk7CisgICAgICAgICAgICAgICAgbWF4RnJh
bWVyYXRlID0gc3RkOjptYXgodG1wTWF4RnJhbWVyYXRlLCBtYXhGcmFtZXJhdGUpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtaW5XaWR0aCA9IHRtcE1pbldpZHRoOwor
ICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9IHRtcE1pbkhlaWdodDsKKyAgICAgICAgICAgICAg
ICBtaW5GcmFtZXJhdGUgPSB0bXBNaW5GcmFtZXJhdGU7CisKKyAgICAgICAgICAgICAgICBtYXhX
aWR0aCA9IHRtcE1heFdpZHRoOworICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IHRtcE1heEhl
aWdodDsKKyAgICAgICAgICAgICAgICBtYXhGcmFtZXJhdGUgPSB0bXBNYXhGcmFtZXJhdGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNl
SWQoaWQoKSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaWR0aChDYXBhYmlsaXR5VmFsdWVP
clJhbmdlKG1pbldpZHRoLCBtYXhXaWR0aCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0SGVp
Z2h0KENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UobWluSGVpZ2h0LCBtYXhIZWlnaHQpKTsKKyAgICAg
ICAgY2FwYWJpbGl0aWVzLnNldEZyYW1lUmF0ZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pbkZy
YW1lcmF0ZSwgbWF4RnJhbWVyYXRlKSk7CisgICAgICAgIG1fY2FwYWJpbGl0aWVzID0gV1RGTW92
ZShjYXBhYmlsaXRpZXMpOworICAgIH0KKworICAgIHJldHVybiBtX2NhcGFiaWxpdGllcy52YWx1
ZSgpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIGlmICghbV9jdXJyZW50
U2V0dGluZ3MpIHsKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHNldHRpbmdz
OworICAgICAgICBzZXR0aW5ncy5zZXREZXZpY2VJZChpZCgpKTsKKworICAgICAgICBSZWFsdGlt
ZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgc3VwcG9ydGVkQ29uc3RyYWludHM7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRmFjaW5nTW9kZSh0cnVlKTsK
KyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKKyAg
ICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisgICAg
ICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzQXNwZWN0UmF0aW8odHJ1ZSk7Cisg
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRnJhbWVSYXRlKHRydWUpOwor
ICAgICAgICBzZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhzdXBwb3J0ZWRDb25zdHJh
aW50cyk7CisKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsK
KyAgICB9CisKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkp
OworICAgIG1fY3VycmVudFNldHRpbmdzLT5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpKTsKKyAg
ICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0RnJhbWVSYXRlKGZyYW1lUmF0ZSgpKTsKKyAgICBtX2N1
cnJlbnRTZXR0aW5ncy0+c2V0QXNwZWN0UmF0aW8oYXNwZWN0UmF0aW8oKSk7CisgICAgbV9jdXJy
ZW50U2V0dGluZ3MtPnNldEZhY2luZ01vZGUoZmFjaW5nTW9kZSgpKTsKKyAgICByZXR1cm4gbV9j
dXJyZW50U2V0dGluZ3MudmFsdWUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzc5YmE3ZTBmZDYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
VmlkZW9DYXB0dXJlU291cmNlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVu
aWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJv
ICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ2FwdHVy
ZVNvdXJjZU9yRXJyb3IgY3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmlkZW9DYXB0dXJlRmFj
dG9yeSYgZmFjdG9yeSgpOworCisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IG92ZXJyaWRlOworICAgIEdzdEVs
ZW1lbnQqIHBpcGVsaW5lKCkgeyByZXR1cm4gbV9jYXB0dXJlci0+cGlwZWxpbmUoKTsgfQorICAg
IEdTdHJlYW1lckNhcHR1cmVyKiBjYXB0dXJlcigpIHsgcmV0dXJuIG1fY2FwdHVyZXIuZ2V0KCk7
IH0KKworCitwcm90ZWN0ZWQ6CisgICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKGNvbnN0
IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgZ2NoYXIgKiBzb3Vy
Y2VfZmFjdG9yeSk7CisgICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKEdTdHJlYW1lckNh
cHR1cmVEZXZpY2UpOworICAgIHZpcnR1YWwgfkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSgp
OworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdG9w
UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOworICAgIG11dGFi
bGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNl
dHRpbmdzOworCitwcml2YXRlOgorICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1NhbXBsZUNh
bGxiYWNrKEdzdEVsZW1lbnQqLCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UqKTsKKworICAg
IGJvb2wgaXNDYXB0dXJlU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbDsKKyAgICBib29sIGFwcGx5RnJh
bWVSYXRlKGRvdWJsZSkgZmluYWw7CisgICAgYm9vbCBhcHBseUFzcGVjdFJhdGlvKGRvdWJsZSkg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZXI+IG1fY2FwdHVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGI2MDUwMjE2ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBU
aGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5k
cm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIp
CisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oIgorCisjaW5jbHVkZSA8Z3N0L2Fw
cC9nc3RhcHBzaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyVmlkZW9D
YXB0dXJlcjo6R1N0cmVhbWVyVmlkZW9DYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRl
dmljZSkKKyAgICA6IEdTdHJlYW1lckNhcHR1cmVyKGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBz
X25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtcmF3IikpKQoreworfQorCitHU3RyZWFtZXJWaWRl
b0NhcHR1cmVyOjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJjZUZhY3Rv
cnkpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihzb3VyY2VGYWN0b3J5LCBhZG9wdEdSZWYoZ3N0
X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC1yYXciKSkpCit7Cit9CisKK0dzdEVsZW1l
bnQqIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcigpCit7CisgICAgYXV0
byBjb252ZXJ0ZXIgPSBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oInZpZGVvc2NhbGUg
ISB2aWRlb2NvbnZlcnQgISB2aWRlb3JhdGUiLCBUUlVFLCBudWxscHRyKTsKKworICAgIEFTU0VS
VChjb252ZXJ0ZXIpOworCisgICAgcmV0dXJuIGNvbnZlcnRlcjsKK30KKworR3N0VmlkZW9JbmZv
IEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OmdldEJlc3RGb3JtYXQoKQoreworICAgIEdSZWZQdHI8
R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19maXhhdGUoZ3N0X2RldmljZV9nZXRf
Y2FwcyhtX2RldmljZS5nZXQoKSkpKTsKKyAgICBHc3RWaWRlb0luZm8gaW5mbzsKKyAgICBnc3Rf
dmlkZW9faW5mb19mcm9tX2NhcHMoJmluZm8sIGNhcHMuZ2V0KCkpOworCisgICAgcmV0dXJuIGlu
Zm87Cit9CisKK2Jvb2wgR1N0cmVhbWVyVmlkZW9DYXB0dXJlcjo6c2V0U2l6ZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpCit7CisgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShtX2NhcHMu
Z2V0KCkpKTsKKyAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKG1fY2Fwcy5nZXQoKSwgIndpZHRoIiwg
R19UWVBFX0lOVCwgd2lkdGgsICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBoZWlnaHQsIG51bGxwdHIp
OworCisgICAgaWYgKCFtX2NhcHNmaWx0ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGdfb2JqZWN0X3NldChtX2NhcHNmaWx0ZXIuZ2V0KCksICJjYXBzIiwgbV9jYXBzLmdldCgpLCBu
dWxscHRyKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdTdHJlYW1lclZpZGVvQ2Fw
dHVyZXI6OnNldEZyYW1lUmF0ZShkb3VibGUgZnJhbWVSYXRlKQoreworICAgIGludCBudW1lcmF0
b3IsIGRlbm9taW5hdG9yOworCisgICAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKGZyYW1l
UmF0ZSwgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yKTsKKworICAgIGlmIChudW1lcmF0b3IgPCAt
R19NQVhJTlQpIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJG
cmFtZXJhdGUgJWYgbm90IGFsbG93ZWQiLCBmcmFtZVJhdGUpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFudW1lcmF0b3IpIHsKKyAgICAgICAgR1NUX0lORk9fT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJEbyBub3QgZm9yY2UgdmFyaWFibGUgZnJhbWVyYXRlIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2NhcHMgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfY29weShtX2NhcHMuZ2V0KCkpKTsKKyAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKG1f
Y2Fwcy5nZXQoKSwgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBudW1lcmF0b3IsIGRl
bm9taW5hdG9yLCBudWxscHRyKTsKKworICAgIGlmICghbV9jYXBzZmlsdGVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBnX29iamVjdF9zZXQobV9jYXBzZmlsdGVyLmdldCgpLCAiY2Fw
cyIsIG1fY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9DYXB0dXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li41N2IwYjQ2ODZkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmgKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICog
QXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdT
VFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVyLmgiCisKKyNpbmNsdWRlIDxn
c3QvdmlkZW8vdmlkZW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVyIDogcHVibGljIEdTdHJlYW1lckNhcHR1cmVyIHsKK3B1YmxpYzoKKyAg
ICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyKEdTdHJlYW1lckNhcHR1cmVEZXZpY2UpOworICAgIEdT
dHJlYW1lclZpZGVvQ2FwdHVyZXIoY29uc3QgY2hhciogc291cmNlX2ZhY3RvcnkpOworCisgICAg
R3N0RWxlbWVudCogY3JlYXRlQ29udmVydGVyKCkgZmluYWw7CisgICAgY29uc3QgY2hhciogbmFt
ZSgpIGZpbmFsIHsgcmV0dXJuICJWaWRlbyI7IH0KKworICAgIGJvb2wgc2V0U2l6ZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpOworICAgIGJvb2wgc2V0RnJhbWVSYXRlKGRvdWJsZSk7CisgICAgR3N0
VmlkZW9JbmZvIGdldEJlc3RGb3JtYXQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45OTVmMDU3MjBlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNw
cApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2Fs
aWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShM
SUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiTW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZS5oIgorCisjaW5jbHVkZSAiTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXcmFwcGVkTW9ja1JlYWx0aW1lQXVkaW9T
b3VyY2UgOiBwdWJsaWMgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UgeworcHVibGljOgorICAgIFdy
YXBwZWRNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25z
dCBTdHJpbmcmIG5hbWUpCisgICAgICAgIDogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UoZGV2aWNl
SUQsIG5hbWUpCisgICAgeworICAgIH0KK307CisKK0NhcHR1cmVTb3VyY2VPckVycm9yIE1vY2tS
ZWFsdGltZUF1ZGlvU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwKKyAgICBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQor
eworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBNb2NrR1N0cmVhbWVyQXVkaW9DYXB0
dXJlU291cmNlKGRldmljZUlELCBuYW1lKSk7CisKKyAgICBpZiAoY29uc3RyYWludHMgJiYgc291
cmNlLT5hcHBseUNvbnN0cmFpbnRzKCpjb25zdHJhaW50cykpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShzb3VyY2UpKTsKK30K
Kworc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBNb2NrR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWlu
dHMmIGNvbnN0cmFpbnRzKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+YXBwbHlDb25zdHJhaW50
cyhjb25zdHJhaW50cyk7CisgICAgcmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6
YXBwbHlDb25zdHJhaW50cyhjb25zdHJhaW50cyk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRpYUNvbnN0cmFpbnRz
JiBjb25zdHJhaW50cywgU3VjY2Vzc0hhbmRsZXImJiBzdWNjZXNzSGFuZGxlciwgRmFpbHVyZUhh
bmRsZXImJiBmYWlsdXJlSGFuZGxlcikKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2UtPmFwcGx5Q29u
c3RyYWludHMoY29uc3RyYWludHMsIFdURk1vdmUoc3VjY2Vzc0hhbmRsZXIpLCBXVEZNb3ZlKGZh
aWx1cmVIYW5kbGVyKSk7Cit9CisKK01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6Ok1v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29u
c3QgU3RyaW5nJiBuYW1lKQorICAgIDogR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKGRldmlj
ZUlELCBuYW1lKQorICAgICwgbV93cmFwcGVkU291cmNlKHN0ZDo6bWFrZV91bmlxdWU8V3JhcHBl
ZE1vY2tSZWFsdGltZUF1ZGlvU291cmNlPihkZXZpY2VJRCwgbmFtZSkpCit7CisgICAgbV93cmFw
cGVkU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Cit9CisKK01vY2tHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2U6On5Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKCkKK3sKKyAgICBt
X3dyYXBwZWRTb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKK30KKwordm9pZCBNb2NrR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgbV93
cmFwcGVkU291cmNlLT5zdG9wKCk7CisKKyAgICBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6
OnN0b3BQcm9kdWNpbmdEYXRhKCk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgIG1fd3JhcHBlZFNvdXJjZS0+c3Rh
cnQoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBNb2NrR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
d3JhcHBlZFNvdXJjZS0+c2V0dGluZ3MoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZUNhcGFiaWxpdGllcyYgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0
aWVzKCkgY29uc3QKK3sKKyAgICBtX2NhcGFiaWxpdGllcyA9IG1fd3JhcHBlZFNvdXJjZS0+Y2Fw
YWJpbGl0aWVzKCk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBtX3dyYXBwZWRTb3VyY2UtPnNl
dHRpbmdzKCk7CisgICAgcmV0dXJuIG1fd3JhcHBlZFNvdXJjZS0+Y2FwYWJpbGl0aWVzKCk7Cit9
CisKK3ZvaWQgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZUZhaWxlZCgp
Cit7CisgICAgc3RvcCgpOworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmNhcHR1cmVGYWlsZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYzExZjE3OWI5OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGli
YXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1
ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UgZmluYWwgOiBwdWJsaWMg
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLCBSZWFsdGltZU1lZGlhU291cmNlOjpPYnNlcnZl
ciB7CitwdWJsaWM6CisgICAgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBT
dHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIH5Nb2NrR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlKCk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5n
LCBTdHJpbmc+PiBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmKTsKKyAg
ICB2b2lkIGFwcGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYsIFN1Y2Nlc3NI
YW5kbGVyJiYsIEZhaWx1cmVIYW5kbGVyJiYpIGZpbmFsOworCitwcml2YXRlOgorICAgIHZvaWQg
c3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgp
IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3Mo
KSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
JiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY2FwdHVyZUZhaWxlZCgp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWFsdGltZU1lZGlhU291cmNlPiBtX3dyYXBwZWRTb3Vy
Y2U7CisKKyAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJikgb3ZlcnJp
ZGUgeyB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmRmYWJlZGQ0NmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTAsMCArMSwxNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
IEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhv
cjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShH
U1RSRUFNRVIpCisjaW5jbHVkZSAiTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIgor
CisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5oIgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXcmFwcGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2Ug
OiBwdWJsaWMgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UgeworcHVibGljOgorICAgIFdyYXBwZWRN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgICAgIDogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UoZGV2aWNlSUQsIG5h
bWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgdXBkYXRlU2FtcGxlQnVmZmVyKCkKKyAgICB7
CisgICAgICAgIGludCBmcHNOdW1lcmF0b3IsIGZwc0Rlbm9taW5hdG9yOworICAgICAgICBhdXRv
IGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKTsKKworICAgICAgICBpZiAoIWltYWdl
QnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdzdF91dGlsX2RvdWJsZV90
b19mcmFjdGlvbihmcmFtZVJhdGUoKSwgJmZwc051bWVyYXRvciwgJmZwc0Rlbm9taW5hdG9yKTsK
KyAgICAgICAgYXV0byBkYXRhID0gaW1hZ2VCdWZmZXItPnRvQkdSQURhdGEoKTsKKyAgICAgICAg
YXV0byBzaXplID0gZGF0YS5zaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2Vfc2l6ZSA9IGltYWdl
QnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAgICAgICAgYXV0byBnc3RzYW1wbGUgPSBnc3Rfc2Ft
cGxlX25ldyhnc3RfYnVmZmVyX25ld193cmFwcGVkKHN0YXRpY19jYXN0PGd1aW50OCo+KGRhdGEu
cmVsZWFzZUJ1ZmZlcigpLmdldCgpKSwgc2l6ZSksCisgICAgICAgICAgICBhZG9wdEdSZWYoZ3N0
X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAorICAgICAgICAgICAgICAgICJmb3JtYXQi
LCBHX1RZUEVfU1RSSU5HLCAiQkdSQSIsCisgICAgICAgICAgICAgICAgIndpZHRoIiwgR19UWVBF
X0lOVCwgaW1hZ2Vfc2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICJoZWlnaHQiLCBHX1RZ
UEVfSU5ULCBpbWFnZV9zaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICJmcmFtZXJhdGUi
LCBHU1RfVFlQRV9GUkFDVElPTiwgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWluYXRvciwKKyAgICAg
ICAgICAgICAgICBudWxscHRyKSkuZ2V0KCksCisgICAgICAgICAgICBudWxscHRyLCBudWxscHRy
KTsKKworICAgICAgICBhdXRvIHNhbXBsZSA9IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUo
V1RGTW92ZShnc3RzYW1wbGUpLAorICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRTaXplKCksIFN0
cmluZygpKTsKKyAgICAgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlKTsKKyAgICB9Cit9
OworCitDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBN
ZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0
UmVmKCpuZXcgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwgbmFtZSkp
OworCisgICAgaWYgKGNvbnN0cmFpbnRzICYmIHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29u
c3RyYWludHMpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIENhcHR1cmVTb3Vy
Y2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgIG1fd3JhcHBlZFNvdXJj
ZS0+c3RhcnQoKTsKK30KKwordm9pZCBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpz
dG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5zdG9wKCk7CisKKyAg
ICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCk7Cit9CisK
K3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFi
bGUoTWVkaWFTYW1wbGUmIHNhbXBsZSkKK3sKKyAgICBhdXRvIHNyYyA9IGNhcHR1cmVyKCktPnNv
dXJjZSgpOworCisgICAgaWYgKHNyYykgeworICAgICAgICBhdXRvIGdzdHNhbXBsZSA9IHN0YXRp
Y19jYXN0PE1lZGlhU2FtcGxlR1N0cmVhbWVyKj4oJnNhbXBsZSktPnBsYXRmb3JtU2FtcGxlKCku
c2FtcGxlLmdzdFNhbXBsZTsKKyAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoR1NUX0FQ
UF9TUkMoc3JjKSwgZ3N0c2FtcGxlKTsKKyAgICB9Cit9CisKK01vY2tHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVTb3VyY2U6Ok1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlKGRldmljZUlELCBuYW1lLCAiYXBwc3JjIikKKyAgICAsIG1fd3JhcHBlZFNvdXJj
ZShzdGQ6Om1ha2VfdW5pcXVlPFdyYXBwZWRNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZT4oZGV2aWNl
SUQsIG5hbWUpKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwor
fQorCitNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjp+TW9ja0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZSgpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5yZW1vdmVPYnNlcnZlcigq
dGhpcyk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRp
YUNvbnN0cmFpbnRzJiBjb25zdHJhaW50cykKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2UtPmFwcGx5
Q29uc3RyYWludHMoY29uc3RyYWludHMpOworICAgIHJldHVybiBHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworfQorCit2b2lkIE1vY2tH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFD
b25zdHJhaW50cyYgY29uc3RyYWludHMsIFN1Y2Nlc3NIYW5kbGVyJiYgc3VjY2Vzc0hhbmRsZXIs
IEZhaWx1cmVIYW5kbGVyJiYgZmFpbHVyZUhhbmRsZXIpCit7CisgICAgbV93cmFwcGVkU291cmNl
LT5hcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBXVEZNb3ZlKHN1Y2Nlc3NIYW5kbGVyKSwg
V1RGTW92ZShmYWlsdXJlSGFuZGxlcikpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MmIE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnNldHRpbmdzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV93cmFwcGVkU291cmNlLT5zZXR0aW5ncygpOworfQorCitjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIG1fY2FwYWJpbGl0aWVzID0g
bV93cmFwcGVkU291cmNlLT5jYXBhYmlsaXRpZXMoKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9
IG1fd3JhcHBlZFNvdXJjZS0+c2V0dGluZ3MoKTsKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXMu
dmFsdWUoKTsKK30KKwordm9pZCBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpjYXB0
dXJlRmFpbGVkKCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpj
YXB0dXJlRmFpbGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3Vy
Y2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGM4MDI3NjhkN2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
IEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhv
cjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1F
UikKKworI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUg
Ik1vY2tSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgV3JhcHBlZE1vY2tSZWFsdGltZVZpZGVvU291cmNlOworLy8gV2UgYXJlIHN1YmNsYXNzaW5n
IEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZSBhbmQgbm90IE1vY2tSZWFsdGltZU1lZGlhU291
cmNlCisvLyBiZWNhdXNlIHRoZSBNZWRpYVBsYXllciBleHBlY3RzIEdTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZSB0byBiZSBhYmxlIHRvIHByb3Blcmx5CisvLyBidWlsZCB0aGUgR1N0cmVhbWVy
IHBpcGVsaW5lLiBTdGlsbCB3ZSBtYWtlIGl0IHNvIHRoYXQgaXQgYmVoYXZlcyBhcyBjbG9zZWx5
IGFzIHBvc3NpYmxlCisvLyB0byB0aGUgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UgY2xhc3MgYnkg
d3JhcHBpbmcgb3VyIG93biBzdWJjbGFzcyBvZiBpdC4KK2NsYXNzIE1vY2tHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LCBSZWFsdGltZU1lZGlhU291cmNlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgTW9ja0dTdHJl
YW1lclZpZGVvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJp
bmcmIG5hbWUpOworICAgIH5Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKCk7CisgICAg
c3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBhcHBseUNvbnN0cmFpbnRz
KGNvbnN0IE1lZGlhQ29uc3RyYWludHMmKTsKKyAgICB2b2lkIGFwcGx5Q29uc3RyYWludHMoY29u
c3QgTWVkaWFDb25zdHJhaW50cyYsIFN1Y2Nlc3NIYW5kbGVyJiYsIEZhaWx1cmVIYW5kbGVyJiYp
IGZpbmFsOworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsK
KyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gbV93cmFwcGVkU291cmNlOworICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgY2FwdHVyZUZhaWxlZCgpIG92ZXJyaWRlOworCisgICAgdm9pZCB2aWRl
b1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJ
QldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGli
V2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmRjZTFkNmU2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVs
dCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4g
Q2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyTGliV2ViUlRDLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJW
aWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3Rv
cnkmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OmF1ZGlvQ2FwdHVyZVNvdXJj
ZUZhY3RvcnkoKQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2Vi
UlRDOjpzaW5nbGV0b24oKS5hdWRpb0ZhY3RvcnkoKTsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlckxpYldlYlJUQyYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6c2lu
Z2xldG9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDPiBjZW50ZXI7Cisg
ICAgcmV0dXJuIGNlbnRlcjsKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlciYgUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQoreworICAgIHJldHVybiBSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjpzaW5nbGV0b24oKTsKK30KKworUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxp
YldlYlJUQygpCisgICAgOiBtX2xpYldlYlJUQ1Byb3ZpZGVyKExpYldlYlJUQ1Byb3ZpZGVyOjpj
cmVhdGUoKSkKK3sKK30KKworUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6flJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMoKQoreworfQorCitSZWFsdGltZU1lZGlh
U291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGli
V2ViUlRDOjphdWRpb0ZhY3RvcnkoKQoreworICAgIGlmIChtX2F1ZGlvRmFjdG9yeU92ZXJyaWRl
KQorICAgICAgICByZXR1cm4gKm1fYXVkaW9GYWN0b3J5T3ZlcnJpZGU7CisKKyAgICByZXR1cm4g
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7Cit9CisKK1JlYWx0aW1lTWVk
aWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJM
aWJXZWJSVEM6OnZpZGVvRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZTo6ZmFjdG9yeSgpOworfQorCitDYXB0dXJlRGV2aWNlTWFuYWdlciYgUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6YXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcigp
Cit7CisgICAgcmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmds
ZXRvbigpOworfQorCitDYXB0dXJlRGV2aWNlTWFuYWdlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckxpYldlYlJUQzo6dmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7CisgICAgcmV0dXJu
IEdTdHJlYW1lclZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpOworfQorCitD
YXB0dXJlRGV2aWNlTWFuYWdlciYgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6
ZGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyRGlz
cGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckxpYldlYlJUQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
MjEyODRlMTc4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmgK
QEAgLTAsMCArMSw2OCBAQAorIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlh
LmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykK
KworI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTGliV2ViUlRD
UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgorCisjaW5jbHVkZSA8d2VicnRjL2FwaS9wZWVy
Y29ubmVjdGlvbmludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDIGZpbmFsIDogcHVibGljIFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDJiBzaW5nbGV0b24oKTsKKworICAgIHdl
YnJ0Yzo6UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlKiBmYWN0b3J5KCkgeyByZXR1cm4g
bV9saWJXZWJSVENQcm92aWRlci0+ZmFjdG9yeSgpOyB9CisKKyAgICBzdGF0aWMgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgdmlkZW9DYXB0dXJlU291cmNlRmFjdG9y
eSgpOworICAgIHN0YXRpYyBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5
JiBhdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5KCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIE5ldmVyRGVzdHJveWVkPFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM+Owor
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMoKTsKKyAgICB+UmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQygpOworCisgICAgdm9pZCBzZXRBdWRpb0ZhY3Rvcnko
UmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgZmFjdG9yeSkgZmluYWwg
eyBtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlID0gJmZhY3Rvcnk7IH0KKyAgICB2b2lkIHVuc2V0QXVk
aW9GYWN0b3J5KFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmKSBmaW5h
bCB7IG1fYXVkaW9GYWN0b3J5T3ZlcnJpZGUgPSBudWxscHRyOyB9CisKKyAgICBSZWFsdGltZU1l
ZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBhdWRpb0ZhY3RvcnkoKSBmaW5hbDsKKyAg
ICBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiB2aWRlb0ZhY3Rvcnko
KSBmaW5hbDsKKworICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyJiBhdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyKCkgZmluYWw7CisgICAgQ2FwdHVyZURldmljZU1hbmFnZXImIHZpZGVvQ2FwdHVyZURl
dmljZU1hbmFnZXIoKSBmaW5hbDsKKyAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgZGlzcGxheUNh
cHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWw7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpB
dWRpb0NhcHR1cmVGYWN0b3J5KiBtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlIHsgbnVsbHB0ciB9Owor
ICAgIFVuaXF1ZVJlZjxMaWJXZWJSVENQcm92aWRlcj4gbV9saWJXZWJSVENQcm92aWRlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShMSUJXRUJSVEMpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKaW5kZXggYzUwYWJjYjdhMzIu
LjljNjAyNGU1M2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6
CiAgICAgfQogfTsKIAotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCisjaWYg
IVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykgJiYgIShVU0UoR1NUUkVBTUVSKSAmJiBV
U0UoTElCV0VCUlRDKSkKIENhcHR1cmVTb3VyY2VPckVycm9yIE1vY2tSZWFsdGltZUF1ZGlvU291
cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKICAgICBhdXRvIHNvdXJjZSA9
IGFkb3B0UmVmKCpuZXcgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UoZGV2aWNlSUQsIG5hbWUpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZS5jcHAKaW5kZXggOWU4NjBkNmNmNWEuLmVkZWRhODNhMGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcApAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi0jaWYgIVBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKSAmJiAhKFVTRShHU1RSRUFNRVIpICYmIFVTRShMSUJXRUJSVEMpKQogQ2FwdHVy
ZVNvdXJjZU9yRXJyb3IgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMq
IGNvbnN0cmFpbnRzKQogewogICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZShkZXZpY2VJRCwgbmFtZSkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGUyZDQyMThhNTIyLi40MWQzYjI5Zjk2NSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDE4LTA1LTE4ICBUaGliYXVsdCBTYXVuaWVyICA8dHNhdW5pZXJAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIFN0YXJ0IGltcGxlbWVudGluZyBNZWRpYVN0cmVh
bSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NTc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBBcHBseSBzcGVjaWFsIGZvcm1hdHRp
bmcgcnVsZXMgZm9yIG5ldyBHT2JqZWN0IHN1YmNsYXNzZXMuCisgICAgICAgICogZ3N0cmVhbWVy
L2poYnVpbGQubW9kdWxlczogQWRkZWQgYSBwYXRjaCBmb3IgdGhlIGdzdC1wbHVnaW5zLWJhc2Uu
CisgICAgICAgICogZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFzZS0wMDAxLXBhcnNl
YmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2g6Cisg
ICAgICAgIEFkZGVkIHRoaXMgZml4IHRvIGdzdC1wbHVnaW5ncy1iYXNlIHRvIGZpeCB0aGUgZGVj
b2RlYmluMy4gTWVyZ2VkIGFzIDg5ZDBlOWNjOTJhODZhYTAyMjdlZTg3NDA2NzM3YjZkMzE2NzBh
ZWEKKwogMjAxOC0wNi0wNyAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBbV2luXVtNaW5pQnJvd3Nlcl0gU3VwcG9ydCBtdWx0aXBsZSB3aW5kb3dz
IHByb3Blcmx5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggMzMz
ZGNlMjY1NjcuLmE1OTA4ZTYwMTZhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5CkBAIC0yMDcsNiArMjA3LDggQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAg
ICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGlj
cycsICdnc3RyZWFtZXInLCAnVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3Ry
ZWFtZXInLCAnV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5q
b2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdhdWRpbycsICdnc3RyZWFtZXIn
LCAnV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwJyksCisgICAgICBvcy5wYXRoLmpv
aW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJl
YW1lcicsICdHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oJyksCisgICAgICBvcy5wYXRoLmpv
aW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJl
YW1lcicsICdHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAnKSwKICAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbmV0d29yaycsICdzb3VwJywg
J1Byb3h5UmVzb2x2ZXJTb3VwLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V2ViQ29yZScsICdwbGF0Zm9ybScsICduZXR3b3JrJywgJ3NvdXAnLCAnUHJveHlSZXNvbHZlclNv
dXAuaCcpXSwKICAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nIiwKZGlmZiAtLWdpdCBhL1Rvb2xz
L2dzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1
bGVzCmluZGV4IDVhZWI3NTZlYzBhLi5jOTBhMGNiNDY4YyAxMDA2NDQKLS0tIGEvVG9vbHMvZ3N0
cmVhbWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1
bGVzCkBAIC01Nyw3ICs1Nyw5IEBACiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgIDxkZXAgcGFj
a2FnZT0iZ3N0cmVhbWVyIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgPGJyYW5jaCBoYXNo
PSJzaGE6MTAyNmM3YzMwODJkODI1ZDliNWQwMzRjMWE2ZGQ4YTRlYmFiNjBlYjM3MzhiMGEwYWZk
ZTRhZDJkYzBiMGRiNSIgbW9kdWxlPSJnc3QtcGx1Z2lucy1iYXNlL2dzdC1wbHVnaW5zLWJhc2Ut
JHt2ZXJzaW9ufS50YXIueHoiIHJlcG89ImdzdHJlYW1lciIgdmVyc2lvbj0iMS4xNC4xIiAvPgor
ICAgIDxicmFuY2ggaGFzaD0ic2hhOjEwMjZjN2MzMDgyZDgyNWQ5YjVkMDM0YzFhNmRkOGE0ZWJh
YjYwZWIzNzM4YjBhMGFmZGU0YWQyZGMwYjBkYjUiIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFzZS9n
c3QtcGx1Z2lucy1iYXNlLSR7dmVyc2lvbn0udGFyLnh6IiByZXBvPSJnc3RyZWFtZXIiIHZlcnNp
b249IjEuMTQuMSIgPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJhc2UtMDAwMS1w
YXJzZWJpbi1Qb3N0LVNUUkVBTV9DT0xMRUNUSU9OLW9uLUVWRU5UX1NUUkVBTV9DT0xMLnBhdGNo
IiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCBhcyA4OWQwZTljYzkyYTg2YWEwMjI3ZWU4NzQwNjcz
N2I2ZDMxNjcwYWVhIC0tPgorICAgIDwvYnJhbmNoPgogICA8L2F1dG90b29scz4KIAogICA8YXV0
b3Rvb2xzIGlkPSJnc3QtcGx1Z2lucy1nb29kIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiIGF1dG9n
ZW5hcmdzPSItLWRpc2FibGUtZXhhbXBsZXMgLS1kaXNhYmxlLWd0ay1kb2MgLS1kaXNhYmxlLWlu
dHJvc3BlY3Rpb24iPgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBs
dWdpbnMtYmFzZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04tb24tRVZFTlRf
U1RSRUFNX0NPTEwucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1i
YXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1fQ09MTEVDVElPTi1vbi1FVkVOVF9TVFJFQU1f
Q09MTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjgwYmMy
ZGI0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1
Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1fQ09MTEVDVElPTi1vbi1FVkVOVF9T
VFJFQU1fQ09MTC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDg5ZDBlOWNjOTJhODZhYTAy
MjdlZTg3NDA2NzM3YjZkMzE2NzBhZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBU
aGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorRGF0ZTogV2VkLCAxOCBBcHIg
MjAxOCAxNjowNjowNyAtMDMwMAorU3ViamVjdDogW1BBVENIXSBwYXJzZWJpbjogUG9zdCBTVFJF
QU1fQ09MTEVDVElPTiBvbiBFVkVOVF9TVFJFQU1fQ09MTEVDVElPTgorCitPdGhlcndpc2UgZGVj
b2RlYmluIHdvbid0IGdldCBub3RpZmllZCBhYm91dCBTVFJFQU1fQ09MTEVDVElPTiBjb21taW5n
Citmcm9tIHRoZSBzb3VyY2VzIGFuZCB0aHVzIHdpbGwgbmV2ZXIgZ2V0IGluZm9ybW9yZWQgYWJv
dXQgaXQuIFdpdGhvdXQKK2JlaW5nIGluZm9ybWVkIGFib3V0IHRoZSBzdHJlYW0gY29sbGVjdGlv
biBkZWNvZGViaW4gd29uJ3QgYmUgYWJsZSB0bworc2VsZWN0IGFueSBzdHJlYW1zLiBJdCBlbmRz
IHVwIG5vdCBjcmVhdGluZyBhbnkgb3V0cHV0IGZvciB0aGUgc3RyZWFtcworZGVmaW5lZCBmcm9t
IG91dHNpZGUgcGFyc2VyYmluLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzk1MzY0CistLS0KKyBnc3QvcGxheWJhY2svZ3N0cGFyc2ViaW4uYyB8IDMgKysr
CisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ3N0L3Bs
YXliYWNrL2dzdHBhcnNlYmluLmMgYi9nc3QvcGxheWJhY2svZ3N0cGFyc2ViaW4uYworaW5kZXgg
NGM1YmZjMTlkLi5mOTY2MmViNDkgMTAwNjQ0CistLS0gYS9nc3QvcGxheWJhY2svZ3N0cGFyc2Vi
aW4uYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHBhcnNlYmluLmMKK0BAIC00MDQ2LDYgKzQwNDYs
OSBAQCBnc3RfcGFyc2VfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAq
IGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKKyAgICAgICBHc3RTdHJlYW1Db2xsZWN0aW9uICpj
b2xsZWN0aW9uID0gTlVMTDsKKyAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rp
b24gKGV2ZW50LCAmY29sbGVjdGlvbik7CisgICAgICAgZ3N0X3BhcnNlX3BhZF91cGRhdGVfc3Ry
ZWFtX2NvbGxlY3Rpb24gKHBhcnNlcGFkLCBjb2xsZWN0aW9uKTsKKysgICAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChwYXJzZXBhZC0+cGFyc2ViaW4pLAorKyAgICAg
ICAgICBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24gKEdTVF9PQkpFQ1QgKHBhcnNl
cGFkLT5wYXJzZWJpbiksCisrICAgICAgICAgICAgICBjb2xsZWN0aW9uKSk7CisgICAgICAgYnJl
YWs7CisgICAgIH0KKyAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOnsKKy0tIAorMi4xNy4wCisKLS0g
CjIuMTcuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342187</attachid>
            <date>2018-06-07 10:45:32 -0700</date>
            <delta_ts>2018-06-07 11:31:54 -0700</delta_ts>
            <desc>Stop building MockRealtime** from 2 .cmake files.</desc>
            <filename>GTKWPE-Implement-MediaStream-API.patch</filename>
            <type>text/plain</type>
            <size>149990</size>
            <attacher name="Thibault Saunier">tsaunier</attacher>
            
              <data encoding="base64">RnJvbSBkNzg2MzRjYzg3NDhkYzY4Yzk0NDE5YmM5ZWQ0ZDFiMDQ0NzQ3YWE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQWxlamFuZHJvIEcuIENhc3RybyIgPGFsZXhAaWdhbGlhLmNv
bT4KRGF0ZTogVGh1LCAyNCBNYXkgMjAxOCAxMjo1NTowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
eHNlcnZlcl0gW0dUS11bV1BFXTogSW1wbGVtZW50IE1lZGlhU3RyZWFtIEFQSQoKaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTc4NwotLS0KIExheW91dFRlc3RzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyAgICAgfCAgMzMgKy0KIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICB8IDExNyArKysrCiBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZSAgICAgICAgICAgICAgfCAgIDIgKwogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlICAgICAgIHwgIDExICsKIC4uLi9wbGF0Zm9ybS9hdWRpby9B
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmggICB8ICAgMSArCiAuLi4vcGxhdGZvcm0vYXVkaW8vUGxh
dGZvcm1BdWRpb0RhdGEuaCAgICAgICAgfCAgIDEgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwICAgIHwgIDQ3ICsrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5oICAgICAgfCAgIDMgKwogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIHwgIDYzICsrLQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCAgIHwgICA3ICstCiAuLi4vTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHAgICAgICAgfCAgIDcgKwogLi4uL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAgIHwgICA4ICsKIC4uLi9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlLmggICAgICAgICB8ICAgMiArLQogLi4uL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwIHwgICA3IC0KIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmNwcCB8IDIwMiArKysrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICAgfCAgNjUgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuY3BwICAgICAgfCAgNzMgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuaCAgICAgICAgfCAgNDMgKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9EYXRh
LmggICAgICAgICAgICB8ICA1OSArKwogLi4uL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaCAgICAgICAgIHwgMTA1ICsrKysKIC4uLi9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURl
dmljZS5oICAgICAgICB8ICA1MCArKwogLi4uL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmNwcCAgICAgICAgIHwgMTM0ICsrKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmggfCAgODEgKysrCiAuLi4vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVy
LmNwcCAgICAgICAgICAgfCAxOTcgKysrKysrKwogLi4uL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlci5oIHwgIDcyICsrKwogLi4uL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5jcHAgIHwgNTMwICsrKysrKysrKysrKysrKysrKwogLi4uL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oICAgIHwgIDQ2ICsrCiAuLi4vZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgfCAyNzAgKysrKysrKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oICAgfCAgNjQgKysrCiAuLi4vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuY3BwICAgICAgfCAxMDQgKysrKwogLi4uL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmggICAgICAgIHwgIDQ2ICsrCiAuLi4vTW9j
a0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxMDYgKysrKwogLi4uL01v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCAgICAgICAgIHwgIDUxICsrCiAuLi4vTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgICAgICAgfCAxNDYgKysrKysKIC4uLi9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmggICAgICAgICB8ICA1NiArKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwICAgIHwgIDkxICsrKwogLi4uL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuaCAgICAgIHwgIDY4ICsrKwogLi4uL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIHwgICAyICstCiAuLi4vcGxh
dGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgfCAgIDIgKy0KIFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArCiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgICAgICAgfCAgIDIgKwogVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcyAgICAgICAgICAgICAgIHwgICA0ICstCiAuLi5SRUFNX0NPTExF
Q1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2ggfCAgMzMgKysKIDQ0IGZpbGVzIGNoYW5n
ZWQsIDI5OTEgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0YS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0
dXJlRGV2aWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1
cmVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTGliV2ViUlRDLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9nc3Ry
ZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1f
Q09MTEVDVElPTi1vbi1FVkVOVF9TVFJFQU1fQ09MTC5wYXRjaAoKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4MzJjZjZiODI1
ZC4uN2JjYmY0ZjZkNmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOC0wNS0xOCAgVGhpYmF1
bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBT
dGFydCBpbXBsZW1lbnRpbmcgTWVkaWFTdHJlYW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3ODcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OiBSZWFjdGl2YXRlIE1lZGlhU3RyZWFtIHRlc3RzIGFuZCBlbmFibGUgYWxsIHRlc3RzCisgICAg
ICAgIHJlbGF0ZWQgdG8gdGhlIG1lZGlhRGV2aWNlLmVudW1lcmF0ZURldmljZXMgYW5kIE1lZGlh
U3RyZWFtIChub3QgUlRDUGVlckNvbm5lY3Rpb24gbm9yCisgICAgICAgIHdlYmF1ZGlvKS4KKwog
MjAxOC0wNi0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
SFRUUCBIZWFkZXIgdmFsdWVzIHZhbGlkYXRpb24gaXMgdG9vIHN0cmljdApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhN2U2NzQ3N2QwMS4uNTk3NTIzNzBk
Y2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC01NzIs
NDAgKzU3MiwzMSBAQCB3ZWJraXQub3JnL2IvOTkwMzYgZmFzdC9zaGFkb3ctZG9tL3BvaW50ZXJs
b2NrZWxlbWVudC1pbi1zbG90Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi84NTIxMSBpZXRl
c3RjZW50ZXIvY3NzMy9mbGV4Ym94L2ZsZXhib3gtYWxpZ24tc3RyZXRjaC0wMDEuaHRtIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODUyMTIgaWV0ZXN0Y2VudGVyL2NzczMvZmxl
eGJveC9mbGV4Ym94LWxheW91dC0wMDIuaHRtIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKLSMgU2tp
cHBpbmcgdW50aWwgYmFja2VuZCBpcyBpbXBsZW1lbnRlZAotZmFzdC9tZWRpYXN0cmVhbSBbIFNr
aXAgXQogd2VicnRjIFsgU2tpcCBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy8gWyBTa2lwIF0KIGh0dHAvdGVzdHMvd2VicnRjIFsgU2tpcCBdCiAjIFRoZSBNZWRpYVN0
cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHN0aWxsIG5vdCBjb21wbGV0ZWQKIHdlYmtpdC5v
cmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21vY2stbWVkaWEtc291cmNlLXdlYmF1ZGlvLmh0
bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL2dldFVz
ZXJNZWRpYS13ZWJhdWRpby5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9tb2NrLW1lZGlhLXNvdXJjZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50LXRy
YWNrLXN0b3AuaHRtbCBbIFBhc3MgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC10cmFjay1zdG9wLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWR0bWYuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50Lmh0bWwgWyBGYWlsdXJl
IENyYXNoIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLW1lZGlhLXNldHVwLXR3by1kaWFsb2dzLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdl
YmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1J0cFNlbmRlci1yZXBsYWNlVHJh
Y2suaHRtbCBbIEZhaWx1cmUgXQogIyBDcmFzaCBpcyB3ZWJraXQub3JnL2IvMTg0MjkyCiB3ZWJr
aXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGRJY2VD
YW5kaWRhdGUuaHRtbCBbIEZhaWx1cmUgUGFzcyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1jbG9zZWQtc3RhdGUuaHRtbCBbIFRp
bWVvdXQgXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24taWNlLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZS1ldmVudC5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UtZXZlbnQuaHRtbCBbIEZhaWx1
cmUgVGltZW91dCBdCit3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pY2UuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzky
MDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LWFuc3dlci5odG1s
IFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWJ1bmRsZVBvbGljeS1idW5kbGUtb25seS5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIw
MyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxlZ2FjeS1zdHJlYW0tYmFzZWQt
YXBpLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0
bWwgWyBDcmFzaCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi83OTIwMyB3ZWJhdWRpby9tZWRpYXN0
cmVhbWF1ZGlvc291cmNlbm9kZS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50LWRpc3BsYXlzLWJ1ZmZl
ci5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW0tdmlkZW8tZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQtdGhlbi1lbmFibGVk
Lmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS12aWRlby1lbGVtZW50Lmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvNzkyMDMg
ZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hZHZhbmNlZC5odG1sIFsgQ3Jhc2gg
XQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8t
ZWxlbWVudC12aWRlby10cmFja3MtZGlzYWJsZWQtdGhlbi1lbmFibGVkLmh0bWwgWyBUaW1lb3V0
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0tdmlkZW8tZWxlbWVudC1kaXNwbGF5cy1idWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0
Lm9yZy9iLzc5MjAzIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtL2dldHVzZXJtZWRpYS13
aXRoLWNhbnZhcy5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzc5MjAzIGZhc3QvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXNldE9iamVjdC1udWxsLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXN0YXRzLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlh
c3RyZWFtL2NhcHR1cmVTdHJlYW0vY2FudmFzMmQtaGVhdnktZHJhd2luZy5odG1sIFsgVGltZW91
dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFzdC9tZWRpYXN0cmVhbS9nZXQtdXNlci1tZWRpYS1v
bi1sb2FkZWRtZXRhZGF0YS5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvNzkyMDMgZmFz
dC9tZWRpYXN0cmVhbS9sb2NhbC1hdWRpby1wbGF5aW5nLWV2ZW50Lmh0bWwgWyBUaW1lb3V0IF0K
LXdlYmtpdC5vcmcvYi83OTIwMyBmYXN0L21lZGlhc3RyZWFtL21lZGlhLXN0cmVhbS10cmFjay1z
b3VyY2UtZmFpbHVyZS5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzkyMDMgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0cmVh
bS1NZWRpYUVsZW1lbnQtcHJlbG9hZC1ub25lLmh0dHBzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi83OTIwMyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhY2FwdHVy
ZS1zdHJlYW1zL01lZGlhU3RyZWFtVHJhY2stZW5kLW1hbnVhbC5odHRwcy5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvMTUxMzQ0IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRk
LWVuZGVkLXRyYWNrcy5odG1sIFsgVGltZW91dCBdCkBAIC02MTYsNiArNjA3LDkgQEAgd2Via2l0
Lm9yZy9iLzE3MzI1NyBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ncmFudC1wZXJzaXN0
ZW5jeTMuaHRtbCBbIFBhc3MKIAogIyBDYW52YXMgY2FwdHVyZVN0cmVhbSBzdXBwb3J0IGlzIG5v
dCBpbXBsZW1lbnRlZAogd2Via2l0Lm9yZy9iLzE2OTgxMSBmYXN0L21lZGlhY2FwdHVyZWZyb21l
bGVtZW50IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTY5ODExIGZhc3QvbWVkaWFzdHJlYW0vY2Fw
dHVyZVN0cmVhbS8gWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0
cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtp
dC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczNkLmh0
bWwgWyBDcmFzaCBUaW1lb3V0IF0KIAogIyBSZXF1aXJlcyBSZXNvbHV0aW9uIE1lZGlhIFF1ZXJ5
IHN1cHBvcnQKIHdlYmtpdC5vcmcvYi8xMDAxMzcgZmFzdC9tZWRpYS9tcS1yZXNvbHV0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KQEAgLTEyNDEsMjUgKzEyMzUsMTggQEAgd2Via2l0Lm9yZy9iLzEzMTU0
NiBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwgWyBDcmFzaCBUaW1lb3V0IEZhaWx1cmUg
XQogCiB3ZWJraXQub3JnL2IvMTYzNzgyIG1lZGlhL3ZpZGVvLXBsYXllZC1yYW5nZXMtMS5odG1s
IFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9j
YXB0dXJlU3RyZWFtL2NhbnZhczJkLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KLXdlYmtpdC5vcmcv
Yi8xNjk4MTEgZmFzdC9tZWRpYXN0cmVhbS9jYXB0dXJlU3RyZWFtL2NhbnZhczNkLmh0bWwgWyBD
cmFzaCBUaW1lb3V0IF0KLQogd2Via2l0Lm9yZy9iLzE3MjI4MSBhY2Nlc3NpYmlsaXR5L2luc2Vy
dC1jaGlsZHJlbi1hc3NlcnQuaHRtbCBbIENyYXNoIF0KIAogd2Via2l0Lm9yZy9iLzE3Mjk1NSBt
ZWRpYS92aWRlby1wcmVsb2FkLmh0bWwgWyBDcmFzaCBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3
NTU3NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcmVhZHktc3RhdGVzL2F1dG9wbGF5LXdpdGgtc2xv
dy10ZXh0LXRyYWNrcy5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8xNzY4MDEg
ZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hdWRpby5odG1sIFsgQ3Jhc2ggXQog
d2Via2l0Lm9yZy9iLzE3NjgwMSBmYXN0L21lZGlhc3RyZWFtL2FyZ3VtZW50LXR5cGVzLmh0bWwg
WyBDcmFzaCBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE3NjgwMyBodHRwL3Rlc3RzL2xvY2FsL2Js
b2Ivc2VuZC1oeWJyaWQtYmxvYi11c2luZy1vcGVuLXBhbmVsLmh0bWwgWyBDcmFzaCBdCiAKLXdl
YmtpdC5vcmcvYi8xNzY4NTYgZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy12aWRl
by5odG1sIFsgQ3Jhc2ggXQotCiAjIFNlZSBhbHNvIHdlYmtpdC5vcmcvYi8xNDE2OTkKIHdlYmtp
dC5vcmcvYi8xNzc1MzQgZmFzdC9hdHRhY2htZW50L2F0dGFjaG1lbnQtcmVzcGVjdHMtY3NzLXNp
emUuaHRtbCBbIENyYXNoIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE3NzUzNSBm
YXN0L21lZGlhc3RyZWFtL21lZGlhLWRldmljZS1pbmZvLmh0bWwgWyBDcmFzaCBQYXNzIF0KICMg
U2VlIGFsc28gd2Via2l0Lm9yZy9iLzE2MzUyOCBUaHJlYWRlZCBjb21wb3NpdG9yIGZhaWx1cmVz
IGNhdXNlZCBieSBvbmUgb2YgcjIwMzQ5NiwgcjIwMzQ5Nywgb3IgcjIwMzQ5OAogd2Via2l0Lm9y
Zy9iLzE3NzUzNiBtZWRpYS92aWRlby1vYmplY3QtZml0Lmh0bWwgWyBDcmFzaCBJbWFnZU9ubHlG
YWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI5Mjk4NTYxN2UxLi4xNjk2ZDM0NGJmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxOC0wNS0zMCAgVGhpYmF1bHQgU2F1bmllciAgPHRz
YXVuaWVyQGlnYWxpYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gU3RhcnQgaW1wbGVtZW50aW5nIE1lZGlhU3RyZWFt
IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1
Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
YXJlIGFkZGluZyBhbGwgdGhlIHJlcXVpcmVkIGNsYXNzZXMgdG8gbWFrZSB0aGUKKyAgICAgICAg
TWVkaWFTdHJlYW0gQVBJIHdvcmssIHRoYXQgbWVhbnMgb3VyIG93biBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTGliV2ViUlRDCisgICAgICAgIGZvciB0aGUgcGxhdGZvcm0sIHRoZSBHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlTWFuYWdlciwgdGhlIGF1ZGlvL3ZpZGVvIGNhcHR1cmVycworICAgICAg
ICBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBhdWRpby92aWRlbyBzb3VyY2VzIGFzIHdlbGwgYXMgYSBk
ZWRpY2F0ZWQgR1N0cmVhbWVyIFNvdXJjZQorICAgICAgICB0aGF0IGFkZHMgc3VwcG9ydCBmb3Ig
dXNpbmcgTWVkaWFTdHJlYW0gc3RyZWFtIGluc2lkZSBwbGF5YmluMy4KKyAgICAgICAgV2UgYXJl
IHVzaW5nIHRoZSBHc3REZXZpY2VNb25pdG9yIHRvIGxpc3QgZGV2aWNlcyBvbiB0aGUgZGV2aWNl
cy4KKworICAgICAgICBFbmFibGUgbWVkaWFzdHJlYW0gdGVzdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2U6IEFkZGVkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIGNvbXBpbGF0
aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDog
QWRkZWQgbmV3IEdTdHJlYW1lciB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1BsYXRm
b3JtQXVkaW9EYXRhLmg6IEFkZGVkIG5ldyBHU3RyZWFtZXIgdHlwZSBmb3IKKyAgICAgICAgdGhl
IEdTdHJlYW1lckF1ZGlvRGF0YSBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpbXBsZUJ1
c01lc3NhZ2VDYWxsYmFjayk6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBuZXh0CisgICAgICAgIG9u
ZSBoZWxwIHVzIHRvIGNvbm5lY3QgYSBtb25pdG9yaW5nIGNhbGxiYWNrIHRvIGEgcGlwZWxpbmUg
Zm9yCisgICAgICAgIGRlYnVnZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3RTaW1wbGVC
dXNNZXNzYWdlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmg6IERpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQpOiBNYWtlIHVzZSBv
ZiB0aGUgbG9hZEZ1bGwoKSBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKTogVmVyeSBzaW1pbGFyIHRvIGxvYWQoKQorICAgICAg
ICBidXQgYWxsb3dzIHNwZWNpZnlpbmcgd2hhdCBwaXBlbGluZSB0eXBlIHRvIHVzZSAobnVsbCB0
byBsZXQgdGhlIGZ1bmN0aW9uIGRldGVybWluZQorICAgICAgICB3aGljaCBvbmUgc2hvdWxkIGJl
IHVzZWQpLiBUaGlzIGlzIHJlcXVpcmVkIGFzIHdlIGZvcmNlIHRvIGFsd2F5cyB1c2UgcGxheWJp
bjMgZm9yIHRoZQorICAgICAgICBtZWRpYXN0cmVhbSBzb3VyY2UgYXMgaXQgcmVsaWVzIG9uIHRo
ZSBHc3RTdHJlYW0gQVBJLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uIGNvbnN0KTogU3R5bGUgZml4LgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSBjb25zdCk6IEFk
ZGVkLCB1c2UgTWVkaWFTdHJlYW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFj
a3MpOiBTb21lIHN0eWxlIGZpeGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogRW5oYW5jZSBkb3RmaWxlcyBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxl
T2ZDb250ZW50c0VudHJ5KTogTWlub3IgZm9ybWF0dGluZyBmaXguCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKTogU2V0IE1lZGlhU3Ry
ZWFtIG9uIFdlYktpdE1lZGlhU3RyZWFtU291cmNlIHdoZW4gc2V0dGluZyBpdCB1cC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKTog
QWR2ZXJ0aXNlIHRoYXQgd2Ugc3VwcG9ydCBNZWRpYVN0cmVhbSBpZiBzdXBwb3J0IGlzIGJ1aWx0
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVH
U1RQbGF5QmluKTogTWFrZSBzdXJlIHBsYXliaW4zIGlzIGZvcmNlZCB3aGVuIGxvYWRpbmcgYSBN
ZWRpYVN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgTWVkaWFTdHJl
YW0gb2JqZWN0IGFuZCBkZWNsYXJlIGxvYWRGdWxsIGFuZCBuYXR1cmFsU2l6ZSBvdmVycmlkZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlcldlYktpdEdTdHJl
YW1lckVsZW1lbnRzKTogUmVnaXN0ZXIgdGhlIG5ldyBNZWRpYVN0cmVhbVNyYyBlbGVtZW50Lgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOiBNYWtlIHN1cmUgdGhhdCBNZWRpYVN0cmVh
bSBNQUlOIHRyYWNrcyBhcmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4gV2UgaGF2ZSBubyB3YXkgdG8g
ZG8gaXQgaW4gTWVkaWFTdHJlYW1TcmMgbm93IGFzIHRoZSBHc3RTdHJlYW1Db2xsZWN0aW9uIGlz
IHJlY3JlYXRlZCBieSBwYXJzZWJpbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlLmg6IE1ha2UgQ2FwdHVyZUZhaWxlZCBhIHZpcnR1YWwgbWV0aG9k
IGFzIGluIG91ciBtb2NrcyB3ZSByZXF1aXJlIG5lZWQgdG8gbWFrZQorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKTogUmVtb3ZlIHRo
ZSBjb2RlCisgICAgICAgIHVzZWQgZm9yIGNvbXBpbGF0aW9uIGZvciB0aGUgcGxhdGZvcm0gd2hl
biB3ZSBkbyBub3QgaGF2ZSBhCisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJX
ZWJSVEMuIE5vdyB3ZSByZXR1cm4gdGhlIHByb3BlciBjbGFzcworICAgICAgICBmb3IgdGhlIHBs
YXRmb3JtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICBBZGRlZCBjbGFzcyByZXByZXNlbnRp
bmcgdGhlIFJlYWx0aW1lTWVkaWFTb3VyY2UgZm9yIHRoZSBBdWRpbworICAgICAgICB3aXRoIEdT
dHJlYW1lci4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlLmg6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcDogQWRk
ZWQKKyAgICAgICAgdGhpcyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIEdTdHJlYW1lciBwaXBl
bGluZSB0aGF0IGNhcHR1cmVzCisgICAgICAgIGF1ZGlvIGZyb20gdGhlIHN5c3RlbSBkZXZpY2Vz
LCBpdCBpbmhlcml0cyBmcm9tIEdTdHJlYW1lckNhcHR1cmVyLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmg6IERpdG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvRGF0
YS5oOiBBZGRlZCB0aGlzCisgICAgICAgIGNsYXNzIGltcGxlbWVudGluZyBQbGF0Zm9ybUF1ZGlv
RGF0YSBmb3IgdGhlIEdTdHJlYW1lciBwbGF0Zm9ybSwKKyAgICAgICAgdXNlZCB0byBwYXNzIHRo
ZSBzYW1wbGVzIGluZm9ybWF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIEFkZGVk
IHRoaXMgY2xhc3MgaW1wbGVtZW50aW5nIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG8gZXhwb3J0
IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXVkaW8gc3RyZWFtIHRvIGxpYndl
YnJ0Yy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZURldmljZS5oOiBBZGRlZAorICAgICAgICB0aGlzIGJhc2UgY2xhc3MgZm9yIHRoZSBh
dWRpbyBhbmQgdmlkZW8gY2FwdHVyaW5nIGRldmljZXMsIGl0CisgICAgICAgIGltcGxlbWVudHMg
Z2VuZXJhbCBXZWJLaXQgQ2FwdHVyZURldmljZSBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwOgor
ICAgICAgICBBZGRlZCB0aGlzIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc3lzdGVtIG1vbml0
b3IgdG8gZ2V0IHRoZQorICAgICAgICBsaXN0IG9mIGF2YWlsYWJsZSBkZXZpY2VzIGluIHRoZSBz
eXN0ZW0uIEl0IHVzZXMgR3N0RGV2aWNlTW9uaXRvcgorICAgICAgICB0byBoYW5kbGUgdGhlIG9w
ZXJhdGlvbi4gSXQgdXNlcyB0d28gc2luZ2xldG9uIGRldmljZSBtYW5hZ2VycyBvbmUKKyAgICAg
ICAgZm9yIGF1ZGlvIGFuZCBhbm90aGVyIG9uZSBmb3IgdmlkZW8sIGFzIHJlcXVpcmVkIGJ5IHRo
ZQorICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIGRlc2lnbi4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFn
ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVyLmNwcDogQWRkZWQgdGhpcworICAgICAgICBiYXNlIGNsYXNzIHJlcHJl
c2VudGluZyBob3cgR1N0cmVhbWVyIGNhcHR1cmVzIHRoZSBtZWRpYSBmcm9tIHRoZQorICAgICAg
ICBpbnB1dCBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uIFR3byBjbGFzc2VzIGluaGVyaXQgZnJvbSB0
aGlzIG9uZSB0bworICAgICAgICBjYXB0dXJlIGF1ZGlvIGFuZCB2aWRlby4gSXQgc2V0dXBzIHRo
ZSBHU3RyZWFtZXIgcGlwZWxpbmUgYW5kIGFkZHMKKyAgICAgICAgZnVuY3Rpb25zIHRvIGNvbnRy
b2wgaXQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckNhcHR1cmVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICBJbXBs
ZW1lbnRzIGEgc3ViY2xhc3Mgb2YgR3N0QmluIGFzIGEgc291cmNlIGVsZW1lbnQgdGhhdCB3aWxs
IGNvbnRhaW4gc2V2ZXJhbAorICAgICAgICBHc3RBcHBTcmMsIGJhc2ljYWxseSBvbmUgcGVyIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9mIHRoZSBNZWRpYVN0cmVhbVByaXZhdGUKKyAgICAgICAg
cGFzc2VkIGluIHBhcmFtZXRlci4gSXQgYWRkcyBPYnNlcnZlcnMgb24gdGhlIE1lZGlhU3RyZWFt
VHJhY2tzIGFuZAorICAgICAgICBwdXNoZXMgdGhlIGRhdGEgdG8gdGhlIHNvdXJjZXMgYXMgcmVx
dWlyZWQuIFRoZSBlbGVtZW50IGltcGxlbWVudHMgdGhlIEdzdFVSSUhhbmRsZXIKKyAgICAgICAg
aW50ZXJmYWNlIHNvIGl0IGNhbiBiZSB1c2VkIGluIHBsYXliaW4uIFRoZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIgaXMgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHBhc3NpbmcgdGhlIE1l
ZGlhU3RyZWFtUHJpdmF0ZSBvYmplY3QgdG8gdGhlIHNvdXJjZSB3aGVuIHJlcXVpcmVkLgorICAg
ICAgICAoV2ViQ29yZTo6d2Via2l0TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKTogRXZlbnQgcHJv
YmUgdGhhdCBmaXhlcyBzdHJlYW1fc3RhcnQgZXZlbnRzIChzZXR0aW5nIHRoZSBJRCBldGMpCisg
ICAgICAgIGFuZCBmaW5hbGx5IGFkZCBzcmMgcGFkcyB0byB0aGUgcGlwZWxpbmUuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICBBZGRlZCB0aGlzIFJlYWx0
aW1lTWVkaWFTb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICAgIHZp
ZGVvIGRhdGEgZm9yIHRoZSBHU3RyZWFtZXIgcGxhdGZvcm0uIEl0IGhhbmRsZXMgdGhlIHNldHRp
bmdzIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2YgdGhlIHNvdXJjZSBhbmQgY3JlYXRlcyB0
aGUgY2FwdHVyZXIgdXNlZCB0bworICAgICAgICBjb250cm9sIHRoZSBvcGVyYXRpb24gb2YgdGhl
IHN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcDogQWRkZWQKKyAgICAg
ICAgdGhpcyBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gdGhlIEdTdHJlYW1lckNhcHR1cmVyIGFu
ZCBjb250cm9scworICAgICAgICB0aGUgR1N0cmVhbWVyIHBpcGVsaW5lcyBvZiB0aGUgdmlkZW8g
c3RyZWFtcyBvZiB0aGUgc3lzdGVtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNl
LmNwcDogQWRkZWQuIEltcGxlbWVudGF0aW9uIG9mIGEgTW9jayBjYXB0dXJlciBmb3IgYXVkaW8g
c3RyZWFtLgorICAgICAgICBTdWJjbGFzc2VzIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIgYW5kIHdy
YXBzIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2Ugc28gdGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRo
ZSBzYW1lIGEgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UKKyAgICAgICAgYnV0IHN0aWxsIHRoZSBH
U3RyZWFtZXIgaW1wbGVtZW50YXRpb24gY29kZSBwYXRocyBhcmUgdGVzdGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJl
U291cmNlLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcDogQWRkZWQuIEltcGxlbWVudGF0
aW9uIG9mIGEgTW9jayBjYXB0dXJlciBmb3IgdmlkZW8gc3RyZWFtLgorICAgICAgICBTdWJjbGFz
c2VzIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXIgYW5kIHdyYXBzIGEgTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2Ugc28gdGhhdCB0aGUgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIGEgTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UKKyAgICAgICAgYnV0IHN0aWxsIHRoZSBHU3RyZWFtZXIgaW1wbGVtZW50YXRpb24g
Y29kZSBwYXRocyBhcmUgdGVzdGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmg6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDLmNwcDoKKyAgICAgICAgQWRkZWQgdGhpcyBjbGFzcyB0aGF0IGltcGxlbWVu
dHMgdGhlIGtleSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyCisgICAgICAgIGZ1bmN0aW9ucyB0
byBjb25maWd1cmUgdGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBwbGF0Zm9ybSwgdXNpbmcgdGhlCisg
ICAgICAgIG90aGVyIEdTdHJlYW1lciBjbGFzc2VzLgorICAgICAgICAqIHBsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwOiBEbyBub3QgYnVpbGQgOjpjcmVhdGUgaWYgR1N0
cmVhbWVyIGltcGxlbWVudGF0aW9uIGlzIGJ1aWx0CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6IERvIG5vdCBidWlsZCA6OmNyZWF0ZSBpZiBHU3Ry
ZWFtZXIgaW1wbGVtZW50YXRpb24gaXMgYnVpbHQKKwogMjAxOC0wNi0wNyAgVGhpYmF1bHQgU2F1
bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gRml4IHRo
ZSB3YXkgR3N0U3RyZWFtQ29sbGVjdGlvbiBpcyBoYW5kbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDgyM2M3N2RkYjIxLi5jMmQ0Y2FlMGY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTI0LDEyICsyNCwxNCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrIgogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2dseCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL3gxMSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3RrIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvZ3RrIgogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggM2Q1YTZlMDAyNWEuLjUwYjJkMjA3YzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0zMyw2ICszMywxNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvUGxheWJhY2tQaXBlbGluZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAor
CisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCisgICAgICAgIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKyAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCisgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAKICAgICApCiAKICAgICBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKaW5kZXggZTQ0
MGRjOTBhM2UuLjJiYTU4NWM5YzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCkBAIC0zNSw2ICszNSw3IEBAIHN0
cnVjdCBQbGF0Zm9ybURlc2NyaXB0aW9uIHsKICAgICBlbnVtIHsKICAgICAgICAgTm9uZSwKICAg
ICAgICAgQ0FBdWRpb1N0cmVhbUJhc2ljVHlwZSwKKyAgICAgICAgR1N0cmVhbWVyQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbiwKICAgICB9IHR5cGU7CiAgICAgVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwg
Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4gZGVzY3JpcHRpb247CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUGxhdGZvcm1BdWRpb0RhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmgKaW5k
ZXggZTQ1NDRmNjMyNTQuLmNkYTcyZThhYjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9QbGF0Zm9ybUF1ZGlvRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL1BsYXRmb3JtQXVkaW9EYXRhLmgKQEAgLTM0LDYgKzM0LDcgQEAgcHVibGlj
OgogICAgIGVudW0gY2xhc3MgS2luZCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIFdlYkF1ZGlv
QnVmZmVyTGlzdCwKKyAgICAgICAgR1N0cmVhbWVyQXVkaW9EYXRhLAogICAgIH07CiAKICAgICB2
aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIEtpbmQ6Ok5vbmU7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5jcHAKaW5kZXggZTUxNGZlMzQyOGQuLmQ1NDc1Yjc0Y2RkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPG11dGV4
PgogI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5
Lmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQog
I2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQpAQCAtMzIwLDYgKzMyMSw1MiBAQCBib29sIGdz
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
IH0KK30KKwordm9pZCBkaXNjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1l
bnQgKnBpcGVsaW5lKQoreworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0
X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKHBpcGVsaW5lKSkpOworICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhidXMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Z3BvaW50ZXI+KHNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayksIHBpcGVsaW5lKTsKK30KKwordm9p
ZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKQor
eworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9i
dXMoR1NUX1BJUEVMSU5FKHBpcGVsaW5lKSkpOworICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRj
aF9mdWxsKGJ1cy5nZXQoKSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpSdW5Mb29wRGlzcGF0Y2hl
cik7CisgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxMQkFD
SyhzaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2spLCBwaXBlbGluZSk7Cit9CisKIH0KIAogI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKaW5kZXggMjU5MjU1ZTc0
MWUuLmNiYjQ5MzIzYTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBAIC04Miw2ICs4Miw5
IEBAIGlubGluZSBHc3RDbG9ja1RpbWUgdG9Hc3RDbG9ja1RpbWUoY29uc3QgTWVkaWFUaW1lICZt
ZWRpYVRpbWUpCiB9CiAKIGJvb2wgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdM
aXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nKTsKK3ZvaWQgY29u
bmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBlbGluZSk7Cit2b2lk
IGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCAqcGlwZWxpbmUp
OworCiB9CiAKICNpZm5kZWYgR1NUX0JVRkZFUl9EVFNfT1JfUFRTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDdkODQ3ZjE4ZDc2Li4wZWM0
YjEzZjg5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKQEAgLTUxLDYgKzUxLDEwIEBACiAjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJj
ZVByaW9yaXR5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisjaW5jbHVkZSAi
R1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQogI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVk
ZSAiSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCkBAIC0yMzcsNiAr
MjQxLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQbGF5YmluVVJM
KGNvbnN0IFVSTCYgdXJsKQogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBsb2FkRnVsbCh1cmxTdHJpbmcs
IG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZEZ1
bGwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IGdjaGFyICpwbGF5YmluTmFtZSkKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgc3RpbGwgY2FsbGVkIGV2ZW4gaWYgc3VwcG9y
dHNUeXBlKCkgcmV0dXJuZWQKICAgICAvLyBJc05vdFN1cHBvcnRlZC4gVGhpcyB3b3VsZCBkZXNl
cnZlIG1vcmUgaW52ZXN0aWdhdGlvbiBidXQgbWVhbndoaWxlIG1ha2UKQEAgLTI1NCw3ICsyNjMs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3BpcGVsaW5lKQotICAg
ICAgICBjcmVhdGVHU1RQbGF5QmluKGlzTWVkaWFTb3VyY2UoKSA/ICJwbGF5YmluIiA6IG51bGxw
dHIpOworICAgICAgICBjcmVhdGVHU1RQbGF5QmluKGlzTWVkaWFTb3VyY2UoKSA/ICJwbGF5Ymlu
IiA6IHBsYXliaW5OYW1lKTsKIAogICAgIGlmIChtX2ZpbGxUaW1lci5pc0FjdGl2ZSgpKQogICAg
ICAgICBtX2ZpbGxUaW1lci5zdG9wKCk7CkBAIC0yOTIsMTIgKzMwMSwxOSBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJikKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSYg
c3RyZWFtKQogeworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQorICAgIG1fc3RyZWFt
UHJpdmF0ZSA9ICZzdHJlYW07CisgICAgbG9hZEZ1bGwoU3RyaW5nKCJtZWRpYXN0cmVhbTovLyIp
ICsgc3RyZWFtLmlkKCksICJwbGF5YmluMyIpOworICAgIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4
dCgpOworICAgIG1fcGxheWVyLT5wbGF5KCk7CisjZWxzZQogICAgIC8vIFByb3Blcmx5IGZhaWwg
c28gdGhlIGdsb2JhbCBNZWRpYVBsYXllciB0cmllcyB0byBmYWxsYmFjayB0byB0aGUgbmV4dCBN
ZWRpYVBsYXllclByaXZhdGUuCiAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9y
bWF0RXJyb3I7CiAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMzMwLDcgKzM0Niw3IEBAIE1l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24oKSBj
b25zdAogCiAgICAgLy8gUG9zaXRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgbm8gYXN5bmMgc3Rh
dGUgY2hhbmdlIGlzIGdvaW5nIG9uIGFuZCB0aGUgc3RhdGUgaXMgZWl0aGVyIHBhdXNlZCBvciBw
bGF5aW5nLgogICAgIGdpbnQ2NCBwb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAg
R3N0UXVlcnkqIHF1ZXJ5PSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7
CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFU
X1RJTUUpOwogICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVy
eSkpCiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9u
KTsKICAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwpAQCAtNjQ4LDYgKzY2NCwyNSBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJUcmFja3MoKQogICAgICAgICAgICAg
bV9jdXJyZW50IyNUeXBlIyNTdHJlYW1JZCA9IFN0cmluZyhnc3Rfc3RyZWFtX2dldF9zdHJlYW1f
aWQoc3RyZWFtLmdldCgpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0KKworRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNp
emUoKSBjb25zdAoreworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgaWYgKCFtX2lzTGVn
YWN5UGxheWJpbiAmJiAhbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2aWRlb1RyYWNrID0gbV92aWRl
b1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7CisKKyAgICAgICAgaWYgKHZpZGVv
VHJhY2spIHsKKyAgICAgICAgICAgIGF1dG8gdGFncyA9IGdzdF9zdHJlYW1fZ2V0X3RhZ3Modmlk
ZW9UcmFjay0+c3RyZWFtKCkpOworICAgICAgICAgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworCisg
ICAgICAgICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9pbnQodGFncywgV0VCS0lUX01FRElBX1RS
QUNLX1RBR19XSURUSCwgJndpZHRoKSAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLCBXRUJL
SVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdIVCwgJmhlaWdodCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6Om5hdHVyYWxTaXplKCk7Cit9CiAjZWxzZQogI2RlZmluZSBDUkVBVEVfVFJB
Q0sodHlwZSwgX2lkLCB0cmFja3MsIG1ldGhvZCwgc3RyZWFtKSBtX2hhcyMjVHlwZSMjID0gdHJ1
ZTsKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC0xMTY1LDcgKzEyMDAsOCBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdl
KiBtZXNzYWdlKQogICAgICAgICAvLyBDb25zdHJ1Y3QgYSBmaWxlbmFtZSBmb3IgdGhlIGdyYXBo
dml6IGRvdCBmaWxlIG91dHB1dC4KICAgICAgICAgR3N0U3RhdGUgbmV3U3RhdGU7CiAgICAgICAg
IGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQobWVzc2FnZSwgJmN1cnJlbnRTdGF0ZSwg
Jm5ld1N0YXRlLCBudWxscHRyKTsKLSAgICAgICAgQ1N0cmluZyBkb3RGaWxlTmFtZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJ3ZWJraXQtdmlkZW8uJXNfJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFt
ZShjdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpLnV0
ZjgoKTsKKyAgICAgICAgQ1N0cmluZyBkb3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCIlcy4l
c18lcyIsIEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwKKyAgICAgICAgICAgIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKG5ld1N0YXRlKSkudXRmOCgpOwogICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RP
VF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBI
X1NIT1dfQUxMLCBkb3RGaWxlTmFtZS5kYXRhKCkpOwogCiAgICAgICAgIGJyZWFrOwpAQCAtMTQz
MSw3ICsxNDY3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NU
YWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkKIAogICAgIEdzdFRhZ0xpc3Qq
IHRhZ3MgPSBnc3RfdG9jX2VudHJ5X2dldF90YWdzKGVudHJ5KTsKICAgICBpZiAodGFncykgewot
ICAgICAgICBnY2hhciogdGl0bGUgPSAgbnVsbHB0cjsKKyAgICAgICAgZ2NoYXIqIHRpdGxlID0g
bnVsbHB0cjsKICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcodGFncywgR1NUX1RBR19U
SVRMRSwgJnRpdGxlKTsKICAgICAgICAgaWYgKHRpdGxlKSB7CiAgICAgICAgICAgICBjdWUtPnNl
dENvbnRlbnQodGl0bGUpOwpAQCAtMTcyNiw2ICsxNzYyLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cChHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQog
ICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKICAgICAgICAgd2Vi
S2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV0VCS0lUX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpLCBt
X3BsYXllcik7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1NUX0VMRU1FTlRfUEFSRU5UKG1f
c291cmNlLmdldCgpKSwgImVsZW1lbnQtYWRkZWQiLCBHX0NBTExCQUNLKHVyaURlY29kZUJpbkVs
ZW1lbnRBZGRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
R1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisgICAgfSBlbHNlIGlmIChXRUJLSVRfSVNfTUVE
SUFfU1RSRUFNX1NSQyhzb3VyY2VFbGVtZW50KSkgeworICAgICAgICBhdXRvIHN0cmVhbSA9IG1f
c3RyZWFtUHJpdmF0ZS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKHN0cmVhbSk7CisgICAgICAgIHdl
YmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFtKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKHNvdXJj
ZUVsZW1lbnQpLCBzdHJlYW0pOworI2VuZGlmCiAgICAgfQogfQogCkBAIC0yMjY5LDggKzIzMTEs
MTAgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUUKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICNl
bmRpZgogCisjaWYgIUVOQUJMRShNRURJQV9TVFJFQU0pIHx8ICFHU1RfQ0hFQ0tfVkVSU0lPTigx
LCAxMCwgMCkKICAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU3RyZWFtKQogICAgICAgICByZXR1
cm4gcmVzdWx0OworI2VuZGlmCiAKICAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI0MzMsMTcgKzI0NzcsMjAgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgZ2NoYXIqIHBs
YXliaW5OYW1lKQogICAgIEFTU0VSVCghbV9waXBlbGluZSk7CiAKICNpZiBHU1RfQ0hFQ0tfVkVS
U0lPTigxLCAxMCwgMCkKLSAgICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX2dldGVudigiVVNFX1BM
QVlCSU4zIik7Ci0gICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbikKKyAgICBpZiAoZ19nZXRlbnYo
IlVTRV9QTEFZQklOMyIpKQogICAgICAgICBwbGF5YmluTmFtZSA9ICJwbGF5YmluMyI7CisjZWxz
ZQorICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4iOwogI2VuZGlmCiAKICAgICBpZiAoIXBsYXli
aW5OYW1lKQogICAgICAgICBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKIAorICAgIG1faXNMZWdh
Y3lQbGF5YmluID0gIWdfc3RyY21wMChwbGF5YmluTmFtZSwgInBsYXliaW4iKTsKKwogICAgIC8v
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgpIHJldHVybnMgYSBmbG9hdGluZyByZWZlcmVuY2Ug
c28KICAgICAvLyB3ZSBzaG91bGQgbm90IGFkb3B0LgotICAgIHNldFBpcGVsaW5lKGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZShwbGF5YmluTmFtZSwgInBsYXkiKSk7CisgICAgc2V0UGlwZWxpbmUo
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKHBsYXliaW5OYW1lLCBTdHJpbmc6OmZvcm1hdCgicGxh
eV8lcCIsIHRoaXMpLnV0ZjgoKS5kYXRhKCkpKTsKICAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50
KEdTVF9TVFJFQU1fVk9MVU1FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKIAogICAgIEdTVF9JTkZPKCJV
c2luZyBsZWdhY3kgcGxheWJpbiBlbGVtZW50OiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzTGVn
YWN5UGxheWJpbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oCmluZGV4IDFhZTRhNTRiYWUwLi5iMmVlNWU2OTViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTc5LDYgKzE3OSw3IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIHZvaWQgZG93bmxvYWRCdWZmZXJGaWxlQ3JlYXRlZENhbGxiYWNrKE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwogCiAgICAgdm9pZCBzZXRQbGF5YmluVVJMKGNvbnN0
IFVSTCYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGxvYWRGdWxsKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBnY2hhciAqcGxheWJpbk5hbWUpOwogCiAjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAs
IDApCiAgICAgdm9pZCB1cGRhdGVUcmFja3MoKTsKQEAgLTI2Miw3ICsyNjMsMTEgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNMZWdhY3lQbGF5YmluOwogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEs
IDEwLCAwKQogICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gbV9zdHJlYW1Db2xsZWN0
aW9uOwotI2VuZGlmCisgICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Cisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBt
X3N0cmVhbVByaXZhdGU7CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNlbmRpZiAv
LyBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKICAgICBTdHJpbmcgbV9jdXJyZW50QXVkaW9T
dHJlYW1JZDsKICAgICBTdHJpbmcgbV9jdXJyZW50VmlkZW9TdHJlYW1JZDsKICAgICBTdHJpbmcg
bV9jdXJyZW50VGV4dFN0cmVhbUlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IDJlYjQ0MWQyNzUzLi42MjdjNGIyYTI3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
LmNwcApAQCAtODEsNiArODEsMTAgQEAKICNlbmRpZiAvLyAhR1NUX0NIRUNLX1ZFUlNJT04oMSwg
MTQsIDApCiAjZW5kaWYgLy8gVVNFKExJQkVQT1hZKQogCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVk
aWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgorCiAjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJ
CiAjaW5jbHVkZSA8Z3N0L2dsL2dsLmg+CiAjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKQEAg
LTE0Myw2ICsxNDcsOSBAQCB2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKQog
ICAgIGlmICghY2xlYXJLZXlEZWNyeXB0b3JGYWN0b3J5KQogICAgICAgICBnc3RfZWxlbWVudF9y
ZWdpc3RlcihudWxscHRyLCAid2Via2l0Y2xlYXJrZXkiLCBHU1RfUkFOS19QUklNQVJZICsgMTAw
LCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBUKTsKICNlbmRpZgorI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIEdTVF9DSEVDS19WRVJTSU9OKDEsMTAsMCkKKyAgICBnc3RfZWxlbWVudF9y
ZWdpc3RlcihudWxscHRyLCAibWVkaWFzdHJlYW1zcmMiLCBHU1RfUkFOS19QUklNQVJZLCBXRUJL
SVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDKTsKKyNlbmRpZgogfQogCiBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktp
dEVsZW1lbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIu
Y3BwCmluZGV4IGM1NDIwMGVhZTgxLi40ZDk5Nzg2ZTAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC00OCw2ICs0OCwxNCBAQCBWaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxN
ZWRpYVBsYXllclByaXZhdAogICAgIDogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcih0aGlzLCBp
bmRleCwgc3RyZWFtKQogICAgICwgbV9wbGF5ZXIocGxheWVyKQogeworICAgIGdpbnQga2luZDsK
KyAgICBhdXRvIHRhZ3MgPSBnc3Rfc3RyZWFtX2dldF90YWdzKG1fc3RyZWFtLmdldCgpKTsKKwor
ICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLCAid2Via2l0LW1lZGlhLXN0cmVhbS1r
aW5kIiwgJmtpbmQpICYmIGtpbmQgPT0gc3RhdGljX2Nhc3Q8aW50PihWaWRlb1RyYWNrUHJpdmF0
ZTo6S2luZDo6TWFpbikpIHsKKyAgICAgICAgR3N0U3RyZWFtRmxhZ3Mgc3RyZWFtRmxhZ3MgPSBn
c3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKTsKKyAgICAgICAgZ3N0X3N0
cmVhbV9zZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0U3RyZWFt
RmxhZ3M+KHN0cmVhbUZsYWdzIHwgR1NUX1NUUkVBTV9GTEFHX1NFTEVDVCkpOworICAgIH0KKwog
ICAgIG1faWQgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKTsKICAgICBz
ZXRBY3RpdmUoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSkgJiBHU1Rf
U1RSRUFNX0ZMQUdfU0VMRUNUKTsKICAgICBub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVN
ZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZS5oCmluZGV4IDliNDUxMjA1ZTViLi41NDExMDg1YzRhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2UuaApAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBtb25pdG9yT3JpZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmllciYpIHsgfQogCi0gICAgdm9p
ZCBjYXB0dXJlRmFpbGVkKCk7CisgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVGYWlsZWQoKTsKIAog
ICAgIC8vIFRlc3Rpbmcgb25seQogICAgIHZpcnR1YWwgdm9pZCBkZWxheVNhbXBsZXMoU2Vjb25k
cykgeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAppbmRleCAyZWZiODJkMWU1
OC4uMzg4NmZmODc1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCkBAIC02
NCwxNCArNjQsNyBAQCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyJiBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyOjpzaW5nbGV0b24oKQogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIqIG92
ZXJyaWRlID0gbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpOwogICAgIGlmIChvdmVycmlkZSkK
ICAgICAgICAgcmV0dXJuICpvdmVycmlkZTsKLSNpZiBQTEFURk9STShHVEspCi0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBSZXR1cm4gTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIgdG8gYXZvaWQgY3Jhc2guCi0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyPiBjZW50ZXI7Ci0gICAgcmV0
dXJuIGNlbnRlcjsKLSNlbHNlCiAgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6
OnBsYXRmb3JtQ2VudGVyKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzZXRTaGFyZWRTdHJlYW1DZW50ZXJPdmVycmlkZShSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyKiBjZW50ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
YzVhZWFmZmZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC0w
LDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+
CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJU
QykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3Vy
Y2UuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvRGF0YS5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJl
RGV2aWNlTWFuYWdlci5oIgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5j
bHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHN0YXRpYyBDYXBhYmlsaXR5VmFsdWVPclJhbmdlIGRl
ZmF1bHRWb2x1bWVDYXBhYmlsaXR5ID0gQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSgwLjAsIDEuMCk7
Citjb25zdCBzdGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6RWNob0NhbmNl
bGxhdGlvbiBkZWZhdWx0RWNob0NhbmNlbGxhdGlvbkNhcGFiaWxpdHkgPSBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uOjpSZWFkV3JpdGU7CisKK0dTVF9E
RUJVR19DQVRFR09SWSh3ZWJraXRfYXVkaW9fY2FwdHVyZV9zb3VyY2VfZGVidWcpOworI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X2F1ZGlvX2NhcHR1cmVfc291cmNlX2RlYnVnCisKK3N0
YXRpYyB2b2lkIGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpCit7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGRlYnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdS
ZWdpc3RlcmVkRmxhZywgW10geworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJr
aXRfYXVkaW9fY2FwdHVyZV9zb3VyY2VfZGVidWcsICJ3ZWJraXRhdWRpb2NhcHR1cmVzb3VyY2Ui
LCAwLCAiV2ViS2l0IEF1ZGlvIENhcHR1cmUgU291cmNlLiIpOworICAgIH0pOworfQorCitjbGFz
cyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5IDogcHVibGljIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3RvcnkgeworcHVibGljOgorICAgIENhcHR1cmVTb3Vy
Y2VPckVycm9yIGNyZWF0ZUF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJiBk
ZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKSBmaW5hbAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmlj
ZS5wZXJzaXN0ZW50SWQoKSwgY29uc3RyYWludHMpOworICAgIH0KK307CisKK3N0YXRpYyBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5JiBsaWJXZWJSVENBdWRpb0NhcHR1cmVTb3Vy
Y2VGYWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyQXVkaW9D
YXB0dXJlU291cmNlRmFjdG9yeT4gZmFjdG9yeTsKKyAgICByZXR1cm4gZmFjdG9yeS5nZXQoKTsK
K30KKworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29u
c3RyYWludHMpCit7CisgICAgYXV0byBkZXZpY2UgPSBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5nc3RyZWFtZXJEZXZpY2VXaXRoVUlEKGRldmljZUlEKTsK
KyAgICBpZiAoIWRldmljZSkgeworICAgICAgICBhdXRvIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6
Zm9ybWF0KCJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZSgpOiBHU3RyZWFtZXIg
ZGlkIG5vdCBmaW5kIHRoZSBkZXZpY2U6ICVzLiIsIGRldmljZUlELnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShlcnJvck1lc3NhZ2Up
KTsKKyAgICB9CisKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyQXVk
aW9DYXB0dXJlU291cmNlKGRldmljZS52YWx1ZSgpKSk7CisKKyAgICBpZiAoY29uc3RyYWludHMp
IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0
cmFpbnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdC52YWx1ZSgpLmZpcnN0KTsKKyAgICB9CisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VP
ckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlv
Q2FwdHVyZUZhY3RvcnkmIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCit7
CisgICAgcmV0dXJuIGxpYldlYlJUQ0F1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKTsKK30KKwor
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2Uo
R1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNl
KGRldmljZS5wZXJzaXN0ZW50SWQoKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8s
IGRldmljZS5sYWJlbCgpKQorICAgICwgbV9jYXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdTdHJl
YW1lckF1ZGlvQ2FwdHVyZXI+KGRldmljZSkpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRl
YnVnKCk7Cit9CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6R1N0cmVhbWVyQXVkaW9D
YXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSkK
KyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGU6OkF1ZGlvLCBuYW1lKQorICAgICwgbV9jYXB0dXJlcihzdGQ6Om1ha2VfdW5pcXVlPEdT
dHJlYW1lckF1ZGlvQ2FwdHVyZXI+KCkpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckRlYnVn
KCk7Cit9CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkdTdHJlYW1lckF1ZGlvQ2Fw
dHVyZVNvdXJjZSgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpz
dGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIG1fY2FwdHVyZXItPnNldHVwUGlwZWxpbmUoKTsK
KyAgICBtX2NhcHR1cmVyLT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUoKSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChtX2NhcHR1cmVyLT5zaW5rKCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhu
ZXdTYW1wbGVDYWxsYmFjayksIHRoaXMpOworICAgIG1fY2FwdHVyZXItPnBsYXkoKTsKK30KKwor
R3N0Rmxvd1JldHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6Om5ld1NhbXBsZUNhbGxi
YWNrKEdzdEVsZW1lbnQqIHNpbmssIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSogc291cmNl
KQoreworICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBs
ZShHU1RfQVBQX1NJTksoc2luaykpKTsKKworICAgIC8vIEZJWE1FIC0gZmlndXJlIG91dCBhIHdh
eSB0byBhdm9pZCBjb3B5aW5nIChvbiB3cml0ZSkgdGhlIGRhdGEuCisgICAgR3N0QnVmZmVyKiBi
dWYgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKTsKKyAgICBhdXRvIGZyYW1l
cyhzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyQXVkaW9EYXRhPihuZXcgR1N0cmVhbWVyQXVkaW9E
YXRhKFdURk1vdmUoc2FtcGxlKSkpKTsKKyAgICBhdXRvIHN0cmVhbURlc2Moc3RkOjp1bmlxdWVf
cHRyPEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KG5ldyBHU3RyZWFtZXJBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKGZyYW1lcy0+Z2V0QXVkaW9JbmZvKCkpKSk7CisKKyAgICBzb3VyY2Ut
PmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSgKKyAgICAgICAgTWVkaWFUaW1lKEdTVF9USU1FX0FTX1VT
RUNPTkRTKEdTVF9CVUZGRVJfUFRTKGJ1ZikpLCBHX1VTRUNfUEVSX1NFQyksCisgICAgICAgICpm
cmFtZXMsICpzdHJlYW1EZXNjLCBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZikgLyBmcmFtZXMtPmdl
dEF1ZGlvSW5mbygpLmJwZik7CisKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY2FwdHVyZXItPnNpbmsoKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBtX2NhcHR1cmVyLT5zdG9wKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29u
c3QKK3sKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMpCisgICAgICAgIHJldHVybiBtX2NhcGFiaWxp
dGllcy52YWx1ZSgpOworCisgICAgdWludCBpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9
IG1fY2FwdHVyZXItPmNhcHMoKTsKKyAgICBpbnQgbWluU2FtcGxlUmF0ZSA9IDAsIG1heFNhbXBs
ZVJhdGUgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZShjYXBzLmdl
dCgpKTsgaSsrKSB7CisgICAgICAgIGludCBjYXBhYmlsaXR5TWluU2FtcGxlUmF0ZSA9IDAsIGNh
cGFiaWxpdHlNYXhTYW1wbGVSYXRlID0gMDsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHIgPSBn
c3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGkpOworCisgICAgICAgIC8vIE9ubHkg
YWNjZXB0IHJhdyBhdWRpbyBmb3Igbm93LgorICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFz
X25hbWUoc3RyLCAiYXVkaW8veC1yYXciKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgInJhdGUiLCBHU1RfVFlQRV9JTlRfUkFOR0UsICZj
YXBhYmlsaXR5TWluU2FtcGxlUmF0ZSwgJmNhcGFiaWxpdHlNYXhTYW1wbGVSYXRlLCBudWxscHRy
KTsKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICBtaW5TYW1wbGVSYXRlID0gc3Rk
OjptaW4obWluU2FtcGxlUmF0ZSwgY2FwYWJpbGl0eU1pblNhbXBsZVJhdGUpOworICAgICAgICAg
ICAgbWF4U2FtcGxlUmF0ZSA9IHN0ZDo6bWF4KG1heFNhbXBsZVJhdGUsIGNhcGFiaWxpdHlNYXhT
YW1wbGVSYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pblNhbXBsZVJhdGUg
PSBjYXBhYmlsaXR5TWluU2FtcGxlUmF0ZTsKKyAgICAgICAgICAgIG1heFNhbXBsZVJhdGUgPSBj
YXBhYmlsaXR5TWF4U2FtcGxlUmF0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzKHNldHRpbmdzKCkuc3VwcG9ydGVk
Q29uc3RyYWludHMoKSk7CisgICAgY2FwYWJpbGl0aWVzLnNldERldmljZUlkKGlkKCkpOworICAg
IGNhcGFiaWxpdGllcy5zZXRFY2hvQ2FuY2VsbGF0aW9uKGRlZmF1bHRFY2hvQ2FuY2VsbGF0aW9u
Q2FwYWJpbGl0eSk7CisgICAgY2FwYWJpbGl0aWVzLnNldFZvbHVtZShkZWZhdWx0Vm9sdW1lQ2Fw
YWJpbGl0eSk7CisgICAgY2FwYWJpbGl0aWVzLnNldFNhbXBsZVJhdGUoQ2FwYWJpbGl0eVZhbHVl
T3JSYW5nZShtaW5TYW1wbGVSYXRlLCBtYXhTYW1wbGVSYXRlKSk7CisgICAgbV9jYXBhYmlsaXRp
ZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyk7CisKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXMu
dmFsdWUoKTsKK30KKworYm9vbCBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmFwcGx5U2Ft
cGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKK3sKKyAgICByZXR1cm4gbV9jYXB0dXJlci0+c2V0U2Ft
cGxlUmF0ZShzYW1wbGVSYXRlKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzJiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fY3VycmVudFNldHRpbmdzKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7CisK
KyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBvcnRl
ZENvbnN0cmFpbnRzOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rl
dmljZUlkKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Vj
aG9DYW5jZWxsYXRpb24odHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1
cHBvcnRzVm9sdW1lKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBw
b3J0c1NhbXBsZVJhdGUodHJ1ZSk7CisgICAgICAgIHNldHRpbmdzLnNldFN1cHBvcnRlZENvbnN0
cmFpbnRzKHN1cHBvcnRlZENvbnN0cmFpbnRzKTsKKworICAgICAgICBtX2N1cnJlbnRTZXR0aW5n
cyA9IFdURk1vdmUoc2V0dGluZ3MpOworICAgIH0KKworICAgIG1fY3VycmVudFNldHRpbmdzLT5z
ZXRWb2x1bWUodm9sdW1lKCkpOworICAgIG1fY3VycmVudFNldHRpbmdzLT5zZXRTYW1wbGVSYXRl
KHNhbXBsZVJhdGUoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldEVjaG9DYW5jZWxsYXRp
b24oZWNob0NhbmNlbGxhdGlvbigpKTsKKworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52
YWx1ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZmE0YTljMmUzMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb0NhcHR1cmVTb3VyY2UuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNh
dW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0
cm8gIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJl
YW1lckF1ZGlvQ2FwdHVyZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZU1l
ZGlhU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3Jl
YXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQXVkaW9DYXB0dXJlRmFjdG9yeSYgZmFjdG9yeSgpOwor
CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVz
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
JiBzZXR0aW5ncygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUo
KSB7IHJldHVybiBtX2NhcHR1cmVyLT5waXBlbGluZSgpOyB9CisgICAgR1N0cmVhbWVyQ2FwdHVy
ZXIqIGNhcHR1cmVyKCkgeyByZXR1cm4gbV9jYXB0dXJlci5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6
CisgICAgR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKEdTdHJlYW1lckNhcHR1cmVEZXZpY2Up
OworICAgIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlE
LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZpcnR1YWwgfkdTdHJlYW1lckF1ZGlvQ2FwdHVy
ZVNvdXJjZSgpOworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBzdGQ6Om9w
dGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwor
ICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1f
Y3VycmVudFNldHRpbmdzOworCitwcml2YXRlOgorICAgIGJvb2wgYXBwbHlTYW1wbGVSYXRlKGlu
dCkgZmluYWw7CisgICAgYm9vbCBpc0NhcHR1cmVTb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisgICAgYm9vbCBhcHBseVZvbHVtZShkb3VibGUpIGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJBdWRpb0NhcHR1cmVyPiBtX2Nh
cHR1cmVyOworCisgICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3U2FtcGxlQ2FsbGJhY2soR3N0
RWxlbWVudCosIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSopOworICAgIHZvaWQgdHJpZ2dl
clNhbXBsZUF2YWlsYWJsZShHc3RTYW1wbGUqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYm
IFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY0MTU3ZWY3MGE2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhv
cjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxl
amFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVB
TUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaCIKKworI2luY2x1ZGUgIkxp
YldlYlJUQ0F1ZGlvRm9ybWF0LmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFt
ZXJBdWRpb0NhcHR1cmVyKEdTdHJlYW1lckNhcHR1cmVEZXZpY2UgZGV2aWNlKQorICAgIDogR1N0
cmVhbWVyQ2FwdHVyZXIoZGV2aWNlLCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVk
aW8veC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIExpYldlYlJUQ0F1ZGlvRm9ybWF0OjpzYW1w
bGVSYXRlLCBudWxscHRyKSkpCit7Cit9CisKK0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJl
YW1lckF1ZGlvQ2FwdHVyZXIoKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImF1ZGlvdGVzdHNy
YyIsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwg
R19UWVBFX0lOVCwgTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGUsIG51bGxwdHIpKSkK
K3sKK30KKworR3N0RWxlbWVudCogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6Y3JlYXRlQ29udmVy
dGVyKCkKK3sKKyAgICBhdXRvIGNvbnZlcnRlciA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlw
dGlvbigiYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSIsIFRSVUUsIG51bGxwdHIpOworCisg
ICAgQVNTRVJUKGNvbnZlcnRlcik7CisKKyAgICByZXR1cm4gY29udmVydGVyOworfQorCitib29s
IEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OnNldFNhbXBsZVJhdGUoaW50IHNhbXBsZVJhdGUpCit7
CisKKyAgICBpZiAoc2FtcGxlUmF0ZSA+IDApIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJTZXR0aW5nIFNhbXBsZVJhdGUgJWQiLCBzYW1wbGVSYXRlKTsKKyAg
ICAgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3
IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzYW1wbGVSYXRlLCBudWxscHRyKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJOb3QgZm9yY2lu
ZyBzYW1wbGUgcmF0ZSIpOworICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X2VtcHR5X3NpbXBsZSgiYXVkaW8veC1yYXciKSk7CisgICAgfQorCisgICAgaWYgKCFtX2NhcHNm
aWx0ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdfb2JqZWN0X3NldCht
X2NhcHNmaWx0ZXIuZ2V0KCksICJjYXBzIiwgbV9jYXBzLmdldCgpLCBudWxscHRyKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhYWY3NjFkNmM0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1
ZGlvQ2FwdHVyZXIuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRz
YXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhA
aWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0
dXJlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIgOiBwdWJsaWMgR1N0cmVhbWVyQ2FwdHVyZXIgeworcHVibGljOgorICAgIEdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSk7CisgICAgR1N0cmVhbWVyQXVk
aW9DYXB0dXJlcigpOworCisgICAgR3N0RWxlbWVudCogY3JlYXRlQ29udmVydGVyKCkgZmluYWw7
CisgICAgY29uc3QgY2hhciogbmFtZSgpIGZpbmFsIHsgcmV0dXJuICJBdWRpbyI7IH0KKworICAg
IGJvb2wgc2V0U2FtcGxlUmF0ZShpbnQpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNF
KEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0RhdGEuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTUzZjNhOGEwZTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9EYXRhLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0
c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4
QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQXVkaW9EYXRhLmgiCisKKyNpbmNsdWRlIDxnc3Qv
YXVkaW8vYXVkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR1N0cmVhbWVyQXVk
aW9EYXRhIDogcHVibGljIFBsYXRmb3JtQXVkaW9EYXRhIHsKK3B1YmxpYzoKKyAgICBHU3RyZWFt
ZXJBdWRpb0RhdGEoR1JlZlB0cjxHc3RTYW1wbGU+JiYgc2FtcGxlLCBHc3RBdWRpb0luZm8gaW5m
bykKKyAgICAgICAgOiBtX3NhbXBsZShXVEZNb3ZlKHNhbXBsZSkpCisgICAgICAgICwgbV9hdWRp
b0luZm8oaW5mbykKKyAgICB7CisgICAgfQorCisgICAgR1N0cmVhbWVyQXVkaW9EYXRhKEdSZWZQ
dHI8R3N0U2FtcGxlPiYmIHNhbXBsZSkKKyAgICAgICAgOiBtX3NhbXBsZShXVEZNb3ZlKHNhbXBs
ZSkpCisgICAgeworICAgICAgICBnc3RfYXVkaW9faW5mb19mcm9tX2NhcHMoJm1fYXVkaW9JbmZv
LCBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKSk7CisgICAgfQorCisgICAgR3N0
U2FtcGxlKiBnZXRTYW1wbGUoKSB7IHJldHVybiBtX3NhbXBsZS5nZXQoKTsgfQorICAgIEdzdEF1
ZGlvSW5mbyBnZXRBdWRpb0luZm8oKSB7cmV0dXJuIG1fYXVkaW9JbmZvOyB9CisKK3ByaXZhdGU6
CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gS2luZDo6R1N0cmVhbWVyQXVkaW9EYXRh
OyB9CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOworICAgIEdSZWZQdHI8R3N0Q2Fw
cz4gbV9jYXBzOworCisgICAgR3N0QXVkaW9JbmZvIG1fYXVkaW9JbmZvOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4xZmY1OWIyYTE3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8
dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxl
eEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFs
OiBwdWJsaWMgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVy
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRpb0luZm8gaW5mbykKKyAgICAgICAgOiBtX2lu
Zm8oaW5mbykKKyAgICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2Nh
cHMoJm1faW5mbykpKQorICAgIHsKKyAgICB9CisKKyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURl
c2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyAqaW5mbykKKyAgICAgICAgOiBtX2luZm8oKmluZm8pCisg
ICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8p
KSkKKyAgICB7CisgICAgfQorCisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigp
CisgICAgeworICAgICAgICBnc3RfYXVkaW9faW5mb19pbml0KCZtX2luZm8pOworICAgIH0KKwor
ICAgIFdFQkNPUkVfRVhQT1JUIH5HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkgeyB9
OworCisgICAgY29uc3QgUGxhdGZvcm1EZXNjcmlwdGlvbiYgcGxhdGZvcm1EZXNjcmlwdGlvbigp
IGNvbnN0CisgICAgeworICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSB7IFBsYXRmb3Jt
RGVzY3JpcHRpb246OkdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oJm1faW5mbykgfTsKKwor
ICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgIH0KKworICAgIFdFQkNP
UkVfRVhQT1JUIFBDTUZvcm1hdCBmb3JtYXQoKSBjb25zdCBmaW5hbCB7CisgICAgICAgIHN3aXRj
aCAoR1NUX0FVRElPX0lORk9fRk9STUFUKCZtX2luZm8pKSB7CisgICAgICAgIGNhc2UgR1NUX0FV
RElPX0ZPUk1BVF9TMTZMRToKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNkJFOgor
ICAgICAgICAgICAgcmV0dXJuIEludDE2OworICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRf
UzMyTEU6CisgICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMzJCRToKKyAgICAgICAgICAg
IHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX0YzMkxFOgorICAg
ICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyQkU6CisgICAgICAgICAgICByZXR1cm4gRmxv
YXQzMjsKKyAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX0Y2NExFOgorICAgICAgICBjYXNl
IEdTVF9BVURJT19GT1JNQVRfRjY0QkU6CisgICAgICAgICAgICByZXR1cm4gRmxvYXQ2NDsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBOb25lOworICAgIH0KKworICAgIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gR1NUX0FVRElPX0lORk9fUkFURSgmbV9pbmZvKTsgfQorICAgIGJvb2wgaXNQQ00o
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmb3JtYXQoKSAhPSBOb25lOyB9CisgICAgYm9vbCBpc0lu
dGVybGVhdmVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gR1NUX0FVRElPX0lORk9fTEFZT1VUKCZt
X2luZm8pID09IEdTVF9BVURJT19MQVlPVVRfSU5URVJMRUFWRUQ7IH0KKyAgICBib29sIGlzU2ln
bmVkSW50ZWdlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0lTX0lOVEVH
RVIoJm1faW5mbyk7IH0KKyAgICBib29sIGlzTmF0aXZlRW5kaWFuKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gR1NUX0FVRElPX0lORk9fRU5ESUFOTkVTUygmbV9pbmZvKSA9PSBHX0JZVEVfT1JERVI7
IH0KKyAgICBib29sIGlzRmxvYXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9fSU5G
T19JU19GTE9BVCgmbV9pbmZvKTsgfQorCisgICAgdWludDMyX3QgbnVtYmVyT2ZJbnRlcmxlYXZl
ZENoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNJbnRlcmxlYXZlZCgpID8gR1NUX0FV
RElPX0lORk9fQ0hBTk5FTFMoJm1faW5mbykgOiBUUlVFOyB9CisgICAgdWludDMyX3QgbnVtYmVy
T2ZDaGFubmVsU3RyZWFtcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0NI
QU5ORUxTKCZtX2luZm8pOyB9CisgICAgdWludDMyX3QgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIEdTVF9BVURJT19JTkZPX0NIQU5ORUxTKCZtX2luZm8pOyB9CisgICAg
dWludDMyX3Qgc2FtcGxlV29yZFNpemUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBHU1RfQVVESU9f
SU5GT19CUFMoJm1faW5mbyk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHU3RyZWFt
ZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gZ3N0X2F1ZGlvX2luZm9f
aXNfZXF1YWwoJm1faW5mbywgJm90aGVyLm1faW5mbyk7IH0KKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuICFv
cGVyYXRvciA9PSAob3RoZXIpOyB9CisKKyAgICBHc3RDYXBzKiBjYXBzKCkgeyByZXR1cm4gbV9j
YXBzLmdldCgpOyB9CisgICAgR3N0QXVkaW9JbmZvKiBnZXRJbmZvKCkgeyByZXR1cm4gJm1faW5m
bzsgfQorCitwcml2YXRlOgorICAgIEdzdEF1ZGlvSW5mbyBtX2luZm87CisgICAgR1JlZlB0cjxH
c3RDYXBzPiBtX2NhcHM7CisgICAgbXV0YWJsZSBQbGF0Zm9ybURlc2NyaXB0aW9uIG1fcGxhdGZv
cm1EZXNjcmlwdGlvbjsKK307CisKK30gLy8gV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi42NDIyZGRkODNhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2
aWNlLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBp
Z2FsaWEuY29tPgorICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5j
b20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKQorCisjaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNv
bW1vbi5oIgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdTdHJlYW1lckNhcHR1cmVEZXZpY2UgOiBwdWJsaWMgQ2FwdHVyZURldmljZSB7Citw
dWJsaWM6CisgICAgR1N0cmVhbWVyQ2FwdHVyZURldmljZShHUmVmUHRyPEdzdERldmljZT4mJiBk
ZXZpY2UsIGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudElkLCBEZXZpY2VUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgZ3JvdXBJZCA9IGVtcHR5U3RyaW5nKCkpCisg
ICAgICAgIDogQ2FwdHVyZURldmljZShwZXJzaXN0ZW50SWQsIHR5cGUsIGxhYmVsLCBncm91cElk
KQorICAgICAgICAsIG1fZGV2aWNlKGRldmljZSkKKyAgICB7CisgICAgfQorCisgICAgR3N0Q2Fw
cyogY2FwcygpIGNvbnN0IHsgcmV0dXJuIGdzdF9kZXZpY2VfZ2V0X2NhcHMobV9kZXZpY2UuZ2V0
KCkpOyB9CisgICAgR3N0RGV2aWNlKiBkZXZpY2UoKSB7IHJldHVybiBtX2RldmljZS5nZXQoKTsg
fQorCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RGV2aWNlPiBtX2RldmljZTsKK307CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICAmJiBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNiNzgyODdlN2FhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDEzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQXV0
aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29tPgorICogQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJH
U3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29t
bW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlciYgR1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9u
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2
aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKworR1N0cmVhbWVy
VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlciYgR1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R1N0cmVhbWVy
VmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsK
K30KKworR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBHU3RyZWFtZXJEaXNw
bGF5Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcj4gbWFuYWdlcjsK
KyAgICByZXR1cm4gbWFuYWdlcjsKK30KKworc3RkOjpvcHRpb25hbDxHU3RyZWFtZXJDYXB0dXJl
RGV2aWNlPiBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z3N0cmVhbWVyRGV2aWNlV2l0
aFVJRChjb25zdCBTdHJpbmcmIGRldmljZUlEKQoreworICAgIGNhcHR1cmVEZXZpY2VzKCk7CisK
KyAgICBmb3IgKGF1dG8mIGRldmljZSA6IG1fZ3N0cmVhbWVyRGV2aWNlcykgeworICAgICAgICBp
ZiAoZGV2aWNlLnBlcnNpc3RlbnRJZCgpID09IGRldmljZUlEKQorICAgICAgICAgICAgcmV0dXJu
IGRldmljZTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworY29uc3QgVmVj
dG9yPENhcHR1cmVEZXZpY2U+JiBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y2FwdHVy
ZURldmljZXMoKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXIoKTsKKyAgICBpZiAobV9kZXZp
Y2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVmcmVzaENhcHR1cmVEZXZpY2VzKCk7CisKKyAgICBy
ZXR1cm4gbV9kZXZpY2VzOworfQorCit2b2lkIEdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpkZXZpY2VBZGRlZChHUmVmUHRyPEdzdERldmljZT4mJiBkZXZpY2UpCit7CisgICAgR1VuaXF1
ZVB0cjxHc3RTdHJ1Y3R1cmU+IHByb3BlcnRpZXMoZ3N0X2RldmljZV9nZXRfcHJvcGVydGllcyhk
ZXZpY2UuZ2V0KCkpKTsKKyAgICBjb25zdCBjaGFyKiBrbGFzcyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0
X3N0cmluZyhwcm9wZXJ0aWVzLmdldCgpLCAiZGV2aWNlLmNsYXNzIik7CisKKyAgICBpZiAoa2xh
c3MgJiYgIWdfc3RyY21wMChrbGFzcywgIm1vbml0b3IiKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlID0gZGV2aWNlVHlwZSgpOworICAgIEdV
bmlxdWVQdHI8Y2hhcj4gZGV2aWNlQ2xhc3NDaGFyKGdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFz
cyhkZXZpY2UuZ2V0KCkpKTsKKyAgICBTdHJpbmcgZGV2aWNlQ2xhc3MoU3RyaW5nKGRldmljZUNs
YXNzQ2hhci5nZXQoKSkpOworICAgIGlmICh0eXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGU6Ok1pY3JvcGhvbmUgJiYgIWRldmljZUNsYXNzLnN0YXJ0c1dpdGgoIkF1ZGlvIikpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAodHlwZSA9PSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpD
YW1lcmEgJiYgIWRldmljZUNsYXNzLnN0YXJ0c1dpdGgoIlZpZGVvIikpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoaXMgaXNuJ3QgcmVhbGx5IGEgVUlEIGJ1dCBzaG91bGQgYmUgZ29vZCBl
bm91Z2ggKGxpYndlYnJ0YworICAgIC8vIGl0c2VsZiBkb2VzIHRoYXQgYXQgbGVhc3QgZm9yIHB1
bHNlYXVkaW8gZGV2aWNlcykuCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXZpY2VOYW1lKGdzdF9k
ZXZpY2VfZ2V0X2Rpc3BsYXlfbmFtZShkZXZpY2UuZ2V0KCkpKTsKKyAgICBTdHJpbmcgaWRlbnRp
ZmllciA9IFN0cmluZzo6ZnJvbVVURjgoZGV2aWNlTmFtZS5nZXQoKSk7CisKKyAgICBhdXRvIGdz
dENhcHR1cmVEZXZpY2UgPSBHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKFdURk1vdmUoZGV2aWNlKSwg
aWRlbnRpZmllciwgdHlwZSwgaWRlbnRpZmllcik7CisgICAgZ3N0Q2FwdHVyZURldmljZS5zZXRF
bmFibGVkKHRydWUpOworICAgIG1fZ3N0cmVhbWVyRGV2aWNlcy5hcHBlbmQoV1RGTW92ZShnc3RD
YXB0dXJlRGV2aWNlKSk7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBDYXB0dXJlRGV2aWNlIGNv
cHkgaW4gb3RoZXIgdmVjdG9yIGp1c3QgZm9yIGNhcHR1cmVEZXZpY2VzIEFQSS4KKyAgICBhdXRv
IGNhcHR1cmVEZXZpY2UgPSBDYXB0dXJlRGV2aWNlKGlkZW50aWZpZXIsIHR5cGUsIGlkZW50aWZp
ZXIpOworICAgIGNhcHR1cmVEZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKKyAgICBtX2RldmljZXMu
YXBwZW5kKFdURk1vdmUoY2FwdHVyZURldmljZSkpOworfQorCit2b2lkIEdTdHJlYW1lckNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpyZWZyZXNoQ2FwdHVyZURldmljZXMoKQoreworICAgIGlmICghbV9k
ZXZpY2VNb25pdG9yKSB7CisgICAgICAgIG1fZGV2aWNlTW9uaXRvciA9IGFkb3B0R1JlZihnc3Rf
ZGV2aWNlX21vbml0b3JfbmV3KCkpOworCisgICAgICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGUgdHlwZSA9IGRldmljZVR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZTo6Q2FtZXJhKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC1yYXciKSk7
CisgICAgICAgICAgICBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcihtX2RldmljZU1vbml0
b3IuZ2V0KCksICJWaWRlby9Tb3VyY2UiLCBjYXBzLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0eXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUpIHsKKyAgICAg
ICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1w
dHlfc2ltcGxlKCJhdWRpby94LXJhdyIpKTsKKyAgICAgICAgICAgIGdzdF9kZXZpY2VfbW9uaXRv
cl9hZGRfZmlsdGVyKG1fZGV2aWNlTW9uaXRvci5nZXQoKSwgIkF1ZGlvL1NvdXJjZSIsIGNhcHMu
Z2V0KCkpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgbW9uaXRvciBmb3IgYWRk
ZWQvcmVtb3ZlZCBtZXNzYWdlcyBvbiB0aGUgYnVzLgorICAgIH0KKworICAgIGlmICghZ3N0X2Rl
dmljZV9tb25pdG9yX3N0YXJ0KG1fZGV2aWNlTW9uaXRvci5nZXQoKSkpIHsKKyAgICAgICAgR1NU
X1dBUk5JTkdfT0JKRUNUKG1fZGV2aWNlTW9uaXRvci5nZXQoKSwgIkNvdWxkIG5vdCBzdGFydCBk
ZXZpY2UgbW9uaXRvciIpOworICAgICAgICBtX2RldmljZU1vbml0b3IgPSBudWxscHRyOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHTGlzdCogZGV2aWNlcyA9IGdzdF9kZXZpY2Vf
bW9uaXRvcl9nZXRfZGV2aWNlcyhtX2RldmljZU1vbml0b3IuZ2V0KCkpOworICAgIHdoaWxlIChk
ZXZpY2VzKSB7CisgICAgICAgIEdSZWZQdHI8R3N0RGV2aWNlPiBkZXZpY2UgPSBhZG9wdEdSZWYo
R1NUX0RFVklDRV9DQVNUKGRldmljZXMtPmRhdGEpKTsKKyAgICAgICAgZGV2aWNlQWRkZWQoV1RG
TW92ZShkZXZpY2UpKTsKKyAgICAgICAgZGV2aWNlcyA9IGdfbGlzdF9kZWxldGVfbGluayhkZXZp
Y2VzLCBkZXZpY2VzKTsKKyAgICB9CisKKyAgICBnc3RfZGV2aWNlX21vbml0b3Jfc3RvcChtX2Rl
dmljZU1vbml0b3IuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNh
cHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODYzOTI0MTRkMDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
Q2FwdHVyZURldmljZU1hbmFnZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNh
dW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0
cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJDYXB0dXJlRGV2aWNlTWFuYWdlci5o
IgorI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0
dXJlRGV2aWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyQ2Fw
dHVyZURldmljZU1hbmFnZXIgOiBwdWJsaWMgQ2FwdHVyZURldmljZU1hbmFnZXIgeworcHVibGlj
OgorICAgIHN0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyQ2FwdHVyZURldmljZT4gZ3N0cmVhbWVyRGV2
aWNlV2l0aFVJRChjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZp
Y2VzKCkgZmluYWw7CisgICAgY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2
aWNlcygpIGZpbmFsOworICAgIHZpcnR1YWwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZp
Y2VUeXBlKCkgPSAwOworCitwcml2YXRlOgorICAgIHZvaWQgZGV2aWNlQWRkZWQoR1JlZlB0cjxH
c3REZXZpY2U+JiYpOworCisgICAgR1JlZlB0cjxHc3REZXZpY2VNb25pdG9yPiBtX2RldmljZU1v
bml0b3I7CisgICAgVmVjdG9yPEdTdHJlYW1lckNhcHR1cmVEZXZpY2U+IG1fZ3N0cmVhbWVyRGV2
aWNlczsKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4gbV9kZXZpY2VzOworfTsKKworY2xhc3Mg
R1N0cmVhbWVyQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlciBmaW5hbCA6IHB1YmxpYyBHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlTWFuYWdlciB7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PEdTdHJlYW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI+OworcHVibGljOgorICAgIHN0YXRp
YyBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaW5nbGV0b24oKTsKKyAgICBD
YXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSBmaW5hbCB7IHJldHVybiBDYXB0
dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lOyB9Citwcml2YXRlOgorICAgIEdTdHJl
YW1lckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIoKSA9IGRlZmF1bHQ7CisgICAgfkdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIoKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIEdTdHJlYW1lckNh
cHR1cmVEZXZpY2VNYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R1N0
cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdT
dHJlYW1lclZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXImIHNpbmdsZXRvbigpOworICAgIHN0YXRp
YyBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiB2aWRlb0ZhY3Rvcnko
KTsKKyAgICBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSBmaW5hbCB7IHJl
dHVybiBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmE7IH0KK3ByaXZhdGU6CisgICAg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKKyAgICB+R1N0
cmVhbWVyVmlkZW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKK307CisKK2NsYXNz
IEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlciBmaW5hbCA6IHB1YmxpYyBHU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlciB7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcj47CitwdWJsaWM6CisgICAg
c3RhdGljIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7
CisgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgZmluYWwgeyByZXR1
cm4gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuOyB9Citwcml2YXRlOgorICAgIEdT
dHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpID0gZGVmYXVsdDsKKyAgICB+R1N0
cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgPSBkZWZhdWx0OworfTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgICYmIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uOTJiZmE0MTVhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3Bw
CkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxp
YS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0
cmVhbWVyQ2FwdHVyZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2lu
Y2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8
d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorCisjaWYgR1NUX0NIRUNLX1ZFUlNJ
T04oMSwgMTAsIDApCisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfY2FwdHVyZXJfZGVidWcp
OworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X2NhcHR1cmVyX2RlYnVnCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZERlYnVn
KCkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lz
dGVyZWRGbGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9j
YXB0dXJlcl9kZWJ1ZywgIndlYmtpdGNhcHR1cmVyIiwgMCwgIldlYktpdCBDYXB0dXJlciIpOwor
ICAgIH0pOworfQorCitHU3RyZWFtZXJDYXB0dXJlcjo6R1N0cmVhbWVyQ2FwdHVyZXIoR1N0cmVh
bWVyQ2FwdHVyZURldmljZSBkZXZpY2UsIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcykKKyAgICA6IG1f
ZGV2aWNlKGRldmljZS5kZXZpY2UoKSkKKyAgICAsIG1fY2FwcyhjYXBzKQorICAgICwgbV9zb3Vy
Y2VGYWN0b3J5KG51bGxwdHIpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZERlYnVnKCk7
Cit9CisKK0dTdHJlYW1lckNhcHR1cmVyOjpHU3RyZWFtZXJDYXB0dXJlcihjb25zdCBjaGFyKiBz
b3VyY2VGYWN0b3J5LCBHUmVmUHRyPEdzdENhcHM+IGNhcHMpCisgICAgOiBtX2RldmljZShudWxs
cHRyKQorICAgICwgbV9jYXBzKGNhcHMpCisgICAgLCBtX3NvdXJjZUZhY3Rvcnkoc291cmNlRmFj
dG9yeSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kRGVidWcoKTsKK30KKworR1N0cmVh
bWVyQ2FwdHVyZXI6On5HU3RyZWFtZXJDYXB0dXJlcigpCit7CisgICAgaWYgKG1fcGlwZWxpbmUp
CisgICAgICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2socGlwZWxpbmUoKSk7
Cit9CisKK0dzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQorewor
ICAgIGlmIChtX3NvdXJjZUZhY3RvcnkpIHsKKyAgICAgICAgbV9zcmMgPSBtYWtlRWxlbWVudCht
X3NvdXJjZUZhY3RvcnkpOworICAgICAgICBpZiAoR1NUX0lTX0FQUF9TUkMobV9zcmMuZ2V0KCkp
KQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaXMtbGl2ZSIsIHRydWUs
ICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIG51bGxwdHIpOworCisgICAgICAgIEFTU0VSVCht
X3NyYyk7CisgICAgICAgIHJldHVybiBtX3NyYy5nZXQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
bV9kZXZpY2UpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlTmFtZShnX3N0cmR1cF9wcmlu
dGYoIiVzXyVwIiwgbmFtZSgpLCB0aGlzKSk7CisgICAgbV9zcmMgPSBnc3RfZGV2aWNlX2NyZWF0
ZV9lbGVtZW50KG1fZGV2aWNlLmdldCgpLCBzb3VyY2VOYW1lLmdldCgpKTsKKyAgICBBU1NFUlQo
bV9zcmMpOworCisgICAgcmV0dXJuIG1fc3JjLmdldCgpOworfQorCitHc3RDYXBzKiBHU3RyZWFt
ZXJDYXB0dXJlcjo6Y2FwcygpCit7CisgICAgaWYgKG1fc291cmNlRmFjdG9yeSkgeworICAgICAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGVsZW1lbnQgPSBtYWtlRWxlbWVudChtX3NvdXJjZUZhY3Rv
cnkpOworICAgICAgICBhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChlbGVtZW50LmdldCgpLCAic3JjIikpOworCisgICAgICAgIHJldHVybiBnc3RfcGFkX3F1
ZXJ5X2NhcHMocGFkLmdldCgpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9kZXZp
Y2UpOworICAgIHJldHVybiBnc3RfZGV2aWNlX2dldF9jYXBzKG1fZGV2aWNlLmdldCgpKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6c2V0dXBQaXBlbGluZSgpCit7CisgICAgaWYgKG1f
cGlwZWxpbmUpCisgICAgICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2socGlw
ZWxpbmUoKSk7CisKKyAgICBtX3BpcGVsaW5lID0gbWFrZUVsZW1lbnQoInBpcGVsaW5lIik7CisK
KyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZSgpOworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gY29udmVydGVyID0gY3JlYXRlQ29udmVydGVyKCk7CisKKyAgICBt
X2NhcHNmaWx0ZXIgPSBtYWtlRWxlbWVudCgiY2Fwc2ZpbHRlciIpOworICAgIG1fdGVlID0gbWFr
ZUVsZW1lbnQoInRlZSIpOworICAgIG1fc2luayA9IG1ha2VFbGVtZW50KCJhcHBzaW5rIik7CisK
KyAgICBnc3RfYXBwX3Npbmtfc2V0X2VtaXRfc2lnbmFscyhHU1RfQVBQX1NJTksobV9zaW5rLmdl
dCgpKSwgVFJVRSk7CisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc2ZpbHRlci5nZXQoKSwgImNhcHMi
LCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklO
KG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3VyY2UuZ2V0KCksIGNvbnZlcnRlci5nZXQoKSwgbV9jYXBz
ZmlsdGVyLmdldCgpLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGlu
a19tYW55KHNvdXJjZS5nZXQoKSwgY29udmVydGVyLmdldCgpLCBtX2NhcHNmaWx0ZXIuZ2V0KCks
IG1fdGVlLmdldCgpLCBudWxscHRyKTsKKworICAgIGFkZFNpbmsobV9zaW5rLmdldCgpKTsKKwor
ICAgIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2socGlwZWxpbmUoKSk7Cit9CisKK0dz
dEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjptYWtlRWxlbWVudChjb25zdCBjaGFyKiBmYWN0
b3J5TmFtZSkKK3sKKyAgICBhdXRvIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
ZmFjdG9yeU5hbWUsIG51bGxwdHIpOworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBHVW5pcXVl
UHRyPGNoYXI+IGNhcHR1cmVyTmFtZShnX3N0cmR1cF9wcmludGYoIiVzX2NhcHR1cmVyXyVzXyVw
IiwgbmFtZSgpLCBHU1RfT0JKRUNUX05BTUUoZWxlbWVudCksIHRoaXMpKTsKKyAgICBnc3Rfb2Jq
ZWN0X3NldF9uYW1lKEdTVF9PQkpFQ1QoZWxlbWVudCksIGNhcHR1cmVyTmFtZS5nZXQoKSk7CisK
KyAgICByZXR1cm4gZWxlbWVudDsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6YWRkU2lu
ayhHc3RFbGVtZW50KiBuZXdTaW5rKQoreworICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKKyAgICBB
U1NFUlQobV90ZWUpOworCisgICAgYXV0byBxdWV1ZSA9IG1ha2VFbGVtZW50KCJxdWV1ZSIpOwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihwaXBlbGluZSgpKSwgcXVldWUsIG5ld1Npbmss
IG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUp
OworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobmV3U2luayk7CisKKyAg
ICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkcyhtX3RlZS5nZXQoKSwgInNyY18ldSIsIHF1ZXVl
LCAic2luayIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rKHF1ZXVlLCBuZXdTaW5rKSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChuZXdTaW5rID09IG1fc2luay5nZXQoKSkgeworICAgICAgICBHU1RfSU5GT19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlNldHRpbmcgcXVldWUgYXMgbGVha3kgdXBzdHJlYW0i
CisgICAgICAgICAgICAiIHNvIHRoYXQgdGhlIHBsYXllciBjYW4gc2V0IHRoZSBzaW5rIHRvIFBB
VVNFRCB3aXRob3V0ICIKKyAgICAgICAgICAgICIgc2V0dGluZyB0aGUgd2hvbGUgY2FwdHVyZXIg
dG8gUEFVU0VEIik7CisgICAgICAgIGdfb2JqZWN0X3NldChxdWV1ZSwgImxlYWt5IiwgMiAvKiB1
cHN0cmVhbSAqLywgbnVsbHB0cik7CisgICAgfQorCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJBZGRpbmcgc2luazogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1NpbmspOworCisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBkdW1wTmFtZShnX3N0cmR1cF9wcmludGYoIiVzX3NpbmtfJXNfYWRk
ZWQiLCBHU1RfT0JKRUNUX05BTUUocGlwZWxpbmUoKSksIEdTVF9PQkpFQ1RfTkFNRShuZXdTaW5r
KSkpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKHBpcGVs
aW5lKCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGR1bXBOYW1lLmdldCgpKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6cGxheSgpCit7CisgICAgQVNTRVJUKG1fcGlwZWxpbmUp
OworCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJHb2luZyB0byBQTEFZSU5HISIp
OworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHBpcGVsaW5lKCksIEdTVF9TVEFURV9QTEFZ
SU5HKTsKK30KKwordm9pZCBHU3RyZWFtZXJDYXB0dXJlcjo6c3RvcCgpCit7CisgICAgQVNTRVJU
KG1fcGlwZWxpbmUpOworCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJUZWFyaW5n
IGRvd24hIik7CisKKyAgICAvLyBNYWtlIHN1cmUgdG8gcmVtb3ZlIHN5bmMgaGFuZGxlciBiZWZv
cmUgdGVhcmluZyBkb3duLCBhdm9pZGluZworICAgIC8vIHBvc3NpYmxlIGRlYWRsb2Nrcy4KKyAg
ICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdT
VF9QSVBFTElORShwaXBlbGluZSgpKSkpOworICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihi
dXMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKHBpcGVsaW5lKCksIEdTVF9TVEFURV9OVUxMKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisjZW5k
aWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VC
UlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2JmY2VkYWQ4MDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ2FwdHVyZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNh
dW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0
cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5j
bHVkZSAiTGliV2ViUlRDTWFjcm9zLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyQ2FwdHVyZXIgeworcHVibGljOgorICAg
IEdTdHJlYW1lckNhcHR1cmVyKEdTdHJlYW1lckNhcHR1cmVEZXZpY2UsIEdSZWZQdHI8R3N0Q2Fw
cz4pOworICAgIEdTdHJlYW1lckNhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJjZUZhY3RvcnksIEdS
ZWZQdHI8R3N0Q2Fwcz4pOworICAgIH5HU3RyZWFtZXJDYXB0dXJlcigpOworCisgICAgdm9pZCBz
ZXR1cFBpcGVsaW5lKCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RvcCgpOworICAgIEdzdENhcHMqIGNhcHMoKTsKKyAgICB2b2lkIGFkZFNpbmsoR3N0RWxl
bWVudCAqbmV3U2luayk7CisgICAgR3N0RWxlbWVudCogbWFrZUVsZW1lbnQoY29uc3QgY2hhciog
ZmFjdG9yeU5hbWUpOworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVNvdXJjZSgpOworICAgIEdzdEVs
ZW1lbnQqIHNvdXJjZSgpIHsgcmV0dXJuIG1fc3JjLmdldCgpOyAgfQorICAgIHZpcnR1YWwgY29u
c3QgY2hhciogbmFtZSgpID0gMDsKKworICAgIEdzdEVsZW1lbnQqIHNpbmsoKSBjb25zdCB7IHJl
dHVybiBtX3NpbmsuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNpbmsoR3N0RWxlbWVudCogc2luaykg
eyBtX3NpbmsgPSBhZG9wdEdSZWYoc2luayk7IH07CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIEdzdEVs
ZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV9zaW5rOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zcmM7CisgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBtX3RlZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fY2Fw
c2ZpbHRlcjsKKyAgICBHUmVmUHRyPEdzdERldmljZT4gbV9kZXZpY2U7CisgICAgR1JlZlB0cjxH
c3RDYXBzPiBtX2NhcHM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworCitw
cml2YXRlOgorICAgIGNvbnN0IGNoYXIqIG1fc291cmNlRmFjdG9yeTsKKworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kYmExYWU2MzIwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJj
ZS5jcHAKQEAgLTAsMCArMSw1MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRl
ICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgorCisjaW5jbHVkZSAiQXVkaW9UcmFja1By
aXZhdGUuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0RhdGEuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIK
KyNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQ
cml2YXRlLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPGdz
dC9iYXNlL2dzdGZsb3djb21iaW5lci5oPgorCisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAs
IDApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJl
YW1TcmNQdXNoVmlkZW9TYW1wbGUoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBs
ZSogZ3N0c2FtcGxlKTsKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaEF1ZGlv
U2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RTYW1wbGUqIGdzdHNhbXBsZSk7
CitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5kZWQoV2ViS2l0TWVkaWFT
dHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJik7CisKK3N0YXRpYyBHc3RT
dGF0aWNQYWRUZW1wbGF0ZSB2aWRlb1NyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExB
VEUoInZpZGVvX3NyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9TT01FVElNRVMs
CisgICAgR1NUX1NUQVRJQ19DQVBTKCJ2aWRlby94LXJhdyIpKTsKKworc3RhdGljIEdzdFN0YXRp
Y1BhZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgi
YXVkaW9fc3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX1NPTUVUSU1FUywKKyAg
ICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtcmF3KEFOWSk7IikpOworCitzdGF0aWMgR3N0VGFn
TGlzdCogbWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRUYWdzKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlKiB0cmFjaykKK3sKKyAgICBhdXRvIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5
KCk7CisKKyAgICBpZiAoIXRyYWNrLT5sYWJlbCgpLmlzRW1wdHkoKSkgeworICAgICAgICBnc3Rf
dGFnX2xpc3RfYWRkKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAorICAgICAgICAgICAg
R1NUX1RBR19USVRMRSwgdHJhY2stPmxhYmVsKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7Cisg
ICAgfQorCisgICAgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlw
ZTo6QXVkaW8pIHsKKyAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdsaXN0LCBHU1RfVEFHX01F
UkdFX0FQUEVORCwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19LSU5ELAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihBdWRpb1RyYWNrUHJpdmF0ZTo6S2luZDo6TWFpbiksIG51bGxwdHIpOwor
ICAgIH0gZWxzZSBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
OjpWaWRlbykgeworICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ2xpc3QsIEdTVF9UQUdfTUVS
R0VfQVBQRU5ELCBXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX0tJTkQsCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KFZpZGVvVHJhY2tQcml2YXRlOjpLaW5kOjpNYWluKSwgbnVsbHB0cik7CisK
KyAgICAgICAgaWYgKHRyYWNrLT5pc0NhcHR1cmVUcmFjaygpKSB7CisgICAgICAgICAgICBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UmIHNvdXJjZSA9IHN0YXRpY19jYXN0PEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZSY+KAorICAgICAgICAgICAgICAgIHRyYWNrLT5zb3VyY2UoKSk7CisK
KyAgICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBF
TkQsCisgICAgICAgICAgICAgICAgV0VCS0lUX01FRElBX1RSQUNLX1RBR19XSURUSCwgc291cmNl
LnNpemUoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgIFdFQktJVF9NRURJQV9UUkFDS19UQUdf
SEVJR0hULCBzb3VyY2Uuc2l6ZSgpLmhlaWdodCgpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0YWdsaXN0OworfQorCitHc3RTdHJlYW0qIHdlYmtpdE1lZGlhU3Ry
ZWFtTmV3KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaykKK3sKKyAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHM7CisgICAgR3N0U3RyZWFtVHlwZSB0eXBlOworCisgICAgaWYgKHRyYWNrLT50
eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pIHsKKyAgICAgICAgY2Fw
cyA9IGFkb3B0R1JlZihnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcygmYXVkaW9TcmNU
ZW1wbGF0ZSkpOworICAgICAgICB0eXBlID0gR1NUX1NUUkVBTV9UWVBFX0FVRElPOworICAgIH0g
ZWxzZSBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRl
bykgeworICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dl
dF9jYXBzKCZ2aWRlb1NyY1RlbXBsYXRlKSk7CisgICAgICAgIHR5cGUgPSBHU1RfU1RSRUFNX1RZ
UEVfVklERU87CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0ZJWE1FKCJIYW5kbGUgJWQgdHlw
ZSIsIChnaW50KSB0cmFjay0+dHlwZSgpKTsKKworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBhdXRvIGdzdHN0cmVhbSA9IChHc3RTdHJlYW0qKWdzdF9zdHJlYW1fbmV3KHRy
YWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIGNhcHMuZ2V0KCksIHR5cGUsIEdTVF9T
VFJFQU1fRkxBR19TRUxFQ1QpOworICAgIGF1dG8gdGFncyA9IGFkb3B0R1JlZihtZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZUdldFRhZ3ModHJhY2spKTsKKyAgICBnc3Rfc3RyZWFtX3NldF90YWdzKGdz
dHN0cmVhbSwgdGFncy5nZXQoKSk7CisKKyAgICByZXR1cm4gZ3N0c3RyZWFtOworfQorCitjbGFz
cyBXZWJLaXRNZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXIKKyAgICA6IHB1YmxpYyBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYktpdE1l
ZGlhU3RyZWFtVHJhY2tPYnNlcnZlcigpIHsgfTsKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVRyYWNr
T2JzZXJ2ZXIoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNyYykKKyAgICAgICAgOiBtX21lZGlhU3Ry
ZWFtU3JjKHNyYykgeyB9CisgICAgdm9pZCB0cmFja1N0YXJ0ZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmKSBmaW5hbCB7IH07CisKKyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmIHRyYWNrKSBmaW5hbAorICAgIHsKKyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1T
cmNUcmFja0VuZGVkKG1fbWVkaWFTdHJlYW1TcmMsIHRyYWNrKTsKKyAgICB9CisKKyAgICB2b2lk
IHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9Owor
ICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBm
aW5hbCB7IH07CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJikgZmluYWwgeyB9OworICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH07CisKKyAgICB2b2lkIHNhbXBsZUJ1ZmZlclVwZGF0
ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYgc2FtcGxlKSBmaW5hbAor
ICAgIHsKKyAgICAgICAgYXV0byBnc3RzYW1wbGUgPSBzdGF0aWNfY2FzdDxNZWRpYVNhbXBsZUdT
dHJlYW1lcio+KCZzYW1wbGUpLT5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RTYW1wbGU7CisK
KyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoVmlkZW9TYW1wbGUobV9tZWRpYVN0cmVh
bVNyYywgZ3N0c2FtcGxlKTsKKyAgICB9CisKKyAgICB2b2lkIGF1ZGlvU2FtcGxlc0F2YWlsYWJs
ZShNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IFBsYXRm
b3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBz
aXplX3QpIGZpbmFsCisgICAgeworICAgICAgICBhdXRvIGF1ZGlvZGF0YSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdTdHJlYW1lckF1ZGlvRGF0YSY+KGF1ZGlvRGF0YSk7CisKKyAgICAgICAgd2Via2l0
TWVkaWFTdHJlYW1TcmNQdXNoQXVkaW9TYW1wbGUobV9tZWRpYVN0cmVhbVNyYywgYXVkaW9kYXRh
LmdldFNhbXBsZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIG1fbWVkaWFTdHJlYW1TcmM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFT
dHJlYW1TcmNDbGFzcyBXZWJLaXRNZWRpYVN0cmVhbVNyY0NsYXNzOworc3RydWN0IF9XZWJLaXRN
ZWRpYVN0cmVhbVNyYyB7CisgICAgR3N0QmluIHBhcmVudF9pbnN0YW5jZTsKKworICAgIGdjaGFy
KiB1cmk7CisKKyAgICBHc3RFbGVtZW50KiBhdWRpb1NyYzsKKyAgICBHc3RFbGVtZW50KiB2aWRl
b1NyYzsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXRNZWRpYVN0cmVhbVRyYWNrT2JzZXJ2
ZXI+IG9ic2VydmVyOworICAgIFN0cmluZyB2aWRlb1RyYWNrSUQ7CisgICAgdm9sYXRpbGUgZ2lu
dCBucGFkczsKKyAgICBndWxvbmcgcHJvYmVpZDsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2
YXRlPiBzdHJlYW07CisKKyAgICBHc3RGbG93Q29tYmluZXIqIGZsb3dDb21iaW5lcjsKKyAgICBH
UmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IHN0cmVhbUNvbGxlY3Rpb247Cit9OworCitzdHJ1
Y3QgX1dlYktpdE1lZGlhU3RyZWFtU3JjQ2xhc3MgeworICAgIEdzdEJpbkNsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0lTX0xJVkUsCisgICAg
UFJPUF9MQVNUCit9OworCitzdGF0aWMgR3N0VVJJVHlwZSB3ZWJraXRfbWVkaWFfc3RyZWFtX3Ny
Y191cmlfZ2V0X3R5cGUoR1R5cGUpCit7CisgICAgcmV0dXJuIEdTVF9VUklfU1JDOworfQorCitz
dGF0aWMgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY191cmlfZ2V0
X3Byb3RvY29scyhHVHlwZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgZ2NoYXIqIHByb3RvY29sc1td
ID0geyAibWVkaWFzdHJlYW0iLCBudWxscHRyIH07CisKKyAgICByZXR1cm4gcHJvdG9jb2xzOwor
fQorCitzdGF0aWMgZ2NoYXIqIHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfdXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIpCit7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYg
PSBXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhoYW5kbGVyKTsKKworICAgIC8qIEZJWE1FOiBtYWtl
IHRocmVhZC1zYWZlICovCisgICAgcmV0dXJuIGdfc3RyZHVwKHNlbGYtPnVyaSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaVNldFVyaShHc3RVUklIYW5kbGVy
KiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLAorICAgIEdFcnJvcioqKQoreworICAgIFdlYktp
dE1lZGlhU3RyZWFtU3JjKiBzZWxmID0gV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoaGFuZGxlcik7
CisgICAgc2VsZi0+dXJpID0gZ19zdHJkdXAodXJpKTsKKworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVy
IGdfaWZhY2UsIGdwb2ludGVyKQoreworICAgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqIGlmYWNl
ID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqKWdfaWZhY2U7CisKKyAgICBpZmFjZS0+Z2V0X3R5
cGUgPSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY191cmlfZ2V0X3R5cGU7CisgICAgaWZhY2UtPmdl
dF9wcm90b2NvbHMgPSB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY191cmlfZ2V0X3Byb3RvY29sczsK
KyAgICBpZmFjZS0+Z2V0X3VyaSA9IHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3VyaV9nZXRfdXJp
OworICAgIGlmYWNlLT5zZXRfdXJpID0gd2Via2l0TWVkaWFTdHJlYW1TcmNVcmlTZXRVcmk7Cit9
CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnCisKKyNk
ZWZpbmUgZG9Jbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCB3ZWJraXRN
ZWRpYVN0cmVhbVNyY1VyaUhhbmRsZXJJbml0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zywg
IndlYmtpdHdlYm1lZGlhc3RyZWFtc3JjIiwgMCwgIm1lZGlhc3RyZWFtc3JjIGVsZW1lbnQiKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyhXRUJLSVRfTUVESUFfVFJBQ0tfVEFHX1dJ
RFRILCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX0lOVCwgIldlYmtpdCBNZWRpYVN0cmVhbSB3
aWR0aCIsICJXZWJraXQgTWVkaWFTdHJlYW0gd2lkdGgiLCBnc3RfdGFnX21lcmdlX3VzZV9maXJz
dCk7ICAgIFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyhXRUJLSVRfTUVESUFfVFJBQ0tf
VEFHX0hFSUdIVCwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9JTlQsICJXZWJraXQgTWVkaWFT
dHJlYW0gaGVpZ2h0IiwgIldlYmtpdCBNZWRpYVN0cmVhbSBoZWlnaHQiLCBnc3RfdGFnX21lcmdl
X3VzZV9maXJzdCk7IFwKKyAgICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyhXRUJLSVRfTUVESUFf
VFJBQ0tfVEFHX0tJTkQsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfSU5ULCAiV2Via2l0IE1l
ZGlhU3RyZWFtIEtpbmQiLCAiV2Via2l0IE1lZGlhU3RyZWFtIEtpbmQiLCBnc3RfdGFnX21lcmdl
X3VzZV9maXJzdCk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdE1lZGlhU3RyZWFt
U3JjLCB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyYywgR1NUX1RZUEVfQklOLCBkb0luaXQpOworCitz
dGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUqLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNH
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUs
CisgICAgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAg
Y2FzZSBQUk9QX0lTX0xJVkU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIFRS
VUUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3Nl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IFdF
QktJVF9NRURJQV9TVFJFQU1fU1JDKG9iamVjdCk7CisKKyAgICBpZiAoc2VsZi0+YXVkaW9TcmMp
IHsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihzZWxmKSwgc2VsZi0+YXVkaW9TcmMp
OworICAgICAgICBzZWxmLT5hdWRpb1NyYyA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKHNl
bGYtPnZpZGVvU3JjKSB7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4oc2VsZiksIHNl
bGYtPnZpZGVvU3JjKTsKKyAgICAgICAgc2VsZi0+dmlkZW9TcmMgPSBudWxscHRyOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNGaW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYgPSBXRUJLSVRfTUVESUFf
U1RSRUFNX1NSQyhvYmplY3QpOworCisgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOworICAgIGZv
ciAoYXV0byYgdHJhY2sgOiBzZWxmLT5zdHJlYW0tPnRyYWNrcygpKQorICAgICAgICB0cmFjay0+
cmVtb3ZlT2JzZXJ2ZXIoKnNlbGYtPm9ic2VydmVyLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VO
TE9DSyhzZWxmKTsKKworICAgIGdfY2xlYXJfcG9pbnRlcigmc2VsZi0+dXJpLCBnX2ZyZWUpOwor
ICAgIGdzdF9mbG93X2NvbWJpbmVyX2ZyZWUoc2VsZi0+Zmxvd0NvbWJpbmVyKTsKK30KKworc3Rh
dGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFtU3JjQ2hhbmdlU3RhdGUo
R3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgICBH
c3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQ7CisgICAgYXV0byogc2VsZiA9IFdFQktJVF9NRURJ
QV9TVFJFQU1fU1JDKGVsZW1lbnQpOworCisgICAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NUQVRF
X0NIQU5HRV9QQVVTRURfVE9fUkVBRFkpIHsKKworICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc2Vs
Zik7CisgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBzZWxmLT5zdHJlYW0tPnRyYWNrcygpKQor
ICAgICAgICAgICAgdHJhY2stPnJlbW92ZU9ic2VydmVyKCpzZWxmLT5vYnNlcnZlci5nZXQoKSk7
CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOworICAgIH0KKworICAgIHJlc3VsdCA9
IEdTVF9FTEVNRU5UX0NMQVNTKHdlYmtpdF9tZWRpYV9zdHJlYW1fc3JjX3BhcmVudF9jbGFzcykt
PmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKKworICAgIGlmICh0cmFuc2l0aW9u
ID09IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEKQorICAgICAgICByZXN1bHQgPSBH
U1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfc3RyZWFtX3NyY19jbGFzc19pbml0KFdlYktpdE1lZGlh
U3RyZWFtU3JjQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGdzdGVsZW1l
bnRfa2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnb2JqZWN0X2NsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjRmluYWxpemU7CisgICAgZ29iamVjdF9j
bGFzcy0+ZGlzcG9zZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjRGlzcG9zZTsKKyAgICBnb2JqZWN0
X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY0dldFByb3BlcnR5Owor
ICAgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0
UHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3Rf
Y2xhc3MsIFBST1BfSVNfTElWRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oImlzLWxp
dmUiLCAiSXMgTGl2ZSIsCisgICAgICAgICAgICAiTGV0IHBsYXliaW4zIGtub3cgd2UgYXJlIGEg
bGl2ZSBzb3VyY2UuIiwKKyAgICAgICAgICAgIFRSVUUsIChHUGFyYW1GbGFncykoR19QQVJBTV9S
RUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7CisKKyAgICBnc3RlbGVtZW50X2ts
YXNzLT5jaGFuZ2Vfc3RhdGUgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY0NoYW5nZVN0YXRlOworICAg
IGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZ3N0ZWxlbWVudF9rbGFzcywKKyAg
ICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZ2aWRlb1NyY1RlbXBsYXRlKSk7Cisg
ICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShnc3RlbGVtZW50X2tsYXNzLAor
ICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJmF1ZGlvU3JjVGVtcGxhdGUpKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3N0cmVhbV9zcmNfaW5pdChXZWJLaXRNZWRp
YVN0cmVhbVNyYyogc2VsZikKK3sKKyAgICBzZWxmLT5vYnNlcnZlciA9IHN0ZDo6bWFrZV91bmlx
dWU8V2ViS2l0TWVkaWFTdHJlYW1UcmFja09ic2VydmVyPihzZWxmKTsKKyAgICBzZWxmLT5mbG93
Q29tYmluZXIgPSBnc3RfZmxvd19jb21iaW5lcl9uZXcoKTsKK30KKwordHlwZWRlZiBzdHJ1Y3Qg
eworICAgIFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmOworICAgIFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4gdHJhY2s7CisgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZF90ZW1w
bGF0ZTsKK30gUHJvYmVEYXRhOworCitzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRNZWRpYVN0
cmVhbVNyY0NoYWluKEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIG9iamVjdCwgR3N0QnVmZmVyKiBi
dWZmZXIpCit7CisgICAgR3N0Rmxvd1JldHVybiByZXN1bHQ7CisgICAgR1JlZlB0cjxXZWJLaXRN
ZWRpYVN0cmVhbVNyYz4gc2VsZiA9IGFkb3B0R1JlZihXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhn
c3Rfb2JqZWN0X2dldF9wYXJlbnQob2JqZWN0KSkpOworCisgICAgcmVzdWx0ID0gZ3N0X2Zsb3df
Y29tYmluZXJfdXBkYXRlX3BhZF9mbG93KHNlbGYuZ2V0KCktPmZsb3dDb21iaW5lciwgcGFkLAor
ICAgICAgICBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQocGFkLCBHU1RfT0JKRUNUKHNlbGYu
Z2V0KCkpLCBidWZmZXIpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBH
c3RQYWQqIHRhcmdldCwgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZF90ZW1wbGF0ZSkKK3sKKyAg
ICBhdXRvIHBhZG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgic3JjXyV1IiwgZ19hdG9taWNfaW50X2Fk
ZCgmKHNlbGYtPm5wYWRzKSwgMSkpOworICAgIGF1dG8gZ2hvc3RwYWQgPSBnc3RfZ2hvc3RfcGFk
X25ld19mcm9tX3RlbXBsYXRlKHBhZG5hbWUudXRmOCgpLmRhdGEoKSwgdGFyZ2V0LAorICAgICAg
ICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQocGFkX3RlbXBsYXRlKSk7CisKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKHNlbGYsICIlcyBHaG9zdGluZyAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAg
ICAgZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcoR1NUX09CSkVDVF9DQVNUKHNlbGYpKSwKKyAg
ICAgICAgdGFyZ2V0KTsKKworICAgIGF1dG8gcHJveHlwYWQgPSBhZG9wdEdSZWYoR1NUX1BBRChn
c3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbChHU1RfUFJPWFlfUEFEKGdob3N0cGFkKSkpKTsKKyAg
ICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbihwcm94eXBhZC5nZXQoKSwKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8R3N0UGFkQ2hhaW5GdW5jdGlvbj4od2Via2l0TWVkaWFTdHJlYW1TcmNDaGFpbikp
OworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShnaG9zdHBhZCwgVFJVRSk7CisgICAgQVNTRVJUKGdz
dF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQoc2VsZiksIEdTVF9QQUQoZ2hvc3RwYWQpKSk7
Cit9CisKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiB3ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFBy
b2JlQ2IoR3N0UGFkKiBwYWQsIEdzdFBhZFByb2JlSW5mbyogaW5mbywgUHJvYmVEYXRhKiBkYXRh
KQoreworICAgIEdzdEV2ZW50KiBldmVudCA9IEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChpbmZv
KTsKKyAgICBXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiA9IGRhdGEtPnNlbGY7CisKKyAgICBz
d2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX1NUUkVB
TV9TVEFSVDogeworICAgICAgICBjb25zdCBnY2hhciogc3RyZWFtX2lkOworICAgICAgICBHUmVm
UHRyPEdzdFN0cmVhbT4gc3RyZWFtID0gbnVsbHB0cjsKKworICAgICAgICBnc3RfZXZlbnRfcGFy
c2Vfc3RyZWFtX3N0YXJ0KGV2ZW50LCAmc3RyZWFtX2lkKTsKKyAgICAgICAgaWYgKCFnX3N0cmNt
cDAoc3RyZWFtX2lkLCBkYXRhLT50cmFjay0+aWQoKS51dGY4KCkuZGF0YSgpKSkgeworICAgICAg
ICAgICAgR1NUX0lORk9fT0JKRUNUKHBhZCwgIkV2ZW50IGhhcyBiZWVuIHN0aWNrZWQgYWxyZWFk
eSIpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgICAgIH0KKwor
ICAgICAgICBhdXRvIHN0cmVhbV9zdGFydCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0KGRh
dGEtPnRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBnc3RfZXZlbnRfc2V0X2dy
b3VwX2lkKHN0cmVhbV9zdGFydCwgMSk7CisgICAgICAgIGdzdF9ldmVudF91bnJlZihldmVudCk7
CisKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgc3RyZWFtX3N0YXJ0KTsKKyAgICAg
ICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fY29sbGVjdGlv
bihzZWxmLT5zdHJlYW1Db2xsZWN0aW9uLmdldCgpKSk7CisgICAgICAgIGdzdF9wYWRfcHVzaF9l
dmVudChwYWQsIGdzdF9ldmVudF9uZXdfdGFnKG1lZGlhU3RyZWFtVHJhY2tQcml2YXRlR2V0VGFn
cyhkYXRhLT50cmFjay5nZXQoKSkpKTsKKworICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY0Fk
ZFBhZChzZWxmLCBwYWQsIGRhdGEtPnBhZF90ZW1wbGF0ZSk7CisKKyAgICAgICAgcmV0dXJuIEdT
VF9QQURfUFJPQkVfSEFORExFRDsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwU3JjKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBz
ZWxmLAorICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaywgR3N0RWxlbWVudCogZWxl
bWVudCwKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkX3RlbXBsYXRlLCBnYm9vbGVhbiBv
YnNlcnZlX3RyYWNrKQoreworICAgIGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKGVsZW1lbnQsICJzcmMiKSk7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklO
KHNlbGYpLCBlbGVtZW50KTsKKworCisgICAgUHJvYmVEYXRhKiBkYXRhID0gbmV3IFByb2JlRGF0
YTsKKyAgICBkYXRhLT5zZWxmID0gV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoc2VsZik7CisgICAg
ZGF0YS0+cGFkX3RlbXBsYXRlID0gcGFkX3RlbXBsYXRlOworICAgIGRhdGEtPnRyYWNrID0gdHJh
Y2s7CisKKyAgICBzZWxmLT5wcm9iZWlkID0gZ3N0X3BhZF9hZGRfcHJvYmUocGFkLmdldCgpLCAo
R3N0UGFkUHJvYmVUeXBlKUdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAorICAg
ICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjayl3ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFByb2JlQ2Is
IGRhdGEsCisgICAgICAgIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAgICAgICAgICAgIGRlbGV0ZSAo
UHJvYmVEYXRhKilkYXRhOworICAgICAgICB9KTsKKworICAgIGlmIChvYnNlcnZlX3RyYWNrKQor
ICAgICAgICB0cmFjay0+YWRkT2JzZXJ2ZXIoKnNlbGYtPm9ic2VydmVyLmdldCgpKTsKKworICAg
IGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoZWxlbWVudCk7CisgICAgcmV0dXJu
IFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwQXBw
U3JjKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLAorICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlKiB0cmFjaywgR3N0RWxlbWVudCoqIGVsZW1lbnQsCisgICAgR3N0U3RhdGljUGFkVGVtcGxh
dGUqIHBhZF90ZW1wbGF0ZSkKK3sKKyAgICAqZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZSgiYXBwc3JjIiwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KCplbGVtZW50LCAiaXMt
bGl2ZSIsIHRydWUsICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIG51bGxwdHIpOworCisgICAg
cmV0dXJuIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBTcmMoc2VsZiwgdHJhY2ssICplbGVtZW50
LCBwYWRfdGVtcGxhdGUsIFRSVUUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVh
bVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRp
YVN0cmVhbVByaXZhdGUqIHN0cmVhbSkKK3sKKyAgICBHU1RfT0JKRUNUX0xPQ0soc2VsZik7Cisg
ICAgc2VsZi0+c3RyZWFtQ29sbGVjdGlvbiA9IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxlY3Rp
b25fbmV3KHN0cmVhbS0+aWQoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgZm9yIChhdXRvJiB0cmFj
ayA6IHN0cmVhbS0+dHJhY2tzKCkpIHsKKyAgICAgICAgYXV0byBnc3RzdHJlYW0gPSB3ZWJraXRN
ZWRpYVN0cmVhbU5ldyh0cmFjay5nZXQoKSk7CisKKyAgICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0
aW9uX2FkZF9zdHJlYW0oc2VsZi0+c3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgZ3N0c3RyZWFtKTsK
KyAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc2VsZik7CisKKyAgICBnc3RfZWxlbWVudF9w
b3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksCisgICAgICAgIGdzdF9tZXNzYWdlX25ld19z
dHJlYW1fY29sbGVjdGlvbihHU1RfT0JKRUNUKHNlbGYpLCBzZWxmLT5zdHJlYW1Db2xsZWN0aW9u
LmdldCgpKSk7Cit9CisKK2dib29sZWFuIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFtKFdl
YktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVByaXZhdGUqIHN0cmVhbSkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NSQyhzZWxm
KSwgRkFMU0UpOworCisgICAgaWYgKHNlbGYtPmF1ZGlvU3JjKSB7CisgICAgICAgIGdzdF9lbGVt
ZW50X3NldF9zdGF0ZShzZWxmLT5hdWRpb1NyYywgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBn
c3RfYmluX3JlbW92ZShHU1RfQklOKHNlbGYpLCBzZWxmLT5hdWRpb1NyYyk7CisgICAgICAgIHNl
bGYtPmF1ZGlvU3JjID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+dmlkZW9TcmMp
IHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNlbGYtPnZpZGVvU3JjLCBHU1RfU1RB
VEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4oc2VsZiksIHNlbGYtPnZp
ZGVvU3JjKTsKKyAgICAgICAgc2VsZi0+dmlkZW9TcmMgPSBudWxscHRyOworICAgIH0KKworICAg
IHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9zdFN0cmVhbUNvbGxlY3Rpb24oc2VsZiwgc3RyZWFtKTsK
KworICAgIHNlbGYtPnN0cmVhbSA9IHN0cmVhbTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogc3Ry
ZWFtLT50cmFja3MoKSkgeworICAgICAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbykgeworICAgICAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1T
cmNTZXR1cEFwcFNyYyhzZWxmLCB0cmFjay5nZXQoKSwgJnNlbGYtPmF1ZGlvU3JjLAorICAgICAg
ICAgICAgICAgICZhdWRpb1NyY1RlbXBsYXRlKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cmFjay0+
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKSB7CisgICAgICAgICAg
ICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVwQXBwU3JjKHNlbGYsIHRyYWNrLmdldCgpLCAmc2Vs
Zi0+dmlkZW9TcmMsCisgICAgICAgICAgICAgICAgJnZpZGVvU3JjVGVtcGxhdGUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX0lORk8oIlVuc3Vwb3J0ZWQgdHJhY2sgdHlwZTog
JWQiLCAoZ2ludCkgdHJhY2stPnR5cGUoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRN
ZWRpYVN0cmVhbVNyY1B1c2hWaWRlb1NhbXBsZShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwg
R3N0U2FtcGxlKiBnc3RzYW1wbGUpCit7CisgICAgaWYgKHNlbGYtPnZpZGVvU3JjKQorICAgICAg
ICBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZShHU1RfQVBQX1NSQyhzZWxmLT52aWRlb1NyYyksIGdz
dHNhbXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaEF1ZGlv
U2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBHc3RTYW1wbGUqIGdzdHNhbXBsZSkK
K3sKKyAgICBpZiAoc2VsZi0+YXVkaW9TcmMpCisgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hfc2Ft
cGxlKEdTVF9BUFBfU1JDKHNlbGYtPmF1ZGlvU3JjKSwgZ3N0c2FtcGxlKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKFdlYktpdE1lZGlhU3RyZWFtU3Jj
KiBzZWxmLAorICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiB0cmFjaykKK3sKKyAgICBHUmVm
UHRyPEdzdFBhZD4gcGFkID0gbnVsbHB0cjsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzZWxmKTsK
KyAgICBmb3IgKGF1dG8gdG1wID0gR1NUX0VMRU1FTlQoc2VsZiktPnNyY3BhZHM7IHRtcDsgdG1w
ID0gdG1wLT5uZXh0KSB7CisgICAgICAgIEdzdFBhZCogdG1wcGFkID0gR1NUX1BBRCh0bXAtPmRh
dGEpOworICAgICAgICBjb25zdCBnY2hhciogc3RyZWFtX2lkOworCisgICAgICAgIEdzdEV2ZW50
KiBzdHJlYW1fc3RhcnQgPSBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQodG1wcGFkLCBHU1RfRVZF
TlRfU1RSRUFNX1NUQVJULCAwKTsKKyAgICAgICAgaWYgKCFzdHJlYW1fc3RhcnQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0KHN0
cmVhbV9zdGFydCwgJnN0cmVhbV9pZCk7CisgICAgICAgIGlmIChTdHJpbmcoc3RyZWFtX2lkKSA9
PSB0cmFjay5pZCgpKSB7CisgICAgICAgICAgICBwYWQgPSB0bXBwYWQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxmKTsKKwor
ICAgIGlmICghcGFkKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIHBhZCBm
b3VuZCBmb3IgJXMiLCB0cmFjay5pZCgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdmlkZW8udmlkZW9XaWR0aCBp
cyByZXNldCB0byAwCisgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNQb3N0U3RyZWFtQ29sbGVjdGlv
bihzZWxmLCBzZWxmLT5zdHJlYW0uZ2V0KCkpOworICAgIGF1dG8gdGFncyA9IG1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlR2V0VGFncygmdHJhY2spOworICAgIGdzdF9wYWRfcHVzaF9ldmVudChwYWQu
Z2V0KCksIGdzdF9ldmVudF9uZXdfdGFnKHRhZ3MpKTsKKyAgICBnc3RfcGFkX3B1c2hfZXZlbnQo
cGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X2VvcygpKTsKK30KKworfSAvLyBXZWJDb3JlCisjZW5k
aWYgLy8gR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisjZW5kaWYgLy8gRU5BQkxFKFZJREVP
KSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1l
ZGlhU3RyZWFtU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZWI0MTEyZTcwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFT
dHJlYW1Tb3VyY2UuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRz
YXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhA
aWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCisKKyNpbmNsdWRl
IDxnc3QvZ3N0Lmg+CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX1RSQUNLX1RBR19XSURUSCAid2Vi
a2l0LW1lZGlhLXN0cmVhbS13aWR0aCIKKyNkZWZpbmUgV0VCS0lUX01FRElBX1RSQUNLX1RBR19I
RUlHSFQgIndlYmtpdC1tZWRpYS1zdHJlYW0taGVpZ2h0IgorI2RlZmluZSBXRUJLSVRfTUVESUFf
VFJBQ0tfVEFHX0tJTkQgIndlYmtpdC1tZWRpYS1zdHJlYW0ta2luZCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFTdHJlYW1TcmMgV2ViS2l0TWVk
aWFTdHJlYW1TcmM7CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobykgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvKSwgV0VCS0lUX1RZUEVfTUVESUFfU1RSRUFNX1NSQywg
V2ViS2l0TWVkaWFTdHJlYW1TcmMpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NS
QyhvKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG8pLCBXRUJLSVRfVFlQRV9NRURJQV9T
VFJFQU1fU1JDKSkKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfU1RSRUFNX1NSQyAod2Via2l0
X21lZGlhX3N0cmVhbV9zcmNfZ2V0X3R5cGUoKSkKK0dUeXBlIHdlYmtpdF9tZWRpYV9zdHJlYW1f
c3JjX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKK2dib29sZWFuIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjU2V0U3RyZWFtKFdlYktpdE1lZGlhU3RyZWFtU3JjKiwgTWVkaWFTdHJlYW1Qcml2YXRl
Kik7Cit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjVhOWRmYjUxN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHAKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5p
ZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZS5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURldmljZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8
Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWlu
dGVyZmFjZS5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvcGVlcmNvbm5lY3Rpb25pbnRlcmZhY2Uu
aD4KKyNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvYmFzZS92aWRlb2NvbW1vbi5oPgorI2luY2x1ZGUg
PHdlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9jYXB0dXJlci5oPgorI2luY2x1ZGUgPHdl
YnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9jYXB0dXJlcmZhY3RvcnkuaD4KKyNpbmNsdWRl
IDx3ZWJydGMvbW9kdWxlcy92aWRlb19jYXB0dXJlL3ZpZGVvX2NhcHR1cmVfZGVmaW5lcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHN0YXRpYyBpbnQgZGVmYXVsdFdpZHRoID0g
NjQwOworY29uc3Qgc3RhdGljIGludCBkZWZhdWx0SGVpZ2h0ID0gNDgwOworCitHU1RfREVCVUdf
Q0FURUdPUlkod2Via2l0X3ZpZGVvX2NhcHR1cmVfc291cmNlX2RlYnVnKTsKKyNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF92aWRlb19jYXB0dXJlX3NvdXJjZV9kZWJ1ZworCitzdGF0aWMg
dm9pZCBpbml0aWFsaXplR1N0cmVhbWVyRGVidWcoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0
ZXJlZEZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3Zp
ZGVvX2NhcHR1cmVfc291cmNlX2RlYnVnLCAid2Via2l0dmlkZW9jYXB0dXJlc291cmNlIiwgMCwK
KyAgICAgICAgICAgICJXZWJLaXQgVmlkZW8gQ2FwdHVyZSBTb3VyY2UuIik7CisgICAgfSk7Cit9
CisKK2NsYXNzIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZUZhY3RvcnkgZmluYWwgOiBwdWJs
aWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSB7CitwdWJsaWM6Cisg
ICAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlVmlkZW9DYXB0dXJlU291cmNlKGNvbnN0IENh
cHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMp
IGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
OjpjcmVhdGUoZGV2aWNlLnBlcnNpc3RlbnRJZCgpLCBjb25zdHJhaW50cyk7CisgICAgfQorfTsK
KworUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9yeSYgbGliV2ViUlRDVmlk
ZW9DYXB0dXJlU291cmNlRmFjdG9yeSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdT
dHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk+IGZhY3Rvcnk7CisgICAgcmV0dXJuIGZh
Y3RvcnkuZ2V0KCk7Cit9CisKK0NhcHR1cmVTb3VyY2VPckVycm9yIEdTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IE1lZGlhQ29u
c3RyYWludHMqIGNvbnN0cmFpbnRzKQoreworICAgIGF1dG8gZGV2aWNlID0gR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkuZ3N0cmVhbWVyRGV2aWNlV2l0aFVJ
RChkZXZpY2VJRCk7CisgICAgaWYgKCFkZXZpY2UpIHsKKyAgICAgICAgYXV0byBlcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpjcmVhdGUo
KTogR1N0cmVhbWVyIGRpZCBub3QgZmluZCB0aGUgZGV2aWNlOiAlcy4iLCBkZXZpY2VJRC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUo
ZXJyb3JNZXNzYWdlKSk7CisgICAgfQorCisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3
IEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShkZXZpY2UudmFsdWUoKSkpOworCisgICAgaWYg
KGNvbnN0cmFpbnRzKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLT5hcHBseUNvbnN0
cmFpbnRzKCpjb25zdHJhaW50cyk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQudmFsdWUoKS5maXJzdCk7CisgICAgfQorICAgIHJldHVybiBD
YXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKHNvdXJjZSkpOworfQorCitSZWFsdGltZU1lZGlh
U291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6
OmZhY3RvcnkoKQoreworICAgIHJldHVybiBsaWJXZWJSVENWaWRlb0NhcHR1cmVTb3VyY2VGYWN0
b3J5KCk7Cit9CisKK0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6R1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgZ2NoYXIgKnNvdXJjZV9mYWN0b3J5KQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShk
ZXZpY2VJRCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8sIG5hbWUpCisgICAgLCBt
X2NhcHR1cmVyKHN0ZDo6bWFrZV91bmlxdWU8R1N0cmVhbWVyVmlkZW9DYXB0dXJlcj4oc291cmNl
X2ZhY3RvcnkpKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXJEZWJ1ZygpOworfQorCitHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShHU3Ry
ZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2
aWNlLnBlcnNpc3RlbnRJZCgpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgZGV2
aWNlLmxhYmVsKCkpCisgICAgLCBtX2NhcHR1cmVyKHN0ZDo6bWFrZV91bmlxdWU8R1N0cmVhbWVy
VmlkZW9DYXB0dXJlcj4oZGV2aWNlKSkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyRGVidWco
KTsKK30KKworR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjp+R1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlKCkKK3sKK30KKworYm9vbCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFw
cGx5U2l6ZShjb25zdCBJbnRTaXplICZzaXplKQoreworICAgIG1fY2FwdHVyZXItPnNldFNpemUo
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlGcmFtZVJhdGUoZG91YmxlIGZy
YW1lcmF0ZSkKK3sKKyAgICBtX2NhcHR1cmVyLT5zZXRGcmFtZVJhdGUoZnJhbWVyYXRlKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6
c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBtX2NhcHR1cmVyLT5zZXR1cFBpcGVsaW5lKCk7
CisgICAgbV9jYXB0dXJlci0+c2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
KTsKKyAgICBtX2NhcHR1cmVyLT5zZXRGcmFtZVJhdGUoZnJhbWVSYXRlKCkpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9jYXB0dXJlci0+c2luaygpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0so
bmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBtX2NhcHR1cmVyLT5wbGF5KCk7Cit9CisK
K0dzdEZsb3dSZXR1cm4gR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpuZXdTYW1wbGVDYWxs
YmFjayhHc3RFbGVtZW50KiBzaW5rLCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UqIHNvdXJj
ZSkKK3sKKyAgICBhdXRvIGdzdFNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9z
YW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlh
U2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShnc3RTYW1wbGUpLCBXZWJDb3JlOjpGbG9h
dFNpemUoKSwgU3RyaW5nKCkpOworCisgICAgLy8gRklYTUUgLSBDaGVjayBob3cgcHJlc2VudGF0
aW9uU2l6ZSBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGhlcmUuCisgICAgY2FsbE9uTWFpblRocmVh
ZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnNvdXJjZSksIG1lZGlhU2FtcGxlID0gV1RGTW92
ZShtZWRpYVNhbXBsZSldIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+dmlkZW9TYW1wbGVBdmFp
bGFibGUobWVkaWFTYW1wbGUuZ2V0KCkpOworICAgIH0pOworCisgICAgcmV0dXJuIEdTVF9GTE9X
X09LOworfQorCit2b2lkIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2lu
Z0RhdGEoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2Nh
cHR1cmVyLT5zaW5rKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG5ld1NhbXBsZUNhbGxi
YWNrKSwgdGhpcyk7CisgICAgbV9jYXB0dXJlci0+c3RvcCgpOworCisgICAgR1NUX0lORk8oIlJl
c2V0IGhlaWdodCBhbmQgd2lkdGggYWZ0ZXIgc3RvcHBpbmcgc291cmNlIik7CisgICAgc2V0SGVp
Z2h0KDApOworICAgIHNldFdpZHRoKDApOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzJiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygp
IGNvbnN0Cit7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzKQorICAgICAgICByZXR1cm4gbV9jYXBh
YmlsaXRpZXMudmFsdWUoKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMg
Y2FwYWJpbGl0aWVzKHNldHRpbmdzKCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7CisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKG1fY2FwdHVyZXItPmNhcHMoKSk7CisgICAg
aW50MzJfdCBtaW5XaWR0aCA9IEdfTUFYSU5UMzIsIG1heFdpZHRoID0gMCwgbWluSGVpZ2h0ID0g
R19NQVhJTlQzMiwgbWF4SGVpZ2h0ID0gMDsKKyAgICBkb3VibGUgbWluRnJhbWVyYXRlID0gR19N
QVhET1VCTEUsIG1heEZyYW1lcmF0ZSA9IEdfTUlORE9VQkxFOworCisgICAgZm9yIChndWludCBp
ID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOyBpKyspIHsKKyAgICAgICAg
R3N0U3RydWN0dXJlKiBzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGkp
OworCisgICAgICAgIC8vIE9ubHkgYWNjZXB0IHJhdyB2aWRlbyBmb3Igbm93LgorICAgICAgICBp
ZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RyLCAidmlkZW8veC1yYXciKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGludDMyX3QgdG1wTWluV2lkdGgsIHRtcE1pbkhlaWdo
dCwgdG1wTWluRlBTTnVtZXJhdG9yLCB0bXBNaW5GUFNEZW5vbWluYXRvcjsKKyAgICAgICAgaW50
MzJfdCB0bXBNYXhXaWR0aCwgdG1wTWF4SGVpZ2h0LCB0bXBNYXhGUFNOdW1lcmF0b3IsIHRtcE1h
eEZQU0Rlbm9taW5hdG9yOworICAgICAgICBkb3VibGUgdG1wTWluRnJhbWVyYXRlID0gR19NQVhE
T1VCTEUsIHRtcE1heEZyYW1lcmF0ZSA9IEdfTUlORE9VQkxFOworCisgICAgICAgIGlmICghZ3N0
X3N0cnVjdHVyZV9nZXQoc3RyLCAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsICZ0bXBNaW5X
aWR0aCwgJnRtcE1heFdpZHRoLCAiaGVpZ2h0IiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAmdG1wTWlu
SGVpZ2h0LCAmdG1wTWF4SGVpZ2h0LCBudWxscHRyKSkgeworICAgICAgICAgICAgaWYgKCFnc3Rf
c3RydWN0dXJlX2dldChzdHIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsICZ0bXBNaW5XaWR0aCwgImhl
aWdodCIsIEdfVFlQRV9JTlQsICZ0bXBNaW5IZWlnaHQsIG51bGxwdHIpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0bXBNYXhXaWR0aCA9IHRtcE1pbldpZHRoOwor
ICAgICAgICAgICAgdG1wTWF4SGVpZ2h0ID0gdG1wTWluSGVpZ2h0OworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0ciwgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZS
QUNUSU9OX1JBTkdFLCAmdG1wTWluRlBTTnVtZXJhdG9yLCAmdG1wTWluRlBTRGVub21pbmF0b3Is
ICZ0bXBNYXhGUFNOdW1lcmF0b3IsICZ0bXBNYXhGUFNEZW5vbWluYXRvciwgbnVsbHB0cikpIHsK
KyAgICAgICAgICAgIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSh0bXBNaW5GUFNOdW1lcmF0
b3IsIHRtcE1pbkZQU0Rlbm9taW5hdG9yLCAmdG1wTWluRnJhbWVyYXRlKTsKKyAgICAgICAgICAg
IGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSh0bXBNYXhGUFNOdW1lcmF0b3IsIHRtcE1heEZQ
U0Rlbm9taW5hdG9yLCAmdG1wTWF4RnJhbWVyYXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChnc3Rf
c3RydWN0dXJlX2dldChzdHIsCisgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJB
Q1RJT04sICZ0bXBNaW5GUFNOdW1lcmF0b3IsICZ0bXBNaW5GUFNEZW5vbWluYXRvciwgbnVsbHB0
cikpIHsKKyAgICAgICAgICAgIHRtcE1heEZQU051bWVyYXRvciA9IHRtcE1pbkZQU051bWVyYXRv
cjsKKyAgICAgICAgICAgIHRtcE1heEZQU0Rlbm9taW5hdG9yID0gdG1wTWluRlBTRGVub21pbmF0
b3I7CisgICAgICAgICAgICBnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUodG1wTWluRlBTTnVt
ZXJhdG9yLCB0bXBNaW5GUFNEZW5vbWluYXRvciwgJnRtcE1pbkZyYW1lcmF0ZSk7CisgICAgICAg
ICAgICBnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUodG1wTWF4RlBTTnVtZXJhdG9yLCB0bXBN
YXhGUFNEZW5vbWluYXRvciwgJnRtcE1heEZyYW1lcmF0ZSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBjb25zdCBHVmFsdWUqIGZyYW1lUmF0ZXMoZ3N0X3N0cnVjdHVyZV9nZXRfdmFs
dWUoc3RyLCAiZnJhbWVyYXRlIikpOworICAgICAgICAgICAgdG1wTWluRnJhbWVyYXRlID0gR19N
QVhET1VCTEU7CisgICAgICAgICAgICB0bXBNYXhGcmFtZXJhdGUgPSAwLjA7CisKKyAgICAgICAg
ICAgIGd1aW50IGZyYW1lUmF0ZXNMZW5ndGggPSBzdGF0aWNfY2FzdDxndWludD4oZ3N0X3ZhbHVl
X2xpc3RfZ2V0X3NpemUoZnJhbWVSYXRlcykpIC0gMTsKKworICAgICAgICAgICAgZm9yIChndWlu
dCBpID0gMDsgaSA8IGZyYW1lUmF0ZXNMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGRv
dWJsZSB0bXBGcmFtZVJhdGU7CisgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWwgPSBn
c3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUoZnJhbWVSYXRlcywgaSk7CisKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoR19WQUxVRV9UWVBFKHZhbCkgPT0gR1NUX1RZUEVfRlJBQ1RJT04pOworICAgICAg
ICAgICAgICAgIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZShnc3RfdmFsdWVfZ2V0X2ZyYWN0
aW9uX251bWVyYXRvcih2YWwpLAorICAgICAgICAgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2Zy
YWN0aW9uX2Rlbm9taW5hdG9yKHZhbCksICZ0bXBGcmFtZVJhdGUpOworCisgICAgICAgICAgICAg
ICAgdG1wTWluRnJhbWVyYXRlID0gc3RkOjptaW4odG1wTWluRnJhbWVyYXRlLCB0bXBGcmFtZVJh
dGUpOworICAgICAgICAgICAgICAgIHRtcE1heEZyYW1lcmF0ZSA9IHN0ZDo6bWF4KHRtcE1heEZy
YW1lcmF0ZSwgdG1wRnJhbWVSYXRlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGkgPiAwKSB7CisgICAgICAgICAgICAgICAgbWluV2lkdGggPSBzdGQ6Om1pbih0bXBNaW5XaWR0
aCwgbWluV2lkdGgpOworICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9IHN0ZDo6bWluKHRtcE1p
bkhlaWdodCwgbWluSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBtaW5GcmFtZXJhdGUgPSBzdGQ6
Om1pbih0bXBNaW5GcmFtZXJhdGUsIG1pbkZyYW1lcmF0ZSk7CisKKyAgICAgICAgICAgICAgICBt
YXhXaWR0aCA9IHN0ZDo6bWF4KHRtcE1heFdpZHRoLCBtYXhXaWR0aCk7CisgICAgICAgICAgICAg
ICAgbWF4SGVpZ2h0ID0gc3RkOjptYXgodG1wTWF4SGVpZ2h0LCBtYXhIZWlnaHQpOworICAgICAg
ICAgICAgICAgIG1heEZyYW1lcmF0ZSA9IHN0ZDo6bWF4KHRtcE1heEZyYW1lcmF0ZSwgbWF4RnJh
bWVyYXRlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWluV2lkdGgg
PSB0bXBNaW5XaWR0aDsKKyAgICAgICAgICAgICAgICBtaW5IZWlnaHQgPSB0bXBNaW5IZWlnaHQ7
CisgICAgICAgICAgICAgICAgbWluRnJhbWVyYXRlID0gdG1wTWluRnJhbWVyYXRlOworCisgICAg
ICAgICAgICAgICAgbWF4V2lkdGggPSB0bXBNYXhXaWR0aDsKKyAgICAgICAgICAgICAgICBtYXhI
ZWlnaHQgPSB0bXBNYXhIZWlnaHQ7CisgICAgICAgICAgICAgICAgbWF4RnJhbWVyYXRlID0gdG1w
TWF4RnJhbWVyYXRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2FwYWJp
bGl0aWVzLnNldERldmljZUlkKGlkKCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgo
Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZShtaW5XaWR0aCwgbWF4V2lkdGgpKTsKKyAgICAgICAgY2Fw
YWJpbGl0aWVzLnNldEhlaWdodChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKG1pbkhlaWdodCwgbWF4
SGVpZ2h0KSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZShtaW5GcmFtZXJhdGUsIG1heEZyYW1lcmF0ZSkpOworICAgICAgICBtX2NhcGFi
aWxpdGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9j
YXBhYmlsaXRpZXMudmFsdWUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzJiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fY3VycmVudFNldHRpbmdzKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3Muc2V0RGV2aWNlSWQoaWQoKSk7CisK
KyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBvcnRl
ZENvbnN0cmFpbnRzOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rl
dmljZUlkKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Zh
Y2luZ01vZGUodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
V2lkdGgodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVp
Z2h0KHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVj
dFJhdGlvKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Zy
YW1lUmF0ZSh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMo
c3VwcG9ydGVkQ29uc3RyYWludHMpOworCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RG
TW92ZShzZXR0aW5ncyk7CisgICAgfQorCisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFdpZHRo
KHNpemUoKS53aWR0aCgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0SGVpZ2h0KHNpemUo
KS5oZWlnaHQoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldEZyYW1lUmF0ZShmcmFtZVJh
dGUoKSk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldEFzcGVjdFJhdGlvKGFzcGVjdFJhdGlv
KCkpOworICAgIG1fY3VycmVudFNldHRpbmdzLT5zZXRGYWNpbmdNb2RlKGZhY2luZ01vZGUoKSk7
CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJX
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM3OWJhN2UwZmQ2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhv
cjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxl
amFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisj
aW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVk
aWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmlj
ZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFZpZGVvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOworICAg
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fY2FwdHVyZXItPnBp
cGVsaW5lKCk7IH0KKyAgICBHU3RyZWFtZXJDYXB0dXJlciogY2FwdHVyZXIoKSB7IHJldHVybiBt
X2NhcHR1cmVyLmdldCgpOyB9CisKKworcHJvdGVjdGVkOgorICAgIEdTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IGdjaGFyICogc291cmNlX2ZhY3RvcnkpOworICAgIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNv
dXJjZShHU3RyZWFtZXJDYXB0dXJlRGV2aWNlKTsKKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UoKTsKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRl
OworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKKworICAgIG11dGFibGUg
c3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxp
dGllczsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgR3N0Rmxvd1Jl
dHVybiBuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiwgR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlKik7CisKKyAgICBib29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KKyAgICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7Cisg
ICAgYm9vbCBhcHBseUZyYW1lUmF0ZShkb3VibGUpIGZpbmFsOworICAgIGJvb2wgYXBwbHlBc3Bl
Y3RSYXRpbyhkb3VibGUpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxHU3RyZWFtZXJWaWRlb0NhcHR1cmVyPiBtX2NhcHR1cmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJ
QldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJW
aWRlb0NhcHR1cmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ODhiNjA1MDIxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5jcHAKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAq
IEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIuaCIKKwor
I2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0dTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZXIoR1N0cmVhbWVy
Q2FwdHVyZURldmljZSBkZXZpY2UpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFk
b3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXJhdyIpKSkKK3sKK30K
KworR1N0cmVhbWVyVmlkZW9DYXB0dXJlcjo6R1N0cmVhbWVyVmlkZW9DYXB0dXJlcihjb25zdCBj
aGFyKiBzb3VyY2VGYWN0b3J5KQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoc291cmNlRmFjdG9y
eSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtcmF3IikpKQor
eworfQorCitHc3RFbGVtZW50KiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0
ZXIoKQoreworICAgIGF1dG8gY29udmVydGVyID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0
aW9uKCJ2aWRlb3NjYWxlICEgdmlkZW9jb252ZXJ0ICEgdmlkZW9yYXRlIiwgVFJVRSwgbnVsbHB0
cik7CisKKyAgICBBU1NFUlQoY29udmVydGVyKTsKKworICAgIHJldHVybiBjb252ZXJ0ZXI7Cit9
CisKK0dzdFZpZGVvSW5mbyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpnZXRCZXN0Rm9ybWF0KCkK
K3sKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZml4YXRl
KGdzdF9kZXZpY2VfZ2V0X2NhcHMobV9kZXZpY2UuZ2V0KCkpKSk7CisgICAgR3N0VmlkZW9JbmZv
IGluZm87CisgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzLmdldCgpKTsK
KworICAgIHJldHVybiBpbmZvOworfQorCitib29sIEdTdHJlYW1lclZpZGVvQ2FwdHVyZXI6OnNl
dFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghd2lkdGggfHwgIWhlaWdo
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9j
YXBzX2NvcHkobV9jYXBzLmdldCgpKSk7CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NhcHMu
Z2V0KCksICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHdpZHRoLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwg
aGVpZ2h0LCBudWxscHRyKTsKKworICAgIGlmICghbV9jYXBzZmlsdGVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBnX29iamVjdF9zZXQobV9jYXBzZmlsdGVyLmdldCgpLCAiY2FwcyIs
IG1fY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVyOjpzZXRGcmFtZVJhdGUoZG91YmxlIGZyYW1lUmF0ZSkKK3sK
KyAgICBpbnQgbnVtZXJhdG9yLCBkZW5vbWluYXRvcjsKKworICAgIGdzdF91dGlsX2RvdWJsZV90
b19mcmFjdGlvbihmcmFtZVJhdGUsICZudW1lcmF0b3IsICZkZW5vbWluYXRvcik7CisKKyAgICBp
ZiAobnVtZXJhdG9yIDwgLUdfTUFYSU5UKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiRnJhbWVyYXRlICVmIG5vdCBhbGxvd2VkIiwgZnJhbWVSYXRlKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbnVtZXJhdG9yKSB7CisgICAg
ICAgIEdTVF9JTkZPX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRG8gbm90IGZvcmNlIHZhcmlh
YmxlIGZyYW1lcmF0ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9j
YXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkobV9jYXBzLmdldCgpKSk7CisgICAgZ3N0X2Nh
cHNfc2V0X3NpbXBsZShtX2NhcHMuZ2V0KCksICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElP
TiwgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgbnVsbHB0cik7CisKKyAgICBpZiAoIW1fY2Fwc2Zp
bHRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc2Zp
bHRlci5nZXQoKSwgImNhcHMiLCBtX2NhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyVmlkZW9DYXB0dXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNTdiMGI0Njg2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0
dXJlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJA
aWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlh
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJX
RUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlci5o
IgorCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR1N0cmVhbWVyVmlkZW9DYXB0dXJlciA6IHB1YmxpYyBHU3RyZWFtZXJDYXB0dXJl
ciB7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJl
RGV2aWNlKTsKKyAgICBHU3RyZWFtZXJWaWRlb0NhcHR1cmVyKGNvbnN0IGNoYXIqIHNvdXJjZV9m
YWN0b3J5KTsKKworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUNvbnZlcnRlcigpIGZpbmFsOworICAg
IGNvbnN0IGNoYXIqIG5hbWUoKSBmaW5hbCB7IHJldHVybiAiVmlkZW8iOyB9CisKKyAgICBib29s
IHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBib29sIHNldEZyYW1lUmF0ZShk
b3VibGUpOworICAgIEdzdFZpZGVvSW5mbyBnZXRCZXN0Rm9ybWF0KCk7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJ
QldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
b2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uOTk1ZjA1NzIwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZVNvdXJjZS5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmll
ciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIk1v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIk1vY2tSZWFsdGlt
ZUF1ZGlvU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBlZE1v
Y2tSZWFsdGltZUF1ZGlvU291cmNlIDogcHVibGljIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlIHsK
K3B1YmxpYzoKKyAgICBXcmFwcGVkTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IE1vY2tSZWFsdGltZUF1
ZGlvU291cmNlKGRldmljZUlELCBuYW1lKQorICAgIHsKKyAgICB9Cit9OworCitDYXB0dXJlU291
cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
ZGV2aWNlSUQsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRz
KiBjb25zdHJhaW50cykKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwgbmFtZSkpOworCisgICAgaWYgKGNv
bnN0cmFpbnRzICYmIHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1v
dmUoc291cmNlKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4gTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhjb25z
dCBNZWRpYUNvbnN0cmFpbnRzJiBjb25zdHJhaW50cykKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2Ut
PmFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworICAgIHJldHVybiBHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMpOworfQorCit2b2lk
IE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3Qg
TWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMsIFN1Y2Nlc3NIYW5kbGVyJiYgc3VjY2Vzc0hh
bmRsZXIsIEZhaWx1cmVIYW5kbGVyJiYgZmFpbHVyZUhhbmRsZXIpCit7CisgICAgbV93cmFwcGVk
U291cmNlLT5hcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBXVEZNb3ZlKHN1Y2Nlc3NIYW5k
bGVyKSwgV1RGTW92ZShmYWlsdXJlSGFuZGxlcikpOworfQorCitNb2NrR1N0cmVhbWVyQXVkaW9D
YXB0dXJlU291cmNlOjpNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmlu
ZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEdTdHJlYW1lckF1ZGlvQ2Fw
dHVyZVNvdXJjZShkZXZpY2VJRCwgbmFtZSkKKyAgICAsIG1fd3JhcHBlZFNvdXJjZShzdGQ6Om1h
a2VfdW5pcXVlPFdyYXBwZWRNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZT4oZGV2aWNlSUQsIG5hbWUp
KQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworfQorCitNb2Nr
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjp+TW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNv
dXJjZSgpCit7CisgICAgbV93cmFwcGVkU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Cit9
CisKK3ZvaWQgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0Rh
dGEoKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+c3RvcCgpOworCisgICAgR1N0cmVhbWVyQXVk
aW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpOworfQorCit2b2lkIE1vY2tHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICBtX3dy
YXBwZWRTb3VyY2UtPnN0YXJ0KCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyYgTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAor
eworICAgIHJldHVybiBtX3dyYXBwZWRTb3VyY2UtPnNldHRpbmdzKCk7Cit9CisKK2NvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVT
b3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgbV9jYXBhYmlsaXRpZXMgPSBtX3dy
YXBwZWRTb3VyY2UtPmNhcGFiaWxpdGllcygpOworICAgIG1fY3VycmVudFNldHRpbmdzID0gbV93
cmFwcGVkU291cmNlLT5zZXR0aW5ncygpOworICAgIHJldHVybiBtX3dyYXBwZWRTb3VyY2UtPmNh
cGFiaWxpdGllcygpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2U6
OmNhcHR1cmVGYWlsZWQoKQoreworICAgIHN0b3AoKTsKKyAgICBSZWFsdGltZU1lZGlhU291cmNl
OjpjYXB0dXJlRmFpbGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFN
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVT
b3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmMxMWYxNzli
OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqIEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1
dGhvcjogQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RS
RUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNl
IGZpbmFsIDogcHVibGljIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSwgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIE1vY2tHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICB+TW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZSgpOworICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gYXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRpYUNv
bnN0cmFpbnRzJik7CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3Ry
YWludHMmLCBTdWNjZXNzSGFuZGxlciYmLCBGYWlsdXJlSGFuZGxlciYmKSBmaW5hbDsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdGFy
dFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lk
IGNhcHR1cmVGYWlsZWQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVhbHRpbWVNZWRpYVNvdXJj
ZT4gbV93cmFwcGVkU291cmNlOworCisgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRp
YVNhbXBsZSYpIG92ZXJyaWRlIHsgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShH
U1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmJkZmFiZWRkNDZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3Bw
CkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxp
YS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElC
V0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIk1vY2tHU3RyZWFtZXJWaWRlb0Nh
cHR1cmVTb3VyY2UuaCIKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0
YXBwc3JjLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV3JhcHBlZE1vY2tSZWFs
dGltZVZpZGVvU291cmNlIDogcHVibGljIE1vY2tSZWFsdGltZVZpZGVvU291cmNlIHsKK3B1Ymxp
YzoKKyAgICBXcmFwcGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IE1vY2tSZWFsdGltZVZpZGVvU291
cmNlKGRldmljZUlELCBuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZVNhbXBs
ZUJ1ZmZlcigpCisgICAgeworICAgICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWluYXRv
cjsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCk7CisKKyAg
ICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBn
c3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24oZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZm
cHNEZW5vbWluYXRvcik7CisgICAgICAgIGF1dG8gZGF0YSA9IGltYWdlQnVmZmVyLT50b0JHUkFE
YXRhKCk7CisgICAgICAgIGF1dG8gc2l6ZSA9IGRhdGEuc2l6ZSgpOworICAgICAgICBhdXRvIGlt
YWdlX3NpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8gZ3N0
c2FtcGxlID0gZ3N0X3NhbXBsZV9uZXcoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChzdGF0aWNfY2Fz
dDxndWludDgqPihkYXRhLnJlbGVhc2VCdWZmZXIoKS5nZXQoKSksIHNpemUpLAorICAgICAgICAg
ICAgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKKyAgICAgICAg
ICAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkJHUkEiLAorICAgICAgICAgICAgICAg
ICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGltYWdlX3NpemUud2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaW1hZ2Vfc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIGZwc051bWVyYXRvciwgZnBzRGVu
b21pbmF0b3IsCisgICAgICAgICAgICAgICAgbnVsbHB0cikpLmdldCgpLAorICAgICAgICAgICAg
bnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgYXV0byBzYW1wbGUgPSBNZWRpYVNhbXBsZUdT
dHJlYW1lcjo6Y3JlYXRlKFdURk1vdmUoZ3N0c2FtcGxlKSwKKyAgICAgICAgICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSgpLCBTdHJpbmcoKSk7CisgICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKHNh
bXBsZSk7CisgICAgfQorfTsKKworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlELAorICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCit7CisgICAgYXV0
byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uo
ZGV2aWNlSUQsIG5hbWUpKTsKKworICAgIGlmIChjb25zdHJhaW50cyAmJiBzb3VyY2UtPmFwcGx5
Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJl
dHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKHNvdXJjZSkpOworfQorCit2b2lkIE1v
Y2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7Cisg
ICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAg
ICBtX3dyYXBwZWRTb3VyY2UtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIG1fd3JhcHBlZFNvdXJj
ZS0+c3RvcCgpOworCisgICAgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVj
aW5nRGF0YSgpOworfQorCit2b2lkIE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnZp
ZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBzYW1wbGUpCit7CisgICAgYXV0byBzcmMg
PSBjYXB0dXJlcigpLT5zb3VyY2UoKTsKKworICAgIGlmIChzcmMpIHsKKyAgICAgICAgYXV0byBn
c3RzYW1wbGUgPSBzdGF0aWNfY2FzdDxNZWRpYVNhbXBsZUdTdHJlYW1lcio+KCZzYW1wbGUpLT5w
bGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RTYW1wbGU7CisgICAgICAgIGdzdF9hcHBfc3JjX3B1
c2hfc2FtcGxlKEdTVF9BUFBfU1JDKHNyYyksIGdzdHNhbXBsZSk7CisgICAgfQorfQorCitNb2Nr
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjpNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEdT
dHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwgbmFtZSwgImFwcHNyYyIpCisgICAg
LCBtX3dyYXBwZWRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxXcmFwcGVkTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2U+KGRldmljZUlELCBuYW1lKSkKK3sKKyAgICBtX3dyYXBwZWRTb3VyY2UtPmFkZE9i
c2VydmVyKCp0aGlzKTsKK30KKworTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6fk1v
Y2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoKQoreworICAgIG1fd3JhcHBlZFNvdXJjZS0+
cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworfQorCitzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4+IE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3Ry
YWludHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMpCit7CisgICAgbV93cmFw
cGVkU291cmNlLT5hcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKKyAgICByZXR1cm4gR1N0
cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsK
K30KKwordm9pZCBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFp
bnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxlciYm
IHN1Y2Nlc3NIYW5kbGVyLCBGYWlsdXJlSGFuZGxlciYmIGZhaWx1cmVIYW5kbGVyKQoreworICAg
IG1fd3JhcHBlZFNvdXJjZS0+YXBwbHlDb25zdHJhaW50cyhjb25zdHJhaW50cywgV1RGTW92ZShz
dWNjZXNzSGFuZGxlciksIFdURk1vdmUoZmFpbHVyZUhhbmRsZXIpKTsKK30KKworY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBNb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNl
OjpzZXR0aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd3JhcHBlZFNvdXJjZS0+c2V0dGlu
Z3MoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgTW9ja0dT
dHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBt
X2NhcGFiaWxpdGllcyA9IG1fd3JhcHBlZFNvdXJjZS0+Y2FwYWJpbGl0aWVzKCk7CisgICAgbV9j
dXJyZW50U2V0dGluZ3MgPSBtX3dyYXBwZWRTb3VyY2UtPnNldHRpbmdzKCk7CisgICAgcmV0dXJu
IG1fY2FwYWJpbGl0aWVzLnZhbHVlKCk7Cit9CisKK3ZvaWQgTW9ja0dTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZTo6Y2FwdHVyZUZhaWxlZCgpCit7CisgICAgc3RvcCgpOworCisgICAgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6Y2FwdHVyZUZhaWxlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVy
VmlkZW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmRjODAyNzY4ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxp
YS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMp
ICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3Vy
Y2UuaCIKKyNpbmNsdWRlICJNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFdyYXBwZWRNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTsKKy8vIFdl
IGFyZSBzdWJjbGFzc2luZyBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UgYW5kIG5vdCBNb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZQorLy8gYmVjYXVzZSB0aGUgTWVkaWFQbGF5ZXIgZXhwZWN0cyBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UgdG8gYmUgYWJsZSB0byBwcm9wZXJseQorLy8gYnVp
bGQgdGhlIEdTdHJlYW1lciBwaXBlbGluZS4gU3RpbGwgd2UgbWFrZSBpdCBzbyB0aGF0IGl0IGJl
aGF2ZXMgYXMgY2xvc2VseSBhcyBwb3NzaWJsZQorLy8gdG8gdGhlIE1vY2tSZWFsdGltZU1lZGlh
U291cmNlIGNsYXNzIGJ5IHdyYXBwaW5nIG91ciBvd24gc3ViY2xhc3Mgb2YgaXQuCitjbGFzcyBN
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6T2JzZXJ2ZXIgeworcHVibGlj
OgorICAgIE1vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB+TW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZSgpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4g
YXBwbHlDb25zdHJhaW50cyhjb25zdCBNZWRpYUNvbnN0cmFpbnRzJik7CisgICAgdm9pZCBhcHBs
eUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmLCBTdWNjZXNzSGFuZGxlciYmLCBG
YWlsdXJlSGFuZGxlciYmKSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0b3BQcm9kdWNp
bmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAg
ICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmlu
YWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IG1fd3JhcHBlZFNv
dXJjZTsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmls
aXRpZXMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKSBvdmVycmlkZTsK
KworICAgIHZvaWQgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmKSBvdmVycmlkZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkY2UxZDZlNjBmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuY3BwCkBAIC0wLDAgKzEsOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
IEF1dGhvcjogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKyAqIEF1dGhv
cjogQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2FsaWEuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCisjaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQy5oIgorCisjaW5jbHVkZSAiR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ2FwdHVyZURl
dmljZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU1lZGlhU291cmNlOjpB
dWRpb0NhcHR1cmVGYWN0b3J5JiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjph
dWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckxpYldlYlJUQzo6c2luZ2xldG9uKCkuYXVkaW9GYWN0b3J5KCk7Cit9CisKK1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMmIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJMaWJXZWJSVEM6OnNpbmdsZXRvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldl
YlJUQz4gY2VudGVyOworICAgIHJldHVybiBjZW50ZXI7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnBsYXRmb3JtQ2VudGVyKCkKK3sK
KyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQzo6c2luZ2xldG9u
KCk7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OlJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMoKQorICAgIDogbV9saWJXZWJSVENQcm92aWRlcihMaWJX
ZWJSVENQcm92aWRlcjo6Y3JlYXRlKCkpCit7Cit9CisKK1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJMaWJXZWJSVEM6On5SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDKCkKK3sKK30K
KworUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckxpYldlYlJUQzo6YXVkaW9GYWN0b3J5KCkKK3sKKyAgICBpZiAobV9hdWRp
b0ZhY3RvcnlPdmVycmlkZSkKKyAgICAgICAgcmV0dXJuICptX2F1ZGlvRmFjdG9yeU92ZXJyaWRl
OworCisgICAgcmV0dXJuIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpOwor
fQorCitSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlb0NhcHR1cmVGYWN0b3J5JiBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTGliV2ViUlRDOjp2aWRlb0ZhY3RvcnkoKQoreworICAgIHJldHVybiBH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKTsKK30KKworQ2FwdHVyZURldmlj
ZU1hbmFnZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OmF1ZGlvQ2FwdHVy
ZURldmljZU1hbmFnZXIoKQoreworICAgIHJldHVybiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKK30KKworQ2FwdHVyZURldmljZU1hbmFnZXImIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEM6OnZpZGVvQ2FwdHVyZURldmljZU1hbmFnZXIo
KQoreworICAgIHJldHVybiBHU3RyZWFtZXJWaWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5n
bGV0b24oKTsKK30KKworQ2FwdHVyZURldmljZU1hbmFnZXImIFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJMaWJXZWJSVEM6OmRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7CisgICAgcmV0
dXJuIEdTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJU
Qy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uOTIxMjg0ZTE3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckxpYldlYlJUQy5oCkBAIC0wLDAgKzEsNjggQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIg
PHRzYXVuaWVyQGlnYWxpYS5jb20+CisgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFs
ZXhAaWdhbGlhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkxpYldlYlJUQ1Byb3ZpZGVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJj
ZS5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKKworI2luY2x1ZGUg
PHdlYnJ0Yy9hcGkvcGVlcmNvbm5lY3Rpb25pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyBmaW5hbCA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckxpYldlYlJUQyYgc2luZ2xl
dG9uKCk7CisKKyAgICB3ZWJydGM6OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZSogZmFj
dG9yeSgpIHsgcmV0dXJuIG1fbGliV2ViUlRDUHJvdmlkZXItPmZhY3RvcnkoKTsgfQorCisgICAg
c3RhdGljIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvQ2FwdHVyZUZhY3RvcnkmIHZpZGVvQ2Fw
dHVyZVNvdXJjZUZhY3RvcnkoKTsKKyAgICBzdGF0aWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVk
aW9DYXB0dXJlRmFjdG9yeSYgYXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSgpOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTGliV2ViUlRDPjsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTGliV2ViUlRDKCk7
CisgICAgflJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJMaWJXZWJSVEMoKTsKKworICAgIHZvaWQg
c2V0QXVkaW9GYWN0b3J5KFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvQ2FwdHVyZUZhY3Rvcnkm
IGZhY3RvcnkpIGZpbmFsIHsgbV9hdWRpb0ZhY3RvcnlPdmVycmlkZSA9ICZmYWN0b3J5OyB9Cisg
ICAgdm9pZCB1bnNldEF1ZGlvRmFjdG9yeShSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1
cmVGYWN0b3J5JikgZmluYWwgeyBtX2F1ZGlvRmFjdG9yeU92ZXJyaWRlID0gbnVsbHB0cjsgfQor
CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgYXVkaW9GYWN0
b3J5KCkgZmluYWw7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW9DYXB0dXJlRmFjdG9y
eSYgdmlkZW9GYWN0b3J5KCkgZmluYWw7CisKKyAgICBDYXB0dXJlRGV2aWNlTWFuYWdlciYgYXVk
aW9DYXB0dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFsOworICAgIENhcHR1cmVEZXZpY2VNYW5hZ2Vy
JiB2aWRlb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgZmluYWw7CisgICAgQ2FwdHVyZURldmljZU1h
bmFnZXImIGRpc3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlcigpIGZpbmFsOworCisgICAgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSogbV9hdWRpb0ZhY3RvcnlPdmVycmlk
ZSB7IG51bGxwdHIgfTsKKyAgICBVbmlxdWVSZWY8TGliV2ViUlRDUHJvdmlkZXI+IG1fbGliV2Vi
UlRDUHJvdmlkZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwCmlu
ZGV4IGM1MGFiY2I3YTMyLi45YzYwMjRlNTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKQEAgLTU1LDcg
KzU1LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQorI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpICYmICEoVVNF
KEdTVFJFQU1FUikgJiYgVVNFKExJQldFQlJUQykpCiBDYXB0dXJlU291cmNlT3JFcnJvciBNb2Nr
UmVhbHRpbWVBdWRpb1NvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7CiAg
ICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlKGRl
dmljZUlELCBuYW1lKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDllODYwZDZjZjVhLi5lZGVkYTgz
YTBlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICNlbmRp
ZgogfTsKIAotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCisjaWYgIVBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykgJiYgIShVU0UoR1NUUkVBTUVSKSAmJiBVU0UoTElC
V0VCUlRDKSkKIENhcHR1cmVTb3VyY2VPckVycm9yIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBN
ZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKICAgICBhdXRvIHNvdXJjZSA9IGFkb3B0
UmVmKCpuZXcgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UoZGV2aWNlSUQsIG5hbWUpKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMmQ0MjE4YTUy
Mi4uNDFkM2IyOWY5NjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0wNS0xOCAgVGhpYmF1bHQgU2F1bmllciAg
PHRzYXVuaWVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBTdGFydCBpbXBsZW1l
bnRpbmcgTWVkaWFTdHJlYW0gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODU3ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogQXBwbHkg
c3BlY2lhbCBmb3JtYXR0aW5nIHJ1bGVzIGZvciBuZXcgR09iamVjdCBzdWJjbGFzc2VzLgorICAg
ICAgICAqIGdzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXM6IEFkZGVkIGEgcGF0Y2ggZm9yIHRoZSBn
c3QtcGx1Z2lucy1iYXNlLgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5z
LWJhc2UtMDAwMS1wYXJzZWJpbi1Qb3N0LVNUUkVBTV9DT0xMRUNUSU9OLW9uLUVWRU5UX1NUUkVB
TV9DT0xMLnBhdGNoOgorICAgICAgICBBZGRlZCB0aGlzIGZpeCB0byBnc3QtcGx1Z2luZ3MtYmFz
ZSB0byBmaXggdGhlIGRlY29kZWJpbjMuIE1lcmdlZCBhcyA4OWQwZTljYzkyYTg2YWEwMjI3ZWU4
NzQwNjczN2I2ZDMxNjcwYWVhCisKIDIwMTgtMDYtMDcgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25v
cmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl1bTWluaUJyb3dzZXJdIFN1cHBvcnQg
bXVsdGlwbGUgd2luZG93cyBwcm9wZXJseQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5CmluZGV4IDMzM2RjZTI2NTY3Li5hNTkwOGU2MDE2YSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjA3LDYgKzIwNyw4IEBAIF9QQVRIX1JVTEVTX1NQ
RUNJRklFUiA9IFsKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxh
dGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ1ZpZGVvU2lua0dTdHJlYW1lci5jcHAn
KSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAn
Z3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAnKSwK
ICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnYXVk
aW8nLCAnZ3N0cmVhbWVyJywgJ1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCcpLAor
ICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdtZWRp
YXN0cmVhbScsICdnc3RyZWFtZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCcpLAor
ICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdtZWRp
YXN0cmVhbScsICdnc3RyZWFtZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwJyks
CiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ25l
dHdvcmsnLCAnc291cCcsICdQcm94eVJlc29sdmVyU291cC5jcHAnKSwKICAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbmV0d29yaycsICdzb3VwJywg
J1Byb3h5UmVzb2x2ZXJTb3VwLmgnKV0sCiAgICAgIFsiLXJlYWRhYmlsaXR5L25hbWluZyIsCmRp
ZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcwppbmRleCA1YWViNzU2ZWMwYS4uYzkwYTBjYjQ2OGMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL2dzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcwpAQCAtNTcsNyArNTcsOSBAQAogICAgIDxkZXBlbmRlbmNpZXM+
CiAgICAgICA8ZGVwIHBhY2thZ2U9ImdzdHJlYW1lciIvPgogICAgIDwvZGVwZW5kZW5jaWVzPgot
ICAgIDxicmFuY2ggaGFzaD0ic2hhOjEwMjZjN2MzMDgyZDgyNWQ5YjVkMDM0YzFhNmRkOGE0ZWJh
YjYwZWIzNzM4YjBhMGFmZGU0YWQyZGMwYjBkYjUiIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFzZS9n
c3QtcGx1Z2lucy1iYXNlLSR7dmVyc2lvbn0udGFyLnh6IiByZXBvPSJnc3RyZWFtZXIiIHZlcnNp
b249IjEuMTQuMSIgLz4KKyAgICA8YnJhbmNoIGhhc2g9InNoYToxMDI2YzdjMzA4MmQ4MjVkOWI1
ZDAzNGMxYTZkZDhhNGViYWI2MGViMzczOGIwYTBhZmRlNGFkMmRjMGIwZGI1IiBtb2R1bGU9Imdz
dC1wbHVnaW5zLWJhc2UvZ3N0LXBsdWdpbnMtYmFzZS0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0i
Z3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE0LjEiID4KKyAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1
Z2lucy1iYXNlLTAwMDEtcGFyc2ViaW4tUG9zdC1TVFJFQU1fQ09MTEVDVElPTi1vbi1FVkVOVF9T
VFJFQU1fQ09MTC5wYXRjaCIgc3RyaXA9IjEiLz4gPCEtLSBNZXJnZWQgYXMgODlkMGU5Y2M5MmE4
NmFhMDIyN2VlODc0MDY3MzdiNmQzMTY3MGFlYSAtLT4KKyAgICA8L2JyYW5jaD4KICAgPC9hdXRv
dG9vbHM+CiAKICAgPGF1dG90b29scyBpZD0iZ3N0LXBsdWdpbnMtZ29vZCIgYXV0b2dlbi1zaD0i
Y29uZmlndXJlIiBhdXRvZ2VuYXJncz0iLS1kaXNhYmxlLWV4YW1wbGVzIC0tZGlzYWJsZS1ndGst
ZG9jIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIj4KZGlmZiAtLWdpdCBhL1Rvb2xzL2dzdHJlYW1l
ci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhc2UtMDAwMS1wYXJzZWJpbi1Qb3N0LVNUUkVBTV9DT0xM
RUNUSU9OLW9uLUVWRU5UX1NUUkVBTV9DT0xMLnBhdGNoIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNo
ZXMvZ3N0LXBsdWdpbnMtYmFzZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExFQ1RJT04t
b24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjY4MGJjMmRiNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ3N0cmVhbWVy
L3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFzZS0wMDAxLXBhcnNlYmluLVBvc3QtU1RSRUFNX0NPTExF
Q1RJT04tb24tRVZFTlRfU1RSRUFNX0NPTEwucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4
OWQwZTljYzkyYTg2YWEwMjI3ZWU4NzQwNjczN2I2ZDMxNjcwYWVhIE1vbiBTZXAgMTcgMDA6MDA6
MDAgMjAwMQorRnJvbTogVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KK0Rh
dGU6IFdlZCwgMTggQXByIDIwMTggMTY6MDY6MDcgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFy
c2ViaW46IFBvc3QgU1RSRUFNX0NPTExFQ1RJT04gb24gRVZFTlRfU1RSRUFNX0NPTExFQ1RJT04K
KworT3RoZXJ3aXNlIGRlY29kZWJpbiB3b24ndCBnZXQgbm90aWZpZWQgYWJvdXQgU1RSRUFNX0NP
TExFQ1RJT04gY29tbWluZworZnJvbSB0aGUgc291cmNlcyBhbmQgdGh1cyB3aWxsIG5ldmVyIGdl
dCBpbmZvcm1vcmVkIGFib3V0IGl0LiBXaXRob3V0CitiZWluZyBpbmZvcm1lZCBhYm91dCB0aGUg
c3RyZWFtIGNvbGxlY3Rpb24gZGVjb2RlYmluIHdvbid0IGJlIGFibGUgdG8KK3NlbGVjdCBhbnkg
c3RyZWFtcy4gSXQgZW5kcyB1cCBub3QgY3JlYXRpbmcgYW55IG91dHB1dCBmb3IgdGhlIHN0cmVh
bXMKK2RlZmluZWQgZnJvbSBvdXRzaWRlIHBhcnNlcmJpbi4KKworaHR0cHM6Ly9idWd6aWxsYS5n
bm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc5NTM2NAorLS0tCisgZ3N0L3BsYXliYWNrL2dzdHBh
cnNlYmluLmMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlm
ZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RwYXJzZWJpbi5jIGIvZ3N0L3BsYXliYWNrL2dzdHBh
cnNlYmluLmMKK2luZGV4IDRjNWJmYzE5ZC4uZjk2NjJlYjQ5IDEwMDY0NAorLS0tIGEvZ3N0L3Bs
YXliYWNrL2dzdHBhcnNlYmluLmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RwYXJzZWJpbi5jCitA
QCAtNDA0Niw2ICs0MDQ2LDkgQEAgZ3N0X3BhcnNlX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBH
c3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCisgICAgICAgR3N0U3Ry
ZWFtQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IE5VTEw7CisgICAgICAgZ3N0X2V2ZW50X3BhcnNl
X3N0cmVhbV9jb2xsZWN0aW9uIChldmVudCwgJmNvbGxlY3Rpb24pOworICAgICAgIGdzdF9wYXJz
ZV9wYWRfdXBkYXRlX3N0cmVhbV9jb2xsZWN0aW9uIChwYXJzZXBhZCwgY29sbGVjdGlvbik7Cisr
ICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAocGFyc2VwYWQtPnBh
cnNlYmluKSwKKysgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9uIChH
U1RfT0JKRUNUIChwYXJzZXBhZC0+cGFyc2ViaW4pLAorKyAgICAgICAgICAgICAgY29sbGVjdGlv
bikpOworICAgICAgIGJyZWFrOworICAgICB9CisgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzp7Cist
LSAKKzIuMTcuMAorCi0tIAoyLjE3LjE=
</data>

          </attachment>
      

    </bug>

</bugzilla>